X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner2d.cc;h=6fa64be8e60e5d6a71869ad6a72683ba62c1cbdc;hb=965c295451916cf7f04d33fbf41ff2beb573439b;hp=ceec33868b9add0859da27a8ee2a0227c14a7ebc;hpb=209d967b1bb80a9735d690d8f4f0455ecb9970ca;p=ardour.git diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc index ceec33868b..6fa64be8e6 100644 --- a/gtk2_ardour/panner2d.cc +++ b/gtk2_ardour/panner2d.cc @@ -15,16 +15,18 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include #include -#include +#include + +#include +#include #include #include -#include +#include #include "panner2d.h" #include "keyboard.h" @@ -34,8 +36,9 @@ using namespace std; using namespace Gtk; -using namespace SigC; +using namespace sigc; using namespace ARDOUR; +using namespace PBD; Panner2d::Target::Target (float xa, float ya, const char *txt) : x (xa), y (ya), text (txt ? strdup (txt) : 0) @@ -54,8 +57,8 @@ Panner2d::Target::~Target () } } -Panner2d::Panner2d (Panner& p, int32_t w, int32_t h) - : panner (p), width (w), height (h) +Panner2d::Panner2d (Panner& p, int32_t h) + : panner (p), width (0), height (h) { context_menu = 0; bypass_menu_item = 0; @@ -64,10 +67,10 @@ Panner2d::Panner2d (Panner& p, int32_t w, int32_t h) allow_y = false; allow_target = false; - panner.StateChanged.connect (slot (*this, &Panner2d::handle_state_change)); + panner.StateChanged.connect (mem_fun(*this, &Panner2d::handle_state_change)); drag_target = 0; - set_events (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK); + set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); } @@ -124,12 +127,12 @@ Panner2d::reset (uint32_t n_inputs) } void -Panner2d::size_allocate_impl (GtkAllocation *alloc) +Panner2d::on_size_allocate (Gtk::Allocation& alloc) { - width = alloc->width; - height = alloc->height; + width = alloc.get_width(); + height = alloc.get_height(); - DrawingArea::size_allocate_impl (alloc); + DrawingArea::on_size_allocate (alloc); } int @@ -216,7 +219,7 @@ Panner2d::remove_target (int which) void Panner2d::handle_state_change () { - ENSURE_GUI_THREAD(slot (*this, &Panner2d::handle_state_change)); + ENSURE_GUI_THREAD(mem_fun(*this, &Panner2d::handle_state_change)); queue_draw (); } @@ -352,8 +355,8 @@ Panner2d::find_closest_object (gdouble x, gdouble y, int& which, bool& is_puck) return closest; } -gint -Panner2d::motion_notify_event_impl (GdkEventMotion *ev) +bool +Panner2d::on_motion_notify_event (GdkEventMotion *ev) { gint x, y; GdkModifierType state; @@ -419,15 +422,20 @@ Panner2d::handle_motion (gint evx, gint evy, GdkModifierType state) return TRUE; } -gint -Panner2d::expose_event_impl (GdkEventExpose *event) +bool +Panner2d::on_expose_event (GdkEventExpose *event) { gint x, y; float fx, fy; + if (layout == 0) { + layout = create_pango_layout (""); + layout->set_font_description (get_style()->get_font()); + } + /* redraw the background */ - get_window().draw_rectangle (get_style()->get_bg_gc(get_state()), + get_window()->draw_rectangle (get_style()->get_bg_gc(get_state()), true, event->area.x, event->area.y, event->area.width, event->area.height); @@ -450,16 +458,15 @@ Panner2d::expose_event_impl (GdkEventExpose *event) fy = max (fy, -1.0f); y = (gint) floor (height * fy - 4); - get_window().draw_arc (get_style()->get_fg_gc(GTK_STATE_NORMAL), + get_window()->draw_arc (get_style()->get_fg_gc(Gtk::STATE_NORMAL), true, x, y, 8, 8, 0, 360 * 64); - get_window().draw_text (get_style()->get_font(), - get_style()->get_fg_gc(GTK_STATE_NORMAL), - x + 6, y + 6, - puck->text, - puck->textlen); + + layout->set_text (puck->text); + + get_window()->draw_layout (get_style()->get_fg_gc (STATE_NORMAL), x+6, y+6, layout); } } @@ -480,7 +487,7 @@ Panner2d::expose_event_impl (GdkEventExpose *event) fy = max (fy, -1.0f); y = (gint) floor ((height - 8) * fy); - get_window().draw_rectangle (get_style()->get_fg_gc(GTK_STATE_ACTIVE), + get_window()->draw_rectangle (get_style()->get_fg_gc(Gtk::STATE_ACTIVE), true, x, y, 4, 4); @@ -491,8 +498,8 @@ Panner2d::expose_event_impl (GdkEventExpose *event) return TRUE; } -gint -Panner2d::button_press_event_impl (GdkEventButton *ev) +bool +Panner2d::on_button_press_event (GdkEventButton *ev) { switch (ev->button) { case 1: @@ -514,8 +521,8 @@ Panner2d::button_press_event_impl (GdkEventButton *ev) return FALSE; } -gint -Panner2d::button_release_event_impl (GdkEventButton *ev) +bool +Panner2d::on_button_release_event (GdkEventButton *ev) { switch (ev->button) { case 1: @@ -527,7 +534,7 @@ Panner2d::button_release_event_impl (GdkEventButton *ev) y = (int) floor (ev->y); state = (GdkModifierType) ev->state; - if (drag_is_puck && (Keyboard::modifier_state_contains (state, Keyboard::Shift))) { + if (drag_is_puck && (Keyboard::modifier_state_contains (state, Keyboard::TertiaryModifier))) { for (Targets::iterator i = pucks.begin(); i != pucks.end(); ++i) { Target* puck = i->second; @@ -579,13 +586,13 @@ Panner2d::show_context_menu () MenuList& items = context_menu->items(); items.push_back (CheckMenuElem (_("Bypass"))); - bypass_menu_item = static_cast (items.back()); - bypass_menu_item->toggled.connect (slot (*this, &Panner2d::toggle_bypass)); + bypass_menu_item = static_cast (&items.back()); + bypass_menu_item->signal_toggled().connect (mem_fun(*this, &Panner2d::toggle_bypass)); } bypass_menu_item->set_active (panner.bypassed()); - context_menu->popup (1, 0); + context_menu->popup (1, gtk_get_current_event_time()); } void