diff --git a/src/modules/qt/CMakeLists.txt b/src/modules/qt/CMakeLists.txt index f999c396f..1c2e5a079 100644 --- a/src/modules/qt/CMakeLists.txt +++ b/src/modules/qt/CMakeLists.txt @@ -32,6 +32,7 @@ function(mlt_add_qt_module ARG_TARGET) gps_drawing.cpp gps_parser.cpp gps_parser.h graph.cpp graph.h + kdenlivegraphics.cpp kdenlivetitle_wrapper.cpp producer_kdenlivetitle.c producer_qimage.c diff --git a/src/modules/qt/kdenlivegraphics.cpp b/src/modules/qt/kdenlivegraphics.cpp new file mode 100644 index 000000000..e9f672031 --- /dev/null +++ b/src/modules/qt/kdenlivegraphics.cpp @@ -0,0 +1,23 @@ +#include "kdenlivegraphics.h" + +KdenliveGraphicsRect::KdenliveGraphicsRect(QRectF rect, + const QBrush &brush, + const QPen &pen, + int cornerRadius) +{ + this->setRect(rect); + this->setBrush(brush); + this->setPen(pen); + this->cornerRadius = cornerRadius; +} + +void KdenliveGraphicsRect::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, + QWidget *widget) +{ + int radius = qMin(cornerRadius, (int) qMin(rect().width(), rect().height()) / 2); + painter->setBrush(brush()); + painter->setPen(pen()); + painter->setRenderHint(QPainter::Antialiasing); + painter->drawRoundedRect(rect(), radius, radius); +} diff --git a/src/modules/qt/kdenlivegraphics.h b/src/modules/qt/kdenlivegraphics.h new file mode 100644 index 000000000..efca3988c --- /dev/null +++ b/src/modules/qt/kdenlivegraphics.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include +#include + +class KdenliveGraphicsRect : public QGraphicsRectItem +{ +public: + explicit KdenliveGraphicsRect(QRectF rect, + const QBrush &brush, + const QPen &pen, + int cornerRadius); + +protected: + void paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, + QWidget *widget = nullptr) override; + +private: + int cornerRadius{0}; +}; diff --git a/src/modules/qt/kdenlivetitle_wrapper.cpp b/src/modules/qt/kdenlivetitle_wrapper.cpp index 5a524e8fc..ede9ba593 100644 --- a/src/modules/qt/kdenlivetitle_wrapper.cpp +++ b/src/modules/qt/kdenlivetitle_wrapper.cpp @@ -20,6 +20,7 @@ */ #include "kdenlivetitle_wrapper.h" +#include "kdenlivegraphics.h" #include "typewriter.h" #include "common.h" @@ -602,6 +603,8 @@ void loadFromXml(producer_ktitle self, QRectF rect = stringToRect(rectProperties.namedItem("rect").nodeValue()); QString pen_str = rectProperties.namedItem("pencolor").nodeValue(); double penwidth = rectProperties.namedItem("penwidth").nodeValue().toDouble(); + double cornerRadius + = rectProperties.namedItem("cornerRadius").nodeValue().toDouble(); QBrush brush; if (!rectProperties.namedItem("gradient").isNull()) { // Calculate gradient @@ -648,7 +651,9 @@ void loadFromXml(producer_ktitle self, gitem = ellipse; } else { // QGraphicsRectItem - QGraphicsRectItem *rec = scene->addRect(rect, pen, brush); + KdenliveGraphicsRect *rec + = new KdenliveGraphicsRect(rect, brush, pen, cornerRadius); + scene->addItem(rec); gitem = rec; } } else if (nodeAttributes.namedItem("type").nodeValue() == "QGraphicsPixmapItem") { diff --git a/src/modules/qt/producer_kdenlivetitle.yml b/src/modules/qt/producer_kdenlivetitle.yml index 4b5b803d5..8eec547bd 100644 --- a/src/modules/qt/producer_kdenlivetitle.yml +++ b/src/modules/qt/producer_kdenlivetitle.yml @@ -2,7 +2,7 @@ schema_version: 0.1 type: producer identifier: kdenlivetitle title: Kdenlive Titler -version: 5 +version: 6 copyright: Marco Gittler, Jean-Baptiste Mardelle creator: Marco Gittler, Jean-Baptiste Mardelle license: LGPLv2.1