rudimentary support for #119 in transform effect
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QOpenGLFunctions>
|
#include <QOpenGLFunctions>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
|
||||||
#include "ui/collapsiblewidget.h"
|
#include "ui/collapsiblewidget.h"
|
||||||
#include "project/clip.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));
|
glColor4f(1.0, 1.0, 1.0, color[3]*(opacity->get_double_value(timecode)*0.01));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransformEffect::process_gizmos() {
|
void TransformEffect::gizmo_draw(double timecode, GLTextureCoords& coords) {
|
||||||
// TODO put gizmo code here
|
// 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,7 +9,11 @@ public:
|
|||||||
TransformEffect(Clip* c, const EffectMeta* em);
|
TransformEffect(Clip* c, const EffectMeta* em);
|
||||||
void refresh();
|
void refresh();
|
||||||
void process_coords(double timecode, GLTextureCoords& coords, int data);
|
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_x;
|
||||||
EffectField* position_y;
|
EffectField* position_y;
|
||||||
@@ -26,6 +30,10 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
int default_anchor_x;
|
int default_anchor_x;
|
||||||
int default_anchor_y;
|
int default_anchor_y;
|
||||||
|
|
||||||
|
bool dragging;
|
||||||
|
int drag_start_x;
|
||||||
|
int drag_start_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRANSFORMEFFECT_H
|
#endif // TRANSFORMEFFECT_H
|
||||||
|
|||||||
+4
-1
@@ -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) {
|
void Effect::redraw(double) {
|
||||||
/*
|
/*
|
||||||
|
|||||||
+6
-1
@@ -15,6 +15,7 @@ class QWidget;
|
|||||||
class CollapsibleWidget;
|
class CollapsibleWidget;
|
||||||
class QGridLayout;
|
class QGridLayout;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
|
class QMouseEvent;
|
||||||
|
|
||||||
struct Clip;
|
struct Clip;
|
||||||
class QXmlStreamReader;
|
class QXmlStreamReader;
|
||||||
@@ -152,7 +153,11 @@ public:
|
|||||||
virtual void process_coords(double timecode, GLTextureCoords& coords, int data);
|
virtual void process_coords(double timecode, GLTextureCoords& coords, int data);
|
||||||
virtual GLuint process_superimpose(double timecode);
|
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_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:
|
public slots:
|
||||||
void field_changed();
|
void field_changed();
|
||||||
private slots:
|
private slots:
|
||||||
|
|||||||
+18
-8
@@ -130,9 +130,14 @@ void ViewerWidget::seek_from_click(int x) {
|
|||||||
viewer->seek(getFrameFromScreenPoint((double) width() / (double) waveform_clip->timeline_out, 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) {
|
void ViewerWidget::mousePressEvent(QMouseEvent* event) {
|
||||||
if (waveform) seek_from_click(event->x());
|
if (waveform) seek_from_click(event->x());
|
||||||
dragging = true;
|
dragging = true;
|
||||||
|
if (gizmos != NULL) gizmos->gizmo_down(event, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
|
void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
|
||||||
@@ -147,10 +152,12 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
|
|||||||
drag->exec();
|
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;
|
dragging = false;
|
||||||
|
if (gizmos != NULL) gizmos->gizmo_up(event, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewerWidget::drawTitleSafeArea() {
|
void ViewerWidget::drawTitleSafeArea() {
|
||||||
@@ -168,7 +175,7 @@ void ViewerWidget::drawTitleSafeArea() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(-halfWidth, halfWidth, halfHeight, -halfHeight, -1, 1);
|
glOrtho(-halfWidth, halfWidth, halfHeight, -halfHeight, 0, 1);
|
||||||
|
|
||||||
glColor4f(0.66f, 0.66f, 0.66f, 1.0f);
|
glColor4f(0.66f, 0.66f, 0.66f, 1.0f);
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
@@ -437,6 +444,8 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
|
|||||||
|
|
||||||
fbo_switcher = !fbo_switcher;
|
fbo_switcher = !fbo_switcher;
|
||||||
|
|
||||||
|
bool draw_gizmos = false;
|
||||||
|
|
||||||
GLTextureCoords coords;
|
GLTextureCoords coords;
|
||||||
coords.grid_size = 1;
|
coords.grid_size = 1;
|
||||||
coords.vertexTopLeftX = coords.vertexBottomLeftX = -video_width/2;
|
coords.vertexTopLeftX = coords.vertexBottomLeftX = -video_width/2;
|
||||||
@@ -456,13 +465,14 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EFFECT CODE START
|
// 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++) {
|
for (int j=0;j<c->effects.size();j++) {
|
||||||
Effect* e = c->effects.at(j);
|
Effect* e = c->effects.at(j);
|
||||||
process_effect(c, e, timecode, coords, composite_texture, fbo_switcher, TA_NO_TRANSITION);
|
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;
|
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
|
glBindTexture(GL_TEXTURE_2D, 0); // unbind texture
|
||||||
|
|
||||||
|
if (draw_gizmos) {
|
||||||
|
gizmos->gizmo_draw(timecode, coords);
|
||||||
|
}
|
||||||
|
|
||||||
if (!nests.isEmpty()) {
|
if (!nests.isEmpty()) {
|
||||||
nests.last()->fbo[0]->release();
|
nests.last()->fbo[0]->release();
|
||||||
if (default_fbo != NULL) default_fbo->bind();
|
if (default_fbo != NULL) default_fbo->bind();
|
||||||
@@ -678,10 +692,6 @@ void ViewerWidget::paintGL() {
|
|||||||
drawTitleSafeArea();
|
drawTitleSafeArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gizmos != NULL && !rendering) {
|
|
||||||
gizmos->process_gizmos();
|
|
||||||
}
|
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
} while (loop);
|
} while (loop);
|
||||||
|
|||||||
Reference in New Issue
Block a user