]> git.sesse.net Git - kdenlive/commitdiff
start implementing image / title transparency
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jul 2008 23:30:09 +0000 (23:30 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jul 2008 23:30:09 +0000 (23:30 +0000)
svn path=/branches/KDE4/; revision=2339

src/clipmanager.cpp
src/clipproperties.cpp
src/customtrackview.cpp
src/docclipbase.cpp
src/docclipbase.h
src/renderer.cpp
src/renderer.h
src/widgets/clipproperties_ui.ui

index c5494d25757e4bed312e84ee3e84fd9589f290e0..232b311cbec1972404e45fb6995d8be4240224ba 100644 (file)
@@ -171,6 +171,7 @@ void ClipManager::slotAddTextClipFile(const QString path, const QString xml, con
         prod.setAttribute("groupid", groupId);
     }
     prod.setAttribute("type", (int) TEXT);
+    prod.setAttribute("transparency", "1");
     prod.setAttribute("in", "0");
     prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
     AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
index f631d06fe4c2021fa33a61e858b4d157945ce360..67bd0f2ddeeaa052e0ceca39153bb85dd8effe3a 100644 (file)
@@ -32,7 +32,9 @@
 #define AUDIOTAB 1
 #define COLORTAB 2
 #define SLIDETAB 3
-#define ADVANCEDTAB 4
+#define IMAGETAB 4
+#define MARKERTAB 5
+#define ADVANCEDTAB 6
 
 #define TYPE_JPEG 0
 #define TYPE_PNG 1
@@ -55,8 +57,18 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_channels->setText(props.value("channels"));
 
     CLIPTYPE t = m_clip->clipType();
-    if (t == COLOR) {
+    if (t == IMAGE) {
+        m_view.tabWidget->removeTab(SLIDETAB);
+        m_view.tabWidget->removeTab(COLORTAB);
+        m_view.tabWidget->removeTab(AUDIOTAB);
+        m_view.tabWidget->removeTab(VIDEOTAB);
+        if (props.contains("frame_size"))
+            m_view.image_size->setText(props.value("frame_size"));
+        if (props.contains("transparency"))
+            m_view.image_transparency->setChecked(props.value("transparency").toInt());
+    } else if (t == COLOR) {
         m_view.clip_path->setEnabled(false);
+        m_view.tabWidget->removeTab(IMAGETAB);
         m_view.tabWidget->removeTab(SLIDETAB);
         m_view.tabWidget->removeTab(AUDIOTAB);
         m_view.tabWidget->removeTab(VIDEOTAB);
@@ -64,6 +76,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_color->setColor(QColor("#" + props.value("colour").right(8).left(6)));
     } else if (t == SLIDESHOW) {
         m_view.clip_path->setText(url.directory());
+        m_view.tabWidget->removeTab(IMAGETAB);
         m_view.tabWidget->removeTab(COLORTAB);
         m_view.tabWidget->removeTab(AUDIOTAB);
         m_view.tabWidget->removeTab(VIDEOTAB);
@@ -106,6 +119,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
 
         connect(m_view.image_type, SIGNAL(currentIndexChanged(int)), this, SLOT(parseFolder()));
     } else if (t != AUDIO) {
+        m_view.tabWidget->removeTab(IMAGETAB);
         m_view.tabWidget->removeTab(SLIDETAB);
         m_view.tabWidget->removeTab(COLORTAB);
         if (props.contains("frame_size"))
@@ -121,6 +135,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_thumb->setPixmap(pix);
         if (t == IMAGE || t == VIDEO) m_view.tabWidget->removeTab(AUDIOTAB);
     } else {
+        m_view.tabWidget->removeTab(IMAGETAB);
         m_view.tabWidget->removeTab(SLIDETAB);
         m_view.tabWidget->removeTab(COLORTAB);
         m_view.tabWidget->removeTab(VIDEOTAB);
@@ -208,6 +223,12 @@ QMap <QString, QString> ClipProperties::properties() {
             m_clipNeedsRefresh = true;
             props["colour"] = "0x" + new_color.right(6) + "ff";
         }
+    } else if (t == IMAGE) {
+        QMap <QString, QString> old_props = m_clip->properties();
+        if ((int) m_view.image_transparency->isChecked() != old_props.value("transparency").toInt()) {
+            props["transparency"] = QString::number((int)m_view.image_transparency->isChecked());
+            m_clipNeedsRefresh = true;
+        }
     } else if (t == SLIDESHOW) {
         QMap <QString, QString> old_props = m_clip->properties();
         QString value = QString::number((int) m_view.slide_loop->isChecked());
index ca3ea93fffa8071e0b37d572f914d059a96d40ec..cff74840b6c51811b7a25b4680534032ba1df313 100644 (file)
@@ -900,7 +900,7 @@ void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
     info.startPos = GenTime((int)(mapToScene(pos).x() / m_scale), m_document->fps());
     info.endPos = info.startPos + clip->duration();
     info.track = (int)(pos.y() / m_tracksHeight);
-    //kDebug()<<"------------  ADDING CLIP ITEM----: "<<info.startPos.frames(25)<<", "<<info.endPos.frames(25)<<", "<<info.track;
+    kDebug() << "------------  ADDING CLIP ITEM----: " << info.startPos.frames(25) << ", " << info.endPos.frames(25) << ", " << info.track;
     m_dropItem = new ClipItem(clip, info, m_scale, m_document->fps());
     scene()->addItem(m_dropItem);
 }
@@ -936,8 +936,10 @@ void CustomTrackView::dropEvent(QDropEvent * event) {
         ItemInfo info;
         info = m_dropItem->info();
         info.track = m_tracksList.count() - m_dropItem->track();
-        // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track();
+        //kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksList.count()<<", DROP: "<<m_dropItem->track();
         m_document->renderer()->mltInsertClip(info, m_dropItem->xml(), m_dropItem->baseClip()->producer());
+        //if (m_dropItem->baseClip()->isTransparent()) m_document->renderer()->mltAddClipTransparency(info, getPreviousVideoTrack(m_dropItem->track()), m_dropItem->baseClip()->getId());
+        m_dropItem = NULL;
         m_document->setModified(true);
     } else QGraphicsView::dropEvent(event);
     m_dropItem = NULL;
index 0dc9b1a8322c5959ecaaf95420896fe5fb0be8e5..1ddf523b3298dd5987257b3201c107af88e01d1b 100644 (file)
@@ -139,6 +139,10 @@ const QString DocClipBase::description() const {
     return m_properties.value("description");
 }
 
+bool DocClipBase::isTransparent() const {
+    return (m_properties.value("transparency") == "1");
+}
+
 const QString DocClipBase::getProperty(const QString prop) const {
     return m_properties.value(prop);
 }
@@ -358,6 +362,7 @@ QString DocClipBase::markerComment(GenTime t) {
 
 void DocClipBase::setProducer(Mlt::Producer *producer) {
     m_clipProducer = producer;
+    m_clipProducer->set("transparency", m_properties.value("transparency").toInt());
     if (m_thumbProd) m_thumbProd->setProducer(producer);
 }
 
@@ -445,6 +450,7 @@ void DocClipBase::setProperties(QMap <QString, QString> properties) {
         if (i.key() == "resource") m_thumbProd->updateClipUrl(KUrl(i.value()));
         else if (i.key() == "out") setDuration(GenTime(i.value().toInt(), KdenliveSettings::project_fps()));
         else if (m_clipType == SLIDESHOW && keys.contains(i.key())) refreshProducer = true;
+        else if (i.key() == "transparency") m_clipProducer->set("transparency", i.value().toInt());
     }
     if (refreshProducer) slotRefreshProducer();
 }
@@ -453,6 +459,7 @@ void DocClipBase::setProperty(QString key, QString value) {
     m_properties.insert(key, value);
     if (key == "resource") m_thumbProd->updateClipUrl(KUrl(value));
     else if (key == "out") setDuration(GenTime(value.toInt(), KdenliveSettings::project_fps()));
+    else if (key == "transparency") m_clipProducer->set("transparency", value.toInt());
 }
 
 QMap <QString, QString> DocClipBase::properties() const {
index cd77e06d3537822f519963d2702f5a2c57feb0b9..2e9817eca84ad8383d1bc1c2c96689f48e340f73 100644 (file)
@@ -66,6 +66,8 @@ Q_OBJECT public:
 
     /** Returns the description of this clip. */
     const QString description() const;
+    /** Does this clip need a transparent background (e.g. for titles). */
+    bool isTransparent() const;
 
     /** Returns any property of this clip. */
     const QString getProperty(const QString prop) const;
index 48f12330a1a144ab54174201722677d2e8250954..07b5349a40d7fcdb66f9626c09db95f56d3e2562 100644 (file)
@@ -1204,6 +1204,9 @@ void Render::mltInsertClip(ItemInfo info, QDomElement element, Mlt::Producer *pr
     Mlt::Producer *clip = prod->cut(info.cropStart.frames(m_fps), (info.endPos - info.startPos).frames(m_fps) - 1);
     trackPlaylist.insert_at((int) info.startPos.frames(m_fps), *clip, 1);
 
+    if (QString(prod->get("transparency")).toInt() == 1)
+        mltAddClipTransparency(info, info.track - 1, QString(prod->get("id")).toInt());
+
     mlt_service_unlock(service.get_service());
 
     if (info.track != 0) mltCheckLength();
@@ -1255,6 +1258,9 @@ void Render::mltRemoveClip(int track, GenTime position) {
     Mlt::Producer trackProducer(tractor.track(track));
     Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
     int clipIndex = trackPlaylist.get_clip_index_at((int) position.frames(m_fps));
+    Mlt::Producer clip(trackPlaylist.get_clip(clipIndex));
+    if (QString(clip.parent().get("transparency")).toInt() == 1)
+        mltDeleteTransparency((int) position.frames(m_fps), track, QString(clip.parent().get("id")).toInt());
     trackPlaylist.replace_with_blank(clipIndex);
     trackPlaylist.consolidate_blanks(0);
     if (track != 0) mltCheckLength();
@@ -1539,11 +1545,10 @@ void Render::mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out) {
     if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) + 1))
         kDebug() << "////////  ERROR RSIZING BLANK CLIP!!!!!!!!!!!";
     int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) + 1);
