From: Jean-Baptiste Mardelle Date: Fri, 19 Jun 2009 14:35:52 +0000 (+0000) Subject: Fix loading of timeline thumbs when opening project & other operations X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=851ca326485dce2d62446f739522f2b88eeafb49;hp=edf2e497b4361db1bce089b0ef58dd566bf1d997;p=kdenlive Fix loading of timeline thumbs when opening project & other operations svn path=/trunk/kdenlive/; revision=3593 --- diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 01aec8f8..c3061f54 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -107,7 +107,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, b setBrush(QColor(colour.left(7))); } else if (m_clipType == IMAGE || m_clipType == TEXT) { setBrush(QColor(141, 166, 215)); - m_startPix = KThumb::getImage(KUrl(clip->getProperty("resource")), (int)(KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio()), KdenliveSettings::trackheight()); + //m_startPix = KThumb::getImage(KUrl(clip->getProperty("resource")), (int)(KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio()), KdenliveSettings::trackheight()); } else if (m_clipType == AUDIO) { setBrush(QColor(141, 215, 166)); connect(clip, SIGNAL(gotAudioData()), this, SLOT(slotGotAudioData())); @@ -130,9 +130,12 @@ ClipItem::~ClipItem() ClipItem *ClipItem::clone(ItemInfo info) const { ClipItem *duplicate = new ClipItem(m_clip, info, m_fps, m_speed); - if (info.cropStart == m_cropStart) duplicate->slotSetStartThumb(m_startPix); - if (info.cropStart + (info.endPos - info.startPos) == m_cropStart + m_cropDuration) duplicate->slotSetEndThumb(m_endPix); - kDebug() << "// CLoning clip: " << (info.cropStart + (info.endPos - info.startPos)).frames(m_fps) << ", CURRENT end: " << (cropStart() + duration()).frames(m_fps); + if (m_clipType == IMAGE || m_clipType == TEXT) duplicate->slotSetStartThumb(m_startPix); + else { + if (info.cropStart == m_cropStart) duplicate->slotSetStartThumb(m_startPix); + if (info.cropStart + (info.endPos - info.startPos) == m_cropStart + m_cropDuration) duplicate->slotSetEndThumb(m_endPix); + } + //kDebug() << "// CLoning clip: " << (info.cropStart + (info.endPos - info.startPos)).frames(m_fps) << ", CURRENT end: " << (cropStart() + duration()).frames(m_fps); duplicate->setEffectList(m_effectList.clone()); duplicate->setVideoOnly(m_videoOnly); duplicate->setAudioOnly(m_audioOnly); @@ -405,12 +408,14 @@ QDomElement ClipItem::selectedEffect() return effectAt(m_selectedEffect); } -void ClipItem::resetThumbs() +void ClipItem::resetThumbs(bool clearExistingThumbs) { - m_startPix = QPixmap(); - m_endPix = QPixmap(); + if (clearExistingThumbs) { + m_startPix = QPixmap(); + m_endPix = QPixmap(); + m_audioThumbCachePic.clear(); + } slotFetchThumbs(); - m_audioThumbCachePic.clear(); } @@ -436,11 +441,19 @@ void ClipItem::refreshClip(bool checkDuration) QString colour = m_clip->getProperty("colour"); colour = colour.replace(0, 2, "#"); setBrush(QColor(colour.left(7))); - } else resetThumbs(); + } else resetThumbs(checkDuration); } void ClipItem::slotFetchThumbs() { + if (m_clipType == IMAGE || m_clipType == TEXT) { + if (m_startPix.isNull()) { + m_startPix = KThumb::getImage(KUrl(m_clip->getProperty("resource")), (int)(KdenliveSettings::trackheight() * KdenliveSettings::project_display_ratio()), KdenliveSettings::trackheight()); + update(); + } + return; + } + if (m_endPix.isNull() && m_startPix.isNull()) { m_startThumbRequested = true; m_endThumbRequested = true; diff --git a/src/clipitem.h b/src/clipitem.h index b3b36281..144a36b3 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -79,7 +79,7 @@ public: void flashClip(); void addTransition(Transition*); /** regenerate audio and video thumbnails */ - void resetThumbs(); + void resetThumbs(bool clearExistingThumbs); /** update clip properties from base clip */ void refreshClip(bool checkDuration); /** Returns a list of times for this clip's markers */ diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 867ebb9e..61bcf6bd 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -213,7 +213,7 @@ void CustomTrackView::checkTrackHeight() item = (ClipItem*) itemList.at(i); item->setRect(0, 0, item->rect().width(), m_tracksHeight - 1); item->setPos((qreal) item->startPos().frames(m_document->fps()), (qreal) item->track() * m_tracksHeight + 1); - item->resetThumbs(); + item->resetThumbs(true); } else if (itemList.at(i)->type() == TRANSITIONWIDGET) { transitionitem = (Transition*) itemList.at(i); transitionitem->setRect(0, 0, transitionitem->rect().width(), m_tracksHeight / 3 * 2 - 1); @@ -2991,6 +2991,8 @@ void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo i } m_document->setModified(true); m_document->renderer()->doRefresh(); + m_waitingThumbs.append(item); + m_thumbsTimer.start(); } void CustomTrackView::slotUpdateClip(const QString &clipId) @@ -3332,7 +3334,7 @@ void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end) bool success = m_document->renderer()->mltResizeClipCrop(clipinfo, end.cropStart - start.cropStart); if (success) { item->setCropStart(end.cropStart); - item->resetThumbs(); + item->resetThumbs(true); } } m_document->renderer()->doRefresh(); @@ -4106,14 +4108,13 @@ void CustomTrackView::slotUpdateAllThumbs() for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { item = static_cast (itemList.at(i)); - if (item->clipType() != COLOR) { + if (item->clipType() != COLOR && item->clipType() != AUDIO) { // Check if we have a cached thumbnail - if (item->clipType() == IMAGE || item->clipType() == TEXT || item->clipType() == AUDIO) { + if (item->clipType() == IMAGE || item->clipType() == TEXT) { QString thumb = thumbBase + item->baseClip()->getClipHash() + "_0.png"; if (QFile::exists(thumb)) { QPixmap pix(thumb); item->slotSetStartThumb(pix); - item->slotSetEndThumb(pix); } } else { QString startThumb = thumbBase + item->baseClip()->getClipHash() + '_';