mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
Add invisible Rectangle to initiates Tempo(grid) drags
This commit is contained in:
parent
f339236c5b
commit
268d1d33c7
6 changed files with 69 additions and 5 deletions
|
|
@ -300,6 +300,7 @@ Editor::Editor ()
|
||||||
, _trackview_group (0)
|
, _trackview_group (0)
|
||||||
, _drag_motion_group (0)
|
, _drag_motion_group (0)
|
||||||
, _canvas_drop_zone (0)
|
, _canvas_drop_zone (0)
|
||||||
|
, _canvas_grid_zone (0)
|
||||||
, no_ruler_shown_update (false)
|
, no_ruler_shown_update (false)
|
||||||
, ruler_grabbed_widget (0)
|
, ruler_grabbed_widget (0)
|
||||||
, ruler_dialog (0)
|
, ruler_dialog (0)
|
||||||
|
|
|
||||||
|
|
@ -968,6 +968,9 @@ private:
|
||||||
ArdourCanvas::Rectangle* _canvas_drop_zone;
|
ArdourCanvas::Rectangle* _canvas_drop_zone;
|
||||||
bool canvas_drop_zone_event (GdkEvent* event);
|
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_minsec_action;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> ruler_timecode_action;
|
Glib::RefPtr<Gtk::ToggleAction> ruler_timecode_action;
|
||||||
Glib::RefPtr<Gtk::ToggleAction> ruler_samples_action;
|
Glib::RefPtr<Gtk::ToggleAction> ruler_samples_action;
|
||||||
|
|
|
||||||
|
|
@ -292,9 +292,16 @@ Editor::initialize_canvas ()
|
||||||
_canvas_drop_zone->set_outline (false);
|
_canvas_drop_zone->set_outline (false);
|
||||||
_canvas_drop_zone->Event.connect (sigc::mem_fun (*this, &Editor::canvas_drop_zone_event));
|
_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
|
_canvas_grid_zone = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, 0.0));
|
||||||
handlers.
|
/* 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_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));
|
_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_drop_zone->set_y1 (_canvas_drop_zone->y0() + (_visible_canvas_height - 20.0));
|
||||||
|
|
||||||
|
_canvas_grid_zone->set_y1 (_visible_canvas_height);
|
||||||
|
|
||||||
// SHOWTRACKS
|
// SHOWTRACKS
|
||||||
|
|
||||||
if (height_changed) {
|
if (height_changed) {
|
||||||
|
|
@ -1508,6 +1517,7 @@ Editor::which_canvas_cursor(ItemType type) const
|
||||||
case VideoBarItem:
|
case VideoBarItem:
|
||||||
case TransportMarkerBarItem:
|
case TransportMarkerBarItem:
|
||||||
case DropZoneItem:
|
case DropZoneItem:
|
||||||
|
case GridZoneItem:
|
||||||
case SelectionMarkerItem:
|
case SelectionMarkerItem:
|
||||||
cursor = _cursors->grabber;
|
cursor = _cursors->grabber;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1160,8 +1160,8 @@ Editor::canvas_drop_zone_event (GdkEvent* event)
|
||||||
|
|
||||||
case GDK_SCROLL:
|
case GDK_SCROLL:
|
||||||
/* convert coordinates back into window space so that
|
/* 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));
|
winpos = _track_canvas->canvas_to_window (Duple (event->scroll.x, event->scroll.y));
|
||||||
scroll = event->scroll;
|
scroll = event->scroll;
|
||||||
scroll.x = winpos.x;
|
scroll.x = winpos.x;
|
||||||
|
|
@ -1186,6 +1186,50 @@ Editor::canvas_drop_zone_event (GdkEvent* event)
|
||||||
return true;
|
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
|
bool
|
||||||
Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const& context, int x, int y, guint time)
|
Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const& context, int x, int y, guint time)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ enum ItemType {
|
||||||
SamplesRulerItem,
|
SamplesRulerItem,
|
||||||
SelectionMarkerItem,
|
SelectionMarkerItem,
|
||||||
DropZoneItem,
|
DropZoneItem,
|
||||||
|
GridZoneItem,
|
||||||
VelocityItem,
|
VelocityItem,
|
||||||
VelocityBaseItem,
|
VelocityBaseItem,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1759,6 +1759,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GridZoneItem:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1854,6 +1855,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case GridZoneItem:
|
||||||
case MappingBarItem:
|
case MappingBarItem:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -2020,6 +2022,8 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case MappingBarItem:
|
case MappingBarItem:
|
||||||
break;
|
break;
|
||||||
|
case GridZoneItem:
|
||||||
|
break;
|
||||||
|
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
if (mouse_mode == MouseDraw || mouse_mode == MouseObject || mouse_mode == MouseContent) {
|
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) {
|
switch (item_type) {
|
||||||
case MappingBarItem:
|
case MappingBarItem:
|
||||||
|
case GridZoneItem:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ControlPointItem:
|
case ControlPointItem:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue