X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipitem.cpp;h=e6a89cea0abc8d81addd2f0de6362a7ae824ac12;hb=7cd163e9e6ce93d69297cfb6fb0606677280b48e;hp=c645fe2acc025864ec2bb282df9ced4a5b02c44a;hpb=c5e9fb057510f0595832ea3dad6e6ba96ea24eeb;p=kdenlive diff --git a/src/clipitem.cpp b/src/clipitem.cpp index c645fe2a..e6a89cea 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -41,7 +41,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, bool generateThumbs) - : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) { + : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) { setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2)); setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1); @@ -111,7 +111,7 @@ ClipItem *ClipItem::clone(ItemInfo info) const { if (info.cropStart == 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); + duplicate->setEffectList(m_effectList.clone()); duplicate->setSpeed(m_speed); return duplicate; } @@ -609,11 +609,9 @@ void ClipItem::paint(QPainter *painter, // draw transition handles on hover if (m_hover && itemWidth * scale > 40) { - QPainterPath transitionHandle; - const int handle_size = 4; QPointF p1 = painter->matrix().map(QPointF(0, itemHeight / 2)) + QPointF(10, 0); painter->drawPixmap(p1, projectScene()->m_transitionPixmap); - p1 = painter->matrix().map(QPointF(itemWidth, itemHeight / 2)) - QPointF(10 + handle_size * 3, 0); + p1 = painter->matrix().map(QPointF(itemWidth, itemHeight / 2)) - QPointF(22, 0); painter->drawPixmap(p1, projectScene()->m_transitionPixmap); } @@ -674,10 +672,10 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos) { } else if (qAbs((int)(pos.x() - (rect.x() + rect.width()))) < maximumOffset) { setToolTip(i18n("Clip duration: %1s", duration().seconds())); return RESIZEEND; - } else if (qAbs((int)(pos.x() - (rect.x() + 16))) < maximumOffset && qAbs((int)(pos.y() - (rect.y() + rect.height() / 2 + 5))) < 6) { + } else if (qAbs((int)(pos.x() - (rect.x() + 16 / scale))) < maximumOffset && qAbs((int)(pos.y() - (rect.y() + rect.height() / 2 + 9))) < 6) { setToolTip(i18n("Add transition")); return TRANSITIONSTART; - } else if (qAbs((int)(pos.x() - (rect.x() + rect.width() - 21))) < maximumOffset && qAbs((int)(pos.y() - (rect.y() + rect.height() / 2 + 5))) < 6) { + } else if (qAbs((int)(pos.x() - (rect.x() + rect.width() - 21 / scale))) < maximumOffset && qAbs((int)(pos.y() - (rect.y() + rect.height() / 2 + 9))) < 6) { setToolTip(i18n("Add transition")); return TRANSITIONEND; } @@ -718,7 +716,6 @@ QList ClipItem::commentedSnapMarkers() const { } void ClipItem::slotPrepareAudioThumb(double pixelForOneFrame, int startpixel, int endpixel, int channels) { - QRectF re = sceneBoundingRect(); if (m_clipType == AV) re.setTop(re.y() + re.height() / 2); @@ -996,7 +993,7 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value) }*/ int ClipItem::effectsCounter() { - return m_effectsCounter++; + return effectsCount() + 1; } int ClipItem::effectsCount() { @@ -1018,6 +1015,7 @@ QDomElement ClipItem::effectAt(int ix) { void ClipItem::setEffectAt(int ix, QDomElement effect) { kDebug() << "CHange EFFECT AT: " << ix << ", CURR: " << m_effectList.at(ix).attribute("tag") << ", NEW: " << effect.attribute("tag"); + effect.setAttribute("kdenlive_ix", ix + 1); m_effectList.insert(ix, effect); m_effectList.removeAt(ix + 1); m_effectNames = m_effectList.effectNames().join(" / "); @@ -1034,7 +1032,7 @@ QHash ClipItem::addEffect(QDomElement effect, bool animate) { bool needRepaint = false; /*QDomDocument doc; doc.appendChild(doc.importNode(effect, true)); - kDebug() << "/////// CLIP ADD EFFECT: "<< doc.toString();*/ + kDebug() << "/////// CLIP ADD EFFECT: " << doc.toString();*/ m_effectList.append(effect); effectParams["tag"] = effect.attribute("tag"); QString effectId = effect.attribute("id"); @@ -1072,7 +1070,7 @@ QHash ClipItem::addEffect(QDomElement effect, bool animate) { else if (e.attribute("name") == "in") fade += e.attribute("value").toInt(); } } else { - effectParams[e.attribute("name")] = QString::number(effectParams[e.attribute("name")].toDouble() / f); + effectParams[e.attribute("name")] = QString::number(e.attribute("value").toDouble() / f); } } } @@ -1137,8 +1135,10 @@ QHash ClipItem::getEffectArgs(QDomElement effect) { void ClipItem::deleteEffect(QString index) { bool needRepaint = false; + QString ix; for (int i = 0; i < m_effectList.size(); ++i) { - if (m_effectList.at(i).attribute("kdenlive_ix") == index) { + ix = m_effectList.at(i).attribute("kdenlive_ix"); + if (ix == index) { if (m_effectList.at(i).attribute("id") == "fadein") { m_startFade = 0; needRepaint = true; @@ -1147,8 +1147,7 @@ void ClipItem::deleteEffect(QString index) { needRepaint = true; } m_effectList.removeAt(i); - break; - } + } else if (ix.toInt() > index.toInt()) m_effectList[i].setAttribute("kdenlive_ix", ix.toInt() - 1); } m_effectNames = m_effectList.effectNames().join(" / "); if (needRepaint) update(boundingRect());