diff --git a/app/node/output/timeline/timeline.cpp b/app/node/output/timeline/timeline.cpp index ea95667cb..595e30c59 100644 --- a/app/node/output/timeline/timeline.cpp +++ b/app/node/output/timeline/timeline.cpp @@ -67,6 +67,10 @@ void TimelineOutput::AttachTimeline(TimelinePanel *timeline) if (attached_timeline_ != nullptr) { attached_timeline_->Clear(); + // FIXME: TEST CODE ONLY + attached_timeline_->SetTimebase(rational(1001, 30000)); + // END TEST CODE + Block* previous_block = attached_block(); while (previous_block != nullptr) { diff --git a/app/panel/timeline/timeline.cpp b/app/panel/timeline/timeline.cpp index a3841b286..4382a563c 100644 --- a/app/panel/timeline/timeline.cpp +++ b/app/panel/timeline/timeline.cpp @@ -58,6 +58,7 @@ void TimelinePanel::AddClip(ClipBlock *clip) void TimelinePanel::SetTimebase(const rational &timebase) { ruler_->SetTimebase(timebase); + view_->SetTimebase(timebase); } void TimelinePanel::changeEvent(QEvent *e) diff --git a/app/widget/timelineview/CMakeLists.txt b/app/widget/timelineview/CMakeLists.txt index 84c42fb5f..db2741e3e 100644 --- a/app/widget/timelineview/CMakeLists.txt +++ b/app/widget/timelineview/CMakeLists.txt @@ -20,5 +20,7 @@ set(OLIVE_SOURCES widget/timelineview/timelineview.cpp widget/timelineview/timelineviewclipitem.h widget/timelineview/timelineviewclipitem.cpp + widget/timelineview/timelineviewghostitem.h + widget/timelineview/timelineviewghostitem.cpp PARENT_SCOPE ) diff --git a/app/widget/timelineview/timelineview.cpp b/app/widget/timelineview/timelineview.cpp index 30b6d6fd6..bb5d7b2c5 100644 --- a/app/widget/timelineview/timelineview.cpp +++ b/app/widget/timelineview/timelineview.cpp @@ -6,6 +6,8 @@ TimelineView::TimelineView(QWidget *parent) : QGraphicsView(parent) { setScene(&scene_); + setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + setDragMode(RubberBandDrag); } void TimelineView::AddClip(ClipBlock *clip) @@ -15,7 +17,9 @@ void TimelineView::AddClip(ClipBlock *clip) scene_.addItem(clip_item); // FIXME: Test code only - clip_item->setRect(clip->in().ToDouble(), 0, clip->out().ToDouble(), 100); + double framerate = timebase_.ToDouble(); + double clip_item_x = clip->in().ToDouble() / framerate; + clip_item->setRect(clip_item_x, 0, clip->out().ToDouble() / framerate - clip_item_x - 1, 100); // End test code } @@ -24,6 +28,11 @@ void TimelineView::SetScale(const double &scale) scale_ = scale; } +void TimelineView::SetTimebase(const rational &timebase) +{ + timebase_ = timebase; +} + void TimelineView::Clear() { scene_.clear(); diff --git a/app/widget/timelineview/timelineview.h b/app/widget/timelineview/timelineview.h index dd41b2c25..21b930912 100644 --- a/app/widget/timelineview/timelineview.h +++ b/app/widget/timelineview/timelineview.h @@ -14,12 +14,16 @@ public: void SetScale(const double& scale); + void SetTimebase(const rational& timebase); + void Clear(); private: QGraphicsScene scene_; double scale_; + + rational timebase_; }; #endif // TIMELINEVIEW_H diff --git a/app/widget/timelineview/timelineviewclipitem.cpp b/app/widget/timelineview/timelineviewclipitem.cpp index 380bbc8a1..cf2e15bc0 100644 --- a/app/widget/timelineview/timelineviewclipitem.cpp +++ b/app/widget/timelineview/timelineviewclipitem.cpp @@ -1,13 +1,43 @@ #include "timelineviewclipitem.h" +#include +#include +#include + TimelineViewClipItem::TimelineViewClipItem(QGraphicsItem* parent) : QGraphicsRectItem(parent), clip_(nullptr) { - + setBrush(Qt::white); + setFlag(QGraphicsItem::ItemIsSelectable, true); } void TimelineViewClipItem::SetClip(ClipBlock *clip) { clip_ = clip; } + +void TimelineViewClipItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(widget) + + /*QLinearGradient grad; + grad.setStart(0, 0); + grad.setFinalStop(0, rect().height()); + grad.setColorAt(0.0, QColor(192, 192, 255)); + grad.setColorAt(1.0, QColor(128, 128, 192)); + painter->fillRect(rect(), grad);*/ + painter->fillRect(rect(), QColor(128, 128, 192)); + + if (option->state & QStyle::State_Selected) { + painter->fillRect(rect(), QColor(0, 0, 0, 64)); + } + + painter->setPen(Qt::white); + painter->drawLine(rect().topLeft(), QPointF(rect().right(), rect().top())); + painter->drawLine(rect().topLeft(), QPointF(rect().left(), rect().bottom() - 1)); + + painter->setPen(QColor(64, 64, 64)); + painter->drawLine(QPointF(rect().left(), rect().bottom() - 1), QPointF(rect().right(), rect().bottom() - 1)); + painter->drawLine(QPointF(rect().right(), rect().bottom() - 1), QPointF(rect().right(), rect().top())); +} diff --git a/app/widget/timelineview/timelineviewclipitem.h b/app/widget/timelineview/timelineviewclipitem.h index f67a396dd..2240327a4 100644 --- a/app/widget/timelineview/timelineviewclipitem.h +++ b/app/widget/timelineview/timelineviewclipitem.h @@ -12,6 +12,9 @@ public: void SetClip(ClipBlock* clip); +protected: + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; + private: ClipBlock* clip_; }; diff --git a/app/widget/timelineview/timelineviewghostitem.cpp b/app/widget/timelineview/timelineviewghostitem.cpp new file mode 100644 index 000000000..6e2551cca --- /dev/null +++ b/app/widget/timelineview/timelineviewghostitem.cpp @@ -0,0 +1,6 @@ +#include "timelineviewghostitem.h" + +TimelineViewGhostItem::TimelineViewGhostItem() +{ + +} diff --git a/app/widget/timelineview/timelineviewghostitem.h b/app/widget/timelineview/timelineviewghostitem.h new file mode 100644 index 000000000..9c74bbb3a --- /dev/null +++ b/app/widget/timelineview/timelineviewghostitem.h @@ -0,0 +1,12 @@ +#ifndef TIMELINEVIEWGHOSTITEM_H +#define TIMELINEVIEWGHOSTITEM_H + +#include + +class TimelineViewGhostItem : public QGraphicsRectItem +{ +public: + TimelineViewGhostItem(); +}; + +#endif // TIMELINEVIEWGHOSTITEM_H diff --git a/app/widget/timeruler/timeruler.cpp b/app/widget/timeruler/timeruler.cpp index 6c9fde241..3942df09c 100644 --- a/app/widget/timeruler/timeruler.cpp +++ b/app/widget/timeruler/timeruler.cpp @@ -13,7 +13,7 @@ TimeRuler::TimeRuler(bool text_visible, QWidget* parent) : QWidget(parent), scroll_(0), centered_text_(true), - scale_(16.0), // FIXME: Temporary value + scale_(1.0), // FIXME: Temporary value time_(0) { QFontMetrics fm = fontMetrics();