implemented bulk of curve editor's functionality

While certainly not entirely complete yet, this implements most of the UI
functionality of the graph editor.
This commit is contained in:
itsmattkc
2019-12-28 18:26:37 +11:00
parent b65abe4881
commit 26cafa7936
21 changed files with 603 additions and 36 deletions
+3 -2
View File
@@ -37,7 +37,8 @@ void KeyframeView::AddKeyframe(NodeKeyframePtr key, int y)
QPoint local_pt = mapFromGlobal(global_pt);
QPointF scene_pt = mapToScene(local_pt);
KeyframeViewItem* item = new KeyframeViewItem(key, scene_pt.y());
KeyframeViewItem* item = new KeyframeViewItem(key);
item->SetOverrideY(scene_pt.y());
item->SetScale(scale_);
item_map_.insert(key.get(), item);
scene()->addItem(item);
@@ -45,7 +46,7 @@ void KeyframeView::AddKeyframe(NodeKeyframePtr key, int y)
void KeyframeView::RemoveKeyframe(NodeKeyframePtr key)
{
delete item_map_.value(key.get());
delete item_map_.take(key.get());
}
void KeyframeView::mousePressEvent(QMouseEvent *event)
+14 -3
View File
@@ -7,11 +7,11 @@
#include "common/qtversionabstraction.h"
KeyframeViewItem::KeyframeViewItem(NodeKeyframePtr key, qreal vcenter, QGraphicsItem *parent) :
KeyframeViewItem::KeyframeViewItem(NodeKeyframePtr key, QGraphicsItem *parent) :
QGraphicsRectItem(parent),
key_(key),
scale_(1.0),
middle_(vcenter)
vert_center_(0)
{
keyframe_size_ = QFontMetricsWidth(qApp->fontMetrics(), "Oi");
setFlag(QGraphicsItem::ItemIsSelectable);
@@ -24,6 +24,12 @@ KeyframeViewItem::KeyframeViewItem(NodeKeyframePtr key, qreal vcenter, QGraphics
UpdatePos();
}
void KeyframeViewItem::SetOverrideY(qreal vertical_center)
{
vert_center_ = vertical_center;
UpdatePos();
}
void KeyframeViewItem::SetScale(double scale)
{
scale_ = scale;
@@ -35,6 +41,11 @@ NodeKeyframePtr KeyframeViewItem::key() const
return key_;
}
QPointF KeyframeViewItem::center_pos() const
{
return pos() + rect().center();
}
void KeyframeViewItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setPen(Qt::black);
@@ -71,7 +82,7 @@ void KeyframeViewItem::UpdatePos()
{
double x_center = key_->time().toDouble() * scale_;
setPos(x_center - keyframe_size_/2, middle_ - keyframe_size_/2);
setPos(x_center - keyframe_size_/2, vert_center_ - keyframe_size_/2);
}
void KeyframeViewItem::Redraw()
+6 -2
View File
@@ -9,12 +9,16 @@ class KeyframeViewItem : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
KeyframeViewItem(NodeKeyframePtr key, qreal vcenter, QGraphicsItem *parent = nullptr);
KeyframeViewItem(NodeKeyframePtr key, QGraphicsItem *parent = nullptr);
void SetOverrideY(qreal vertical_center);
void SetScale(double scale);
NodeKeyframePtr key() const;
QPointF center_pos() const;
protected:
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
@@ -23,7 +27,7 @@ private:
double scale_;
qreal middle_;
qreal vert_center_;
int keyframe_size_;