From ccb72ddee278fe7babc0c39c1c3f95d74f98f34f Mon Sep 17 00:00:00 2001 From: Marco Gittler Date: Sun, 19 Jul 2009 20:35:43 +0000 Subject: [PATCH] initial work for titleproducer svn path=/trunk/kdenlive/; revision=3738 --- src/mimetypes/westley.xml | 1 + src/titledocument.cpp | 51 ++++++++++++++++++++++----------------- src/titlewidget.cpp | 49 +++++++++++++++++++++++-------------- 3 files changed, 61 insertions(+), 40 deletions(-) diff --git a/src/mimetypes/westley.xml b/src/mimetypes/westley.xml index e419150d..a399248d 100644 --- a/src/mimetypes/westley.xml +++ b/src/mimetypes/westley.xml @@ -5,5 +5,6 @@ + diff --git a/src/titledocument.cpp b/src/titledocument.cpp index 16f38b5e..df7c5c88 100644 --- a/src/titledocument.cpp +++ b/src/titledocument.cpp @@ -124,13 +124,15 @@ QDomDocument TitleDocument::xml(QGraphicsPolygonItem* startv, QGraphicsPolygonIt if (startv && endv) { QDomElement endp = doc.createElement("endviewport"); QDomElement startp = doc.createElement("startviewport"); - endp.setAttribute("x", endv->pos().x()); - endp.setAttribute("y", endv->pos().y()); - endp.setAttribute("size", endv->sceneBoundingRect().width() / 2); + endp.setAttribute("x", endv->data(0).toString() ); + endp.setAttribute("y", endv->data(1).toString() ); + endp.setAttribute("size", endv->data(2).toString()); + endp.setAttribute("rect",rectFToString(endv->boundingRect())); - startp.setAttribute("x", startv->pos().x()); - startp.setAttribute("y", startv->pos().y()); - startp.setAttribute("size", startv->sceneBoundingRect().width() / 2); + startp.setAttribute("x", startv->data(0).toString() ); + startp.setAttribute("y", startv->data(1).toString()); + startp.setAttribute("size", startv->data(2).toString()); + startp.setAttribute("rect",rectFToString(startv->boundingRect())); startp.setAttribute("z-index", startv->zValue()); endp.setAttribute("z-index", endv->zValue()); @@ -205,7 +207,7 @@ int TitleDocument::loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, Q return -1; } -int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* /*startv*/, QGraphicsPolygonItem* /*endv*/) +int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) { QDomNodeList titles = doc.elementsByTagName("kdenlivetitle"); int maxZValue = 0; @@ -298,21 +300,26 @@ int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* /*startv* break; } } - } /*else if (items.item(i).nodeName() == "startviewport" && startv) { - QPointF p(items.item(i).attributes().namedItem("x").nodeValue().toDouble(), items.item(i).attributes().namedItem("y").nodeValue().toDouble()); - double width = items.item(i).attributes().namedItem("size").nodeValue().toDouble(); - QRectF rect(-width, -width / aspect_ratio, width*2.0, width / aspect_ratio*2.0); - kDebug() << width << rect; - startv->setPolygon(rect); - startv->setPos(p); + } else if (items.item(i).nodeName() == "startviewport" && startv) { + QString rect = items.item(i).attributes().namedItem("rect").nodeValue(); + startv->setPolygon(stringToRect(rect)); + int x = items.item(i).attributes().namedItem("x").nodeValue().toInt(); + int y = items.item(i).attributes().namedItem("y").nodeValue().toInt(); + int size = items.item(i).attributes().namedItem("size").nodeValue().toInt(); + startv->setData(0,x); + startv->setData(1,y); + startv->setData(2,size); + //startv->setPos(p); } else if (items.item(i).nodeName() == "endviewport" && endv) { - QPointF p(items.item(i).attributes().namedItem("x").nodeValue().toDouble(), items.item(i).attributes().namedItem("y").nodeValue().toDouble()); - double width = items.item(i).attributes().namedItem("size").nodeValue().toDouble(); - QRectF rect(-width, -width / aspect_ratio, width*2.0, width / aspect_ratio*2.0); - kDebug() << width << rect; - endv->setPolygon(rect); - endv->setPos(p); - }*/ + QString rect = items.item(i).attributes().namedItem("rect").nodeValue(); + endv->setPolygon(stringToRect(rect)); + int x = items.item(i).attributes().namedItem("x").nodeValue().toInt(); + int y = items.item(i).attributes().namedItem("y").nodeValue().toInt(); + int size = items.item(i).attributes().namedItem("size").nodeValue().toInt(); + endv->setData(0,x); + endv->setData(1,y); + endv->setData(2,size); + } } } return maxZValue; @@ -328,7 +335,7 @@ QString TitleDocument::colorToString(const QColor& c) QString TitleDocument::rectFToString(const QRectF& c) { QString ret = "%1,%2,%3,%4"; - ret = ret.arg(c.top()).arg(c.left()).arg(c.width()).arg(c.height()); + ret = ret.arg(c.left()).arg(c.top()).arg(c.width()).arg(c.height()); return ret; } diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index 20f20444..edbaef46 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -41,6 +41,7 @@ int settingUp = false; const int IMAGEITEM = 7; const int RECTITEM = 3; const int TEXTITEM = 8; +static bool insertingValues=false; TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWidget *parent) : QDialog(parent), @@ -249,7 +250,7 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi graphicsView->setInteractive(true); //graphicsView->resize(400, 300); kDebug() << "// TITLE WIDGWT: " << graphicsView->viewport()->width() << "x" << graphicsView->viewport()->height(); - toolBox->setItemEnabled(2, false); + //toolBox->setItemEnabled(2, false); if (!url.isEmpty()) { m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport) + 1; slotSelectTool(); @@ -484,8 +485,8 @@ void TitleWidget::initViewports() m_startViewport->setPen(startpen); m_endViewport->setPen(endpen); - startViewportSize->setValue(40); - endViewportSize->setValue(40); + startViewportSize->setValue(100); + endViewportSize->setValue(100); m_startViewport->setZValue(-1000); m_endViewport->setZValue(-1000); @@ -1215,21 +1216,25 @@ void TitleWidget::itemVCenter() void TitleWidget::setupViewports() { double aspect_ratio = 4.0 / 3.0;//read from project - - QRectF sp(0, 0, 0, 0); - QRectF ep(0, 0, 0, 0); - - double sv_size = startViewportSize->value(); - double ev_size = endViewportSize->value(); - sp.adjust(-sv_size, -sv_size / aspect_ratio, sv_size, sv_size / aspect_ratio); - ep.adjust(-ev_size, -ev_size / aspect_ratio, ev_size, ev_size / aspect_ratio); - - m_startViewport->setPos(startViewportX->value(), startViewportY->value()); - m_endViewport->setPos(endViewportX->value(), endViewportY->value()); - - m_startViewport->setPolygon(QPolygonF(sp)); - m_endViewport->setPolygon(QPolygonF(ep)); - + //better zoom centered, but render uses only the created rect, so no problem to change the zoom function + QRectF sp(0, 0, startViewportSize->value() * m_frameWidth/100.0 ,startViewportSize->value()* m_frameHeight/100.0); + QRectF ep(0, 0, endViewportSize->value() * m_frameWidth/100.0,endViewportSize->value() * m_frameHeight/100.0); + // use a polygon thiat uses 16:9 and 4:3 rects forpreview the size in all aspect ratios ? + QPolygonF spoly(sp); + QPolygonF epoly(ep); + spoly.translate( startViewportX->value(), startViewportY->value() ); + epoly.translate( endViewportX->value(), endViewportY->value() ); + m_startViewport->setPolygon(spoly); + m_endViewport->setPolygon(epoly); + if (! insertingValues){ + m_startViewport->setData(0,startViewportX->value()); + m_startViewport->setData(1,startViewportY->value()); + m_startViewport->setData(2,startViewportSize->value()); + + m_endViewport->setData(0,endViewportX->value()); + m_endViewport->setData(1,endViewportY->value()); + m_endViewport->setData(2,endViewportSize->value()); + } } void TitleWidget::loadTitle() @@ -1241,6 +1246,14 @@ void TitleWidget::loadTitle() if (items.at(i)->zValue() > -1000) delete items.at(i); } m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport) + 1; + insertingValues=true; + startViewportX->setValue(m_startViewport->data(0).toInt()); + startViewportY->setValue(m_startViewport->data(1).toInt()); + startViewportSize->setValue(m_startViewport->data(2).toInt()); + endViewportX->setValue(m_endViewport->data(0).toInt()); + endViewportY->setValue(m_endViewport->data(1).toInt()); + endViewportSize->setValue(m_endViewport->data(2).toInt()); + insertingValues=false; slotSelectTool(); } } -- 2.39.5