make meters work properly (and very slightly faster)
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 3 Jan 2006 07:06:57 +0000 (07:06 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 3 Jan 2006 07:06:57 +0000 (07:06 +0000)
git-svn-id: svn://localhost/trunk/ardour2@230 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor_region_list.cc
libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtkmm2ext/fastmeter.h

index faa58359e544315fb6cb3f3894f85047243caa1a..052676cd4acc23c55d5e6290a323f5500e2a39e0 100644 (file)
@@ -615,7 +615,6 @@ Editor::Editor (AudioEngine& eng)
        
        list<Gtk::TargetEntry> region_list_target_table;
        
-       region_list_target_table.push_back (TargetEntry ("STRING"));
        region_list_target_table.push_back (TargetEntry ("text/plain"));
        region_list_target_table.push_back (TargetEntry ("text/uri-list"));
        region_list_target_table.push_back (TargetEntry ("application/x-rootwin-drop"));
@@ -624,7 +623,7 @@ Editor::Editor (AudioEngine& eng)
        region_list_display.signal_drag_data_received().connect (mem_fun(*this, &Editor::region_list_display_drag_data_received));
 
        region_list_scroller.add (region_list_display);
-       region_list_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+       region_list_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC);
 
        region_list_display.signal_key_press_event().connect (mem_fun(*this, &Editor::region_list_display_key_press));
        region_list_display.signal_key_release_event().connect (mem_fun(*this, &Editor::region_list_display_key_release));
@@ -634,7 +633,7 @@ Editor::Editor (AudioEngine& eng)
        // region_list_display.signal_popup_menu().connect (bind (mem_fun (*this, &Editor::show_region_list_display_context_menu), 1, 0));
        
        named_selection_scroller.add (named_selection_display);
-       named_selection_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+       named_selection_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC);
 
        named_selection_model = TreeStore::create (named_selection_columns);
        named_selection_display.set_model (named_selection_model);
index 3765f852bf99d9bb74dda37593740f7307ef4f96..81070f7c6389d28feebf370a8ee58aef24d028e3 100644 (file)
@@ -493,7 +493,7 @@ Editor::region_list_display_button_release (GdkEventButton *ev)
        TreeViewColumn* column;
        int cellx;
        int celly;
-       Region* region;
+       Region* region = 0;
 
        if (region_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
                if ((iter = region_list_model->get_iter (path))) {
@@ -501,24 +501,11 @@ Editor::region_list_display_button_release (GdkEventButton *ev)
                }
        }
 
-       if (Keyboard::is_delete_event (ev)) {
+       if (region && Keyboard::is_delete_event (ev)) {
                session->remove_region_from_region_list (*region);
                return true;
        }
 
-       switch (ev->button) {
-       case 1:
-               return false;
-               break;
-
-       case 3:
-               return false;
-               break;
-
-       default:
-               break;
-       }
-
        return false;
 }
 
@@ -546,7 +533,7 @@ Editor::consider_auditioning (Region& region)
 int
 Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
 {
-       int cmp;
+       int cmp = 0;
 
        Region* r1 = (*a)[region_list_columns.region];
        Region* r2 = (*b)[region_list_columns.region];
index 5067bf5c160fddfef1eac332bd16eb7b16d55d2f..245a189c62834f58adf7c94003997d1ad0a78f89 100644 (file)
@@ -52,19 +52,19 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o)
        
        set_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK);
 
-       pixrect.set_x(0);
-       pixrect.set_y(0);
+       pixrect.x = 0;
+       pixrect.y = 0;
 
        if (orientation == Vertical) {
-               pixrect.set_width(min (v_pixwidth, (gint) dimen));
-               pixrect.set_height(v_pixheight);
+               pixrect.width = min (v_pixwidth, (gint) dimen);
+               pixrect.height = v_pixheight;
        } else {
-               pixrect.set_width(h_pixwidth);
-               pixrect.set_height(min (h_pixheight, (gint) dimen));
+               pixrect.width = h_pixwidth;
+               pixrect.height = min (h_pixheight, (gint) dimen);
        }
 