-
+    Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex);
+    int previousStart = trackPlaylist.clip_start(clipIndex);
     int previousDuration = trackPlaylist.clip_length(clipIndex) - 1;
     int newDuration = (int) out.frames(m_fps) - 1;
-
-    kDebug() << " ** RESIZING CLIP END:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", in: " << in.frames(25) << ", out: " << out.frames(25) << ", PREVIOUS duration: " << previousDuration;
     trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), newDuration);
     trackPlaylist.consolidate_blanks(0);
     if (previousDuration < newDuration) {
@@ -1555,9 +1560,19 @@ void Render::mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out) {
     } else trackPlaylist.insert_blank(clipIndex + 1, previousDuration - newDuration - 1);
 
     trackPlaylist.consolidate_blanks(0);
-    tractor.multitrack()->refresh();
-    tractor.refresh();
+
+    //tractor.multitrack()->refresh();
+    //tractor.refresh();
     if (track != 0) mltCheckLength();
+    if (QString(clip->parent().get("transparency")).toInt() == 1) {
+        //mltResizeTransparency(previousStart, previousStart, previousStart + newDuration, track, QString(clip->parent().get("id")).toInt());
+        mltDeleteTransparency(previousStart, track, QString(clip->parent().get("id")).toInt());
+        ItemInfo info;
+        info.startPos = pos;
+        info.endPos = pos + out - in;
+        info.track = track;
+        mltAddClipTransparency(info, info.track - 1, QString(clip->parent().get("id")).toInt());
+    }
     m_isBlocked = false;
 }
 
