improved graph zooming

This commit is contained in:
itsmattkc
2019-01-05 14:08:01 +11:00
parent edf8492c7f
commit 4cc97d607f
2 changed files with 22 additions and 11 deletions
+21 -11
View File
@@ -46,7 +46,8 @@ GraphView::GraphView(QWidget* parent) :
moved_keys(false), moved_keys(false),
current_handle(BEZIER_HANDLE_NONE), current_handle(BEZIER_HANDLE_NONE),
rect_select(false), rect_select(false),
visible_in(0) visible_in(0),
click_add_proc(false)
{ {
setMouseTracking(true); setMouseTracking(true);
setFocusPolicy(Qt::ClickFocus); setFocusPolicy(Qt::ClickFocus);
@@ -331,7 +332,7 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
int sel_key_field = -1; int sel_key_field = -1;
current_handle = BEZIER_HANDLE_NONE; current_handle = BEZIER_HANDLE_NONE;
if (click_add) { if (click_add && (event->buttons() & Qt::LeftButton)) {
selected_keys.clear(); selected_keys.clear();
selected_keys_fields.clear(); selected_keys_fields.clear();
@@ -342,6 +343,7 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
click_add_key = click_add_field->keyframes.size(); click_add_key = click_add_field->keyframes.size();
click_add_field->keyframes.append(key); click_add_field->keyframes.append(key);
update_ui(false); update_ui(false);
click_add_proc = true;
} else { } else {
for (int i=0;i<row->fieldCount();i++) { for (int i=0;i<row->fieldCount();i++) {
EffectField* field = row->field(i); EffectField* field = row->field(i);
@@ -429,16 +431,16 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
void GraphView::mouseMoveEvent(QMouseEvent *event) { void GraphView::mouseMoveEvent(QMouseEvent *event) {
if (!mousedown || !click_add) unsetCursor(); if (!mousedown || !click_add) unsetCursor();
if (mousedown) { if (mousedown) {
if (click_add) { if (event->buttons() & Qt::MiddleButton || panel_timeline->tool == TIMELINE_TOOL_HAND) {
click_add_field->keyframes[click_add_key].time = get_value_x(event->pos().x());
click_add_field->keyframes[click_add_key].data = get_value_y(event->pos().y());
update_ui(false);
} else if (event->buttons() & Qt::MiddleButton || panel_timeline->tool == TIMELINE_TOOL_HAND) {
set_scroll_x(x_scroll + start_x - event->pos().x()); set_scroll_x(x_scroll + start_x - event->pos().x());
set_scroll_y(y_scroll + event->pos().y() - start_y); set_scroll_y(y_scroll + event->pos().y() - start_y);
start_x = event->pos().x(); start_x = event->pos().x();
start_y = event->pos().y(); start_y = event->pos().y();
update(); update();
} else if (click_add_proc) {
click_add_field->keyframes[click_add_key].time = get_value_x(event->pos().x());
click_add_field->keyframes[click_add_key].data = get_value_y(event->pos().y());
update_ui(false);
} else if (rect_select) { } else if (rect_select) {
rect_select_w = event->pos().x() - rect_select_x; rect_select_w = event->pos().x() - rect_select_x;
rect_select_h = event->pos().y() - rect_select_y; rect_select_h = event->pos().y() - rect_select_y;
@@ -656,8 +658,8 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
} }
} }
void GraphView::mouseReleaseEvent(QMouseEvent *) { void GraphView::mouseReleaseEvent(QMouseEvent *e) {
if (click_add) { if (click_add_proc) {
undo_stack.push(new KeyframeFieldSet(click_add_field, click_add_key)); undo_stack.push(new KeyframeFieldSet(click_add_field, click_add_key));
} else if (moved_keys && selected_keys.size() > 0) { } else if (moved_keys && selected_keys.size() > 0) {
ComboAction* ca = new ComboAction(); ComboAction* ca = new ComboAction();
@@ -685,6 +687,7 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
moved_keys = false; moved_keys = false;
mousedown = false; mousedown = false;
click_add = false; click_add = false;
click_add_proc = false;
if (rect_select) { if (rect_select) {
rect_select = false; rect_select = false;
selection_update(); selection_update();
@@ -693,6 +696,8 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
} }
void GraphView::wheelEvent(QWheelEvent *event) { void GraphView::wheelEvent(QWheelEvent *event) {
dout << x_scroll << y_scroll;
bool redraw = false; bool redraw = false;
bool shift = (event->modifiers() & Qt::ShiftModifier); // scroll instead of zoom bool shift = (event->modifiers() & Qt::ShiftModifier); // scroll instead of zoom
@@ -708,10 +713,15 @@ void GraphView::wheelEvent(QWheelEvent *event) {
double new_zoom = (event->angleDelta().y() < 0) ? zoom - zoom_diff : zoom + zoom_diff; double new_zoom = (event->angleDelta().y() < 0) ? zoom - zoom_diff : zoom + zoom_diff;
// center zoom on screen // center zoom on screen
set_scroll_x(qRound(x_scroll + double(event->pos().x())*new_zoom - double(event->pos().x())*zoom)); /*set_scroll_x(qRound(x_scroll + double(event->pos().x())*new_zoom - double(event->pos().x())*zoom));
set_scroll_y(qRound(y_scroll + double(height()-event->pos().y())*new_zoom - double(height()-event->pos().y())*zoom)); set_scroll_y(qRound(y_scroll + double(height()-event->pos().y())*new_zoom - double(height()-event->pos().y())*zoom));*/
/*set_scroll_x(qRound((double(x_scroll)/zoom*new_zoom) + (double(event->pos().x())/zoom*new_zoom)));
set_scroll_y(qRound((double(y_scroll)/zoom*new_zoom)));*/
set_scroll_x(qRound((double(x_scroll)/zoom*new_zoom) + double(event->pos().x())*new_zoom - double(event->pos().x())*zoom));
set_scroll_y(qRound((double(y_scroll)/zoom*new_zoom) + double(height()-event->pos().y())*new_zoom - double(height()-event->pos().y())*zoom));
set_zoom(new_zoom); set_zoom(new_zoom);
redraw = true; redraw = true;
} }
} }
+1
View File
@@ -85,6 +85,7 @@ private:
long visible_in; long visible_in;
bool click_add; bool click_add;
bool click_add_proc;
EffectField* click_add_field; EffectField* click_add_field;
int click_add_key; int click_add_key;
int click_add_type; int click_add_type;