#include "addtimelineclipcommand.h"
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove)
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove)
: m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt), m_remove(doRemove) {
if (!m_remove) setText(i18n("Add timeline clip"));
else setText(i18n("Delete timeline clip"));
#include <KDebug>
+#include "gentime.h"
#include "projectlist.h"
#include "customtrackview.h"
class AddTimelineClipCommand : public QUndoCommand {
public:
- AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove);
+ AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
- int m_clipDuration;
+ GenTime m_clipDuration;
int m_clipId;
QDomElement m_xml;
int m_clipTrack;
- int m_clipPos;
+ GenTime m_clipPos;
QRectF m_clipRect;
bool m_doIt;
bool m_remove;
#include "events.h"
#include "kdenlivesettings.h"
-ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration)
- : QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0) {
+ClipItem::ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps)
+ : QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_fps(fps), m_hover(false) {
//setToolTip(name);
- kDebug() << "******* CREATING NEW TML CLIP, DUR: " << duration;
+ // kDebug() << "******* CREATING NEW TML CLIP, DUR: " << duration;
m_xml = clip->toXML();
m_clipName = clip->name();
m_producer = clip->getId();
m_clipType = clip->clipType();
- m_cropStart = 0;
+ m_cropStart = GenTime();
m_maxDuration = duration;
- if (duration != -1) m_cropDuration = duration;
+ if (duration != GenTime()) m_cropDuration = duration;
else m_cropDuration = m_maxDuration;
setAcceptDrops(true);
audioThumbReady = clip->audioThumbCreated();
setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemClipsChildrenToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ setAcceptsHoverEvents(true);
connect(this , SIGNAL(prepareAudioThumb(double, QPainterPath, int, int)) , this, SLOT(slotPrepareAudioThumb(double, QPainterPath, int, int)));
setBrush(QColor(100, 100, 150));
void ClipItem::slotFetchThumbs() {
m_thumbsRequested += 2;
- emit getThumb(m_cropStart, m_cropStart + m_cropDuration);
+ emit getThumb(m_cropStart.frames(m_fps), (m_cropStart + m_cropDuration).frames(m_fps));
}
void ClipItem::slotGetStartThumb() {
m_thumbsRequested++;
- emit getThumb(m_cropStart, -1);
+ emit getThumb(m_cropStart.frames(m_fps), -1);
}
void ClipItem::slotGetEndThumb() {
m_thumbsRequested++;
- emit getThumb(-1, m_cropStart + m_cropDuration);
+ emit getThumb(-1, (m_cropStart + m_cropDuration).frames(m_fps));
}
void ClipItem::slotThumbReady(int frame, QPixmap pix) {
if (m_thumbsRequested == 0) return;
- if (frame == m_cropStart) m_startPix = pix;
+ if (frame == m_cropStart.frames(m_fps)) m_startPix = pix;
else m_endPix = pix;
update();
m_thumbsRequested--;
return m_producer;
}
-int ClipItem::maxDuration() {
+GenTime ClipItem::maxDuration() {
return m_maxDuration;
}
-int ClipItem::duration() {
+GenTime ClipItem::duration() {
return m_cropDuration;
}
-int ClipItem::startPos() {
+GenTime ClipItem::startPos() {
return m_startPos;
}
-int ClipItem::cropStart() {
+GenTime ClipItem::cropStart() {
return m_cropStart;
}
-int ClipItem::endPos() {
+GenTime ClipItem::endPos() {
return m_startPos + m_cropDuration;
}
painter->fillPath(path, QBrush(QColor(200, 200, 200, 127)));
int channels = 2;
- double pixelForOneFrame = (double)br.width() / duration();
+ double pixelForOneFrame = (double)br.width() / duration().frames(m_fps);
if (pixelForOneFrame != framePixelWidth)
audioThumbCachePic.clear();
emit prepareAudioThumb(pixelForOneFrame, path, startpixel, endpixel + 200);//200 more for less missing parts before repaint after scrolling
}
// draw start / end fades
- double scale = br.width() / m_cropDuration;
+ double scale = br.width() / m_cropDuration.frames(m_fps);
QBrush fades;
if (isSelected()) {
fades = QBrush(QColor(200, 50, 50, 150));
//painter->drawText(rect(), Qt::AlignCenter, m_name);
// painter->drawRect(boundingRect());
//painter->drawRoundRect(-10, -10, 20, 20);
- painter->setPen(QPen(Qt::black));
- painter->setBrush(QBrush(Qt::yellow));
- painter->drawEllipse(br.x() + 10, br.y() + br.height() / 2 - 5 , 10, 10);
- painter->drawEllipse(br.x() + br.width() - 20, br.y() + br.height() / 2 - 5, 10, 10);
+ if (m_hover) {
+ painter->setPen(QPen(Qt::black));
+ painter->setBrush(QBrush(Qt::yellow));
+ painter->drawEllipse(br.x() + 10, br.y() + br.height() / 2 - 5 , 10, 10);
+ painter->drawEllipse(br.x() + br.width() - 20, br.y() + br.height() / 2 - 5, 10, 10);
+ }
}
void ClipItem::setFadeIn(int pos, double scale) {
int oldIn = m_startFade;
if (pos < 0) pos = 0;
- if (pos > m_cropDuration) pos = m_cropDuration / 2;
+ if (pos > m_cropDuration.frames(m_fps)) pos = m_cropDuration.frames(m_fps) / 2;
m_startFade = pos;
if (oldIn > pos) update(rect().x(), rect().y(), oldIn * scale, rect().height());
else update(rect().x(), rect().y(), pos * scale, rect().height());
void ClipItem::setFadeOut(int pos, double scale) {
int oldOut = m_endFade;
if (pos < 0) pos = 0;
- if (pos > m_cropDuration) pos = m_cropDuration / 2;
+ if (pos > m_cropDuration.frames(m_fps)) pos = m_cropDuration.frames(m_fps) / 2;
m_endFade = pos;
if (oldOut > pos) update(rect().x() + rect().width() - pos * scale, rect().y(), pos * scale, rect().height());
else update(rect().x() + rect().width() - oldOut * scale, rect().y(), oldOut * scale, rect().height());
QGraphicsRectItem::mouseReleaseEvent(event);
}
+//virtual
+void ClipItem::hoverEnterEvent(QGraphicsSceneHoverEvent *) {
+ m_hover = true;
+ update();
+}
+
+//virtual
+void ClipItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
+ m_hover = false;
+ update();
+}
+
void ClipItem::moveTo(int x, double scale, double offset, int newTrack) {
double origX = rect().x();
double origY = rect().y();
if (item->type() == 70000) {
if (offset == 0) {
QRectF other = ((QGraphicsRectItem *)item)->rect();
- if (x < m_startPos) {
+ if (x < m_startPos.frames(m_fps)) {
kDebug() << "COLLISION, MOVING TO------";
- m_startPos = ((ClipItem *)item)->endPos() + 1;
- origX = m_startPos * scale;
+ m_startPos = ((ClipItem *)item)->endPos() + GenTime(1, m_fps);
+ origX = m_startPos.frames(m_fps) * scale;
} else {
kDebug() << "COLLISION, MOVING TO+++";
m_startPos = ((ClipItem *)item)->startPos() - m_cropDuration;
- origX = m_startPos * scale;
+ origX = m_startPos.frames(m_fps) * scale;
}
}
setRect(origX, origY, rect().width(), rect().height());
}
if (success) {
m_track = newTrack;
- m_startPos = x;
+ m_startPos = GenTime(x, m_fps);
}
/* QList <QGraphicsItem *> childrenList = QGraphicsItem::children();
for (int i = 0; i < childrenList.size(); ++i) {
}
void ClipItem::resizeStart(int posx, double scale) {
- int durationDiff = posx - m_startPos;
- if (durationDiff == 0) return;
- kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
- if (m_cropStart + durationDiff < 0) {
- durationDiff = -m_cropStart;
+ GenTime durationDiff = GenTime(posx, m_fps) - m_startPos;
+ if (durationDiff == GenTime()) return;
+ //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
+ if (m_cropStart + durationDiff < GenTime()) {
+ durationDiff = GenTime() - m_cropStart;
} else if (durationDiff >= m_cropDuration) {
- durationDiff = m_cropDuration - 3;
+ durationDiff = m_cropDuration - GenTime(3, m_fps);
}
m_startPos += durationDiff;
m_cropStart += durationDiff;
- m_cropDuration -= durationDiff;
- setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height());
+ m_cropDuration = m_cropDuration - durationDiff;
+ setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height());
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == 70000) {
- int diff = ((ClipItem *)item)->endPos() + 1 - m_startPos;
- setRect((m_startPos + diff) * scale, rect().y(), (m_cropDuration - diff) * scale, rect().height());
+ GenTime diff = ((ClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
+ setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height());
m_startPos += diff;
m_cropStart += diff;
- m_cropDuration -= diff;
+ m_cropDuration = m_cropDuration - diff;
break;
}
}
}
void ClipItem::resizeEnd(int posx, double scale) {
- int durationDiff = posx - endPos();
- if (durationDiff == 0) return;
- kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
- if (m_cropDuration + durationDiff <= 0) {
- durationDiff = - (m_cropDuration - 3);
+ GenTime durationDiff = GenTime(posx, m_fps) - endPos();
+ if (durationDiff == GenTime()) return;
+ //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
+ if (m_cropDuration + durationDiff <= GenTime()) {
+ durationDiff = GenTime() - (m_cropDuration - GenTime(3, m_fps));
} else if (m_cropDuration + durationDiff >= m_maxDuration) {
durationDiff = m_maxDuration - m_cropDuration;
}
m_cropDuration += durationDiff;
- setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height());
+ setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height());
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
for (int i = 0; i < collisionList.size(); ++i) {
QGraphicsItem *item = collisionList.at(i);
if (item->type() == 70000) {
- int diff = ((ClipItem *)item)->startPos() - 1 - startPos();
+ GenTime diff = ((ClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos();
m_cropDuration = diff;
- setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height());
+ setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height());
break;
}
}
doc.setContent(effects, true);
QDomElement e = doc.documentElement();
CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
- if (view) view->slotAddEffect(e, GenTime(m_startPos, 25), m_track);
+ if (view) view->slotAddEffect(e, m_startPos, m_track);
}
//virtual
Q_OBJECT
public:
- ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration);
+ ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps);
virtual ~ ClipItem();
virtual void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
int clipType();
DocClipBase *baseClip();
QString clipName();
- int maxDuration();
+ GenTime maxDuration();
int track();
void setTrack(int track);
- int startPos();
- int cropStart();
- int endPos();
- int duration();
+ GenTime startPos();
+ GenTime cropStart();
+ GenTime endPos();
+ GenTime duration();
QDomElement xml() const;
int fadeIn() const;
int fadeOut() const;
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
+ virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *);
+ virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
private:
QDomElement m_xml;
DocClipBase *m_clip;
- int m_textWidth;
OPERATIONTYPE m_resizeMode;
int m_grabPoint;
int m_producer;
CLIPTYPE m_clipType;
QString m_clipName;
- int m_maxDuration;
- int m_cropStart;
- int m_cropDuration;
+ GenTime m_maxDuration;
+ GenTime m_cropStart;
+ GenTime m_cropDuration;
int m_maxTrack;
int m_track;
- int m_startPos;
+ GenTime m_startPos;
QPixmap m_startPix;
QPixmap m_endPix;
bool m_hasThumbs;
double m_opacity;
QTimeLine *m_timeLine;
uint m_thumbsRequested;
+ double m_fps;
+ bool m_hover;
EffectsList m_effectList;
QMap<int, QPixmap> audioThumbCachePic;
m_dragItem->resizeEnd(pos / m_scale, m_scale);
} else if (m_operationMode == FADEIN) {
int pos = mapToScene(event->pos()).x() / m_scale;
- m_dragItem->setFadeIn(pos - m_dragItem->startPos(), m_scale);
+ m_dragItem->setFadeIn(pos - m_dragItem->startPos().frames(m_document->fps()), m_scale);
} else if (m_operationMode == FADEOUT) {
int pos = mapToScene(event->pos()).x() / m_scale;
- m_dragItem->setFadeOut(m_dragItem->endPos() - pos, m_scale);
+ m_dragItem->setFadeOut(m_dragItem->endPos().frames(m_document->fps()) - pos, m_scale);
}
if (m_animation) delete m_animation;
}
m_dragItem = (ClipItem *) item;
emit clipItemSelected(m_dragItem);
- m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale;
+ m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps()) * m_scale;
m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale);
if (m_operationMode == MOVE || m_operationMode == RESIZESTART)
- m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track());
+ m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track());
else if (m_operationMode == RESIZEEND)
- m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track());
+ m_startPos = QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track());
kDebug() << "//////// ITEM CLICKED: " << m_startPos;
collision = true;
break;
void CustomTrackView::slotRefreshEffects(ClipItem *clip) {
int track = m_tracksCount - clip->track();
- GenTime pos = GenTime(clip->startPos(), m_document->fps());
+ GenTime pos = clip->startPos();
m_document->renderer()->mltRemoveEffect(track, pos, "-1", false);
for (int i = 0; i < clip->effectsCount(); i++) {
m_document->renderer()->mltAddEffect(track, pos, clip->getEffectArgs(clip->effectAt(i)), false);
// not be changed
if (effect.attribute("kdenlive_ix").toInt() == 0)
effect.setAttribute("kdenlive_ix", QString::number(item->effectsCounter()));
- AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(), GenTime(item->startPos(), m_document->fps()), effect, true);
+ AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(), item->startPos(), effect, true);
m_commandStack->push(command);
}
}
}
void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect) {
- AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effect, false);
+ AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), effect, false);
m_commandStack->push(command);
}
if (effectParams["disabled"] == "1") {
QString index = effectParams["kdenlive_ix"];
m_document->renderer()->mltRemoveEffect(track, pos, index);
- } else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effectParams);
+ } else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), clip->startPos(), effectParams);
}
}
void CustomTrackView::slotChangeEffectState(ClipItem *clip, QDomElement effect, bool disable) {
QDomElement oldEffect = effect.cloneNode().toElement();
effect.setAttribute("disabled", disable);
- EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), oldEffect, effect, true);
+ EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldEffect, effect, true);
m_commandStack->push(command);
}
void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect) {
- EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), oldeffect, effect, true);
+ EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldeffect, effect, true);
m_commandStack->push(command);
}
void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
int in = 0;
- int out = clip->duration().frames(m_document->fps());
+ GenTime out = clip->duration();
//kdDebug()<<"- - - -CREATING CLIP, duration = "<<out<<", URL: "<<clip->fileURL();
int trackTop = ((int) mapToScene(pos).y() / 50) * 50 + 1;
- m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / 50), in, QRectF(mapToScene(pos).x() * m_scale, trackTop, out * m_scale, 49), out);
+ m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / 50), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, 49), out, m_document->fps());
scene()->addItem(m_dropItem);
}
m_dropItem->baseClip()->addReference();
m_document->updateClip(m_dropItem->baseClip()->getId());
// kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksCount<<", DROP: "<<m_dropItem->track();
- m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), GenTime(m_dropItem->startPos(), m_document->fps()), m_dropItem->xml());
+ m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), m_dropItem->startPos(), m_dropItem->xml());
} else QGraphicsView::dropEvent(event);
m_dropItem = NULL;
}
setDragMode(QGraphicsView::NoDrag);
if (m_dragItem == NULL) return;
//kDebug()<<"/// MOVING CLIP: "<<m_startPos<<", END: "<<QPoint(m_dragItem->rect().x(),m_dragItem->rect().y());
- if (m_operationMode == MOVE && m_startPos.x() != m_dragItem->startPos()) {
+ if (m_operationMode == MOVE && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) {
// move clip
- MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), false);
+ MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false);
m_commandStack->push(command);
- m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos());
+ m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos().frames(m_document->fps()));
} else if (m_operationMode == RESIZESTART) {
// resize start
- ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), true, false);
+ ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false);
- m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->endPos(), m_document->fps()), GenTime(m_dragItem->startPos(), m_document->fps()), GenTime(m_startPos.x(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()) + GenTime(m_dragItem->endPos(), m_document->fps()) - GenTime(m_dragItem->startPos(), m_document->fps()));
+ m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime(m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
m_commandStack->push(command);
m_document->renderer()->doRefresh();
} else if (m_operationMode == RESIZEEND) {
// resize end
- ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos(), m_dragItem->track()), false, false);
+ ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()), false, false);
- m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->startPos(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()) + GenTime(m_dragItem->endPos(), m_document->fps()) - GenTime(m_dragItem->startPos(), m_document->fps()));
+ m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
m_commandStack->push(command);
m_document->renderer()->doRefresh();
}
m_dragItem = NULL;
}
-void CustomTrackView::deleteClip(int track, int startpos, const QRectF &rect) {
+void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect) {
ClipItem *item = getClipItemAt(startpos, track);
if (!item) {
kDebug() << "---------------- ERROR, CANNOT find clip to move at: " << rect.x();
item->baseClip()->removeReference();
m_document->updateClip(item->baseClip()->getId());
delete item;
- m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, m_document->fps()));
+ m_document->renderer()->mltRemoveClip(m_tracksCount - track, startpos);
m_document->renderer()->doRefresh();
}
-void CustomTrackView::addClip(QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration) {
- QRect r(startpos * m_scale, 50 * track, duration * m_scale, 49);
+void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) {
+ QRect r(startpos.frames(m_document->fps()) * m_scale, 50 * track, duration.frames(m_document->fps()) * m_scale, 49);
DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
- ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration);
+ ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration, m_document->fps());
scene()->addItem(item);
baseclip->addReference();
m_document->updateClip(baseclip->getId());
- m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, m_document->fps()), xml);
+ m_document->renderer()->mltInsertClip(m_tracksCount - track, startpos, xml);
m_document->renderer()->doRefresh();
}
return (ClipItem *) scene()->itemAt(pos * m_scale, track * 50 + 25);
}
+ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) {
+ return (ClipItem *) scene()->itemAt(pos.frames(m_document->fps()) * m_scale, track * 50 + 25);
+}
+
void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) {
ClipItem *item = getClipItemAt(startPos.x() + 1, startPos.y());
if (!item) {
}
qreal diff = endPos.x() - startPos.x();
if (resizeClipStart) {
- m_document->renderer()->mltResizeClipStart(m_tracksCount - item->track(), GenTime(item->endPos(), m_document->fps()), GenTime(endPos.x(), m_document->fps()), GenTime(item->startPos(), m_document->fps()), GenTime(item->cropStart() + diff, m_document->fps()), GenTime(item->cropStart() + diff, m_document->fps()) + GenTime(item->endPos(), m_document->fps()) - GenTime(endPos.x(), m_document->fps()));
+ m_document->renderer()->mltResizeClipStart(m_tracksCount - item->track(), item->endPos(), GenTime(endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime(diff, m_document->fps()), item->cropStart() + GenTime(diff, m_document->fps()) + item->endPos() - GenTime(endPos.x(), m_document->fps()));
item->resizeStart(endPos.x(), m_scale);
} else {
- m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), GenTime(item->startPos(), m_document->fps()), GenTime(item->cropStart(), m_document->fps()), GenTime(item->cropStart(), m_document->fps()) + GenTime(endPos.x(), m_document->fps()) - GenTime(item->startPos(), m_document->fps()));
+ m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime(endPos.x(), m_document->fps()) - item->startPos());
item->resizeEnd(endPos.x(), m_scale);
}
m_document->renderer()->doRefresh();
void CustomTrackView::updateSnapPoints(ClipItem *selected) {
m_snapPoints.clear();
int offset = 0;
- if (selected) offset = selected->duration();
+ if (selected) offset = selected->duration().frames(m_document->fps());
QList<QGraphicsItem *> itemList = items();
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == 70000 && itemList.at(i) != selected) {
ClipItem *item = (ClipItem *)itemList.at(i);
- int start = item->startPos();
+ int start = item->startPos().frames(m_document->fps());
int fadein = item->fadeIn() + start;
- int end = item->endPos();
+ int end = item->endPos().frames(m_document->fps());
int fadeout = end - item->fadeOut();
m_snapPoints.append(start);
if (fadein != start) m_snapPoints.append(fadein);
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == 70000) {
ClipItem *clip = (ClipItem *)itemList.at(i);
- clip->setRect(clip->startPos() * m_scale, clip->rect().y(), clip->duration() * m_scale, clip->rect().height());
+ clip->setRect(clip->startPos().frames(m_document->fps()) * m_scale, clip->rect().y(), clip->duration().frames(m_document->fps()) * m_scale, clip->rect().height());
}
/*else if (itemList.at(i)->type() == 70001) {
LabelItem *label = (LabelItem *)itemList.at(i);
void checkAutoScroll();
void moveClip(const QPointF &startPos, const QPointF &endPos);
void resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart);
- void addClip(QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration);
- void deleteClip(int track, int startpos, const QRectF &rect);
+ void addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration);
+ void deleteClip(int track, GenTime startpos, const QRectF &rect);
void setScale(double scaleFactor);
void deleteClip(int clipId);
void slotAddEffect(QDomElement effect, GenTime pos, int track);
void updateSnapPoints(ClipItem *selected);
double getSnapPointForPos(double pos);
ClipItem *getClipItemAt(int pos, int track);
+ ClipItem *getClipItemAt(GenTime pos, int track);
void checkScrolling();
/** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */
bool m_autoScroll;
DocClipBase *clip = m_doc->clipManager()->getClipById(id);
int out = elem.attribute("out", 0).toInt() - in;
//kDebug()<<"++++++++++++++\n\n / / /ADDING CLIP: "<<clip.cropTime<<", out: "<<clip.duration<<", Producer: "<<clip.producer<<"\n\n++++++++++++++++++++";
- ClipItem *item = new ClipItem(clip, ix, position, QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), out);
+ ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), GenTime(out, m_doc->fps()), m_doc->fps());
m_scene->addItem(item);
position += out;