Add invisible Rectangle to initiates Tempo(grid) drags
This commit is contained in:
parent
f339236c5b
commit
268d1d33c7
|
@ -300,6 +300,7 @@ Editor::Editor ()
|
|||
, _trackview_group (0)
|
||||
, _drag_motion_group (0)
|
||||
, _canvas_drop_zone (0)
|
||||
, _canvas_grid_zone (0)
|
||||
, no_ruler_shown_update (false)
|
||||
, ruler_grabbed_widget (0)
|
||||
, ruler_dialog (0)
|
||||
|
|
|
@ -968,6 +968,9 @@ private:
|
|||
ArdourCanvas::Rectangle* _canvas_drop_zone;
|
||||
bool canvas_drop_zone_event (GdkEvent* event);
|
||||
|
||||
ArdourCanvas::Rectangle* _canvas_grid_zone;
|
||||
bool canvas_grid_zone_event (GdkEvent* event);
|
||||
|
||||
Glib::RefPtr<Gtk::ToggleAction> ruler_minsec_action;
|
||||
Glib::RefPtr<Gtk::ToggleAction> ruler_timecode_action;
|
||||
Glib::RefPtr<Gtk::ToggleAction> ruler_samples_action;
|
||||
|
|
|
@ -292,9 +292,16 @@ Editor::initialize_canvas ()
|
|||
_canvas_drop_zone->set_outline (false);
|
||||
_canvas_drop_zone->Event.connect (sigc::mem_fun (*this, &Editor::canvas_drop_zone_event));
|
||||
|
||||
/* these signals will initially be delivered to the canvas itself, but if they end up remaining unhandled, they are passed to Editor-level
|
||||
handlers.
|
||||
*/
|
||||
_canvas_grid_zone = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, 0.0));
|
||||
/* this thing is transparent */
|
||||
_canvas_grid_zone->set_fill (false);
|
||||
_canvas_grid_zone->set_outline (false);
|
||||
_canvas_grid_zone->Event.connect (sigc::mem_fun (*this, &Editor::canvas_grid_zone_event));
|
||||
_canvas_grid_zone->set_ignore_events (true);
|
||||
|
||||
/* these signals will initially be delivered to the canvas itself, but if they end up remaining unhandled,
|
||||
* they are passed to Editor-level handlers.
|
||||
*/
|
||||
|
||||
_track_canvas->signal_scroll_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_scroll_event), true));
|
||||
_track_canvas->signal_motion_notify_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_motion_notify_event));
|
||||
|
@ -350,6 +357,8 @@ Editor::track_canvas_viewport_size_allocated ()
|
|||
|
||||
_canvas_drop_zone->set_y1 (_canvas_drop_zone->y0() + (_visible_canvas_height - 20.0));
|
||||
|
||||
_canvas_grid_zone->set_y1 (_visible_canvas_height);
|
||||
|
||||
// SHOWTRACKS
|
||||
|
||||
if (height_changed) {
|
||||
|
@ -1508,6 +1517,7 @@ Editor::which_canvas_cursor(ItemType type) const
|
|||
case VideoBarItem:
|
||||
case TransportMarkerBarItem:
|
||||
case DropZoneItem:
|
||||
case GridZoneItem:
|
||||
case SelectionMarkerItem:
|
||||
cursor = _cursors->grabber;
|
||||
break;
|
||||
|
|
|
@ -1160,8 +1160,8 @@ Editor::canvas_drop_zone_event (GdkEvent* event)
|
|||
|
||||
case GDK_SCROLL:
|
||||
/* convert coordinates back into window space so that
|
||||
we can just call canvas_scroll_event().
|
||||
*/
|
||||
* we can just call canvas_scroll_event().
|
||||
*/
|
||||
winpos = _track_canvas->canvas_to_window (Duple (event->scroll.x, event->scroll.y));
|
||||
scroll = event->scroll;
|
||||
scroll.x = winpos.x;
|
||||
|
@ -1186,6 +1186,50 @@ Editor::canvas_drop_zone_event (GdkEvent* event)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::canvas_grid_zone_event (GdkEvent* event)
|
||||
{
|
||||
GdkEventScroll scroll;
|
||||
ArdourCanvas::Duple winpos;
|
||||
|
||||
switch (event->type) {
|
||||
|
||||
case GDK_BUTTON_PRESS:
|
||||
choose_mapping_drag (_canvas_grid_zone, event);
|
||||
break;
|
||||
|
||||
case GDK_BUTTON_RELEASE:
|
||||
return typed_event (_canvas_grid_zone, event, GridZoneItem);
|
||||
break;
|
||||
|
||||
case GDK_SCROLL:
|
||||
/* convert coordinates back into window space so that
|
||||
* we can just call canvas_scroll_event().
|
||||
*/
|
||||
winpos = _track_canvas->canvas_to_window (Duple (event->scroll.x, event->scroll.y));
|
||||
scroll = event->scroll;
|
||||
scroll.x = winpos.x;
|
||||
scroll.y = winpos.y;
|
||||
return canvas_scroll_event (&scroll, true);
|
||||
break;
|
||||
|
||||
case GDK_ENTER_NOTIFY:
|
||||
return typed_event (_canvas_grid_zone, event, GridZoneItem);
|
||||
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
return typed_event (_canvas_grid_zone, event, GridZoneItem);
|
||||
|
||||
case GDK_MOTION_NOTIFY:
|
||||
return motion_handler (_canvas_grid_zone, event);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const& context, int x, int y, guint time)
|
||||
{
|
||||
|
|
|
@ -69,6 +69,7 @@ enum ItemType {
|
|||
SamplesRulerItem,
|
||||
SelectionMarkerItem,
|
||||
DropZoneItem,
|
||||
GridZoneItem,
|
||||
VelocityItem,
|
||||
VelocityBaseItem,
|
||||
|
||||
|
|
|
@ -1759,6 +1759,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
}
|
||||
break;
|
||||
|
||||
case GridZoneItem:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1854,6 +1855,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
}
|
||||
return true;
|
||||
|
||||
case GridZoneItem:
|
||||
case MappingBarItem:
|
||||
return true;
|
||||
|
||||
|
@ -2020,6 +2022,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
switch (item_type) {
|
||||
case MappingBarItem:
|
||||
break;
|
||||
case GridZoneItem:
|
||||
break;
|
||||
|
||||
case ControlPointItem:
|
||||
if (mouse_mode == MouseDraw || mouse_mode == MouseObject || mouse_mode == MouseContent) {
|
||||
|
@ -2167,6 +2171,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
|
|||
|
||||
switch (item_type) {
|
||||
case MappingBarItem:
|
||||
case GridZoneItem:
|
||||
break;
|
||||
|
||||
case ControlPointItem:
|
||||
|
|
Loading…
Reference in New Issue
Block a user