else m_commandStack = NULL;
setMouseTracking(true);
setAcceptDrops(true);
+ KdenliveSettings::setTrackheight(m_tracksHeight);
m_animationTimer = new QTimeLine(800);
m_animationTimer->setFrameRange(0, 5);
m_animationTimer->setUpdateInterval(100);
connect(&m_scrollTimer, SIGNAL(timeout()), this, SLOT(slotCheckMouseScrolling()));
m_scrollTimer.setInterval(100);
m_scrollTimer.setSingleShot(true);
+
+ connect(&m_thumbsTimer, SIGNAL(timeout()), this, SLOT(slotFetchNextThumbs()));
+ m_thumbsTimer.setInterval(500);
+ m_thumbsTimer.setSingleShot(true);
}
CustomTrackView::~CustomTrackView()
{
qDeleteAll(m_guides);
+ m_waitingThumbs.clear();
}
void CustomTrackView::setDocumentModified()
setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_document->tracksCount());
// verticalScrollBar()->setMaximum(m_tracksHeight * m_document->tracksCount());
KdenliveSettings::setSnaptopoints(snap);
- update();
+ viewport()->update();
}
/** Zoom or move viewport on mousewheel
}
+void CustomTrackView::slotFetchNextThumbs()
+{
+ if (!m_waitingThumbs.isEmpty()) {
+ ClipItem *item = m_waitingThumbs.takeFirst();
+ while ((item == NULL) && !m_waitingThumbs.isEmpty()) {
+ item = m_waitingThumbs.takeFirst();
+ }
+ if (item) item->slotFetchThumbs();
+ if (!m_waitingThumbs.isEmpty()) m_thumbsTimer.start();
+ }
+}
+
void CustomTrackView::slotCheckMouseScrolling()
{
if (m_scrollOffset == 0) {
m_visualTip = NULL;
QGraphicsView::mouseMoveEvent(event);
return;
- } else if (m_operationMode == SPACER && move) {
+ } else if (m_operationMode == SPACER && move && m_selectionGroup) {
// spacer tool
int mappedClick = (int)(mapToScene(m_clickEvent).x() + 0.5);
m_selectionGroup->setPos(mappedXPos + (((int) m_selectionGroup->boundingRect().topLeft().x() + 0.5) - mappedClick) , m_selectionGroup->pos().y());
return;
}
opMode = clip->operationMode(mapToScene(event->pos()));
- double size = 5;
+ const double size = 5;
if (opMode == m_moveOpMode) {
QGraphicsView::mouseMoveEvent(event);
return;
if (m_visualTip == NULL) {
QRectF rect = clip->sceneBoundingRect();
QPolygon polygon;
- polygon << QPoint(0, rect.height() / 2 - size * 2);
- polygon << QPoint(size * 2, (int)(rect.height() / 2));
- polygon << QPoint(0, (int)(rect.height() / 2 + size * 2));
- polygon << QPoint(0, (int)(rect.height() / 2 - size * 2));
+ polygon << QPoint(0, - size * 2);
+ polygon << QPoint(size * 2, 0);
+ polygon << QPoint(0, size * 2);
+ polygon << QPoint(0, - size * 2);
m_visualTip = new QGraphicsPolygonItem(polygon);
((QGraphicsPolygonItem*) m_visualTip)->setBrush(m_tipColor);
((QGraphicsPolygonItem*) m_visualTip)->setPen(m_tipPen);
- m_visualTip->setPos(rect.x(), rect.y());
+ m_visualTip->setPos(rect.x(), rect.y() + rect.height() / 2);
m_visualTip->setFlags(QGraphicsItem::ItemIgnoresTransformations);
m_visualTip->setZValue(100);
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, 1);
- //m_animation->setPosAt(.5, QPointF(rect.x() - rect.x() * scale, 0));
- scale = 1.0;
- m_animation->setScaleAt(1, scale, 1);
- //m_animation->setPosAt(1, QPointF(rect.x() - rect.x() * scale, 0));
+ m_animation->setScaleAt(.5, 2, 1);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
}
if (m_visualTip == NULL) {
QRectF rect = clip->sceneBoundingRect();
QPolygon polygon;
- polygon << QPoint(0, (int)(rect.height() / 2 - size * 2));
- polygon << QPoint(- size * 2, (int)(rect.height() / 2));
- polygon << QPoint(0, (int)(rect.height() / 2 + size * 2));
- polygon << QPoint(0, (int)(rect.height() / 2 - size * 2));
+ polygon << QPoint(0, - size * 2);
+ polygon << QPoint(- size * 2, 0);
+ polygon << QPoint(0, size * 2);
+ polygon << QPoint(0, - size * 2);
m_visualTip = new QGraphicsPolygonItem(polygon);
((QGraphicsPolygonItem*) m_visualTip)->setBrush(m_tipColor);
((QGraphicsPolygonItem*) m_visualTip)->setPen(m_tipPen);
m_visualTip->setFlags(QGraphicsItem::ItemIgnoresTransformations);
- m_visualTip->setPos(rect.right(), rect.y());
+ m_visualTip->setPos(rect.right(), rect.y() + rect.height() / 2);
m_visualTip->setZValue(100);
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, 1);
- scale = 1.0;
- m_animation->setScaleAt(1, scale, 1);
+ m_animation->setScaleAt(.5, 2, 1);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
}
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, scale);
- scale = 1.0;
- m_animation->setScaleAt(1, scale, scale);
+ m_animation->setScaleAt(.5, 2, 2);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
}
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, scale);
- scale = 1.0;
- m_animation->setScaleAt(1, scale, scale);
+ m_animation->setScaleAt(.5, 2, 2);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
}
setCursor(Qt::PointingHandCursor);
} else if (opMode == TRANSITIONSTART) {
- /*if (m_visualTip == NULL) {
+ if (m_visualTip == NULL) {
QRectF rect = clip->sceneBoundingRect();
- m_visualTip = new QGraphicsEllipseItem(-5, -5 , 10, 10);
- ((QGraphicsEllipseItem*) m_visualTip)->setBrush(m_tipColor);
- ((QGraphicsEllipseItem*) m_visualTip)->setPen(m_tipPen);
+ QPolygon polygon;
+ polygon << QPoint(0, - size * 2);
+ polygon << QPoint(size * 2, 0);
+ polygon << QPoint(0, 0);
+ polygon << QPoint(0, - size * 2);
+
+ m_visualTip = new QGraphicsPolygonItem(polygon);
+ ((QGraphicsPolygonItem*) m_visualTip)->setBrush(m_tipColor);
+ ((QGraphicsPolygonItem*) m_visualTip)->setPen(m_tipPen);
+ m_visualTip->setPos(rect.x(), rect.bottom());
+ m_visualTip->setFlags(QGraphicsItem::ItemIgnoresTransformations);
m_visualTip->setZValue(100);
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- m_visualTip->setPos(rect.x() + 10, rect.y() + rect.height() / 2 + 12);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, scale);
- scale = 1.0;
- m_animation->setScaleAt(1, scale, scale);
+ m_animation->setScaleAt(.5, 2, 2);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
- }*/
+ }
setCursor(Qt::PointingHandCursor);
} else if (opMode == TRANSITIONEND) {
- /*if (m_visualTip == NULL) {
+ if (m_visualTip == NULL) {
QRectF rect = clip->sceneBoundingRect();
- m_visualTip = new QGraphicsEllipseItem(-5, -5 , 10, 10);
- ((QGraphicsEllipseItem*) m_visualTip)->setBrush(m_tipColor);
- ((QGraphicsEllipseItem*) m_visualTip)->setPen(m_tipPen);
+ QPolygon polygon;
+ polygon << QPoint(0, - size * 2);
+ polygon << QPoint(- size * 2, 0);
+ polygon << QPoint(0, 0);
+ polygon << QPoint(0, - size * 2);
+
+ m_visualTip = new QGraphicsPolygonItem(polygon);
+ ((QGraphicsPolygonItem*) m_visualTip)->setBrush(m_tipColor);
+ ((QGraphicsPolygonItem*) m_visualTip)->setPen(m_tipPen);
+ m_visualTip->setPos(rect.right(), rect.bottom());
+ m_visualTip->setFlags(QGraphicsItem::ItemIgnoresTransformations);
m_visualTip->setZValue(100);
m_animation = new QGraphicsItemAnimation;
m_animation->setItem(m_visualTip);
m_animation->setTimeLine(m_animationTimer);
- m_visualTip->setPos(rect.x() + rect.width() - 10 , rect.y() + rect.height() / 2 + 12);
- double scale = 2.0;
- m_animation->setScaleAt(.5, scale, scale);
- scale = 1.0;
- m_animation->setScaleAt(1, scale, scale);
+ m_animation->setScaleAt(.5, 2, 2);
+ m_animation->setScaleAt(1, 1, 1);
scene()->addItem(m_visualTip);
m_animationTimer->start();
- }*/
+ }
setCursor(Qt::PointingHandCursor);
} else if (opMode == KEYFRAME) {
setCursor(Qt::PointingHandCursor);
// virtual
void CustomTrackView::mousePressEvent(QMouseEvent * event)
{
- kDebug() << "mousePressEvent STARTED";
+ //kDebug() << "mousePressEvent STARTED";
setFocus(Qt::MouseFocusReason);
m_menuPosition = QPoint();
// No item under click
if (m_dragItem == NULL || m_tool == SPACERTOOL) {
- resetSelectionGroup();
+ resetSelectionGroup(false);
setCursor(Qt::ArrowCursor);
m_scene->clearSelection();
//event->accept();
kDebug() << "SELELCTING ELEMENTS WITHIN =" << event->pos().x() << "/" << 1 << ", " << mapFromScene(sceneRect().width(), 0).x() - event->pos().x() << "/" << sceneRect().height();
}
- resetSelectionGroup(false);
- m_scene->clearSelection();
-
for (int i = 0; i < selection.count(); i++) {
if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET) {
selection.at(i)->setSelected(true);
info.startPos = start;
info.endPos = info.startPos + clip->duration();
info.track = (int)(1 / m_tracksHeight);
- ClipItem *item = new ClipItem(clip, info, m_document->fps(), 1.0);
+ ClipItem *item = new ClipItem(clip, info, m_document->fps(), 1.0, false);
start += clip->duration();
offsetList.append(start);
m_selectionGroup->addToGroup(item);
item->setFlags(QGraphicsItem::ItemIsSelectable);
+ m_waitingThumbs.append(item);
}
//TODO: check if we do not overlap another clip when first dropping in timeline
//if (insertPossible(m_selectionGroup, event->pos()))
updateSnapPoints(NULL, offsetList);
scene()->addItem(m_selectionGroup);
+ m_thumbsTimer.start();
event->acceptProposedAction();
+
} else {
// the drag is not a clip (may be effect, ...)
m_clipDrag = false;
ClipItem *item = (ClipItem *)itemList.at(i);
if (effect.attribute("type") == "audio") {
// Don't add audio effects on video clips
- if (item->isVideoOnly() || (item->clipType() != AUDIO && item->clipType() != AV && item->clipType() != PLAYLIST)) continue;
+ if (item->isVideoOnly() || (item->clipType() != AUDIO && item->clipType() != AV && item->clipType() != PLAYLIST)) {
+ emit displayMessage(i18n("Cannot add an audio effect to this clip"), ErrorMessage);
+ continue;
+ }
} else if (effect.hasAttribute("type") == false) {
// Don't add video effect on audio clips
- if (item->isAudioOnly() || item->clipType() == AUDIO) continue;
+ if (item->isAudioOnly() || item->clipType() == AUDIO) {
+ emit displayMessage(i18n("Cannot add a video effect to this clip"), ErrorMessage);
+ continue;
+ }
}
if (item->hasEffect(effect.attribute("tag"), effect.attribute("id")) != -1 && effect.attribute("unique", "0") != "0") {
emit displayMessage(i18n("Effect already present in clip"), ErrorMessage);
void CustomTrackView::dragLeaveEvent(QDragLeaveEvent * event)
{
if (m_selectionGroup && m_clipDrag) {
+ m_thumbsTimer.stop();
+ m_waitingThumbs.clear();
QList<QGraphicsItem *> items = m_selectionGroup->childItems();
qDeleteAll(items);
scene()->destroyItemGroup(m_selectionGroup);
m_dragGuide = NULL;
m_dragItem = NULL;
return;
- } else if (m_operationMode == SPACER) {
+ } else if (m_operationMode == SPACER && m_selectionGroup) {
int track;
if (event->modifiers() != Qt::ControlModifier) {
// We are moving all tracks
resetSelectionGroup(false);
m_operationMode = NONE;
} else if (m_operationMode == RUBBERSELECTION) {
- kDebug() << "// END RUBBER SELECT";
+ //kDebug() << "// END RUBBER SELECT";
resetSelectionGroup();
groupSelectedItems();
m_operationMode = NONE;
m_document->setModified(true);
}
}
-
+ m_document->renderer()->doRefresh();
} else if (m_operationMode == RESIZESTART && m_dragItem->startPos() != m_dragItemInfo.startPos) {
// resize start
if (m_dragItem->type() == AVWIDGET) {
new ResizeClipCommand(this, m_dragItemInfo, info, false, resizeCommand);
m_commandStack->push(resizeCommand);
- updateClipFade(static_cast <ClipItem *>(m_dragItem), true);
+ updateClipFade(static_cast <ClipItem *>(m_dragItem));
} else {
m_dragItem->resizeEnd((int) m_dragItemInfo.endPos.frames(m_document->fps()));
emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
}
}*/
scene()->removeItem(item);
+ m_waitingThumbs.removeAll(item);
if (m_dragItem == item) m_dragItem = NULL;
delete item;
+ item = NULL;
m_document->setModified(true);
m_document->renderer()->doRefresh();
}
// undo last move and emit error message
emit displayMessage(i18n("Cannot move clip to position %1", m_document->timecode().getTimecodeFromFrames(end.startPos.frames(m_document->fps()))), ErrorMessage);
}
- kDebug() << " // MOVED CLIP TO: " << end.startPos.frames(25) << ", ITEM START: " << item->startPos().frames(25);
+ m_document->renderer()->doRefresh();
+ //kDebug() << " // MOVED CLIP TO: " << end.startPos.frames(25) << ", ITEM START: " << item->startPos().frames(25);
}
void CustomTrackView::moveGroup(QList <ItemInfo> startClip, QList <ItemInfo> startTransition, const GenTime offset, const int trackOffset, bool reverseMove)
bool snap = KdenliveSettings::snaptopoints();
KdenliveSettings::setSnaptopoints(false);
- m_selectionGroup->moveBy(offset.frames(m_document->fps()), trackOffset * (qreal) m_tracksHeight);
+ m_selectionGroup->moveBy(offset.frames(m_document->fps()), trackOffset *(qreal) m_tracksHeight);
kDebug() << "%% GRP NEW POS: " << m_selectionGroup->scenePos().x();
}
}
KdenliveSettings::setSnaptopoints(snap);
+ m_document->renderer()->doRefresh();
} else kDebug() << "///////// WARNING; NO GROUP TO MOVE";
}
}
emit transitionItemSelected(item, getPreviousVideoTrack(item->track()), p);
}
+ m_document->renderer()->doRefresh();
}
void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end)
bool success = m_document->renderer()->mltResizeClipEnd(clipinfo, end.endPos - clipinfo.startPos);
if (success) {
item->resizeEnd((int) end.endPos.frames(m_document->fps()));
- updateClipFade(item, true);
+ updateClipFade(item);
} else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
}
if (end.cropStart != start.cropStart) {
KdenliveSettings::setSnaptopoints(snap);
}
-void CustomTrackView::updateClipFade(ClipItem * item, bool updateFadeOut)
-{
- if (!updateFadeOut) {
- int end = item->fadeIn();
- if (end != 0) {
- // there is a fade in effect
- int effectPos = item->hasEffect("volume", "fadein");
- if (effectPos != -1) {
- QDomElement oldeffect = item->effectAt(effectPos);
- int start = item->cropStart().frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeIn(max);
- end = item->fadeIn();
- }
- end += start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+void CustomTrackView::updateClipFade(ClipItem * item)
+{
+ int end = item->fadeIn();
+ if (end != 0) {
+ // there is a fade in effect
+ int effectPos = item->hasEffect("volume", "fadein");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int start = item->cropStart().frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ // Make sure the fade effect is not longer than the clip
+ item->setFadeIn(max);
+ end = item->fadeIn();
}
- effectPos = item->hasEffect("brightness", "fade_from_black");
- if (effectPos != -1) {
- QDomElement oldeffect = item->effectAt(effectPos);
- int start = item->cropStart().frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeIn(max);
- end = item->fadeIn();
- }
- end += start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ end += start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ }
+ effectPos = item->hasEffect("brightness", "fade_from_black");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int start = item->cropStart().frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ // Make sure the fade effect is not longer than the clip
+ item->setFadeIn(max);
+ end = item->fadeIn();
}
- }
- } else {
- int start = item->fadeOut();
- if (start != 0) {
- // there is a fade in effect
- int effectPos = item->hasEffect("volume", "fadeout");
- if (effectPos != -1) {
- QDomElement oldeffect = item->effectAt(effectPos);
- int end = (item->duration() - item->cropStart()).frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeOut(max);
- start = item->fadeOut();
- }
- start = end - start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ end += start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ }
+ }
+ int start = item->fadeOut();
+ if (start != 0) {
+ // there is a fade out effect
+ int effectPos = item->hasEffect("volume", "fadeout");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int max = item->cropDuration().frames(m_document->fps());
+ int end = max + item->cropStart().frames(m_document->fps());
+ if (start > max) {
+ // Make sure the fade effect is not longer than the clip
+ item->setFadeOut(max);
+ start = item->fadeOut();
}
- effectPos = item->hasEffect("brightness", "fade_to_black");
- if (effectPos != -1) {
- QDomElement oldeffect = item->effectAt(effectPos);
- int end = (item->duration() - item->cropStart()).frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeOut(max);
- start = item->fadeOut();
- }
- start = end - start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ start = end - start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ }
+ effectPos = item->hasEffect("brightness", "fade_to_black");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int max = item->cropDuration().frames(m_document->fps());
+ int end = max + item->cropStart().frames(m_document->fps());
+ if (start > max) {
+ // Make sure the fade effect is not longer than the clip
+ item->setFadeOut(max);
+ start = item->fadeOut();
}
+ start = end - start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
}
}
}
m_tool = tool;
}
-void CustomTrackView::setScale(double scaleFactor)
+void CustomTrackView::setScale(double scaleFactor, double verticalScale)
{
QMatrix matrix;
- matrix = matrix.scale(scaleFactor, 1);
- m_scene->setScale(scaleFactor);
- //scale(scaleFactor, 1);
+ matrix = matrix.scale(scaleFactor, verticalScale);
+ m_scene->setScale(scaleFactor, verticalScale);
m_animationTimer->stop();
delete m_visualTip;
m_visualTip = NULL;
}
}
-void CustomTrackView::drawBackground(QPainter * painter, const QRectF & rect)
+void CustomTrackView::drawBackground(QPainter * painter, const QRectF &rect)
{
QRectF r = rect;
r.setWidth(r.width() + 1);
QColor lockedColor = scheme.background(KColorScheme::NegativeBackground).color();
QColor audioColor = palette().alternateBase().color();
QColor base = scheme.background(KColorScheme::NormalBackground).color();
- for (uint i = 0; i < max;i++) {
+ for (uint i = 0; i < max; i++) {
if (m_document->trackInfoAt(max - i - 1).isLocked == true) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(lockedColor));
else if (m_document->trackInfoAt(max - i - 1).type == AUDIOTRACK) painter->fillRect(r.left(), m_tracksHeight * i + 1, r.right() - r.left() + 1, m_tracksHeight - 1, QBrush(audioColor));
- painter->drawLine(r.left(), m_tracksHeight * (i + 1), r.right(), m_tracksHeight * (i + 1));
+ painter->drawLine(r.left(), m_tracksHeight *(i + 1), r.right(), m_tracksHeight *(i + 1));
}
int lowerLimit = m_tracksHeight * m_document->tracksCount() + 1;
if (height() > lowerLimit)
QList<QGraphicsItem *> itemList = items();
//if (itemList.isEmpty()) return;
ClipItem *item;
- QString thumbBase = m_document->projectFolder().path() + "/thumbs/";
+ const QString thumbBase = m_document->projectFolder().path() + "/thumbs/";
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET) {
item = static_cast <ClipItem *>(itemList.at(i));