KSeExpr  4.0.4.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 */
30 class CCurveScene : public QGraphicsScene
31 {
32  Q_OBJECT
33 
36 
37 public:
38  CCurveScene();
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 
65 public 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 
71 Q_SIGNALS:
72  void cvSelected(double x, KSeExpr::Vec3d y, T_INTERP interp);
73  void curveChanged();
74 
75 private:
77 
78  QByteArray getCPixmap();
79 
80  int _width;
81  int _height;
84  std::vector<QGraphicsEllipseItem *> _circleObjects;
86  QPixmap _pixmap;
88  QWidget *_baseRectW;
89  QGraphicsProxyWidget *_baseRect;
90  bool _lmb;
91 };
92 
93 class ExprCBoxWidget : public QWidget
94 {
95  Q_OBJECT
96 public:
97  ExprCBoxWidget(CCurveScene *curveScene, QWidget *parent = 0)
98  : QWidget(parent)
99  , _curveScene(curveScene)
100  {
101  }
102  ~ExprCBoxWidget() override = default;
103 
104 protected:
105  void paintEvent(QPaintEvent *event) override;
106 
107 private:
109 };
110 
111 class ExprCSwatchFrame : public QFrame
112 {
113  Q_OBJECT
114 public:
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 
121 protected:
122  void paintEvent(QPaintEvent *event) override;
123  void mousePressEvent(QMouseEvent *event) override;
124 
125 Q_SIGNALS:
127  void swatchChanged(QColor color);
128 
129 private:
131  QColor _color;
132 };
133 
134 class ExprColorCurve : public QWidget
135 {
136  Q_OBJECT
137 
140 
141 public:
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 
153 public Q_SLOTS:
154  void cvSelectedSlot(double pos, KSeExpr::Vec3d val, T_INTERP interp);
155  void selPosChanged();
156  void openDetail();
157 
158 Q_SIGNALS:
159  void selPosChangedSignal(double pos);
161  void swatchChanged(QColor color);
162 
163 private Q_SLOTS:
164  void internalSwatchChanged(QColor color);
165 
166 private:
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 rebuildCurve()
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
ExprCSwatchFrame(KSeExpr::Vec3d value, QWidget *parent=nullptr)
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)
QColor getSwatchColor()
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
ExprColorCurve(QWidget *parent=nullptr, QString pLabel=QString(), QString vLabel=QString(), QString iLabel=QString(), bool expandable=true)
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