@@ -1592,8 +1607,9 @@ void Render::mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime
     if (trackPlaylist.is_blank_at((int) pos.frames(m_fps) - 1))
         kDebug() << "////////  ERROR RSIZING BLANK CLIP!!!!!!!!!!!";
     int clipIndex = trackPlaylist.get_clip_index_at((int) pos.frames(m_fps) - 1);
-    kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25);
-
+    int previousStart = trackPlaylist.clip_start(clipIndex);
+    //kDebug() << " ** RESIZING CLIP START:" << clipIndex << " on track:" << track << ", mid pos: " << pos.frames(25) << ", moving: " << moveFrame << ", in: " << in.frames(25) << ", out: " << out.frames(25);
+    Mlt::Producer *clip = trackPlaylist.get_clip(clipIndex);
     trackPlaylist.resize_clip(clipIndex, (int) in.frames(m_fps), (int) out.frames(m_fps));
     if (moveFrame > 0) trackPlaylist.insert_blank(clipIndex, moveFrame - 1);
     else {
@@ -1607,6 +1623,15 @@ void Render::mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime
         else trackPlaylist.resize_clip(blankIndex, 0, blankLength + moveFrame - 1);
     }
     trackPlaylist.consolidate_blanks(0);
+    if (QString(clip->parent().get("transparency")).toInt() == 1) {
+        //mltResizeTransparency(previousStart, (int) moveEnd.frames(m_fps), (int) (moveEnd + out - in).frames(m_fps), track, QString(clip->parent().get("id")).toInt());
+        mltDeleteTransparency(previousStart, track, QString(clip->parent().get("id")).toInt());
+        ItemInfo info;
+        info.startPos = moveEnd;
+        info.endPos = moveEnd + out - in;
+        info.track = track;
+        mltAddClipTransparency(info, info.track - 1, QString(clip->parent().get("id")).toInt());
+    }
     m_isBlocked = false;
 }
 
