redid effects panel scrolling and #137

This commit is contained in:
itsmattkc
2018-10-11 16:04:02 +11:00
parent 407865348a
commit f8471ed3de
13 changed files with 223 additions and 203 deletions
+28 -7
View File
@@ -11,9 +11,11 @@
#include "panels/viewer.h"
#include "ui/viewerwidget.h"
#include "project/sequence.h"
#include "ui_effectcontrols.h"
#include <QLabel>
#include <QMouseEvent>
#include <QtMath>
#define KEYFRAME_SIZE 6
#define KEYFRAME_POINT_COUNT 4
@@ -22,7 +24,17 @@ long KeyframeView::adjust_row_keyframe(EffectRow* row, long time) {
return time-row->parent_effect->parent_clip->clip_in+(row->parent_effect->parent_clip->timeline_in-visible_in);
}
KeyframeView::KeyframeView(QWidget *parent) : QWidget(parent), mousedown(false), dragging(false), keys_selected(false), select_rect(false), visible_in(0), visible_out(0) {
KeyframeView::KeyframeView(QWidget *parent) :
QWidget(parent),
mousedown(false),
dragging(false),
keys_selected(false),
select_rect(false),
visible_in(0),
visible_out(0),
x_scroll(0),
y_scroll(0)
{
setFocusPolicy(Qt::ClickFocus);
setMouseTracking(true);
}
@@ -50,12 +62,12 @@ void KeyframeView::paintEvent(QPaintEvent*) {
QLabel* label = row->label;
QWidget* contents = e->container->contents;
int keyframe_y = label->y() + (label->height()>>1) + mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y() - e->container->title_bar->height();
int keyframe_y = label->y() + (label->height()>>1) + mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y() - e->container->title_bar->height()/* - y_scroll*/;
for (int k=0;k<row->keyframe_times.size();k++) {
bool keyframe_selected = keyframeIsSelected(row, k);
long keyframe_frame = adjust_row_keyframe(row, row->keyframe_times.at(k));
if (dragging && keyframe_selected) keyframe_frame += frame_diff;
draw_keyframe(p, getScreenPointFromFrame(panel_effect_controls->zoom, keyframe_frame), keyframe_y, keyframe_selected);
draw_keyframe(p, getScreenPointFromFrame(panel_effect_controls->zoom, keyframe_frame) - x_scroll, keyframe_y, keyframe_selected);
}
rows.append(row);
@@ -68,12 +80,11 @@ void KeyframeView::paintEvent(QPaintEvent*) {
visible_in = effects_in;
visible_out = effects_out;
int width = getScreenPointFromFrame(panel_effect_controls->zoom, visible_out - visible_in);
setMinimumWidth(width);
header->setMinimumWidth(width);
int max_width = getScreenPointFromFrame(panel_effect_controls->zoom, visible_out - visible_in);
panel_effect_controls->ui->horizontalScrollBar->setMaximum(qMax(max_width - width(), 0));
header->set_visible_in(effects_in);
int playhead_x = getScreenPointFromFrame(panel_effect_controls->zoom, sequence->playhead-visible_in);
int playhead_x = getScreenPointFromFrame(panel_effect_controls->zoom, sequence->playhead-visible_in) - x_scroll;
p.setPen(Qt::red);
p.drawLine(playhead_x, 0, playhead_x, height());
}
@@ -115,6 +126,16 @@ void KeyframeView::delete_selected_keyframes() {
}
}
void KeyframeView::set_x_scroll(int s) {
x_scroll = s;
update();
}
void KeyframeView::set_y_scroll(int s) {
y_scroll = s;
update();
}
void KeyframeView::draw_keyframe(QPainter &p, int x, int y, bool darker) {
QPoint points[KEYFRAME_POINT_COUNT] = {QPoint(x-KEYFRAME_SIZE, y), QPoint(x, y-KEYFRAME_SIZE), QPoint(x+KEYFRAME_SIZE, y), QPoint(x, y+KEYFRAME_SIZE)};
int color = (darker) ? 100 : 160;
+6
View File
@@ -20,6 +20,9 @@ public:
long visible_in;
long visible_out;
public slots:
void set_x_scroll(int);
void set_y_scroll(int);
private:
long adjust_row_keyframe(EffectRow* row, long time);
QVector<EffectRow*> selected_rows;
@@ -45,6 +48,9 @@ private:
int rect_select_y;
int rect_select_w;
int rect_select_h;
int x_scroll;
int y_scroll;
};
#endif // KEYFRAMEVIEW_H
+15 -4
View File
@@ -32,7 +32,8 @@ TimelineHeader::TimelineHeader(QWidget *parent) :
{
setCursor(Qt::ArrowCursor);
setMouseTracking(true);
setMinimumHeight(fm.height()*2);
setFixedHeight(fm.height()*2);
setFocusPolicy(Qt::ClickFocus);
}
void TimelineHeader::set_scroll(int s) {
@@ -51,7 +52,9 @@ int TimelineHeader::getHeaderScreenPointFromFrame(long frame) {
void TimelineHeader::set_playhead(int mouse_x) {
long frame = getHeaderFrameFromScreenPoint(mouse_x);
if (snapping) panel_timeline->snap_to_timeline(&frame, false, true, true);
panel_timeline->seek(frame);
if (frame != sequence->playhead) {
panel_timeline->seek(frame);
}
}
void TimelineHeader::set_visible_in(long i) {
@@ -83,6 +86,7 @@ void TimelineHeader::set_out_point(long new_out) {
}
void TimelineHeader::mousePressEvent(QMouseEvent* event) {
qDebug() << "press???!?!?!??!";
if (resizing_workarea) {
sequence_end = sequence->getEndFrame();
} else {
@@ -127,11 +131,15 @@ void TimelineHeader::mousePressEvent(QMouseEvent* event) {
set_playhead(event->pos().x());
}
}
qDebug() << "3";
dragging = true;
qDebug() << "5" << dragging;
event->accept();
}
void TimelineHeader::mouseMoveEvent(QMouseEvent* event) {
if (dragging) {
qDebug() << "move";
if (dragging) {
if (resizing_workarea) {
long frame = getHeaderFrameFromScreenPoint(event->pos().x());
panel_timeline->snap_to_timeline(&frame, true, true, false);
@@ -193,9 +201,11 @@ void TimelineHeader::mouseMoveEvent(QMouseEvent* event) {
}
}
}
event->accept();
}
void TimelineHeader::mouseReleaseEvent(QMouseEvent*) {
void TimelineHeader::mouseReleaseEvent(QMouseEvent* event) {
qDebug() << "release???!?!?!??!";
if (resizing_workarea) {
undo_stack.push(new SetTimelineInOutCommand(sequence, true, temp_workarea_in, temp_workarea_out));
} else if (dragging_markers && selected_markers.size() > 0) {
@@ -220,6 +230,7 @@ void TimelineHeader::mouseReleaseEvent(QMouseEvent*) {
dragging_markers = false;
panel_timeline->snapped = false;
panel_timeline->repaint_timeline(false);
event->accept();
}
void TimelineHeader::focusOutEvent(QFocusEvent*) {
+5 -5
View File
@@ -24,11 +24,11 @@ public slots:
void set_visible_in(long i);
protected:
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void focusOutEvent(QFocusEvent *event);
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void focusOutEvent(QFocusEvent*);
private:
bool dragging;
+13 -7
View File
@@ -367,14 +367,20 @@ void TimelineWidget::dragMoveEvent(QDragMoveEvent *event) {
}
void TimelineWidget::wheelEvent(QWheelEvent *event) {
if (config.scroll_zooms) {
if (event->angleDelta().y() != 0) panel_timeline->set_zoom(event->angleDelta().y() > 0);
} else {
QScrollBar* bar = (event->modifiers() & Qt::ShiftModifier) ? scrollBar : panel_timeline->ui->horizontalScrollBar;
bool alt = (event->modifiers() & Qt::AltModifier);
int scroll_amount = alt ? (event->angleDelta().x()) : (event->angleDelta().y());
if (scroll_amount != 0) {
bool shift = (event->modifiers() & Qt::ShiftModifier);
bool in = (scroll_amount > 0);
if (config.scroll_zooms != shift) {
panel_timeline->set_zoom(in);
} else {
QScrollBar* bar = alt ? scrollBar : panel_timeline->ui->horizontalScrollBar;
int step = bar->singleStep();
if (event->angleDelta().y() > 0) step = -step;
bar->setValue(bar->value() + step);
int step = bar->singleStep();
if (in) step = -step;
bar->setValue(bar->value() + step);
}
}
}