merge of previous commits

This commit is contained in:
itsmattkc
2018-12-13 14:31:25 +11:00
20 changed files with 223 additions and 77 deletions
+20 -2
View File
@@ -10,7 +10,7 @@
#include <QPainter>
#include <QMouseEvent>
#include <QScrollArea>
#include <QScrollBar>
#include <QtMath>
#define CLICK_RANGE 5
@@ -19,6 +19,16 @@
#define SUBLINE_MIN_PADDING 50 // TODO play with this
#define MARKER_SIZE 4
bool center_scroll_to_playhead(QScrollBar* bar, double zoom, long playhead) {
// returns true is the scroll was changed, false if not
int target_scroll = qMin(bar->maximum(), qMax(0, getScreenPointFromFrame(zoom, playhead)-(bar->width()>>1)));
if (target_scroll == bar->value()) {
return false;
}
bar->setValue(target_scroll);
return true;
}
TimelineHeader::TimelineHeader(QWidget *parent) :
QWidget(parent),
snapping(true),
@@ -87,6 +97,10 @@ void TimelineHeader::set_out_point(long new_out) {
update_parents();
}
void TimelineHeader::set_scrollbar_max(QScrollBar* bar, long sequence_end_frame, int offset) {
bar->setMaximum(qMax(0, getScreenPointFromFrame(zoom, sequence_end_frame) - offset));
}
void TimelineHeader::show_text(bool enable) {
text_enabled = enable;
if (enable) {
@@ -255,7 +269,11 @@ void TimelineHeader::update_parents() {
void TimelineHeader::update_zoom(double z) {
zoom = z;
update();
update();
}
double TimelineHeader::get_zoom() {
return zoom;
}
void TimelineHeader::delete_markers() {
+5 -1
View File
@@ -3,8 +3,10 @@
#include <QWidget>
#include <QFontMetrics>
class QScrollArea;
class Viewer;
class QScrollBar;
bool center_scroll_to_playhead(QScrollBar* bar, double zoom, long playhead);
class TimelineHeader : public QWidget
{
@@ -20,7 +22,9 @@ public:
void show_text(bool enable);
void update_zoom(double z);
double get_zoom();
void delete_markers();
void set_scrollbar_max(QScrollBar* bar, long sequence_end_frame, int offset);
public slots:
void set_scroll(int);
+24 -17
View File
@@ -3,6 +3,8 @@
#include <QWidget>
#include <QResizeEvent>
#include "viewerwidget.h"
// enforces aspect ratio
ViewerContainer::ViewerContainer(QWidget *parent) :
QWidget(parent),
@@ -11,26 +13,31 @@ ViewerContainer::ViewerContainer(QWidget *parent) :
{}
void ViewerContainer::adjust() {
if (child != NULL) {
QSize widget_size = size();
int widget_x = 0;
int widget_y = 0;
int widget_width = widget_size.width();
int widget_height = widget_size.height();
float widget_ar = (float) widget_width /(float) widget_height;
if (child != NULL) {
if (child->waveform) {
child->move(0, 0);
child->resize(size());
} else {
QSize widget_size = size();
int widget_x = 0;
int widget_y = 0;
int widget_width = widget_size.width();
int widget_height = widget_size.height();
float widget_ar = (float) widget_width /(float) widget_height;
bool widget_is_larger_than_sequence = widget_ar > aspect_ratio;
bool widget_is_larger_than_sequence = widget_ar > aspect_ratio;
if (widget_is_larger_than_sequence) {
widget_width = widget_height * aspect_ratio;
widget_x = (widget_size.width() / 2) - (widget_width / 2);
} else {
widget_height = widget_width / aspect_ratio;
widget_y = (widget_size.height() / 2) - (widget_height / 2);
}
if (widget_is_larger_than_sequence) {
widget_width = widget_height * aspect_ratio;
widget_x = (widget_size.width() / 2) - (widget_width / 2);
} else {
widget_height = widget_width / aspect_ratio;
widget_y = (widget_size.height() / 2) - (widget_height / 2);
}
child->move(widget_x, widget_y);
child->resize(widget_width, widget_height);
child->move(widget_x, widget_y);
child->resize(widget_width, widget_height);
}
}
}
+2 -1
View File
@@ -2,6 +2,7 @@
#define VIEWERCONTAINER_H
#include <QWidget>
class ViewerWidget;
class ViewerContainer : public QWidget
{
@@ -9,7 +10,7 @@ class ViewerContainer : public QWidget
public:
explicit ViewerContainer(QWidget *parent = 0);
float aspect_ratio;
QWidget* child;
ViewerWidget* child;
void adjust();
protected:
+49 -13
View File
@@ -44,7 +44,9 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
default_fbo(NULL),
waveform(false),
dragging(false),
selected_gizmo(NULL)
selected_gizmo(NULL),
waveform_zoom(1.0),
waveform_scroll(0)
{
setMouseTracking(true);
setFocusPolicy(Qt::ClickFocus);
@@ -70,6 +72,13 @@ void ViewerWidget::delete_function() {
}
}
void ViewerWidget::set_waveform_scroll(int s) {
if (waveform) {
waveform_scroll = s;
update();
}
}
void ViewerWidget::show_context_menu() {
QMenu menu(this);
@@ -142,11 +151,7 @@ void ViewerWidget::paintEvent(QPaintEvent *e) {
}
void ViewerWidget::seek_from_click(int x) {
viewer->seek(getFrameFromScreenPoint((double) width() / (double) waveform_clip->timeline_out, x));
}
double get_timecode(Clip* c, long playhead) {
return ((double)(playhead-c->get_timeline_in_with_transition()+c->get_clip_in_with_transition())/(double)c->sequence->frame_rate);
viewer->seek(getFrameFromScreenPoint(waveform_zoom, x+waveform_scroll));
}
EffectGizmo* ViewerWidget::get_gizmo_from_mouse(int x, int y) {
@@ -154,6 +159,7 @@ EffectGizmo* ViewerWidget::get_gizmo_from_mouse(int x, int y) {
double multiplier = (double) viewer->seq->width / (double) width();
QPoint mouse_pos(qRound(x*multiplier), qRound(y*multiplier));
int dot_size = 2 * qRound(GIZMO_DOT_SIZE * multiplier);
int target_size = 2 * qRound(GIZMO_TARGET_SIZE * multiplier);
for (int i=0;i<gizmos->gizmo_count();i++) {
EffectGizmo* g = gizmos->gizmo(i);
@@ -171,6 +177,14 @@ EffectGizmo* ViewerWidget::get_gizmo_from_mouse(int x, int y) {
return g;
}
break;
case GIZMO_TYPE_TARGET:
if (mouse_pos.x() > g->screen_pos[0].x() - target_size
&& mouse_pos.y() > g->screen_pos[0].y() - target_size
&& mouse_pos.x() < g->screen_pos[0].x() + target_size
&& mouse_pos.y() < g->screen_pos[0].y() + target_size) {
return g;
}
break;
}
}
@@ -761,23 +775,23 @@ void ViewerWidget::paintGL() {
compose_sequence(nests, render_audio);
if (waveform) {
double waveform_zoom = (double) waveform_ms->audio_preview.size() / (double) width();
double timeline_zoom = (double) width() / (double) waveform_clip->timeline_out;
QPainter p(this);
if (viewer->seq->using_workarea) {
int in_x = getScreenPointFromFrame(timeline_zoom, viewer->seq->workarea_in);
int out_x = getScreenPointFromFrame(timeline_zoom, viewer->seq->workarea_out);
int in_x = getScreenPointFromFrame(waveform_zoom, viewer->seq->workarea_in) - waveform_scroll;
int out_x = getScreenPointFromFrame(waveform_zoom, viewer->seq->workarea_out) - waveform_scroll;
p.fillRect(QRect(in_x, 0, out_x - in_x, height()), QColor(255, 255, 255, 64));
p.setPen(Qt::white);
p.drawLine(in_x, 0, in_x, height());
p.drawLine(out_x, 0, out_x, height());
}
QRect wr = rect();
wr.setX(wr.x() - waveform_scroll);
p.setPen(Qt::green);
draw_waveform(waveform_clip, waveform_ms, waveform_clip->timeline_out, &p, rect(), 0, width(), waveform_zoom);
draw_waveform(waveform_clip, waveform_ms, waveform_clip->timeline_out, &p, wr, waveform_scroll, width()+waveform_scroll, waveform_zoom);
p.setPen(Qt::red);
int playhead_x = getScreenPointFromFrame(timeline_zoom, viewer->seq->playhead);
int playhead_x = getScreenPointFromFrame(waveform_zoom, viewer->seq->playhead) - waveform_scroll;
p.drawLine(playhead_x, 0, playhead_x, height());
}
@@ -800,6 +814,7 @@ void ViewerWidget::paintGL() {
glGetFloatv(GL_CURRENT_COLOR, color);
float dot_size = GIZMO_DOT_SIZE / width() * viewer->seq->width;
float target_size = GIZMO_TARGET_SIZE / width() * viewer->seq->width;
glPushMatrix();
glLoadIdentity();
@@ -827,6 +842,27 @@ void ViewerWidget::paintGL() {
glVertex3f(g->screen_pos[0].x(), g->screen_pos[0].y(), gizmo_z);
glEnd();
break;
case GIZMO_TYPE_TARGET: // draw target
glBegin(GL_LINES);
glVertex3f(g->screen_pos[0].x()-target_size, g->screen_pos[0].y()-target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()+target_size, g->screen_pos[0].y()-target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()+target_size, g->screen_pos[0].y()-target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()+target_size, g->screen_pos[0].y()+target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()+target_size, g->screen_pos[0].y()+target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()-target_size, g->screen_pos[0].y()+target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()-target_size, g->screen_pos[0].y()+target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()-target_size, g->screen_pos[0].y()-target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x()-target_size, g->screen_pos[0].y(), gizmo_z);
glVertex3f(g->screen_pos[0].x()+target_size, g->screen_pos[0].y(), gizmo_z);
glVertex3f(g->screen_pos[0].x(), g->screen_pos[0].y()-target_size, gizmo_z);
glVertex3f(g->screen_pos[0].x(), g->screen_pos[0].y()+target_size, gizmo_z);
glEnd();
break;
}
}
glPopMatrix();
+3
View File
@@ -33,10 +33,13 @@ public:
bool waveform;
Clip* waveform_clip;
FootageStream* waveform_ms;
double waveform_zoom;
int waveform_scroll;
bool force_quit;
public slots:
void delete_function();
void set_waveform_scroll(int s);
protected:
void paintEvent(QPaintEvent *e);
// void resizeGL(int w, int h);