]> git.sesse.net Git - kdenlive/commitdiff
initial work for titleproducer
authorMarco Gittler <marco@gitma.de>
Sun, 19 Jul 2009 20:35:43 +0000 (20:35 +0000)
committerMarco Gittler <marco@gitma.de>
Sun, 19 Jul 2009 20:35:43 +0000 (20:35 +0000)
svn path=/trunk/kdenlive/; revision=3738

src/mimetypes/westley.xml
src/titledocument.cpp
src/titlewidget.cpp

index e419150d940c666957d6a375efc44736c77bac58..a399248d7b53a8faed9ebcbe61e78870c99b5268 100644 (file)
@@ -5,5 +5,6 @@
     <sub-class-of type="application/xml"/>
     <glob pattern="*.westley"/>
     <glob pattern="*.mlt"/>
+    <glob pattern="*.kdenlivetitle"/>
   </mime-type>
 </mime-info>
index 16f38b5e6652083612823959c41a0ab6bd504403..df7c5c88f40324b8c421a30deaf66b08490db226 100644 (file)
@@ -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;
 }
 
index 20f20444746c38292e063f8269b6c65644577e83..edbaef46f6581c7a691b26bfbaea797dc3611934 100644 (file)
@@ -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();
     }
 }