@@ -1635,13 +1660,16 @@ bool Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEn
         if (!trackPlaylist.is_blank_at(moveEnd)) {
             // error, destination is not empty
             //int ix = trackPlaylist.get_clip_index_at(moveEnd);
-           kDebug()<<"// ERROR MOVING CLIP TO : "<<moveEnd;
+            kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd;
             mlt_service_unlock(m_mltConsumer->get_service());
             m_isBlocked = false;
             return false;
         } else {
             trackPlaylist.insert_at(moveEnd, clipProducer, 1);
             trackPlaylist.consolidate_blanks(0);
+            if (QString(clipProducer.parent().get("transparency")).toInt() == 1) {
+                mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt());
+            }
         }
         //mlt_service_unlock(service.get_service());
     } else {
@@ -1658,6 +1686,10 @@ bool Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEn
             destTrackPlaylist.consolidate_blanks(1);
             destTrackPlaylist.insert_at(moveEnd, clipProducer, 1);
             destTrackPlaylist.consolidate_blanks(0);
+            if (QString(clipProducer.parent().get("transparency")).toInt() == 1) {
+                kDebug() << "//////// moving clip transparency";
+                mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt());
+            }
         }
     }
     mltCheckLength();
@@ -1852,6 +1884,141 @@ QMap<QString, QString> Render::mltGetTransitionParamsFromXml(QDomElement xml) {
     return map;
 }
 
