]> git.sesse.net Git - kdenlive/commitdiff
Prepare for shadows and blur in titles (Qt 4.6)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 3 Nov 2009 20:33:37 +0000 (20:33 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 3 Nov 2009 20:33:37 +0000 (20:33 +0000)
svn path=/trunk/kdenlive/; revision=4090

src/titledocument.cpp
src/titlewidget.cpp
src/titlewidget.h
src/widgets/titlewidget_ui.ui

index 9c2ebac68fea79da7afbab4f4a429911d6a99a68..5d571cc0eecac8536733cfa8ad94cfd24493ca96 100644 (file)
 #include <QFile>
 #include <QTextCursor>
 
+#if QT_VERSION >= 0x040600
+#include <QGraphicsEffect>
+#include <QGraphicsBlurEffect>
+#include <QGraphicsDropShadowEffect>
+#endif
 
 TitleDocument::TitleDocument()
 {
@@ -107,6 +112,8 @@ QDomDocument TitleDocument::xml(QGraphicsRectItem* startv, QGraphicsRectItem* en
         default:
             continue;
         }
+
+        // position
         QDomElement pos = doc.createElement("position");
         pos.setAttribute("x", item->pos().x());
         pos.setAttribute("y", item->pos().y());
@@ -120,6 +127,27 @@ QDomDocument TitleDocument::xml(QGraphicsRectItem* startv, QGraphicsRectItem* en
         e.setAttribute("z-index", item->zValue());
         pos.appendChild(tr);
 
+#if QT_VERSION >= 0x040600
+        // effects
+        QGraphicsEffect *eff = item->graphicsEffect();
+        if (eff) {
+            QGraphicsBlurEffect *blur = static_cast <QGraphicsBlurEffect *>(eff);
+            QDomElement effect = doc.createElement("effect");
+            if (blur) {
+                effect.setAttribute("type", "blur");
+                effect.setAttribute("blurradius", blur->blurRadius());
+            } else {
+                QGraphicsDropShadowEffect *shadow = static_cast <QGraphicsDropShadowEffect *>(eff);
+                if (shadow) {
+                    effect.setAttribute("type", "shadow");
+                    effect.setAttribute("blurradius", shadow->blurRadius());
+                    effect.setAttribute("xoffset", shadow->xOffset());
+                    effect.setAttribute("yoffset", shadow->yOffset());
+                }
+            }
+            e.appendChild(effect);
+        }
+#endif
 
         e.appendChild(pos);
         e.appendChild(content);
@@ -292,7 +320,26 @@ int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGra
                 if (zValue > maxZValue) maxZValue = zValue;
                 gitem->setZValue(zValue);
                 gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+
+#if QT_VERSION >= 0x040600
+                // effects
+                QDomNode eff = items.item(i).namedItem("effect");
+                if (!eff.isNull()) {
+                    QDomElement e = eff.toElement();
+                    if (e.attribute("type") == "blur") {
+                        QGraphicsBlurEffect *blur = new QGraphicsBlurEffect();
+                        blur->setBlurRadius(e.attribute("blurradius").toInt());
+                        gitem->setGraphicsEffect(blur);
+                    } else if (e.attribute("type") == "shadow") {
+                        QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();
+                        shadow->setBlurRadius(e.attribute("blurradius").toInt());
+                        shadow->setOffset(e.attribute("xoffset").toInt(), e.attribute("yoffset").toInt());
+                        gitem->setGraphicsEffect(shadow);
+                    }
+                }
             }
+#endif
+
             if (items.item(i).nodeName() == "background") {
                 kDebug() << items.item(i).attributes().namedItem("color").nodeValue();
                 QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
index 677991e9030cfe0c6e20311434e32e6185819184..45289100cebf49fb6d0c1fad3d3027cda63d39eb 100644 (file)
 #include <QTextBlockFormat>
 #include <QTextCursor>
 
+#if QT_VERSION >= 0x040600
+#include <QGraphicsEffect>
+#include <QGraphicsBlurEffect>
+#include <QGraphicsDropShadowEffect>
+#endif
+
 int settingUp = false;
 
 const int IMAGEITEM = 7;
@@ -103,6 +109,13 @@ TitleWidget::TitleWidget(KUrl url, Timecode tc, QString projectTitlePath, Render
     connect(itembottom, SIGNAL(clicked()), this, SLOT(itemBottom()));
     connect(itemleft, SIGNAL(clicked()), this, SLOT(itemLeft()));
     connect(itemright, SIGNAL(clicked()), this, SLOT(itemRight()));
+    connect(effect_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotAddEffect(int)));
+    connect(blur_radius, SIGNAL(valueChanged(int)), this, SLOT(slotEditBlur(int)));
+    connect(shadow_radius, SIGNAL(valueChanged(int)), this, SLOT(slotEditShadow()));
+    connect(shadow_x, SIGNAL(valueChanged(int)), this, SLOT(slotEditShadow()));
+    connect(shadow_y, SIGNAL(valueChanged(int)), this, SLOT(slotEditShadow()));
+    blur_frame->setHidden(true);
+    shadow_frame->setHidden(true);
 
     connect(origin_x_left, SIGNAL(clicked()), this, SLOT(slotOriginXClicked()));
     connect(origin_y_top, SIGNAL(clicked()), this, SLOT(slotOriginYClicked()));
@@ -1782,5 +1795,62 @@ void TitleWidget::slotResize200()
     } else m_startViewport->setRect(0, 0, m_frameWidth * 2, m_frameHeight * 2);
 }
 
+void TitleWidget::slotAddEffect(int ix)
+{
+#if QT_VERSION < 0x040600
+    return;
+#else
+    QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+    QGraphicsEffect *eff = NULL;
+    if (ix == 1) {
+        // Blur effect
+        eff = new QGraphicsBlurEffect();
+        shadow_frame->setHidden(true);
+        blur_frame->setHidden(false);
+    } else if (ix == 2) {
+        eff = new QGraphicsDropShadowEffect();
+        blur_frame->setHidden(true);
+        shadow_frame->setHidden(false);
+    } else {
+        blur_frame->setHidden(true);
+        shadow_frame->setHidden(true);
+    }
+    if (l.size() == 1) {
+        l[0]->setGraphicsEffect(eff);
+    } else delete eff;
+#endif
+}
+
+void TitleWidget::slotEditBlur(int ix)
+{
+#if QT_VERSION < 0x040600
+    return;
+#else
+    QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+    if (l.size() == 1) {
+        QGraphicsEffect *eff = l[0]->graphicsEffect();
+        QGraphicsBlurEffect *blur = static_cast <QGraphicsBlurEffect *>(eff);
+        if (blur) blur->setBlurRadius(ix);
+    }
+#endif
+}
+
+void TitleWidget::slotEditShadow()
+{
+#if QT_VERSION < 0x040600
+    return;
+#else
+    QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+    if (l.size() == 1) {
+        QGraphicsEffect *eff = l[0]->graphicsEffect();
+        QGraphicsDropShadowEffect *shadow = static_cast <QGraphicsDropShadowEffect *>(eff);
+        if (shadow) {
+            shadow->setBlurRadius(shadow_radius->value());
+            shadow->setOffset(shadow_x->value(), shadow_y->value());
+        }
+    }
+#endif
+}
+
 
 
index 4581e7d7680083640510150e7c28245b8f7154e7..a8ce147f5159374a8bdaf1ec5dbb5b0025bf77f4 100644 (file)
@@ -253,6 +253,9 @@ private slots:
 
     /** \brief Called when accepted, stores the user selections for next time use */
     void slotAccepted();
+    void slotAddEffect(int ix);
+    void slotEditBlur(int ix);
+    void slotEditShadow();
 };
 
 
