Remove unused resize-line code. When resizing multiple tracks, resize them in propor...
authorCarl Hetherington <carl@carlh.net>
Wed, 17 Jun 2009 22:08:51 +0000 (22:08 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 17 Jun 2009 22:08:51 +0000 (22:08 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@5213 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_ops.cc
gtk2_ardour/public_editor.h
gtk2_ardour/time_axis_view.cc
gtk2_ardour/time_axis_view.h

index 9be36a0841423d64e66a33ddceca1e62ffbb4cdd..30786e9d916015042c1c3641e0affb55341df2df 100644 (file)
 
 /* Note: public Editor methods are documented in public_editor.h */
 
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
 #include <unistd.h>
 #include <cstdlib>
 #include <cmath>
 #include <string>
 #include <algorithm>
+#include <map>
 
 #include <boost/none.hpp>
 
@@ -347,9 +350,6 @@ Editor::Editor ()
        }
        allow_vertical_scroll = false;
        no_save_visual = false;
-       need_resize_line = false;
-       resize_line_y = 0;
-       old_resize_line_y = -1;
        no_region_list_redisplay = false;
        resize_idle_id = -1;
 
@@ -5171,169 +5171,67 @@ Editor::first_idle ()
        _have_idled = true;
 }
 
-void
-Editor::start_resize_line_ops ()
+static gboolean
+_idle_resizer (gpointer arg)
 {
-#if 0
-       old_resize_line_y = -1;
-       resize_line_y = -1;
-       need_resize_line = true;
-#endif 
+       return ((Editor*)arg)->idle_resize ();
 }
 