+void Render::mltAddClipTransparency(ItemInfo info, int transitiontrack, int id) {
+    kDebug() << "/////////  ADDING CLIP TRANSPARENCY AT: " << info.startPos.frames(25);
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Field *field = tractor.field();
+
+    Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "composite");
+    transition->set_in_and_out((int) info.startPos.frames(m_fps), (int) info.endPos.frames(m_fps) - 1);
+    transition->set("transparency", id);
+    transition->set("fill", 1);
+    transition->set("internal_added", 237);
+    field->plant_transition(*transition, transitiontrack, info.track);
+    refresh();
+}
+
+void Render::mltDeleteTransparency(int pos, int track, int id) {
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Field *field = tractor.field();
+
+    //if (do_refresh) m_mltConsumer->set("refresh", 0);
+    mlt_service serv = m_mltProducer->parent().get_service();
+
+    mlt_service nextservice = mlt_service_get_producer(serv);
+    mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
+    QString mlt_type = mlt_properties_get(properties, "mlt_type");
+    QString resource = mlt_properties_get(properties, "mlt_service");
+
+    while (mlt_type == "transition") {
+        mlt_transition tr = (mlt_transition) nextservice;
+        int currentTrack = mlt_transition_get_b_track(tr);
+        int currentIn = (int) mlt_transition_get_in(tr);
+        int currentOut = (int) mlt_transition_get_out(tr);
+        int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt();
+        kDebug() << "// FOUND EXISTING TRANS, IN: " << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack;
+
+        if (resource == "composite" && track == currentTrack && currentIn == pos && transitionId == id) {
+            //kDebug() << " / / / / /DELETE TRANS DOOOMNE";
+            mlt_field_disconnect_service(field->get_field(), nextservice);
+            break;
+        }
+        nextservice = mlt_service_producer(nextservice);
+        if (nextservice == NULL) break;
+        properties = MLT_SERVICE_PROPERTIES(nextservice);
+        mlt_type = mlt_properties_get(properties, "mlt_type");
+        resource = mlt_properties_get(properties, "mlt_service");
+    }
+    //if (do_refresh) m_mltConsumer->set("refresh", 1);
+}
+
+void Render::mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id) {
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Field *field = tractor.field();
+
+    mlt_service_lock(service.get_service());
+    m_mltConsumer->set("refresh", 0);
+    m_isBlocked = true;
+
+    mlt_service serv = m_mltProducer->parent().get_service();
+    mlt_service nextservice = mlt_service_get_producer(serv);
+    mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
+    QString mlt_type = mlt_properties_get(properties, "mlt_type");
+    QString resource = mlt_properties_get(properties, "mlt_service");
+    kDebug() << "// resize transpar from: " << oldStart << ", TO: " << newStart << "x" << newEnd << ", " << track << ", " << id;
+    while (mlt_type == "transition") {
+        mlt_transition tr = (mlt_transition) nextservice;
+        int currentTrack = mlt_transition_get_b_track(tr);
+        int currentIn = (int) mlt_transition_get_in(tr);
+        //mlt_properties props = MLT_TRANSITION_PROPERTIES(tr);
+        int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt();
+        kDebug() << "// resize transpar current in: " << currentIn << ", Track: " << currentTrack << ", id: " << id << "x" << transitionId ;
+        if (resource == "composite" && track == currentTrack && currentIn == oldStart && transitionId == id) {
+            kDebug() << " / / / / /RESIZE TRANS TO: " << newStart << "x" << newEnd;
+            mlt_transition_set_in_and_out(tr, newStart, newEnd);
+            break;
+        }
+        nextservice = mlt_service_producer(nextservice);
+        if (nextservice == NULL) break;
+        properties = MLT_SERVICE_PROPERTIES(nextservice);
+        mlt_type = mlt_properties_get(properties, "mlt_type");
+        resource = mlt_properties_get(properties, "mlt_service");
+    }
+    m_isBlocked = false;
+    mlt_service_unlock(service.get_service());
+    m_mltConsumer->set("refresh", 1);
+
+}
+
+void Render::mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id) {
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Field *field = tractor.field();
+
+    mlt_service_lock(service.get_service());
+    m_mltConsumer->set("refresh", 0);
+    m_isBlocked = true;
+
+    mlt_service serv = m_mltProducer->parent().get_service();
+    mlt_service nextservice = mlt_service_get_producer(serv);
+    mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
+    QString mlt_type = mlt_properties_get(properties, "mlt_type");
+    QString resource = mlt_properties_get(properties, "mlt_service");
+
+    while (mlt_type == "transition") {
+        mlt_transition tr = (mlt_transition) nextservice;
+        int currentTrack = mlt_transition_get_b_track(tr);
+        int currentaTrack = mlt_transition_get_a_track(tr);
+        int currentIn = (int) mlt_transition_get_in(tr);
+        int currentOut = (int) mlt_transition_get_out(tr);
+        //mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
+        int transitionId = QString(mlt_properties_get(properties, "transparency")).toInt();
+        //kDebug()<<" + TRANSITION "<<id<<" == "<<transitionId<<", START TMIE: "<<currentIn<<", LOOK FR: "<<startTime<<", TRACK: "<<currentTrack<<"x"<<startTrack;
+        if (resource == "composite" && transitionId == id && startTime == currentIn && startTrack == currentTrack) {
+            kDebug() << "//////MOVING";
+            mlt_transition_set_in_and_out(tr, endTime, endTime + currentOut - currentIn);
+            if (endTrack != startTrack) {
+                mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
+                mlt_properties_set_int(properties, "a_track", currentaTrack + endTrack - currentTrack);
+                mlt_properties_set_int(properties, "b_track", endTrack);
+            }
+            break;
+        }
+        nextservice = mlt_service_producer(nextservice);
+        if (nextservice == NULL) break;
+        properties = MLT_SERVICE_PROPERTIES(nextservice);
+        mlt_type = mlt_properties_get(properties, "mlt_type");
+        resource = mlt_properties_get(properties, "mlt_service");
+    }
+    m_isBlocked = false;
+    mlt_service_unlock(service.get_service());
+    m_mltConsumer->set("refresh", 1);
+}
+
+
 void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) {
 
     QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml);
