summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-04-20 18:14:00 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-04-20 18:14:00 +0000
commit17b18acda3447214bd739107d9a46eecfaa6ef70 (patch)
tree695aa15c29117e101a0246ece8bbf25803b2cd67 /libs
parentd7e728476a18bc024ae18705aa9d32ea21a1c4af (diff)
a) use ink extents in most places where we used to use logical extents
for text sizing b) add back scroll-wheel functionality to plugin parameter controls git-svn-id: svn://localhost/trunk/ardour2@460 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/gtkmm2ext/barcontroller.cc79
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/barcontroller.h11
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/utils.h2
-rw-r--r--libs/gtkmm2ext/gtkutils.cc11
-rw-r--r--libs/gtkmm2ext/utils.cc26
5 files changed, 76 insertions, 53 deletions
diff --git a/libs/gtkmm2ext/barcontroller.cc b/libs/gtkmm2ext/barcontroller.cc
index c8a211a48f..3529d23e12 100644
--- a/libs/gtkmm2ext/barcontroller.cc
+++ b/libs/gtkmm2ext/barcontroller.cc
@@ -26,6 +26,7 @@
#include <midi++/controllable.h>
#include <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/barcontroller.h>
#include "i18n.h"
@@ -67,12 +68,14 @@ BarController::BarController (Gtk::Adjustment& adj,
Gdk::BUTTON_PRESS_MASK|
Gdk::POINTER_MOTION_MASK|
Gdk::ENTER_NOTIFY_MASK|
- Gdk::LEAVE_NOTIFY_MASK);
+ Gdk::LEAVE_NOTIFY_MASK|
+ Gdk::SCROLL_MASK);
darea.signal_expose_event().connect (mem_fun (*this, &BarController::expose));
darea.signal_motion_notify_event().connect (mem_fun (*this, &BarController::motion));
darea.signal_button_press_event().connect (mem_fun (*this, &BarController::button_press));
darea.signal_button_release_event().connect (mem_fun (*this, &BarController::button_release));
+ darea.signal_scroll_event().connect (mem_fun (*this, &BarController::scroll));
prompter.signal_unmap_event().connect (mem_fun (*this, &BarController::prompter_hiding));
@@ -107,13 +110,15 @@ BarController::get_bind_button_state (guint &button, guint &statemask)
}
-gint
+bool
BarController::button_press (GdkEventButton* ev)
{
switch (ev->button) {
case 1:
if (ev->type == GDK_2BUTTON_PRESS) {
switch_on_release = true;
+ grabbed = false;
+ darea.remove_modal_grab();
} else {
switch_on_release = false;
darea.add_modal_grab();
@@ -122,7 +127,7 @@ BarController::button_press (GdkEventButton* ev)
grab_window = ev->window;
StartGesture ();
}
- return TRUE;
+ return true;
break;
case 2:
@@ -134,17 +139,17 @@ BarController::button_press (GdkEventButton* ev)
break;
}
- return FALSE;
+ return false;
}
-gint
+bool
BarController::button_release (GdkEventButton* ev)
{
switch (ev->button) {
case 1:
if (switch_on_release) {
Glib::signal_idle().connect (mem_fun (*this, &BarController::switch_to_spinner));
- return TRUE;
+ return true;
}
if ((ev->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK)) == GDK_SHIFT_MASK) {
@@ -162,7 +167,6 @@ BarController::button_release (GdkEventButton* ev)
mouse_control (ev->x, ev->window, scale);
}
- grabbed = false;
darea.remove_modal_grab();
StopGesture ();
break;
@@ -176,29 +180,51 @@ BarController::button_release (GdkEventButton* ev)
adjustment.set_value (adjustment.get_lower() +
fract * (adjustment.get_upper() - adjustment.get_lower()));
}
- return TRUE;
+ return true;
case 3:
if ((ev->state & bind_statemask) && bind_button == 3) {
midi_learn ();
return TRUE;
}
- return FALSE;
+ return false;
- case 4:
- adjustment.set_value (adjustment.get_value() +
- adjustment.get_step_increment());
+ default:
break;
- case 5:
- adjustment.set_value (adjustment.get_value() -
- adjustment.get_step_increment());
+ }
+
+ return true;
+}
+
+bool
+BarController::scroll (GdkEventScroll* ev)
+{
+ double scale;
+
+ if (ev->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK) == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
+ scale = 0.01;
+ } else if (ev->state & GDK_CONTROL_MASK) {
+ scale = 0.1;
+ } else {
+ scale = 1.0;
+ }
+
+ switch (ev->direction) {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_RIGHT:
+ adjustment.set_value (adjustment.get_value() + (scale * adjustment.get_step_increment()));
+ break;
+
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_LEFT:
+ adjustment.set_value (adjustment.get_value() - (scale * adjustment.get_step_increment()));
break;
}
- return TRUE;
+ return true;
}
-gint
+bool
BarController::motion (GdkEventMotion* ev)
{
double scale;
@@ -254,7 +280,7 @@ BarController::mouse_control (double x, GdkWindow* window, double scaling)
return TRUE;
}
-gint
+bool
BarController::expose (GdkEventExpose* event)
{
Glib::RefPtr<Gdk::Window> win (darea.get_window());
@@ -350,12 +376,11 @@ BarController::expose (GdkEventExpose* event)
if (buf[0] != '\0') {
- int width;
- int height;
-
- layout->set_text (buf);
- layout->get_pixel_size(width, height);
-
+ layout->set_text (buf);
+
+ int width, height;
+ layout->get_pixel_size (width, height);
+
int xpos;
xpos = max (3, 1 + (x2 - (width/2)));
@@ -368,7 +393,7 @@ BarController::expose (GdkEventExpose* event)
}
}
- return TRUE;
+ return true;
}
void
@@ -498,11 +523,11 @@ BarController::entry_activated ()
switch_to_bar ();
}
-gint
+bool
BarController::entry_focus_out (GdkEventFocus* ev)
{
entry_activated ();
- return TRUE;
+ return true;
}
void
diff --git a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
index 64f5068d03..67c8221a55 100644
--- a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
+++ b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
@@ -89,10 +89,12 @@ class BarController : public Gtk::Frame
guint bind_statemask;
bool prompting, unprompting;
- gint button_press (GdkEventButton *);
- gint button_release (GdkEventButton *);
- gint motion (GdkEventMotion *);
- gint expose (GdkEventExpose *);
+ bool button_press (GdkEventButton *);
+ bool button_release (GdkEventButton *);
+ bool motion (GdkEventMotion *);
+ bool expose (GdkEventExpose *);
+ bool scroll (GdkEventScroll *);
+ bool entry_focus_out (GdkEventFocus*);
gint mouse_control (double x, GdkWindow* w, double scaling);
@@ -105,7 +107,6 @@ class BarController : public Gtk::Frame
gint switch_to_spinner ();
void entry_activated ();
- gint entry_focus_out (GdkEventFocus*);
};
diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h
index 6f34866ce9..97dab523aa 100644
--- a/libs/gtkmm2ext/gtkmm2ext/utils.h
+++ b/libs/gtkmm2ext/gtkmm2ext/utils.h
@@ -37,6 +37,8 @@ namespace Gtk {
namespace Gtkmm2ext {
void init ();
+ void get_ink_pixel_size (Glib::RefPtr<Pango::Layout>, int& width, int& height);
+
void set_size_request_to_display_given_text (Gtk::Widget &w,
const gchar *text,
gint hpadding,
diff --git a/libs/gtkmm2ext/gtkutils.cc b/libs/gtkmm2ext/gtkutils.cc
index 2f63fb2eb5..23bf4d6b2f 100644
--- a/libs/gtkmm2ext/gtkutils.cc
+++ b/libs/gtkmm2ext/gtkutils.cc
@@ -18,16 +18,5 @@
$Id$
*/
-#include <string>
-
-#include <gtkmm.h>
#include <gtkmm2ext/gtkutils.h>
-void
-gtk_set_size_request_to_display_given_text (Gtk::Widget &w,
- const std::string& text,
- gint hpadding,
- gint vpadding)
-{
-
-}
diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc
index 0a0737becd..57661a05af 100644
--- a/libs/gtkmm2ext/utils.cc
+++ b/libs/gtkmm2ext/utils.cc
@@ -35,20 +35,26 @@
using namespace std;
void
+Gtkmm2ext::get_ink_pixel_size (Glib::RefPtr<Pango::Layout> layout,
+ int& width,
+ int& height)
+{
+ Pango::Rectangle ink_rect = layout->get_ink_extents ();
+
+ width = (ink_rect.get_width() + PANGO_SCALE / 2) / PANGO_SCALE;
+ height = (ink_rect.get_height() + PANGO_SCALE / 2) / PANGO_SCALE;
+}
+
+void
Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget &w, const gchar *text,
gint hpadding, gint vpadding)
-
+
{
- int height = 0;
- int width = 0;
-
+ int width, height;
w.ensure_style ();
- w.create_pango_layout (text)->get_pixel_size (width, height);
-
- height += vpadding;
- width += hpadding;
-
- w.set_size_request(width, height);
+
+ get_ink_pixel_size (w.create_pango_layout (text), width, height);
+ w.set_size_request(width + hpadding, height + vpadding);
}
void