-void
-Editor::end_resize_line_ops ()
+/** Add a view and change to the idle track resize list.
+ *  @param view View.
+ *  @param h Change in height (+ve is bigger).
+ *  @return Resulting height of the view.
+ */
+int32_t
+Editor::add_single_to_idle_resize (TimeAxisView* view, int32_t h)
 {
-#if 0
-       need_resize_line = false;
-
-       if (old_resize_line_y >= 0) {
-               Gdk::Rectangle r (0, old_resize_line_y, (int) _canvas_width, 3);
-               Glib::RefPtr<Gdk::Window> win = get_window();
-               cerr << "Final invalidation at " << old_resize_line_y << endl;
-               win->invalidate_rect (r, false);
+       if (pending_resizes.find (view) != pending_resizes.end()) {
+               pending_resizes[view] += h;
+       } else {
+               pending_resizes[view] = h;
        }
-#endif
+
+       return view->current_height() + pending_resizes[view];
 }
 
 void
-Editor::queue_draw_resize_line (int at)
+Editor::add_to_idle_resize (TimeAxisView* view, int32_t h)
 {
-#if 0  
-       Glib::RefPtr<Gdk::Window> win = get_window();
-
-       resize_line_y = at;
-
-       if (win && _canvas_width) {
-
-               int controls_width = controls_layout.get_width();
-               int xroot, discard;
-               
-               controls_layout.get_window()->get_origin (xroot, discard);
-
-               if (old_resize_line_y >= 0) {
-                       
-                       /* redraw where it used to be */
-                       
-                       
-                       Gdk::Rectangle r (0, old_resize_line_y - 1, controls_width + (int) _canvas_width, 3);
-                       win->invalidate_rect (r, true);
-                       cerr << "invalidate " << xroot << "," << old_resize_line_y - 1 << ' ' 
-                            << controls_width + _canvas_width << " x 3\n";
-               }
-
-               /* draw where it is */
-
-               Gdk::Rectangle r (0, at - 1, controls_width + (int) _canvas_width, 3);
-               win->invalidate_rect (r, true);
+       if (resize_idle_id < 0) {
+               resize_idle_id = g_idle_add (_idle_resizer, this);
        }
-#endif
-}
-
-bool
-Editor::on_expose_event (GdkEventExpose* ev)
-{
-       /* cerr << "+++ editor expose "
-            << ev->area.x << ',' << ev->area.y
-            << ' '
-            << ev->area.width << " x " << ev->area.height
-            << " need reize ? " << need_resize_line
-            << endl;
-       */
-       bool ret = Window::on_expose_event (ev);
-
-#if 0
-       if (need_resize_line) {
-               
-               int xroot, yroot, discard;
-               int controls_width;
 
-               /* Our root coordinates for drawing the line will be the left edge 
-                  of the track controls, and the upper left edge of our own window.
-               */
-
-               get_window()->get_origin (discard, yroot);
-               controls_layout.get_window()->get_origin (xroot, discard);
-               controls_width = controls_layout.get_width();
-               
-               GdkRectangle lr;
-               GdkRectangle intersection;
-
-               lr.x = 0;
-               lr.y = resize_line_y;
-               lr.width = controls_width + (int) _canvas_width;
-               lr.height = 3;
+       /* make a note of the smallest resulting height, so that we can clamp the
+          lower limit at TimeAxisView::hSmall */
 
-               if (gdk_rectangle_intersect (&lr, &ev->area, &intersection)) {
-                       
-                       Glib::RefPtr<Gtk::Style> style (get_style());
-                       Glib::RefPtr<Gdk::GC> black_gc (style->get_black_gc ());
-                       Glib::RefPtr<Gdk::GC> gc = wrap (black_gc->gobj_copy(), false);
-
-                       /* draw on root window */
+       int32_t min_resulting = INT32_MAX;
 
-                       GdkWindow* win = gdk_get_default_root_window();
-                       
-                       gc->set_subwindow (Gdk::INCLUDE_INFERIORS);
-                       gc->set_line_attributes (3, Gdk::LINE_SOLID, 
-                                                Gdk::CAP_NOT_LAST,
-                                                Gdk::JOIN_MITER);
-                       
-                       gdk_draw_line (win, gc->gobj(), 
-                                      0,
-                                      resize_line_y, 
-                                      (int) _canvas_width + controls_width,
-                                      resize_line_y);
-#if 0
-                       cerr << "drew line @ " << xroot << ", " << yroot + resize_line_y 
-                            << " to " << xroot + (int) _canvas_width + controls_width
-                            << ", " << yroot + resize_line_y
-                            << endl;
-#endif
-                       old_resize_line_y = resize_line_y;
-                       cerr << "NEXT EXPOSE SHOULD BE AT " << old_resize_line_y << endl;
-               } else {
-                       cerr << "no intersect with "
-                            << lr.x << ',' << lr.y
-                            << ' '
-                            << lr.width << " x " << lr.height
-                            << endl;
+       if (selection->selected (view)) {
+               for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
+                       min_resulting = min (min_resulting, add_single_to_idle_resize (*i, h));
                }
+       } else {
+               min_resulting = min (min_resulting, add_single_to_idle_resize (view, h));
        }
 
-       //cerr << "--- editor expose\n";
-#endif
-
-       return ret;
-}
-
-static gboolean
-_idle_resizer (gpointer arg)
-{
-       return ((Editor*)arg)->idle_resize ();
-}
-
-void
-Editor::add_to_idle_resize (TimeAxisView* view, uint32_t h)
-{
-       if (resize_idle_id < 0) {
-               resize_idle_id = g_idle_add (_idle_resizer, this);
-       } 
-
-       resize_idle_target = h;
-
-       pending_resizes.push_back (view);
+       if (min_resulting < 0) {
+               min_resulting = 0;
+       }
 
-       if (selection->selected (view) && !selection->tracks.empty()) {
-               pending_resizes.insert (pending_resizes.end(), selection->tracks.begin(), selection->tracks.end());
+       /* clamp */
+       if (uint32_t (min_resulting) < TimeAxisView::hSmall) {
+               for (std::map<TimeAxisView*, int32_t>::iterator i = pending_resizes.begin(); i != pending_resizes.end(); ++i) {
+                       i->second += TimeAxisView::hSmall - min_resulting;
+               }
        }
 }
 
+/** Handle pending resizing of tracks */
 bool
 Editor::idle_resize ()
 {
-       for (vector<TimeAxisView*>::iterator i = pending_resizes.begin(); i != pending_resizes.end(); ++i) {
-               (*i)->idle_resize (resize_idle_target);
+       for (std::map<TimeAxisView*, int32_t>::iterator i = pending_resizes.begin(); i != pending_resizes.end(); ++i) {
+               i->first->idle_resize (i->first->current_height() + i->second);
        }
        pending_resizes.clear();
        flush_canvas ();
index 6e30ef29549635dc6b093e09b3702b2d406cfca3..f83ce965400470dff3ee76a8833de85a586097f2 100644 (file)
@@ -192,7 +192,7 @@ class Editor : public PublicEditor
 
        TimeAxisView* get_named_time_axis(const std::string & name) ;
        void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>);
-       void add_to_idle_resize (TimeAxisView*, uint32_t);
+       void add_to_idle_resize (TimeAxisView*, int32_t);
 
        RouteTimeAxisView* get_route_view_by_id (PBD::ID& id);
 
@@ -399,16 +399,11 @@ class Editor : public PublicEditor
        void goto_visual_state (uint32_t);
        void save_visual_state (uint32_t);
 
-       void queue_draw_resize_line (int at);
-       void start_resize_line_ops ();
-       void end_resize_line_ops ();
-
   protected:
        void map_transport_state ();
        void map_position_change (nframes64_t);
 
        void on_realize();
-       bool on_expose_event (GdkEventExpose*);
 
   private:
 
@@ -600,10 +595,6 @@ class Editor : public PublicEditor
        Gtk::VBox           global_vpacker;
        Gtk::VBox           vpacker;
 
-       bool need_resize_line;
-       int  resize_line_y;
-       int  old_resize_line_y;
-
        Gdk::Cursor*          current_canvas_cursor;
        void set_canvas_cursor ();
        Gdk::Cursor* which_grabber_cursor ();
@@ -2222,10 +2213,9 @@ public:
 
        bool _have_idled;
        int resize_idle_id;
-       int32_t resize_idle_target;
        bool idle_resize();
        friend gboolean _idle_resize (gpointer);
-       std::vector<TimeAxisView*> pending_resizes;
+       std::map<TimeAxisView*, int32_t> pending_resizes;
 
        void visible_order_range (int*, int*) const;
 
@@ -2237,6 +2227,7 @@ public:
 
        void update_canvas_now ();
        void streamview_height_changed ();
+       int32_t add_single_to_idle_resize (TimeAxisView*, int32_t);
 
        friend class Drag;
        friend class RegionDrag;
index a90ffb0801ebfa65cee906a10f063b4cffb39e03..de6941aa7b2a5c3029f8394c4a581158c7216184 100644 (file)
@@ -6046,10 +6046,6 @@ Editor::set_track_height (uint32_t h)
 {
        TrackSelection& ts (selection->tracks);
 
-       if (ts.empty()) {
-               return;
-       }
-
        for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) {
                (*x)->set_height (h);
        }
index 8e366a3dd7fd1402ba09122f6d3633be40956ab6..ed73f59258a7cc5006681b05f3b347aa6f128be0 100644 (file)
@@ -261,7 +261,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
        virtual void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret) = 0;
        virtual void mouse_add_new_marker (nframes64_t where, bool is_cd=false, bool is_xrun=false) = 0;
        virtual void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>) = 0;
-       virtual void add_to_idle_resize (TimeAxisView*,uint32_t) = 0;
+       virtual void add_to_idle_resize (TimeAxisView*, int32_t) = 0;
 
 #ifdef WITH_CMT
        virtual void add_imageframe_time_axis(const std::string & track_name, void*)  = 0;
@@ -322,10 +322,6 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
        virtual bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*) = 0;
 #endif
 
-       virtual void queue_draw_resize_line (int at) = 0;
-       virtual void start_resize_line_ops () = 0;
-       virtual void end_resize_line_ops () = 0;
-
        static const int window_border_width;
        static const int container_border_width;
        static const int vertical_spacing;
index b2b0bde460ed621812468ab9f5aee312cf09374c..8d0f4194afc19d7a13468db443234414f9dd11b4 100644 (file)
@@ -1284,8 +1284,6 @@ bool
 TimeAxisView::resizer_button_press (GdkEventButton* event)
 {
        _resize_drag_start = event->y_root;
-       _resize_idle_target = current_height ();
-       _editor.start_resize_line_ops ();
        return true;
 }
 
@@ -1293,7 +1291,6 @@ bool
 TimeAxisView::resizer_button_release (GdkEventButton* ev)
 {
        _resize_drag_start = -1;
-       _editor.end_resize_line_ops ();
        return true;
 }
 
@@ -1310,11 +1307,8 @@ TimeAxisView::resizer_motion (GdkEventMotion* ev)
                return true;
        }
 
-       int32_t const delta = (int32_t) floor (_resize_drag_start - ev->y_root);
-
-       _resize_idle_target = std::max (_resize_idle_target - delta, (int) hSmall);
-       _editor.add_to_idle_resize (this, _resize_idle_target);
-       
+       int32_t const delta = (int32_t) floor (ev->y_root - _resize_drag_start);
+       _editor.add_to_idle_resize (this, delta);
        _resize_drag_start = ev->y_root;
 
        return true;
index 56e70425488dc98b548989f23dccc31434cb9a98..f5d5c08ef0808010e0f1e03cdc7b23413ab49b4c 100644 (file)
@@ -347,7 +347,6 @@ private:
        int _order;
        uint32_t _effective_height;
        double _resize_drag_start;
-       int32_t _resize_idle_target;
        ArdourCanvas::Group* _ghost_group;
 
        static int const _max_order;