*/
+#ifdef WAF_BUILD
+#include "gtk2ardour-config.h"
+#endif
+
#include <pango/pangoft2.h> // for fontmap resolution control for GnomeCanvas
#include <pango/pangocairo.h> // for fontmap resolution control for GnomeCanvas
#include "ardour/filesystem_paths.h"
#include "ardour_ui.h"
+#include "debug.h"
#include "public_editor.h"
#include "keyboard.h"
#include "utils.h"
foo.set_name (style);
foo.ensure_style ();
- GtkRcStyle* waverc = foo.get_style()->gobj()->rc_style;
+ GtkRcStyle* rc = foo.get_style()->gobj()->rc_style;
- if (waverc) {
+ if (rc) {
if (attr == "fg") {
- r = waverc->fg[state].red / 257;
- g = waverc->fg[state].green / 257;
- b = waverc->fg[state].blue / 257;
+ r = rc->fg[state].red / 257;
+ g = rc->fg[state].green / 257;
+ b = rc->fg[state].blue / 257;
/* what a hack ... "a" is for "active" */
if (state == Gtk::STATE_NORMAL && rgba) {
- a = waverc->fg[GTK_STATE_ACTIVE].red / 257;
+ a = rc->fg[GTK_STATE_ACTIVE].red / 257;
}
} else if (attr == "bg") {
r = g = b = 0;
- r = waverc->bg[state].red / 257;
- g = waverc->bg[state].green / 257;
- b = waverc->bg[state].blue / 257;
+ r = rc->bg[state].red / 257;
+ g = rc->bg[state].green / 257;
+ b = rc->bg[state].blue / 257;
} else if (attr == "base") {
- r = waverc->base[state].red / 257;
- g = waverc->base[state].green / 257;
- b = waverc->base[state].blue / 257;
+ r = rc->base[state].red / 257;
+ g = rc->base[state].green / 257;
+ b = rc->base[state].blue / 257;
} else if (attr == "text") {
- r = waverc->text[state].red / 257;
- g = waverc->text[state].green / 257;
- b = waverc->text[state].blue / 257;
+ r = rc->text[state].red / 257;
+ g = rc->text[state].green / 257;
+ b = rc->text[state].blue / 257;
}
} else {
warning << string_compose (_("missing RGBA style for \"%1\""), style) << endl;
bool special_handling_of_unmodified_accelerators = false;
bool allow_activating = true;
-#undef DEBUG_ACCELERATOR_HANDLING
-#ifdef DEBUG_ACCELERATOR_HANDLING
- //bool debug = (getenv ("ARDOUR_DEBUG_ACCELERATOR_HANDLING") != 0);
- bool debug=true;
-#endif
if (focus) {
if (GTK_IS_ENTRY(focus) || Keyboard::some_magic_widget_has_focus()) {
special_handling_of_unmodified_accelerators = true;
}
#endif
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "Win = " << win << " Key event: code = " << ev->keyval << " state = " << hex << ev->state << dec << " special handling ? "
- << special_handling_of_unmodified_accelerators
- << " magic widget focus ? "
- << Keyboard::some_magic_widget_has_focus()
- << " allow_activation ? "
- << allow_activating
- << endl;
- }
-#endif
-
+
+ DEBUG_TRACE (DEBUG::Accelerators, string_compose ("Win = %1 Key event: code = %2 state = %3 special handling ? %4 magic widget focus ? %5 allow_activation ? %6\n",
+ win,
+ ev->keyval,
+ ev->state,
+ special_handling_of_unmodified_accelerators,
+ Keyboard::some_magic_widget_has_focus(),
+ allow_activating));
+
/* This exists to allow us to override the way GTK handles
key events. The normal sequence is:
guint keyval_without_alt = osx_keyval_without_alt (ev->keyval);
if (keyval_without_alt != GDK_VoidSymbol) {
-#ifdef DEBUG_ACCELERATOR_HANDLING
- cerr << "Remapped " << gdk_keyval_name (ev->keyval) << " to " << gdk_keyval_name (keyval_without_alt) << endl;
-
-#endif ev->keyval = keyval_without_alt;
+ DEBUG_TRACE (DEBUG::Accelerators, string_compose ("Remapped %1 to %2\n", gdk_keyval_name (ev->keyval), gdk_keyval_name (keyval_without_alt)));
+ ev->keyval = keyval_without_alt;
}
}
}
/* no special handling or there are modifiers in effect: accelerate first */
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tactivate, then propagate\n";
- }
-#endif
+ DEBUG_TRACE (DEBUG::Accelerators, "\tactivate, then propagate\n");
if (allow_activating) {
if (gtk_window_activate_key (win, ev)) {
}
}
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tnot accelerated, now propagate\n";
- }
-#endif
+ DEBUG_TRACE (DEBUG::Accelerators, "\tnot accelerated, now propagate\n");
+
return gtk_window_propagate_key_event (win, ev);
}
/* no modifiers, propagate first */
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tpropagate, then activate\n";
- }
-#endif
- if (!gtk_window_propagate_key_event (win, ev)) {
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tpropagation didn't handle, so activate\n";
- }
-#endif
+ DEBUG_TRACE (DEBUG::Accelerators, "\tpropagate, then activate\n");
+ if (!gtk_window_propagate_key_event (win, ev)) {
+ DEBUG_TRACE (DEBUG::Accelerators, "\tpropagation didn't handle, so activate\n");
if (allow_activating) {
return gtk_window_activate_key (win, ev);
}
} else {
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\thandled by propagate\n";
- }
-#endif
+ DEBUG_TRACE (DEBUG::Accelerators, "\thandled by propagate\n");
return true;
}
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tnot handled\n";
- }
-#endif
+ DEBUG_TRACE (DEBUG::Accelerators, "\tnot handled\n");
return true;
}
DPIReset();//Emit Signal
}
-
-
-inline guint8
-convert_color_channel (guint8 src,
- guint8 alpha)
-{
- return alpha ? ((guint (src) << 8) - src) / alpha : 0;
-}
-
-void
-convert_bgra_to_rgba (guint8 const* src,
- guint8* dst,
- int width,
- int height)
-{
- guint8 const* src_pixel = src;
- guint8* dst_pixel = dst;
-
- for (int y = 0; y < height; y++)
- for (int x = 0; x < width; x++)
- {
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- /* [ B G R A ] is actually [ B G R A ] in memory SOURCE
- 0 1 2 3
- [ R G B A ] is actually [ R G B A ] in memory DEST
- */
- dst_pixel[0] = convert_color_channel (src_pixel[2],
- src_pixel[3]); // R [0] <= [ 2 ]
- dst_pixel[1] = convert_color_channel (src_pixel[1],
- src_pixel[3]); // G [1] <= [ 1 ]
- dst_pixel[2] = convert_color_channel (src_pixel[0],
- src_pixel[3]); // B [2] <= [ 0 ]
- dst_pixel[3] = src_pixel[3]; // alpha
-
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- /* [ B G R A ] is actually [ A R G B ] in memory SOURCE
- 0 1 2 3
- [ R G B A ] is actually [ A B G R ] in memory DEST
- */
- dst_pixel[3] = convert_color_channel (src_pixel[1],
- src_pixel[0]); // R [3] <= [ 1 ]
- dst_pixel[2] = convert_color_channel (src_pixel[2],
- src_pixel[0]); // G [2] <= [ 2 ]
- dst_pixel[1] = convert_color_channel (src_pixel[3],
- src_pixel[0]); // B [1] <= [ 3 ]
- dst_pixel[0] = src_pixel[0]; // alpha
-
-#else
-#error ardour does not currently support PDP-endianess
-#endif
- dst_pixel += 4;
- src_pixel += 4;
- }
-}
-
void
resize_window_to_proportion_of_monitor (Gtk::Window* window, int max_width, int max_height)
{
window->resize (w, h);
}
-Glib::RefPtr<Gdk::Pixbuf>
-pixbuf_from_string(const string& name, Pango::FontDescription* font, int clip_width, int clip_height, Gdk::Color fg)
-{
- static Glib::RefPtr<Gdk::Pixbuf>* empty_pixbuf = 0;
-
- if (name.empty()) {
- if (empty_pixbuf == 0) {
- empty_pixbuf = new Glib::RefPtr<Gdk::Pixbuf>;
- *empty_pixbuf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, clip_width, clip_height);
- }
- return *empty_pixbuf;
- }
-
- Glib::RefPtr<Gdk::Pixbuf> buf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, clip_width, clip_height);
-
- cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, clip_width, clip_height);
- cairo_t* cr = cairo_create (surface);
- cairo_text_extents_t te;
-
- cairo_set_source_rgba (cr, fg.get_red_p(), fg.get_green_p(), fg.get_blue_p(), 1.0);
- cairo_select_font_face (cr, font->get_family().c_str(),
- CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
- cairo_set_font_size (cr, font->get_size() / Pango::SCALE);
- cairo_text_extents (cr, name.c_str(), &te);
-
- cairo_move_to (cr, 0.5, 0.5 - te.height / 2 - te.y_bearing + clip_height / 2);
- cairo_show_text (cr, name.c_str());
-
- convert_bgra_to_rgba(cairo_image_surface_get_data (surface), buf->get_pixels(), clip_width, clip_height);
-
- cairo_destroy(cr);
- cairo_surface_destroy(surface);
-
- return buf;
-}
/** Replace _ with __ in a string; for use with menu item text to make underscores displayed correctly */
string
return o;
}
-static void
-adjustment_to_controllable (Gtk::Adjustment* adj, boost::weak_ptr<Controllable> wcont)
-{
- boost::shared_ptr<Controllable> cont = wcont.lock();
-
- if (cont) {
- double val = adj->get_value();
- if (val != cont->get_value()) {
- cont->set_value (val);
- }
- }
-}
-
-static void
-controllable_to_adjustment (Gtk::Adjustment* adj, boost::weak_ptr<Controllable> wcont)
-{
- boost::shared_ptr<Controllable> cont = wcont.lock();
-
- if (cont) {
- float val = cont->get_value();
-
- if (val != adj->get_value()) {
- adj->set_value (val);
- }
- }
-}
-
-void
-control_link (ScopedConnectionList& scl, boost::shared_ptr<Controllable> c, Gtk::Adjustment& a)
-{
- boost::weak_ptr<Controllable> wc (c);
-
- a.signal_value_changed().connect (sigc::bind (sigc::ptr_fun (adjustment_to_controllable), &a, wc));
- c->Changed.connect (scl, MISSING_INVALIDATOR, boost::bind (controllable_to_adjustment, &a, wc),
- gui_context());
-}
-int
-physical_screen_height (Glib::RefPtr<Gdk::Window> win)
-{
- GdkScreen* scr = gdk_screen_get_default();
-
- if (win) {
- GdkRectangle r;
- gint monitor = gdk_screen_get_monitor_at_window (scr, win->gobj());
- gdk_screen_get_monitor_geometry (scr, monitor, &r);
- return r.height;
- } else {
- return gdk_screen_get_height (scr);
- }
-}
-
-int
-physical_screen_width (Glib::RefPtr<Gdk::Window> win)
-{
- GdkScreen* scr = gdk_screen_get_default();
-
- if (win) {
- GdkRectangle r;
- gint monitor = gdk_screen_get_monitor_at_window (scr, win->gobj());
- gdk_screen_get_monitor_geometry (scr, monitor, &r);
- return r.width;
- } else {
- return gdk_screen_get_width (scr);
- }
-}