rudimentary support for #119 in transform effect

This commit is contained in:
itsmattkc
2018-11-25 01:45:32 +11:00
parent 1a8c89371e
commit 7d11c9fbab
5 changed files with 78 additions and 13 deletions
+41 -2
View File
@@ -7,6 +7,7 @@
#include <QCheckBox>
#include <QOpenGLFunctions>
#include <QComboBox>
#include <QMouseEvent>
#include "ui/collapsiblewidget.h"
#include "project/clip.h"
@@ -143,6 +144,44 @@ void TransformEffect::process_coords(double timecode, GLTextureCoords& coords, i
glColor4f(1.0, 1.0, 1.0, color[3]*(opacity->get_double_value(timecode)*0.01));
}
void TransformEffect::process_gizmos() {
// TODO put gizmo code here
void TransformEffect::gizmo_draw(double timecode, GLTextureCoords& coords) {
// proof of concept drawing pattern
/*float color[4];
glGetFloatv(GL_CURRENT_COLOR, color);
glBegin(GL_TRIANGLES);
glColor4f(1.0, 0.0, 0.0, 0.5);
glVertex3f(coords.vertexTopLeftX, coords.vertexTopLeftY, 1);
glVertex3f(coords.vertexTopRightX, coords.vertexTopRightY, 1);
glVertex3f(coords.vertexBottomLeftX, coords.vertexBottomLeftY, 1);
glColor4f(0.0, 0.0, 1.0, 0.5);
glVertex3f(coords.vertexTopRightX, coords.vertexTopRightY, 1);
glVertex3f(coords.vertexBottomLeftX, coords.vertexBottomLeftY, 1);
glVertex3f(coords.vertexBottomRightX, coords.vertexBottomRightY, 1);
glEnd();
glColor4f(color[0], color[1], color[2], color[3]);*/
}
void TransformEffect::gizmo_down(QMouseEvent *event, double) {
dragging = true;
drag_start_x = event->pos().x();
drag_start_y = event->pos().y();
}
void TransformEffect::gizmo_move(QMouseEvent *event, double timecode) {
if (dragging) {
position_x->set_double_value(position_x->get_double_value(timecode) + (event->pos().x() - drag_start_x));
position_y->set_double_value(position_y->get_double_value(timecode) + (event->pos().y() - drag_start_y));
drag_start_x = event->pos().x();
drag_start_y = event->pos().y();
field_changed();
}
}
void TransformEffect::gizmo_up(QMouseEvent *event, double) {
dragging = false;
}
+9 -1
View File
@@ -9,7 +9,11 @@ public:
TransformEffect(Clip* c, const EffectMeta* em);
void refresh();
void process_coords(double timecode, GLTextureCoords& coords, int data);
void process_gizmos();
void gizmo_draw(double timecode, GLTextureCoords& coords);
void gizmo_down(QMouseEvent *event, double);
void gizmo_move(QMouseEvent *event, double);
void gizmo_up(QMouseEvent *event, double);
EffectField* position_x;
EffectField* position_y;
@@ -26,6 +30,10 @@ public slots:
private:
int default_anchor_x;
int default_anchor_y;
bool dragging;
int drag_start_x;
int drag_start_y;
};
#endif // TRANSFORMEFFECT_H
+4 -1
View File
@@ -833,7 +833,10 @@ void Effect::process_audio(double, double, quint8*, int, int) {
}*/
}
void Effect::process_gizmos() {}
void Effect::gizmo_draw(double, GLTextureCoords &) {}
void Effect::gizmo_down(QMouseEvent *, double) {}
void Effect::gizmo_move(QMouseEvent *, double) {}
void Effect::gizmo_up(QMouseEvent *, double) {}
void Effect::redraw(double) {
/*
+6 -1
View File
@@ -15,6 +15,7 @@ class QWidget;
class CollapsibleWidget;
class QGridLayout;
class QPushButton;
class QMouseEvent;
struct Clip;
class QXmlStreamReader;
@@ -152,7 +153,11 @@ public:
virtual void process_coords(double timecode, GLTextureCoords& coords, int data);
virtual GLuint process_superimpose(double timecode);
virtual void process_audio(double timecode_start, double timecode_end, quint8* samples, int nb_bytes, int channel_count);
virtual void process_gizmos();
virtual void gizmo_draw(double timecode, GLTextureCoords& coords);
virtual void gizmo_down(QMouseEvent* event, double);
virtual void gizmo_move(QMouseEvent* event, double);
virtual void gizmo_up(QMouseEvent* event, double);
public slots:
void field_changed();
private slots:
+18 -8
View File
@@ -130,9 +130,14 @@ 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);
}
void ViewerWidget::mousePressEvent(QMouseEvent* event) {
if (waveform) seek_from_click(event->x());
dragging = true;
if (gizmos != NULL) gizmos->gizmo_down(event, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
}
void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
@@ -147,10 +152,12 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
drag->exec();
}
}
if (gizmos != NULL) gizmos->gizmo_move(event, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
}
void ViewerWidget::mouseReleaseEvent(QMouseEvent *) {
void ViewerWidget::mouseReleaseEvent(QMouseEvent *event) {
dragging = false;
if (gizmos != NULL) gizmos->gizmo_up(event, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
}
void ViewerWidget::drawTitleSafeArea() {
@@ -168,7 +175,7 @@ void ViewerWidget::drawTitleSafeArea() {
}
glLoadIdentity();
glOrtho(-halfWidth, halfWidth, halfHeight, -halfHeight, -1, 1);
glOrtho(-halfWidth, halfWidth, halfHeight, -halfHeight, 0, 1);
glColor4f(0.66f, 0.66f, 0.66f, 1.0f);
glBegin(GL_LINES);
@@ -437,6 +444,8 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
fbo_switcher = !fbo_switcher;
bool draw_gizmos = false;
GLTextureCoords coords;
coords.grid_size = 1;
coords.vertexTopLeftX = coords.vertexBottomLeftX = -video_width/2;
@@ -456,13 +465,14 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
}
// EFFECT CODE START
double timecode = ((double)(playhead-c->get_timeline_in_with_transition()+c->get_clip_in_with_transition())/(double)c->sequence->frame_rate);
double timecode = get_timecode(c, playhead);
for (int j=0;j<c->effects.size();j++) {
Effect* e = c->effects.at(j);
process_effect(c, e, timecode, coords, composite_texture, fbo_switcher, TA_NO_TRANSITION);
if (gizmos == NULL && e->enable_gizmos && (e->container->selected || panel_timeline->is_clip_selected(c, true))) {
if (!rendering && gizmos == NULL && e->enable_gizmos && (e->container->selected || panel_timeline->is_clip_selected(c, true))) {
gizmos = e;
draw_gizmos = true;
}
}
@@ -551,6 +561,10 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
glBindTexture(GL_TEXTURE_2D, 0); // unbind texture
if (draw_gizmos) {
gizmos->gizmo_draw(timecode, coords);
}
if (!nests.isEmpty()) {
nests.last()->fbo[0]->release();
if (default_fbo != NULL) default_fbo->bind();
@@ -678,10 +692,6 @@ void ViewerWidget::paintGL() {
drawTitleSafeArea();
}
if (gizmos != NULL && !rendering) {
gizmos->process_gizmos();
}
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
} while (loop);