-       request_width = pixrect.get_width();
-       request_height= pixrect.get_height();
+       request_width = pixrect.width;
+       request_height= pixrect.height;
 }
 
 FastMeter::~FastMeter ()
@@ -147,26 +147,21 @@ FastMeter::on_expose_event (GdkEventExpose* ev)
 bool
 FastMeter::vertical_expose (GdkEventExpose* ev)
 {
-       Rectangle intersect;
        gint top_of_meter;
-       bool blit = false;
-       bool intersecting = false;
+       GdkRectangle intersection;
 
        top_of_meter = (gint) floor (v_pixheight * current_level);
-       pixrect.set_height(top_of_meter);
+       pixrect.height = top_of_meter;
 
-        intersect = pixrect.intersect(wrap(&ev->area), intersecting);
-        if (intersecting) {
+        if (gdk_rectangle_intersect (&pixrect, &ev->area, &intersection)) {
                /* draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
                 */
 
                RefPtr<Gdk::Window> win(get_window());
                win->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap, 
-                                  intersect.get_x(), v_pixheight - top_of_meter,
-                                  intersect.get_x(), v_pixheight - top_of_meter,
-                                  intersect.get_width(), intersect.get_height());
-               
-               blit = true;
+                                  intersection.x, v_pixheight - top_of_meter,
+                                  intersection.x, v_pixheight - top_of_meter,
+                                  intersection.width, intersection.height);
        }
 
        /* draw peak bar */
@@ -174,9 +169,9 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
        if (hold_state) {
                RefPtr<Gdk::Window> win(get_window());
                win->draw_drawable(get_style()->get_fg_gc(get_state()), v_pixmap,
-                                  intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
-                                  intersect.get_x(), v_pixheight - (gint) floor (v_pixheight * current_peak),
-                                  intersect.get_width(), 3);
+                                  intersection.x, v_pixheight - (gint) floor (v_pixheight * current_peak),
+                                  intersection.x, v_pixheight - (gint) floor (v_pixheight * current_peak),
+                                  intersection.width, 3);
        }
 
        return true;
@@ -185,23 +180,22 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
 bool
 FastMeter::horizontal_expose (GdkEventExpose* ev)
 {
-       Rectangle intersect;
-       bool intersecting = false;
+       GdkRectangle intersection;
        gint right_of_meter;
 
        right_of_meter = (gint) floor (h_pixwidth * current_level);
-       pixrect.set_width(right_of_meter);
+       pixrect.width = right_of_meter;
+
+       if (gdk_rectangle_intersect (&pixrect, &ev->area, &intersection)) {
 
-       intersect = pixrect.intersect(wrap(&ev->area), intersecting);
-       if (intersecting) {
                /* draw the part of the meter image that we need. 
                 */
 
                RefPtr<Gdk::Window> win(get_window());
                win->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
-                                  intersect.get_x(), intersect.get_y(),
-                                  intersect.get_x(), intersect.get_y(),
-                                  intersect.get_width(), intersect.get_height());
+                                  intersection.x, intersection.y,
+                                  intersection.x, intersection.y,
+                                  intersection.width, intersection.height);
        }
 
        /* draw peak bar */
@@ -209,9 +203,9 @@ FastMeter::horizontal_expose (GdkEventExpose* ev)
        if (hold_state) {
                RefPtr<Gdk::Window> win(get_window());
                win->draw_drawable(get_style()->get_fg_gc(get_state()), h_pixmap,
-                             right_of_meter, intersect.get_y(),
-                             right_of_meter, intersect.get_y(),
-                             3, intersect.get_height());
+                                  right_of_meter, intersection.y,
+                                  right_of_meter, intersection.y,
+                                  3, intersection.height);
        }
 
        return true;
index 5c41fcba84da15b2c6d89ee58e4175c8ad71addd..3143c71b12a8632330ec660b488b1b1c01a0b89e 100644 (file)
@@ -67,7 +67,7 @@ class FastMeter : public Gtk::DrawingArea {
 
        Orientation orientation;
        Glib::RefPtr<Gdk::Pixmap> backing;
-       Gdk::Rectangle pixrect;
+       GdkRectangle pixrect;
        gint request_width;
        gint request_height;
        unsigned long hold_cnt;