various fixes

This commit is contained in:
itsmattkc
2018-07-22 10:21:47 +01:00
parent c340901419
commit ce4d7fda60
14 changed files with 114 additions and 63 deletions
+6 -6
View File
@@ -24,15 +24,15 @@ void init_effects() {
Effect* create_effect(int effect_id, Clip* c) {
if (c->track < 0) {
switch (effect_id) {
case VIDEO_TRANSFORM_EFFECT: return new TransformEffect(c);
case VIDEO_SHAKE_EFFECT: return new ShakeEffect(c);
case VIDEO_TEXT_EFFECT: return new TextEffect(c);
case VIDEO_SOLID_EFFECT: return new SolidEffect(c);
case VIDEO_TRANSFORM_EFFECT: return new TransformEffect(c); break;
case VIDEO_SHAKE_EFFECT: return new ShakeEffect(c); break;
case VIDEO_TEXT_EFFECT: return new TextEffect(c); break;
case VIDEO_SOLID_EFFECT: return new SolidEffect(c); break;
}
} else {
switch (effect_id) {
case AUDIO_VOLUME_EFFECT: return new VolumeEffect(c);
case AUDIO_PAN_EFFECT: return new PanEffect(c);
case AUDIO_VOLUME_EFFECT: return new VolumeEffect(c); break;
case AUDIO_PAN_EFFECT: return new PanEffect(c); break;
}
}
qDebug() << "[ERROR] Invalid effect ID";
+5
View File
@@ -40,6 +40,7 @@ class TransformEffect : public Effect {
Q_OBJECT
public:
TransformEffect(Clip* c);
void init();
void process_gl(int* anchor_x, int* anchor_y);
Effect* copy(Clip* c);
void load(QXmlStreamReader* stream);
@@ -107,8 +108,12 @@ public:
private slots:
void update_texture();
private:
void destroy_texture();
QOpenGLTexture* texture;
QImage pixmap;
QFont font;
int width;
int height;
};
class SolidEffect : public Effect {
+21 -7
View File
@@ -38,7 +38,12 @@ protected:
}
};
TextEffect::TextEffect(Clip *c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_TEXT_EFFECT), texture(NULL) {
TextEffect::TextEffect(Clip *c) :
Effect(c, EFFECT_TYPE_VIDEO, VIDEO_TEXT_EFFECT),
texture(NULL),
width(0),
height(0)
{
ui_layout->addWidget(new QLabel("Text:"), 0, 0);
text_val = new QTextEdit();
text_val->setUndoRedoEnabled(true);
@@ -69,12 +74,19 @@ TextEffect::TextEffect(Clip *c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_TEXT_EFFECT
}
TextEffect::~TextEffect() {
destroy_texture();
}
void TextEffect::destroy_texture() {
texture->destroy();
delete texture;
}
void TextEffect::update_texture() {
QImage pixmap(parent_clip->sequence->width, parent_clip->sequence->height, QImage::Format_ARGB32_Premultiplied);
if (parent_clip->sequence->width != width || parent_clip->sequence->height != height) {
width = parent_clip->sequence->width;
height = parent_clip->sequence->height;
pixmap = QImage(width, height, QImage::Format_ARGB32_Premultiplied);
}
pixmap.fill(Qt::transparent);
QPainter p(&pixmap);
@@ -87,15 +99,17 @@ void TextEffect::update_texture() {
p.setFont(font);
p.setPen(set_color_button->get_color());
p.drawText(QRect(0, 0, pixmap.width(), pixmap.height()), Qt::AlignCenter | Qt::TextWordWrap, text_val->toPlainText());
p.drawText(QRect(0, 0, width, height), Qt::AlignCenter | Qt::TextWordWrap, text_val->toPlainText());
if (texture == NULL) {
texture = new QOpenGLTexture(pixmap);
} else {
texture->destroy();
destroy_texture();
texture->setData(pixmap);
}
texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear);
// queue a repaint of the canvas
field_changed();
}
@@ -104,8 +118,8 @@ void TextEffect::post_gl() {
if (texture != NULL) {
texture->bind();
int half_width = parent_clip->sequence->width/2;
int half_height = parent_clip->sequence->height/2;
int half_width = width/2;
int half_height = height/2;
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
+18 -12
View File
@@ -68,18 +68,7 @@ TransformEffect::TransformEffect(Clip* c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_T
ui_layout->addWidget(blend_mode_box, 6, 1);
// set defaults
position_x->set_default_value(c->sequence->width/2);
position_y->set_default_value(c->sequence->height/2);
scale_x->set_default_value(100);
scale_y->set_default_value(100);
scale_y->setEnabled(false);
uniform_scale_box->setChecked(true);
default_anchor_x = c->media_stream->video_width/2;
default_anchor_y = c->media_stream->video_height/2;
anchor_x_box->set_default_value(default_anchor_x);
anchor_y_box->set_default_value(default_anchor_y);
opacity->set_default_value(100);
blend_mode_box->setCurrentIndex(0);
init();
connect(position_x, SIGNAL(valueChanged()), this, SLOT(field_changed()));
connect(position_y, SIGNAL(valueChanged()), this, SLOT(field_changed()));
@@ -95,6 +84,23 @@ TransformEffect::TransformEffect(Clip* c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_T
connect(blend_mode_box, SIGNAL(currentIndexChanged(int)), this, SLOT(field_changed()));
}
void TransformEffect::init() {
if (parent_clip->media_stream != NULL) {
position_x->set_default_value(parent_clip->sequence->width/2);
position_y->set_default_value(parent_clip->sequence->height/2);
scale_x->set_default_value(100);
scale_y->set_default_value(100);
scale_y->setEnabled(false);
uniform_scale_box->setChecked(true);
default_anchor_x = parent_clip->media_stream->video_width/2;
default_anchor_y = parent_clip->media_stream->video_height/2;
anchor_x_box->set_default_value(default_anchor_x);
anchor_y_box->set_default_value(default_anchor_y);
opacity->set_default_value(100);
blend_mode_box->setCurrentIndex(0);
}
}
Effect* TransformEffect::copy(Clip* c) {
TransformEffect* t = new TransformEffect(c);
t->position_x->set_value(position_x->value());