implemented hand tool for moving content around

This commit is contained in:
itsmattkc
2018-12-26 21:16:15 +11:00
parent c308c5cd32
commit 11466cf5b3
14 changed files with 149 additions and 44 deletions
+25 -8
View File
@@ -34,7 +34,8 @@ KeyframeView::KeyframeView(QWidget *parent) :
keys_selected(false),
select_rect(false),
x_scroll(0),
y_scroll(0)
y_scroll(0),
scroll_drag(false)
{
setFocusPolicy(Qt::ClickFocus);
setMouseTracking(true);
@@ -193,12 +194,20 @@ void KeyframeView::resize_move(double d) {
header->update_zoom(header->get_zoom()*d);
}
void KeyframeView::mousePressEvent(QMouseEvent *event) {
void KeyframeView::mousePressEvent(QMouseEvent *event) {
rect_select_x = event->x();
rect_select_y = event->y();
if (panel_timeline->tool == TIMELINE_TOOL_HAND || event->buttons() & Qt::MiddleButton) {
scroll_drag = true;
return;
}
int mouse_x = event->x() + x_scroll;
int mouse_y = event->y();
int row_index = -1;
int keyframe_index = -1;
long frame_diff = 0;
int mouse_x = event->x() + x_scroll;
int mouse_y = event->y();
long frame_min = getFrameFromScreenPoint(panel_effect_controls->zoom, mouse_x-KEYFRAME_SIZE);
drag_frame_start = getFrameFromScreenPoint(panel_effect_controls->zoom, mouse_x);
long frame_max = getFrameFromScreenPoint(panel_effect_controls->zoom, mouse_x+KEYFRAME_SIZE);
@@ -235,9 +244,6 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
if (selected_rows.size() > 0) {
keys_selected = true;
} else {
rect_select_x = event->x();
rect_select_y = event->y();
}
update();
@@ -248,7 +254,17 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
}
void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
if (mousedown) {
if (panel_timeline->tool == TIMELINE_TOOL_HAND) {
setCursor(Qt::OpenHandCursor);
} else {
unsetCursor();
}
if (scroll_drag) {
panel_effect_controls->ui->horizontalScrollBar->setValue(panel_effect_controls->ui->horizontalScrollBar->value() + rect_select_x - event->pos().x());
panel_effect_controls->ui->verticalScrollBar->setValue(panel_effect_controls->ui->verticalScrollBar->value() + rect_select_y - event->pos().y());
rect_select_x = event->pos().x();
rect_select_y = event->pos().y();
} else if (mousedown) {
int mouse_x = event->x() + x_scroll;
if (keys_selected) {
// move keyframes
@@ -332,6 +348,7 @@ void KeyframeView::mouseReleaseEvent(QMouseEvent*) {
select_rect = false;
dragging = false;
mousedown = false;
scroll_drag = false;
panel_timeline->snapped = false;
update();
}
+2 -1
View File
@@ -39,7 +39,8 @@ private:
bool mousedown;
bool dragging;
bool keys_selected;
bool select_rect;
bool select_rect;
bool scroll_drag;
bool keyframeIsSelected(EffectRow* row, int keyframe);
+22 -2
View File
@@ -698,7 +698,12 @@ void TimelineWidget::mousePressEvent(QMouseEvent *event) {
update_ui(false);
}
}
break;
break;
case TIMELINE_TOOL_HAND:
panel_timeline->hand_moving = true;
panel_timeline->drag_x_start = pos.x();
panel_timeline->drag_y_start = pos.y();
break;
case TIMELINE_TOOL_EDIT:
if (config.edit_tool_also_seeks) panel_sequence_viewer->seek(panel_timeline->drag_frame_start);
panel_timeline->selecting = true;
@@ -1134,6 +1139,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
panel_timeline->rect_select_proc = false;
panel_timeline->transition_tool_init = false;
panel_timeline->transition_tool_proc = false;
panel_timeline->hand_moving = false;
pre_clips.clear();
post_clips.clear();
@@ -1630,6 +1636,16 @@ void TimelineWidget::mouseMoveEvent(QMouseEvent *event) {
} else {
panel_timeline->repaint_timeline();
}
} else if (panel_timeline->hand_moving) {
panel_timeline->block_repaints = true;
panel_timeline->ui->horizontalScrollBar->setValue(panel_timeline->ui->horizontalScrollBar->value() + panel_timeline->drag_x_start - event->pos().x());
scrollBar->setValue(scrollBar->value() + panel_timeline->drag_y_start - event->pos().y());
panel_timeline->block_repaints = false;
panel_timeline->repaint_timeline();
panel_timeline->drag_x_start = event->pos().x();
panel_timeline->drag_y_start = event->pos().y();
} else if (panel_timeline->moving_init) {
if (track_resizing) {
int diff = track_resize_mouse_cache - event->pos().y();
@@ -2603,7 +2619,11 @@ void TimelineWidget::paintEvent(QPaintEvent*) {
p.setPen(Qt::gray);
p.drawLine(cursor_x, cursor_y, cursor_x, cursor_y + panel_timeline->calculate_track_height(panel_timeline->cursor_track, -1));
}
}
}
}
void TimelineWidget::resizeEvent(QResizeEvent *event) {
scrollBar->setPageStep(height());
}
bool TimelineWidget::is_track_visible(int track) {
+2
View File
@@ -33,6 +33,8 @@ public:
protected:
void paintEvent(QPaintEvent*);
void resizeEvent(QResizeEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
+7 -4
View File
@@ -258,7 +258,7 @@ void ViewerWidget::move_gizmos(QMouseEvent *event, bool done) {
void ViewerWidget::mousePressEvent(QMouseEvent* event) {
if (waveform) {
seek_from_click(event->x());
} else if (event->buttons() & Qt::MiddleButton) {
} else if (event->buttons() & Qt::MiddleButton || panel_timeline->tool == TIMELINE_TOOL_HAND) {
container->dragScrollPress(event->pos());
} else {
drag_start_x = event->pos().x();
@@ -277,10 +277,14 @@ void ViewerWidget::mousePressEvent(QMouseEvent* event) {
}
void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
unsetCursor();
if (panel_timeline->tool == TIMELINE_TOOL_HAND) {
setCursor(Qt::OpenHandCursor);
}
if (dragging) {
if (waveform) {
seek_from_click(event->x());
} else if (event->buttons() & Qt::MiddleButton) {
} else if (event->buttons() & Qt::MiddleButton || panel_timeline->tool == TIMELINE_TOOL_HAND) {
container->dragScrollMove(event->pos());
} else if (gizmos == NULL) {
QDrag* drag = new QDrag(this);
@@ -293,7 +297,6 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
move_gizmos(event, false);
}
} else {
unsetCursor();
EffectGizmo* g = get_gizmo_from_mouse(event->pos().x(), event->pos().y());
if (g != NULL) {
if (g->get_cursor() > -1) {
@@ -304,7 +307,7 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
}
void ViewerWidget::mouseReleaseEvent(QMouseEvent *event) {
move_gizmos(event, true);
if (dragging) move_gizmos(event, true);
dragging = false;
}