Fix dragging grid lines when you move the mouse outside of the grid during the drag.
git-svn-id: svn://localhost/ardour2/branches/3.0@6120 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
0f313672f5
commit
b7cfd2849e
|
@ -328,14 +328,19 @@ PortMatrixBody::on_button_press_event (GdkEventButton* ev)
|
||||||
bool
|
bool
|
||||||
PortMatrixBody::on_button_release_event (GdkEventButton* ev)
|
PortMatrixBody::on_button_release_event (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
if (Gdk::Region (_grid->parent_rectangle()).point_in (ev->x, ev->y)) {
|
for (list<PortMatrixComponent*>::iterator i = _components.begin(); i != _components.end(); ++i) {
|
||||||
|
if (Gdk::Region ((*i)->parent_rectangle()).point_in (ev->x, ev->y)) {
|
||||||
_grid->button_release (
|
(*i)->button_release (
|
||||||
_grid->parent_to_component_x (ev->x),
|
(*i)->parent_to_component_x (ev->x),
|
||||||
_grid->parent_to_component_y (ev->y),
|
(*i)->parent_to_component_y (ev->y),
|
||||||
ev->button, ev->time
|
ev->button, ev->time
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
(*i)->button_release (
|
||||||
|
-1, -1,
|
||||||
|
ev->button, ev->time
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
virtual void mouseover_changed (std::list<PortMatrixNode> const &) = 0;
|
virtual void mouseover_changed (std::list<PortMatrixNode> const &) = 0;
|
||||||
virtual void draw_extra (cairo_t *) = 0;
|
virtual void draw_extra (cairo_t *) = 0;
|
||||||
virtual void button_press (double, double, int, uint32_t) {}
|
virtual void button_press (double, double, int, uint32_t) {}
|
||||||
|
virtual void button_release (double, double, int, uint32_t) {}
|
||||||
virtual void motion (double, double) {}
|
virtual void motion (double, double) {}
|
||||||
|
|
||||||
void set_show_ports (bool);
|
void set_show_ports (bool);
|
||||||
|
|
|
@ -359,29 +359,33 @@ PortMatrixGrid::button_release (double x, double y, int b, uint32_t /*t*/)
|
||||||
{
|
{
|
||||||
if (b == 1) {
|
if (b == 1) {
|
||||||
|
|
||||||
if (_dragging && _moved) {
|
if (x != -1) {
|
||||||
|
|
||||||
if (_drag_valid) {
|
if (_dragging && _moved) {
|
||||||
list<PortMatrixNode> const p = nodes_on_line (_drag_start_x, _drag_start_y, _drag_x, _drag_y);
|
|
||||||
|
if (_drag_valid) {
|
||||||
if (!p.empty()) {
|
list<PortMatrixNode> const p = nodes_on_line (_drag_start_x, _drag_start_y, _drag_x, _drag_y);
|
||||||
PortMatrixNode::State const s = get_association (p.front());
|
|
||||||
for (list<PortMatrixNode>::const_iterator i = p.begin(); i != p.end(); ++i) {
|
if (!p.empty()) {
|
||||||
set_association (*i, toggle_state (s));
|
PortMatrixNode::State const s = get_association (p.front());
|
||||||
|
for (list<PortMatrixNode>::const_iterator i = p.begin(); i != p.end(); ++i) {
|
||||||
|
set_association (*i, toggle_state (s));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
PortMatrixNode const n = position_to_node (x, y);
|
||||||
|
if (n.row.bundle && n.column.bundle) {
|
||||||
|
PortMatrixNode::State const s = get_association (n);
|
||||||
|
set_association (n, toggle_state (s));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
require_render ();
|
||||||
|
|
||||||
PortMatrixNode const n = position_to_node (x, y);
|
|
||||||
if (n.row.bundle && n.column.bundle) {
|
|
||||||
PortMatrixNode::State const s = get_association (n);
|
|
||||||
set_association (n, toggle_state (s));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
require_render ();
|
|
||||||
_body->queue_draw ();
|
_body->queue_draw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user