index 63c456d3f53a359a3d889bcbad177f516408b38e..a5693e171224c3031c6a64dc98b212e0972e0789 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>736</width>
-    <height>566</height>
+    <width>847</width>
+    <height>824</height>
    </rect>
   </property>
   <property name="sizePolicy">
          </property>
         </widget>
        </item>
-       <item row="0" column="1">
+       <item row="0" column="2">
         <widget class="KRestrictedLine" name="title_duration">
          <property name="inputMask">
           <string>99:99:99:99; </string>
          </property>
         </widget>
        </item>
-       <item row="1" column="0" colspan="2">
+       <item row="1" column="0" colspan="3">
         <widget class="Line" name="line_3">
          <property name="orientation">
           <enum>Qt::Horizontal</enum>
          </property>
         </widget>
        </item>
-       <item row="2" column="1">
+       <item row="2" column="2">
         <widget class="KIntSpinBox" name="itemzoom">
          <property name="maximum">
           <number>100000</number>
          </property>
         </widget>
        </item>
-       <item row="3" column="1">
+       <item row="3" column="2">
         <widget class="KIntSpinBox" name="itemrotate">
          <property name="minimum">
           <number>-360</number>
          </property>
         </widget>
        </item>
-       <item row="4" column="0" colspan="2">
+       <item row="4" column="0" colspan="3">
         <layout class="QGridLayout" name="gridLayout_3">
          <item row="0" column="0">
           <widget class="QToolButton" name="itemleft">
          </item>
         </layout>
        </item>
