diff --git a/app/node/generator/text/text.cpp b/app/node/generator/text/text.cpp
index 78a09332a..656aaa8ca 100644
--- a/app/node/generator/text/text.cpp
+++ b/app/node/generator/text/text.cpp
@@ -24,6 +24,12 @@
OLIVE_NAMESPACE_ENTER
+enum TextVerticalAlign {
+ kVerticalAlignTop,
+ kVerticalAlignCenter,
+ kVerticalAlignBottom,
+};
+
TextGenerator::TextGenerator()
{
QString default_str = QStringLiteral("
%1
").arg(tr("Sample Text"));
@@ -37,6 +43,11 @@ TextGenerator::TextGenerator()
NodeParam::kColor,
QVariant::fromValue(Color(1.0f, 1.0f, 1.0)));
AddInput(color_input_);
+
+ valign_input_ = new NodeInput(QStringLiteral("valign_in"),
+ NodeParam::kCombo,
+ 1);
+ AddInput(valign_input_);
}
Node *TextGenerator::copy() const
@@ -68,6 +79,7 @@ void TextGenerator::Retranslate()
{
text_input_->set_name(tr("Text"));
color_input_->set_name(tr("Color"));
+ valign_input_->set_combobox_strings({tr("Top"), tr("Center"), tr("Bottom")});
}
NodeValueTable TextGenerator::Value(NodeValueDatabase &value) const
@@ -75,6 +87,7 @@ NodeValueTable TextGenerator::Value(NodeValueDatabase &value) const
GenerateJob job;
job.InsertValue(text_input_, value);
job.InsertValue(color_input_, value);
+ job.InsertValue(valign_input_, value);
job.SetAlphaChannelRequired(true);
NodeValueTable table = value.Merge();
@@ -102,6 +115,20 @@ void TextGenerator::GenerateFrame(FramePtr frame, const GenerateJob& job) const
// Draw rich text onto image
QPainter p(&img);
p.scale(1.0 / frame->video_params().divider(), 1.0 / frame->video_params().divider());
+
+ TextVerticalAlign valign = static_cast(job.GetValue(valign_input_).data().toInt());
+ if (valign != kVerticalAlignTop) {
+ int doc_height = text_doc.size().height();
+
+ if (valign == kVerticalAlignCenter) {
+ // Center align
+ p.translate(0, frame->video_params().height() / 2 - doc_height / 2);
+ } else {
+ // Must be bottom align
+ p.translate(0, frame->video_params().height() - doc_height);
+ }
+ }
+
text_doc.drawContents(&p);
// Transplant alpha channel to frame
diff --git a/app/node/generator/text/text.h b/app/node/generator/text/text.h
index 3f28626c2..b94399041 100644
--- a/app/node/generator/text/text.h
+++ b/app/node/generator/text/text.h
@@ -48,6 +48,8 @@ private:
NodeInput* color_input_;
+ NodeInput* valign_input_;
+
};
OLIVE_NAMESPACE_EXIT