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),
current_handle(BEZIER_HANDLE_NONE),
rect_select(false),
visible_in(0)
visible_in(0),
click_add_proc(false)
{
setMouseTracking(true);
setFocusPolicy(Qt::ClickFocus);
@@ -331,7 +332,7 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
int sel_key_field = -1;
current_handle = BEZIER_HANDLE_NONE;
if (click_add) {
if (click_add && (event->buttons() & Qt::LeftButton)) {
selected_keys.clear();
selected_keys_fields.clear();
@@ -342,6 +343,7 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
click_add_key = click_add_field->keyframes.size();
click_add_field->keyframes.append(key);
update_ui(false);
click_add_proc = true;
} else {
for (int i=0;i<row->fieldCount();i++) {
EffectField* field = row->field(i);
@@ -429,16 +431,16 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
void GraphView::mouseMoveEvent(QMouseEvent *event) {
if (!mousedown || !click_add) unsetCursor();
if (mousedown) {
if (click_add) {
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) {
if (event->buttons() & Qt::MiddleButton || panel_timeline->tool == TIMELINE_TOOL_HAND) {
set_scroll_x(x_scroll + start_x - event->pos().x());
set_scroll_y(y_scroll + event->pos().y() - start_y);
start_x = event->pos().x();
start_y = event->pos().y();
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) {
rect_select_w = event->pos().x() - rect_select_x;
rect_select_h = event->pos().y() - rect_select_y;
@@ -656,8 +658,8 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
}
}
void GraphView::mouseReleaseEvent(QMouseEvent *) {
if (click_add) {
void GraphView::mouseReleaseEvent(QMouseEvent *e) {
if (click_add_proc) {
undo_stack.push(new KeyframeFieldSet(click_add_field, click_add_key));
} else if (moved_keys && selected_keys.size() > 0) {
ComboAction* ca = new ComboAction();
@@ -685,6 +687,7 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
moved_keys = false;
mousedown = false;
click_add = false;
click_add_proc = false;
if (rect_select) {
rect_select = false;
selection_update();
@@ -693,6 +696,8 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
}
void GraphView::wheelEvent(QWheelEvent *event) {
dout << x_scroll << y_scroll;
bool redraw = false;
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;
// center zoom on screen
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_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_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);
redraw = true;
}
}
+1
View File
@@ -85,6 +85,7 @@ private:
long visible_in;
bool click_add;
bool click_add_proc;
EffectField* click_add_field;
int click_add_key;
int click_add_type;