DISTRHO Plugin Framework
 All Classes Functions Variables Modules Pages
ImageKnob.hpp
1 /*
2  * DISTRHO Plugin Framework (DPF)
3  * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com>
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any purpose with
6  * or without fee is hereby granted, provided that the above copyright notice and this
7  * permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10  * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #ifndef DGL_IMAGE_KNOB_HPP_INCLUDED
18 #define DGL_IMAGE_KNOB_HPP_INCLUDED
19 
20 #include "Image.hpp"
21 #include "Widget.hpp"
22 
23 START_NAMESPACE_DGL
24 
25 // -----------------------------------------------------------------------
26 
27 class ImageKnob : public Widget
28 {
29 public:
30  enum Orientation {
31  Horizontal,
32  Vertical
33  };
34 
35  class Callback
36  {
37  public:
38  virtual ~Callback() {}
39  virtual void imageKnobDragStarted(ImageKnob* imageKnob) = 0;
40  virtual void imageKnobDragFinished(ImageKnob* imageKnob) = 0;
41  virtual void imageKnobValueChanged(ImageKnob* imageKnob, float value) = 0;
42  };
43 
44  explicit ImageKnob(Window& parent, const Image& image, Orientation orientation = Vertical) noexcept;
45  explicit ImageKnob(Widget* widget, const Image& image, Orientation orientation = Vertical) noexcept;
46  explicit ImageKnob(const ImageKnob& imageKnob);
47  ImageKnob& operator=(const ImageKnob& imageKnob);
48  ~ImageKnob() override;
49 
50  float getValue() const noexcept;
51 
52  void setDefault(float def) noexcept;
53  void setRange(float min, float max) noexcept;
54  void setStep(float step) noexcept;
55  void setValue(float value, bool sendCallback = false) noexcept;
56  void setUsingLogScale(bool yesNo) noexcept;
57 
58  void setCallback(Callback* callback) noexcept;
59  void setOrientation(Orientation orientation) noexcept;
60  void setRotationAngle(int angle);
61 
62  void setImageLayerCount(uint count) noexcept;
63 
64 protected:
65  void onDisplay() override;
66  bool onMouse(const MouseEvent&) override;
67  bool onMotion(const MotionEvent&) override;
68  bool onScroll(const ScrollEvent&) override;
69 
70 private:
71  Image fImage;
72  float fMinimum;
73  float fMaximum;
74  float fStep;
75  float fValue;
76  float fValueDef;
77  float fValueTmp;
78  bool fUsingDefault;
79  bool fUsingLog;
80  Orientation fOrientation;
81 
82  int fRotationAngle;
83  bool fDragging;
84  int fLastX;
85  int fLastY;
86 
87  Callback* fCallback;
88 
89  bool fIsImgVertical;
90  uint fImgLayerWidth;
91  uint fImgLayerHeight;
92  uint fImgLayerCount;
93  bool fIsReady;
94  GLuint fTextureId;
95 
96  float _logscale(float value) const;
97  float _invlogscale(float value) const;
98 
99  DISTRHO_LEAK_DETECTOR(ImageKnob)
100 };
101 
102 // -----------------------------------------------------------------------
103 
104 END_NAMESPACE_DGL
105 
106 #endif // DGL_IMAGE_KNOB_HPP_INCLUDED
void onDisplay() override
Definition: Window.hpp:30
bool onMouse(const MouseEvent &) override
Definition: ImageKnob.hpp:35
Definition: Widget.hpp:128
bool onMotion(const MotionEvent &) override
Definition: Widget.hpp:51
Definition: Widget.hpp:110
Definition: Image.hpp:38
bool onScroll(const ScrollEvent &) override
Definition: ImageKnob.hpp:27
Definition: Widget.hpp:143