index 4e483d8750bac9fdc5541a0ebaaed90c17c38918..6c4443a1e295b07365eef3d30eda9e4899a23466 100644 (file)
@@ -166,7 +166,10 @@ Q_OBJECT public:
     void mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool refresh = true);
     void mltUpdateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml);
     void mltUpdateTransitionParams(QString type, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml);
-
+    void mltAddClipTransparency(ItemInfo info, int transitiontrack, int id);
+    void mltMoveTransparency(int startTime, int endTime, int startTrack, int endTrack, int id);
+    void mltDeleteTransparency(int pos, int track, int id);
+    void mltResizeTransparency(int oldStart, int newStart, int newEnd, int track, int id);
 
 private:   // Private attributes & methods
     /** The name of this renderer - useful to identify the renderes by what they do - e.g. background rendering, workspace monitor, etc... */
index 2aded4a9da2615cc84250d27d47ad8ed510f7dc8..0c5d0352e631b5712cc92d4e03a829388810ac83 100644 (file)
    <string>Clip Properties</string>
   </property>
   <layout class="QGridLayout" name="gridLayout_2" >
+   <item row="7" column="1" colspan="2" >
+    <spacer name="verticalSpacer_4" >
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>20</width>
+       <height>17</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
    <item row="0" column="0" colspan="4" >
     <widget class="QLabel" name="clip_thumb" >
      <property name="text" >
      </property>
     </widget>
    </item>
-   <item row="7" column="1" colspan="2" >
-    <spacer name="verticalSpacer_4" >
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>20</width>
-       <height>17</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
    <item row="8" column="0" colspan="4" >
     <widget class="QDialogButtonBox" name="buttonBox" >
      <property name="orientation" >
    <item row="6" column="0" colspan="4" >
     <widget class="QTabWidget" name="tabWidget" >
      <property name="currentIndex" >
-      <number>3</number>
+      <number>4</number>
      </property>
      <widget class="QWidget" name="tab_video" >
       <property name="geometry" >
        </item>
       </layout>
      </widget>
+     <widget class="QWidget" name="tab_4" >
+      <attribute name="title" >
+       <string>Image</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_8" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="label_16" >
+         <property name="text" >
+          <string>Image size</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="KLineEdit" name="image_size" >
+         <property name="readOnly" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="2" >
+        <widget class="QCheckBox" name="image_transparency" >
+         <property name="text" >
+          <string>Transparent background</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <spacer name="verticalSpacer_7" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>20</width>
+           <height>151</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
      <widget class="QWidget" name="tab_3" >
       <property name="geometry" >
        <rect>
     </widget>
    </item>
   </layout>
-  <zorder>clip_thumb</zorder>
-  <zorder>label_5</zorder>
-  <zorder>clip_path</zorder>
-  <zorder>label_3</zorder>
-  <zorder>clip_description</zorder>
-  <zorder>clip_filesize_2</zorder>
-  <zorder>clip_duration</zorder>
-  <zorder>clip_filesize_3</zorder>
-  <zorder>clip_filesize</zorder>
-  <zorder>buttonBox</zorder>
-  <zorder>tabWidget</zorder>
  </widget>
  <customwidgets>
   <customwidget>