code cleanup

This commit is contained in:
itsmattkc
2018-07-20 19:06:57 +01:00
parent 4a6e261fe2
commit 8845ba0577
20 changed files with 296 additions and 125 deletions
+52 -42
View File
@@ -7,42 +7,62 @@
#include <QPainter>
#include <QPushButton>
#include <QColorDialog>
#include <QFontDatabase>
#include <QComboBox>
#include <QDebug>
#include "ui/labelslider.h"
#include "ui/collapsiblewidget.h"
#include "project/clip.h"
#include "project/sequence.h"
#include "ui/comboboxex.h"
#include "ui/colorbutton.h"
TextEffect::TextEffect(Clip *c) : Effect(c), texture(NULL) {
setup_effect(EFFECT_TYPE_VIDEO, VIDEO_TEXT_EFFECT);
QGridLayout* ui_layout = new QGridLayout();
class FontCombobox : public ComboBoxEx {
public:
FontCombobox(QWidget* parent = 0) : ComboBoxEx(parent) {}
protected:
void showPopup() {
QString current = currentText();
clear();
QStringList fonts = QFontDatabase().families();
bool found = false;
for (int i=0;i<fonts.size();i++) {
addItem(fonts.at(i));
if (!found && fonts.at(i) == current) {
setCurrentIndex(i);
found = true;
}
}
QComboBox::showPopup();
}
};
TextEffect::TextEffect(Clip *c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_TEXT_EFFECT), texture(NULL) {
ui_layout->addWidget(new QLabel("Text:"), 0, 0);
text_val = new QTextEdit();
text_val->setUndoRedoEnabled(true);
ui_layout->addWidget(text_val, 0, 1);
ui_layout->addWidget(new QLabel("Size:"), 1, 0);
ui_layout->addWidget(new QLabel("Font:"), 1, 0);
set_font_combobox = new FontCombobox();
ui_layout->addWidget(set_font_combobox, 1, 1);
ui_layout->addWidget(new QLabel("Size:"), 2, 0);
size_val = new LabelSlider();
size_val->set_minimum_value(0);
ui_layout->addWidget(size_val, 1, 1);
ui_layout->addWidget(size_val, 2, 1);
ui_layout->addWidget(new QLabel("Color:"), 2, 0);
set_color_button = new QPushButton();
ui_layout->addWidget(set_color_button, 2, 1);
ui_layout->addWidget(new QLabel("Color:"), 3, 0);
set_color_button = new ColorButton();
ui_layout->addWidget(set_color_button, 3, 1);
ui->setLayout(ui_layout);
container->setContents(ui);
color = Qt::white;
set_button_color();
set_font_combobox->addItem(font.family());
connect(text_val, SIGNAL(textChanged()), this, SLOT(update_texture()));
connect(size_val, SIGNAL(valueChanged()), this, SLOT(update_texture()));
connect(set_color_button, SIGNAL(clicked(bool)), this, SLOT(set_color()));
connect(set_color_button, SIGNAL(color_changed()), this, SLOT(update_texture()));
connect(set_font_combobox, SIGNAL(currentTextChanged(QString)), this, SLOT(update_texture()));
size_val->set_value(24);
text_val->setText("Sample Text");
@@ -53,38 +73,27 @@ TextEffect::~TextEffect() {
delete texture;
}
void TextEffect::set_button_color() {
QPalette pal = set_color_button->palette();
pal.setColor(QPalette::Button, color);
set_color_button->setPalette(pal);
}
void TextEffect::set_color() {
color = QColorDialog::getColor(color, NULL);
set_button_color();
update_texture();
}
void TextEffect::update_texture() {
pixmap = QPixmap(parent_clip->sequence->width, parent_clip->sequence->height);
QImage pixmap(parent_clip->sequence->width, parent_clip->sequence->height, QImage::Format_ARGB32_Premultiplied);
pixmap.fill(Qt::transparent);
QPainter p(&pixmap);
p.setRenderHint(QPainter::TextAntialiasing, true);
// set font
QFont font = p.font();
font.setFamily(set_font_combobox->currentText());
font.setPointSize(size_val->value());
font.setStyleHint(QFont::Helvetica, QFont::PreferAntialias);
p.setFont(font);
p.setPen(color);
p.setPen(set_color_button->get_color());
p.drawText(QRect(0, 0, pixmap.width(), pixmap.height()), Qt::AlignCenter | Qt::TextWordWrap, text_val->toPlainText());
if (texture == NULL) {
texture = new QOpenGLTexture(pixmap.toImage());
texture = new QOpenGLTexture(pixmap);
} else {
texture->destroy();
texture->setData(pixmap.toImage());
texture->setData(pixmap);
}
// queue a repaint of the canvas
@@ -95,8 +104,8 @@ void TextEffect::post_gl() {
if (texture != NULL) {
texture->bind();
int half_width = pixmap.width()/2;
int half_height = pixmap.height()/2;
int half_width = parent_clip->sequence->width/2;
int half_height = parent_clip->sequence->height/2;
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
@@ -117,7 +126,7 @@ Effect* TextEffect::copy(Clip* c) {
TextEffect* e = new TextEffect(c);
e->text_val->setPlainText(text_val->toPlainText());
e->size_val->set_value(size_val->value());
e->color = color;
e->set_color_button->set_color(set_color_button->get_color());
return e;
}
@@ -128,16 +137,17 @@ void TextEffect::load(QXmlStreamReader* stream) {
if (a.name() == "size") {
size_val->set_value(a.value().toDouble());
} else if (a.name() == "r") {
color.setRed(a.value().toInt());
set_color_button->get_color().setRed(a.value().toInt());
} else if (a.name() == "g") {
color.setGreen(a.value().toInt());
set_color_button->get_color().setGreen(a.value().toInt());
} else if (a.name() == "b") {
color.setBlue(a.value().toInt());
set_color_button->get_color().setBlue(a.value().toInt());
}
}
while (!(stream->name() == "effect" && stream->isEndElement())) {
stream->readNext();
if (stream->name() == "text" && stream->isStartElement()) {
stream->readNext();
text_val->setPlainText(stream->text().toString());
}
}
@@ -145,8 +155,8 @@ void TextEffect::load(QXmlStreamReader* stream) {
void TextEffect::save(QXmlStreamWriter* stream) {
stream->writeAttribute("size", QString::number(size_val->value()));
stream->writeAttribute("r", QString::number(color.red()));
stream->writeAttribute("g", QString::number(color.green()));
stream->writeAttribute("b", QString::number(color.blue()));
stream->writeAttribute("r", QString::number(set_color_button->get_color().red()));
stream->writeAttribute("g", QString::number(set_color_button->get_color().green()));
stream->writeAttribute("b", QString::number(set_color_button->get_color().blue()));
stream->writeTextElement("text", text_val->toPlainText());
}