From 5e66508f3ca4a845f51d3817713430e995142c40 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 5 Apr 2020 23:15:47 +1000 Subject: [PATCH] curveview: color code keyframe tracks when more than one is present --- app/widget/curvewidget/curveview.cpp | 14 +++++++++++++- app/widget/curvewidget/curveview.h | 2 ++ app/widget/keyframeview/keyframeviewitem.cpp | 13 ++++++++++++- app/widget/keyframeview/keyframeviewitem.h | 4 ++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/widget/curvewidget/curveview.cpp b/app/widget/curvewidget/curveview.cpp index 24a6079c3..e5114bf3f 100644 --- a/app/widget/curvewidget/curveview.cpp +++ b/app/widget/curvewidget/curveview.cpp @@ -92,9 +92,9 @@ void CurveView::drawBackground(QPainter *painter, const QRectF &rect) painter->drawLines(lines); // Draw keyframe lines - painter->setPen(QPen(palette().text().color(), qMax(1, fontMetrics().height() / 4))); for (int j=0;jsetPen(QPen(GetKeyframeColor(j), qMax(1, fontMetrics().height() / 4))); QList keys = GetKeyframesSortedByTime(j); if (!keys.isEmpty()) { @@ -290,6 +290,17 @@ void CurveView::CreateBezierControlPoints(KeyframeViewItem* item) connect(bezier_out_pt, &QObject::destroyed, this, &CurveView::BezierControlPointDestroyed, Qt::DirectConnection); } +QColor CurveView::GetKeyframeColor(int track) const +{ + if (track_count_) { + QColor c; + c.setHsvF(static_cast(track) / static_cast(track_count_), 0.5, 1.0); + return c; + } + + return palette().text().color(); +} + void CurveView::KeyframeValueChanged() { NodeKeyframe* key = static_cast(sender()); @@ -338,6 +349,7 @@ void CurveView::AddKeyframe(NodeKeyframePtr key) { KeyframeViewItem* item = AddKeyframeInternal(key); SetItemYFromKeyframeValue(key.get(), item); + item->SetOverrideBrush(GetKeyframeColor(key->track())); connect(key.get(), &NodeKeyframe::ValueChanged, this, &CurveView::KeyframeValueChanged); connect(key.get(), &NodeKeyframe::TypeChanged, this, &CurveView::KeyframeTypeChanged); diff --git a/app/widget/curvewidget/curveview.h b/app/widget/curvewidget/curveview.h index d0b458d0b..e60fcdc60 100644 --- a/app/widget/curvewidget/curveview.h +++ b/app/widget/curvewidget/curveview.h @@ -44,6 +44,8 @@ private: void CreateBezierControlPoints(KeyframeViewItem *item); + QColor GetKeyframeColor(int track) const; + int text_padding_; int minimum_grid_space_; diff --git a/app/widget/keyframeview/keyframeviewitem.cpp b/app/widget/keyframeview/keyframeviewitem.cpp index 8042291e6..32c0c69bf 100644 --- a/app/widget/keyframeview/keyframeviewitem.cpp +++ b/app/widget/keyframeview/keyframeviewitem.cpp @@ -12,7 +12,8 @@ KeyframeViewItem::KeyframeViewItem(NodeKeyframePtr key, QGraphicsItem *parent) : QGraphicsRectItem(parent), key_(key), scale_(1.0), - vert_center_(0) + vert_center_(0), + use_custom_brush_(false) { setFlag(QGraphicsItem::ItemIsSelectable); @@ -24,6 +25,8 @@ KeyframeViewItem::KeyframeViewItem(NodeKeyframePtr key, QGraphicsItem *parent) : setRect(-half_sz, -half_sz, keyframe_size, keyframe_size); UpdatePos(); + + // Set default brush } void KeyframeViewItem::SetOverrideY(qreal vertical_center) @@ -38,6 +41,12 @@ void KeyframeViewItem::SetScale(double scale) UpdatePos(); } +void KeyframeViewItem::SetOverrideBrush(const QBrush &b) +{ + use_custom_brush_ = true; + setBrush(b); +} + NodeKeyframePtr KeyframeViewItem::key() const { return key_; @@ -51,6 +60,8 @@ void KeyframeViewItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * if (option->state & QStyle::State_Selected) { painter->setBrush(widget->palette().highlight()); + } else if (use_custom_brush_) { + painter->setBrush(brush()); } else { painter->setBrush(widget->palette().text()); } diff --git a/app/widget/keyframeview/keyframeviewitem.h b/app/widget/keyframeview/keyframeviewitem.h index 848784233..1321c8aa6 100644 --- a/app/widget/keyframeview/keyframeviewitem.h +++ b/app/widget/keyframeview/keyframeviewitem.h @@ -16,6 +16,8 @@ public: void SetScale(double scale); + void SetOverrideBrush(const QBrush& b); + NodeKeyframePtr key() const; protected: @@ -30,6 +32,8 @@ private: qreal vert_center_; + bool use_custom_brush_; + private slots: void UpdatePos();