Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/dgl/ImageBaseWidgets.hpp @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cf2cb71d31dd | 3:84e66ea83026 |
---|---|
1 /* | |
2 * DISTRHO Plugin Framework (DPF) | |
3 * Copyright (C) 2012-2021 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_BASE_WIDGETS_HPP_INCLUDED | |
18 #define DGL_IMAGE_BASE_WIDGETS_HPP_INCLUDED | |
19 | |
20 #include "EventHandlers.hpp" | |
21 #include "StandaloneWindow.hpp" | |
22 #include "SubWidget.hpp" | |
23 | |
24 START_NAMESPACE_DGL | |
25 | |
26 // -------------------------------------------------------------------------------------------------------------------- | |
27 | |
28 /** | |
29 DGL Image About Window class. | |
30 | |
31 This is a Window attached (transient) to another Window that simply shows an Image as its content. | |
32 It is typically used for "about this project" style pop-up Windows. | |
33 | |
34 Pressing 'Esc' or clicking anywhere on the window will automatically close it. | |
35 | |
36 @see CairoImageAboutWindow, OpenGLImageAboutWindow, Window::runAsModal(bool) | |
37 */ | |
38 template <class ImageType> | |
39 class ImageBaseAboutWindow : public StandaloneWindow | |
40 { | |
41 public: | |
42 /** | |
43 Constructor taking an existing Window as the parent transient window and an optional image. | |
44 If @a image is valid, the about window size will match the image size. | |
45 */ | |
46 explicit ImageBaseAboutWindow(Window& transientParentWindow, const ImageType& image = ImageType()); | |
47 | |
48 /** | |
49 Constructor taking a top-level-widget's Window as the parent transient window and an optional image. | |
50 If @a image is valid, the about window size will match the image size. | |
51 */ | |
52 explicit ImageBaseAboutWindow(TopLevelWidget* topLevelWidget, const ImageType& image = ImageType()); | |
53 | |
54 /** | |
55 Set a new image to use as background for this window. | |
56 Window size will adjust to match the image size. | |
57 */ | |
58 void setImage(const ImageType& image); | |
59 | |
60 protected: | |
61 void onDisplay() override; | |
62 bool onKeyboard(const KeyboardEvent&) override; | |
63 bool onMouse(const MouseEvent&) override; | |
64 | |
65 private: | |
66 ImageType img; | |
67 | |
68 DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ImageBaseAboutWindow) | |
69 }; | |
70 | |
71 // -------------------------------------------------------------------------------------------------------------------- | |
72 | |
73 /** | |
74 DGL Image Button class. | |
75 | |
76 This is a typical button, where the drawing comes from a pregenerated set of images. | |
77 The button can be under "normal", "hover" and "down" states, with one separate image possible for each. | |
78 | |
79 The event logic for this button comes from the ButtonEventHandler class. | |
80 | |
81 @see CairoImageButton, OpenGLImageButton | |
82 */ | |
83 template <class ImageType> | |
84 class ImageBaseButton : public SubWidget, | |
85 public ButtonEventHandler | |
86 { | |
87 public: | |
88 class Callback | |
89 { | |
90 public: | |
91 virtual ~Callback() {} | |
92 virtual void imageButtonClicked(ImageBaseButton* imageButton, int button) = 0; | |
93 }; | |
94 | |
95 explicit ImageBaseButton(Widget* parentWidget, const ImageType& image); | |
96 explicit ImageBaseButton(Widget* parentWidget, const ImageType& imageNormal, const ImageType& imageDown); | |
97 explicit ImageBaseButton(Widget* parentWidget, const ImageType& imageNormal, const ImageType& imageHover, const ImageType& imageDown); | |
98 | |
99 ~ImageBaseButton() override; | |
100 | |
101 void setCallback(Callback* callback) noexcept; | |
102 | |
103 protected: | |
104 void onDisplay() override; | |
105 bool onMouse(const MouseEvent&) override; | |
106 bool onMotion(const MotionEvent&) override; | |
107 | |
108 private: | |
109 struct PrivateData; | |
110 PrivateData* const pData; | |
111 | |
112 DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ImageBaseButton) | |
113 }; | |
114 | |
115 // -------------------------------------------------------------------------------------------------------------------- | |
116 | |
117 /** | |
118 DGL Image Knob class. | |
119 | |
120 This is a typical knob/dial, where the drawing comes from a pregenerated image "filmstrip". | |
121 The knob's "filmstrip" image can be either horizontal or vertical, | |
122 with the number of steps automatically based on the largest value (ie, horizontal if width>height, vertical if height>width). | |
123 There are no different images for "hover" or "down" states. | |
124 | |
125 The event logic for this knob comes from the KnobEventHandler class. | |
126 | |
127 @see CairoImageKnob, OpenGLImageKnob | |
128 */ | |
129 template <class ImageType> | |
130 class ImageBaseKnob : public SubWidget, | |
131 public KnobEventHandler | |
132 { | |
133 public: | |
134 class Callback | |
135 { | |
136 public: | |
137 virtual ~Callback() {} | |
138 virtual void imageKnobDragStarted(ImageBaseKnob* imageKnob) = 0; | |
139 virtual void imageKnobDragFinished(ImageBaseKnob* imageKnob) = 0; | |
140 virtual void imageKnobValueChanged(ImageBaseKnob* imageKnob, float value) = 0; | |
141 }; | |
142 | |
143 explicit ImageBaseKnob(Widget* parentWidget, const ImageType& image, Orientation orientation = Vertical) noexcept; | |
144 explicit ImageBaseKnob(const ImageBaseKnob& imageKnob); | |
145 ImageBaseKnob& operator=(const ImageBaseKnob& imageKnob); | |
146 ~ImageBaseKnob() override; | |
147 | |
148 void setCallback(Callback* callback) noexcept; | |
149 void setImageLayerCount(uint count) noexcept; | |
150 void setRotationAngle(int angle); | |
151 bool setValue(float value, bool sendCallback = false) noexcept override; | |
152 | |
153 protected: | |
154 void onDisplay() override; | |
155 bool onMouse(const MouseEvent&) override; | |
156 bool onMotion(const MotionEvent&) override; | |
157 bool onScroll(const ScrollEvent&) override; | |
158 | |
159 private: | |
160 struct PrivateData; | |
161 PrivateData* const pData; | |
162 | |
163 DISTRHO_LEAK_DETECTOR(ImageBaseKnob) | |
164 }; | |
165 | |
166 // -------------------------------------------------------------------------------------------------------------------- | |
167 | |
168 // note set range and step before setting the value | |
169 | |
170 template <class ImageType> | |
171 class ImageBaseSlider : public SubWidget | |
172 { | |
173 public: | |
174 class Callback | |
175 { | |
176 public: | |
177 virtual ~Callback() {} | |
178 virtual void imageSliderDragStarted(ImageBaseSlider* imageSlider) = 0; | |
179 virtual void imageSliderDragFinished(ImageBaseSlider* imageSlider) = 0; | |
180 virtual void imageSliderValueChanged(ImageBaseSlider* imageSlider, float value) = 0; | |
181 }; | |
182 | |
183 explicit ImageBaseSlider(Widget* parentWidget, const ImageType& image) noexcept; | |
184 ~ImageBaseSlider() override; | |
185 | |
186 float getValue() const noexcept; | |
187 void setValue(float value, bool sendCallback = false) noexcept; | |
188 void setDefault(float def) noexcept; | |
189 | |
190 void setStartPos(const Point<int>& startPos) noexcept; | |
191 void setStartPos(int x, int y) noexcept; | |
192 void setEndPos(const Point<int>& endPos) noexcept; | |
193 void setEndPos(int x, int y) noexcept; | |
194 | |
195 void setCheckable(bool checkable) noexcept; | |
196 void setInverted(bool inverted) noexcept; | |
197 void setRange(float min, float max) noexcept; | |
198 void setStep(float step) noexcept; | |
199 | |
200 void setCallback(Callback* callback) noexcept; | |
201 | |
202 protected: | |
203 void onDisplay() override; | |
204 bool onMouse(const MouseEvent&) override; | |
205 bool onMotion(const MotionEvent&) override; | |
206 | |
207 private: | |
208 struct PrivateData; | |
209 PrivateData* const pData; | |
210 | |
211 // these should not be used | |
212 void setAbsoluteX(int) const noexcept {} | |
213 void setAbsoluteY(int) const noexcept {} | |
214 void setAbsolutePos(int, int) const noexcept {} | |
215 void setAbsolutePos(const Point<int>&) const noexcept {} | |
216 | |
217 DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ImageBaseSlider) | |
218 }; | |
219 | |
220 // -------------------------------------------------------------------------------------------------------------------- | |
221 | |
222 template <class ImageType> | |
223 class ImageBaseSwitch : public SubWidget | |
224 { | |
225 public: | |
226 class Callback | |
227 { | |
228 public: | |
229 virtual ~Callback() {} | |
230 virtual void imageSwitchClicked(ImageBaseSwitch* imageSwitch, bool down) = 0; | |
231 }; | |
232 | |
233 explicit ImageBaseSwitch(Widget* parentWidget, const ImageType& imageNormal, const ImageType& imageDown) noexcept; | |
234 explicit ImageBaseSwitch(const ImageBaseSwitch& imageSwitch) noexcept; | |
235 ImageBaseSwitch& operator=(const ImageBaseSwitch& imageSwitch) noexcept; | |
236 ~ImageBaseSwitch() override; | |
237 | |
238 bool isDown() const noexcept; | |
239 void setDown(bool down) noexcept; | |
240 | |
241 void setCallback(Callback* callback) noexcept; | |
242 | |
243 protected: | |
244 void onDisplay() override; | |
245 bool onMouse(const MouseEvent&) override; | |
246 | |
247 private: | |
248 struct PrivateData; | |
249 PrivateData* const pData; | |
250 | |
251 DISTRHO_LEAK_DETECTOR(ImageBaseSwitch) | |
252 }; | |
253 | |
254 // -------------------------------------------------------------------------------------------------------------------- | |
255 | |
256 END_NAMESPACE_DGL | |
257 | |
258 #endif // DGL_IMAGE_BASE_WIDGETS_HPP_INCLUDED |