X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Futils.cc;h=8cdf5e0b58650b3a04083b6d97308c2146e8da19;hb=ad942b104a80c74c689e0c1b5c016d1870850830;hp=b94a6f8260da97a65197e42b5fa947a16e0bb912;hpb=0d2ddbe52aad707af38e40764d69413672241157;p=ardour.git diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index b94a6f8260..8cdf5e0b58 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -17,6 +17,10 @@ */ +#ifdef WAF_BUILD +#include "gtk2ardour-config.h" +#endif + #include // for fontmap resolution control for GnomeCanvas #include // for fontmap resolution control for GnomeCanvas @@ -41,6 +45,7 @@ #include "ardour/filesystem_paths.h" #include "ardour_ui.h" +#include "debug.h" #include "public_editor.h" #include "keyboard.h" #include "utils.h" @@ -347,31 +352,31 @@ rgba_from_style (string style, uint32_t r, uint32_t g, uint32_t b, uint32_t a, s 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; @@ -595,11 +600,6 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) 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; @@ -613,18 +613,15 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) } #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: @@ -666,10 +663,8 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) 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; } } } @@ -699,11 +694,7 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) /* 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)) { @@ -711,46 +702,27 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* 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; } @@ -916,61 +888,6 @@ reset_dpi () 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) { @@ -984,41 +901,6 @@ resize_window_to_proportion_of_monitor (Gtk::Window* window, int max_width, int window->resize (w, h); } -Glib::RefPtr -pixbuf_from_string(const string& name, Pango::FontDescription* font, int clip_width, int clip_height, Gdk::Color fg) -{ - static Glib::RefPtr* empty_pixbuf = 0; - - if (name.empty()) { - if (empty_pixbuf == 0) { - empty_pixbuf = new Glib::RefPtr; - *empty_pixbuf = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, clip_width, clip_height); - } - return *empty_pixbuf; - } - - Glib::RefPtr 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 @@ -1038,69 +920,4 @@ escape_underscores (string const & s) return o; } -static void -adjustment_to_controllable (Gtk::Adjustment* adj, boost::weak_ptr wcont) -{ - boost::shared_ptr 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 wcont) -{ - boost::shared_ptr 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 c, Gtk::Adjustment& a) -{ - boost::weak_ptr 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 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 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); - } -}