ColorGradient.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include <QWidget>
  3. #include <QColor>
  4. #include <QComboBox>
  5. #include <list>
  6. #include "ColorButton.h"
  7. struct ColorPoint {
  8. double alpha;
  9. QColor color;
  10. ColorPoint(double alpha, QColor color) : alpha(std::clamp(alpha, 0.0, 1.0)), color(color) {}
  11. };
  12. class ColorGradient : public QWidget
  13. {
  14. Q_OBJECT
  15. public:
  16. enum ColorInterpolationMode{ RGB, HSL};
  17. enum ColorMode{ Interpolate, Discrete};
  18. ColorGradient(QWidget *parent);
  19. ~ColorGradient();
  20. QColor getColor(double alpha);
  21. void addColorPoint(double alpha);
  22. void removeColorPoint(ColorPoint& point);
  23. void setMode(ColorMode mode);
  24. void setInterpolationMode(ColorInterpolationMode mode);
  25. private:
  26. ColorMode mode = ColorMode::Interpolate;
  27. ColorInterpolationMode interpolationMode = ColorInterpolationMode::RGB;
  28. std::list<ColorPoint> pointList;
  29. //UI
  30. ColorPoint* selected = nullptr;
  31. QComboBox* interpolationCombobox = nullptr;
  32. QComboBox* modeCombobox = nullptr;
  33. QSpacerItem* spacerH = nullptr;
  34. QLabel* label = nullptr;
  35. ColorButton* colorbutton = nullptr;
  36. void paintEvent(QPaintEvent* event) override;
  37. void mousePressEvent(QMouseEvent* event) override;
  38. void mouseMoveEvent(QMouseEvent* event) override;
  39. signals:
  40. void gradientChanged();
  41. };