From fd83d9fe5cbfa72e9edd3b86c2013b6fd7bff19a Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: Aug 21 2018 13:42:23 +0000 Subject: Hide ducks while scrubbing --- diff --git a/synfig-studio/src/gui/canvasview.cpp b/synfig-studio/src/gui/canvasview.cpp index ef6f50b..7f30648 100644 --- a/synfig-studio/src/gui/canvasview.cpp +++ b/synfig-studio/src/gui/canvasview.cpp @@ -2778,7 +2778,7 @@ CanvasView::queue_rebuild_ducks() { queue_rebuild_ducks_connection.disconnect(); - if (ducks_locks) + if (is_ducks_locked()) { ducks_rebuild_queue_requested = true; return; } queue_rebuild_ducks_connection = Glib::signal_timeout().connect( @@ -2793,7 +2793,7 @@ CanvasView::queue_rebuild_ducks() void CanvasView::rebuild_ducks() { - if (ducks_locks) + if (is_ducks_locked()) { ducks_rebuild_requested = true; return; } ducks_rebuild_queue_requested = true; diff --git a/synfig-studio/src/gui/canvasview.h b/synfig-studio/src/gui/canvasview.h index 089578b..510346c 100644 --- a/synfig-studio/src/gui/canvasview.h +++ b/synfig-studio/src/gui/canvasview.h @@ -602,6 +602,8 @@ public: /*! \see create_work_area(), popup_param_menu(), popup_param_menu_bezier() */ void popup_main_menu(); + bool is_ducks_locked() { return ducks_locks > 0; } + Smach& get_smach() { return smach_; } const Smach& get_smach()const { return smach_; } diff --git a/synfig-studio/src/gui/widgets/widget_canvastimeslider.cpp b/synfig-studio/src/gui/widgets/widget_canvastimeslider.cpp index b6ce48f..a95cfda 100644 --- a/synfig-studio/src/gui/widgets/widget_canvastimeslider.cpp +++ b/synfig-studio/src/gui/widgets/widget_canvastimeslider.cpp @@ -81,6 +81,7 @@ Widget_CanvasTimeslider::set_canvas_view(const CanvasView::LooseHandle &x) if (canvas_view == x) return; rendering_change.disconnect(); + lock_ducks.reset(); canvas_view = x; if (canvas_view && canvas_view->get_work_area()) rendering_change = canvas_view->get_work_area()->signal_rendering().connect( @@ -151,6 +152,11 @@ Widget_CanvasTimeslider::show_tooltip(const synfig::Point &p, const synfig::Poin bool Widget_CanvasTimeslider::on_button_press_event(GdkEventButton *event) { + if (event->button == 1 && canvas_view && canvas_view->get_work_area()) { + lock_ducks = new LockDucks(etl::handle(canvas_view)); + canvas_view->get_work_area()->clear_ducks(); + canvas_view->queue_rebuild_ducks(); + } if (event->button == 1 || event->button == 2) tooltip.hide(); return Widget_Timeslider::on_button_press_event(event); @@ -159,6 +165,8 @@ Widget_CanvasTimeslider::on_button_press_event(GdkEventButton *event) bool Widget_CanvasTimeslider::on_button_release_event(GdkEventButton *event) { + if (event->button == 1 && canvas_view) + lock_ducks.reset(); //if ( (event->button == 1 && !(event->state & Gdk::BUTTON2_MASK)) // || (event->button == 2 && !(event->state & Gdk::BUTTON1_MASK)) ) // show_tooltip(Point(event->x, event->y), Point(event->x_root, event->y_root)); diff --git a/synfig-studio/src/gui/widgets/widget_canvastimeslider.h b/synfig-studio/src/gui/widgets/widget_canvastimeslider.h index 56ffe88..e7c4776 100644 --- a/synfig-studio/src/gui/widgets/widget_canvastimeslider.h +++ b/synfig-studio/src/gui/widgets/widget_canvastimeslider.h @@ -40,12 +40,14 @@ namespace studio { class CanvasView; +class LockDucks; class Widget_CanvasTimeslider : public Widget_Timeslider { protected: sigc::connection rendering_change; etl::loose_handle canvas_view; + etl::handle lock_ducks; Gtk::Window tooltip; Gtk::Image thumb;