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