-       <item row="5" column="0" colspan="2">
+       <item row="9" column="0" colspan="3">
         <widget class="QTabWidget" name="tabWidget">
          <property name="tabPosition">
           <enum>QTabWidget::North</enum>
          </widget>
         </widget>
        </item>
+       <item row="5" column="2">
+        <widget class="QComboBox" name="effect_list">
+         <item>
+          <property name="text">
+           <string>None</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Blur</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Shadow</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>Effect</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0" colspan="3">
+        <widget class="QFrame" name="blur_frame">
+         <property name="frameShape">
+          <enum>QFrame::StyledPanel</enum>
+         </property>
+         <property name="frameShadow">
+          <enum>QFrame::Raised</enum>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_10">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_6">
+            <property name="text">
+             <string>Radius</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QSlider" name="blur_radius">
+            <property name="pageStep">
+             <number>1</number>
+            </property>
+            <property name="value">
+             <number>5</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="7" column="0" colspan="3">
+        <widget class="QFrame" name="shadow_frame">
+         <property name="frameShape">
+          <enum>QFrame::StyledPanel</enum>
+         </property>
+         <property name="frameShadow">
+          <enum>QFrame::Raised</enum>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_11">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_8">
+            <property name="text">
+             <string>Radius</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_9">
+            <property name="text">
+             <string>Color</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1" colspan="2">
+           <widget class="QSlider" name="shadow_radius">
+            <property name="minimum">
+             <number>1</number>
+            </property>
+            <property name="pageStep">
+             <number>1</number>
+            </property>
+            <property name="value">
+             <number>5</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QLabel" name="label_10">
+            <property name="text">
+             <string>Offset</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QSpinBox" name="shadow_x">
+            <property name="value">
+             <number>8</number>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="2">
+           <widget class="QSpinBox" name="shadow_y">
+            <property name="value">
+             <number>8</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>
   </layout>
  </widget>
  <customwidgets>
-  <customwidget>
-   <class>KIntSpinBox</class>
-   <extends>QSpinBox</extends>
-   <header>knuminput.h</header>
-  </customwidget>
   <customwidget>
    <class>KLineEdit</class>
    <extends>QLineEdit</extends>
    <header>klineedit.h</header>
   </customwidget>
+  <customwidget>
+   <class>KIntSpinBox</class>
+   <extends>QSpinBox</extends>
+   <header>knuminput.h</header>
+  </customwidget>
   <customwidget>
    <class>KColorButton</class>
    <extends>QPushButton</extends>