KSeExpr 6.0.0.0
ExprColorCurve.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2// SPDX-License-Identifier: LicenseRef-Apache-2.0
3// SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4// SPDX-License-Identifier: GPL-3.0-or-later
5/*
6 * @file ExprColorCurve.h
7 * @brief Contains PyQt4 Ramp Widget to emulate Maya's ramp widget
8 * @author Arthur Shek
9 * @version ashek 05/04/09 Initial Version
10 */
11
12#pragma once
13
14#include <vector>
15
16#include <QComboBox>
17#include <QGraphicsProxyWidget>
18#include <QGraphicsView>
19#include <QLineEdit>
20#include <QObject>
21
22#include <KSeExpr/Curve.h>
23
24#include "ExprCurve.h"
25
26/*
27 This class overrides QGraphicsScene so we can handle mouse
28 press, drag and keyboard events
29*/
30class CCurveScene : public QGraphicsScene
31{
32 Q_OBJECT
33
36
37public:
39 ~CCurveScene() override;
40
41 void addPoint(double x, KSeExpr::Vec3d y, T_INTERP interp, bool select = true);
42
43 void removePoint(int index);
44 void removeAll();
45
46 void keyPressEvent(QKeyEvent *event) override;
47
48 void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
49 void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
50 void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
51 void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
52 void drawRect();
53
54 void drawPoints();
55
56 QPixmap &getPixmap();
57 void emitCurveChanged();
58
59 void rebuildCurve();
60
61 std::vector<T_CURVE::CV> _cvs; // unsorted cvs
62
63 friend class ExprColorCurve;
64
65public Q_SLOTS:
66 void interpChanged(int interp);
67 void selPosChanged(double pos);
68 void selValChanged(const KSeExpr::Vec3d &val);
69 void resize(int width, int height);
70
71Q_SIGNALS:
72 void cvSelected(double x, KSeExpr::Vec3d y, T_INTERP interp);
74
75private:
77
78 QByteArray getCPixmap();
79
80 int _width;
84 std::vector<QGraphicsEllipseItem *> _circleObjects;
86 QPixmap _pixmap;
88 QWidget *_baseRectW;
89 QGraphicsProxyWidget *_baseRect;
90 bool _lmb;
91};
92
93class ExprCBoxWidget : public QWidget
94{
95 Q_OBJECT
96public:
97 ExprCBoxWidget(CCurveScene *curveScene, QWidget *parent = 0)
98 : QWidget(parent)
99 , _curveScene(curveScene)
100 {
101 }
102 ~ExprCBoxWidget() override = default;
103
104protected:
105 void paintEvent(QPaintEvent *event) override;
106
107private:
109};
110
111class ExprCSwatchFrame : public QFrame
112{
113 Q_OBJECT
114public:
115 ExprCSwatchFrame(KSeExpr::Vec3d value, QWidget *parent = nullptr);
116 ~ExprCSwatchFrame() override = default;
117
118 void setValue(const KSeExpr::Vec3d &value);
119 KSeExpr::Vec3d getValue() const;
120
121protected:
122 void paintEvent(QPaintEvent *event) override;
123 void mousePressEvent(QMouseEvent *event) override;
124
125Q_SIGNALS:
127 void swatchChanged(QColor color);
128
129private:
131 QColor _color;
132};
133
134class ExprColorCurve : public QWidget
135{
136 Q_OBJECT
137
140
141public:
142 ExprColorCurve(QWidget *parent = nullptr, QString pLabel = QString(), QString vLabel = QString(), QString iLabel = QString(), bool expandable = true);
143
144 ~ExprColorCurve() override = default;
145
146 // Convenience Functions
147 void addPoint(double x, KSeExpr::Vec3d y, T_INTERP interp, bool select = false);
148 void setSwatchColor(QColor color);
149 QColor getSwatchColor();
150
152
153public Q_SLOTS:
154 void cvSelectedSlot(double pos, KSeExpr::Vec3d val, T_INTERP interp);
155 void selPosChanged();
156 void openDetail();
157
158Q_SIGNALS:
159 void selPosChangedSignal(double pos);
161 void swatchChanged(QColor color);
162
163private Q_SLOTS:
164 void internalSwatchChanged(QColor color);
165
166private:
167 QLineEdit *_selPosEdit;
169 QComboBox *_interpComboBox;
170};
void interpChanged(int interp)
QByteArray getCPixmap()
QPixmap _pixmap
void removePoint(int index)
QGraphicsProxyWidget * _baseRect
void curveChanged()
QWidget * _baseRectW
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) override
QPixmap & getPixmap()
KSeExpr::Vec3d _color
std::vector< QGraphicsEllipseItem * > _circleObjects
void emitCurveChanged()
void selPosChanged(double pos)
void selValChanged(const KSeExpr::Vec3d &val)
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
void keyPressEvent(QKeyEvent *event) override
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) override
std::vector< T_CURVE::CV > _cvs
void addPoint(double x, KSeExpr::Vec3d y, T_INTERP interp, bool select=true)
~CCurveScene() override
T_CURVE * _curve
void cvSelected(double x, KSeExpr::Vec3d y, T_INTERP interp)
T_INTERP _interp
void resize(int width, int height)
void paintEvent(QPaintEvent *event) override
CCurveScene * _curveScene
ExprCBoxWidget(CCurveScene *curveScene, QWidget *parent=0)
~ExprCBoxWidget() override=default
KSeExpr::Vec3d getValue() const
void swatchChanged(QColor color)
void paintEvent(QPaintEvent *event) override
KSeExpr::Vec3d _value
void setValue(const KSeExpr::Vec3d &value)
~ExprCSwatchFrame() override=default
void selValChangedSignal(KSeExpr::Vec3d value)
void mousePressEvent(QMouseEvent *event) override
void internalSwatchChanged(QColor color)
void addPoint(double x, KSeExpr::Vec3d y, T_INTERP interp, bool select=false)
void swatchChanged(QColor color)
void setSwatchColor(QColor color)
CCurveScene * _scene
QComboBox * _interpComboBox
ExprCSwatchFrame * _selValEdit
~ExprColorCurve() override=default
void cvSelectedSlot(double pos, KSeExpr::Vec3d val, T_INTERP interp)
QLineEdit * _selPosEdit
void selValChangedSignal(KSeExpr::Vec3d val)
void selPosChangedSignal(double pos)
Interpolation curve class for double->double and double->Vec3D.
Definition Curve.h:27
InterpType
Supported interpolation types.
Definition Curve.h:32