several small bug fixes

This commit is contained in:
itsmattkc
2018-09-03 12:58:21 +10:00
parent e96dad8f74
commit 9d185e0a40
8 changed files with 68 additions and 51 deletions
+40 -26
View File
@@ -10,6 +10,7 @@
#include "project/undo.h"
#include "panels/viewer.h"
#include "ui/viewerwidget.h"
#include "project/sequence.h"
#include <QLabel>
#include <QMouseEvent>
@@ -27,36 +28,49 @@ KeyframeView::KeyframeView(QWidget *parent) : QWidget(parent), mousedown(false),
}
void KeyframeView::paintEvent(QPaintEvent*) {
QPainter p(this);
QPainter p(this);
rowY.clear();
rows.clear();
long effects_in = LONG_MAX;
long effects_out = 0;
for (int j=0;j<panel_effect_controls->selected_clips.size();j++) {
Clip* c = sequence->get_clip(panel_effect_controls->selected_clips.at(j));
effects_in = qMin(effects_in, c->timeline_in);
effects_out = qMax(effects_out, c->timeline_out);
for (int i=0;i<c->effects.size();i++) {
Effect* e = c->effects.at(i);
if (e->container->is_expanded()) {
for (int j=0;j<e->row_count();j++) {
EffectRow* row = e->row(j);
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();
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);
}
rows.append(row);
rowY.append(keyframe_y);
}
}
}
}
visible_in = effects_in;
visible_out = effects_out;
int width = getScreenPointFromFrame(panel_effect_controls->zoom, visible_out - visible_in);
setMinimumWidth(width);
header->setMinimumWidth(width);
rowY.clear();
rows.clear();
for (int i=0;i<effects.size();i++) {
Effect* e = effects.at(i);
if (e->container->is_expanded()) {
for (int j=0;j<e->row_count();j++) {
EffectRow* row = e->row(j);
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();
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);
}
rows.append(row);
rowY.append(keyframe_y);
}
}
}
header->set_visible_in(effects_in);
if (rowY.size() > 0) {
int playhead_x = getScreenPointFromFrame(panel_effect_controls->zoom, panel_timeline->playhead-visible_in);
-1
View File
@@ -13,7 +13,6 @@ class KeyframeView : public QWidget {
Q_OBJECT
public:
KeyframeView(QWidget* parent = 0);
QVector<Effect*> effects;
void delete_selected_keyframes();
+16 -2
View File
@@ -163,6 +163,7 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
int half_width = s->width/2;
int half_height = s->height/2;
if (rendering || nest != NULL) half_height = -half_height;
glPushMatrix();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0, 1.0, 1.0, 1.0);
glLoadIdentity();
@@ -189,7 +190,7 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
Sequence* cs = static_cast<Sequence*>(c->media);
video_width = cs->width;
video_height = cs->height;
textureID = compose_sequence(c, render_audio);
textureID = -1;
}
if (textureID == 0) {
@@ -203,6 +204,17 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
c->fbo[1] = new QOpenGLFramebufferObject(video_width, video_height);
}
// clear fbos
c->fbo[0]->bind();
glClear(GL_COLOR_BUFFER_BIT);
c->fbo[0]->release();
c->fbo[1]->bind();
glClear(GL_COLOR_BUFFER_BIT);
c->fbo[1]->release();
// for nested sequences
if (textureID == -1) textureID = compose_sequence(c, render_audio);
glViewport(0, 0, video_width, video_height);
GLuint composite_texture = draw_clip(c->fbo[0], textureID);
@@ -261,7 +273,6 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
// EFFECT CODE END
if (nest != NULL) {
// if (nest->fbo == NULL) nest->fbo = new QOpenGLFramebufferObject(s->width, s->height);
nest->fbo[0]->bind();
glViewport(0, 0, s->width, s->height);
} else if (rendering) {
@@ -305,6 +316,8 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
}
}
glPopMatrix();
return (nest != NULL && nest->fbo != NULL) ? nest->fbo[0]->texture() : 0;
}
@@ -325,6 +338,7 @@ void ViewerWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT);
// compose video preview
glClearColor(0, 0, 0, 0);
compose_sequence(NULL, (panel_timeline->playing || rendering));
if (texture_failed) {