diff options
author | Carl Hetherington <carl@carlh.net> | 2009-06-17 22:08:51 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-06-17 22:08:51 +0000 |
commit | 9402d3f1e3b351cfb7b5f47cb5b95faba8d77b6c (patch) | |
tree | 972658d2c33167e96454fa7a004d4e8322d7d9e9 /gtk2_ardour | |
parent | 45671f13e3b3137f876944d7b978707c16aef821 (diff) |
Remove unused resize-line code. When resizing multiple tracks, resize them in proportion, as per mantis 2732.
git-svn-id: svn://localhost/ardour2/branches/3.0@5213 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 184 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 15 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/public_editor.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.h | 1 |
6 files changed, 47 insertions, 173 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 9be36a0841..30786e9d91 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -19,11 +19,14 @@ /* 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 (); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 6e30ef2954..f83ce96540 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -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; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index a90ffb0801..de6941aa7b 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -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); } diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 8e366a3dd7..ed73f59258 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -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; diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index b2b0bde460..8d0f4194af 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -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; diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 56e7042548..f5d5c08ef0 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -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; |