hans' patches for MIDI note resizing++
[ardour.git] / gtk2_ardour / utils.cc
index a5238784461ad5dae2a5de485ecf5557f39c61c9..a52969268adb0b18b74efaab1f3e15d8b621f801 100644 (file)
@@ -17,6 +17,9 @@
 
 */
 
+#include <pango/pangoft2.h> // for fontmap resolution control for GnomeCanvas
+#include <pango/pangocairo.h> // for fontmap resolution control for GnomeCanvas
+
 #include <cstdlib>
 #include <cctype>
 #include <fstream>
@@ -32,6 +35,7 @@
 #include <pbd/file_utils.h>
 
 #include <gtkmm2ext/utils.h>
+#include <ardour/configuration.h>
 
 #include <ardour/filesystem_paths.h>
 
@@ -48,6 +52,8 @@ using namespace sigc;
 using namespace Glib;
 using namespace PBD;
 
+sigc::signal<void>  DPIReset;
+
 int
 pixel_width (const ustring& str, Pango::FontDescription& font)
 {
@@ -463,31 +469,50 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
                   it does allow.
                */
 
+               int fakekey = GDK_VoidSymbol;
                int ret = false;
 
                switch (ev->keyval) {
+               case GDK_Tab:
+               case GDK_ISO_Left_Tab:
+                       fakekey = GDK_nabla;
+                       break;
+
                case GDK_Up:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_uparrow, GdkModifierType(ev->state));
+                       fakekey = GDK_uparrow;
                        break;
 
                case GDK_Down:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_downarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_downarrow;
                        break;
 
                case GDK_Right:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_rightarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_rightarrow;
                        break;
 
                case GDK_Left:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_leftarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_leftarrow;
                        break;
 
                default:
                        break;
                }
 
-               if (ret) {
-                       return true;
+               if (fakekey != GDK_VoidSymbol) {
+                       ret = gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state));
+                       
+                       if (ret) {
+                               return true;
+                       }
+
+#ifdef GTKOSX
+                       int oldval = ev->keyval;
+                       ev->keyval = fakekey;
+                       if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+                               return true;
+                       }
+                       ev->keyval = oldval;
+#endif
                }
        }
 
@@ -687,6 +712,29 @@ key_is_legal_for_numeric_entry (guint keyval)
 
        return false;
 }
+void
+set_pango_fontsize ()
+{
+       long val = ARDOUR::Config->get_font_scale();
+
+       /* FT2 rendering */
+
+       pango_ft2_font_map_set_resolution ((PangoFT2FontMap*) pango_ft2_font_map_for_display(), val/1024, val/1024);
+
+       /* Cairo rendering, in case there is any */
+       
+       pango_cairo_font_map_set_resolution ((PangoCairoFontMap*) pango_cairo_font_map_get_default(), val/1024);
+}
 
+void
+reset_dpi ()
+{
+       long val = ARDOUR::Config->get_font_scale();
+       set_pango_fontsize ();
+       /* Xft rendering */
 
+       gtk_settings_set_long_property (gtk_settings_get_default(),
+                                       "gtk-xft-dpi", val, "ardour");
+       DPIReset();//Emit Signal
+}