summaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2016-06-29 14:41:47 +1000
committerDamien Zammit <damien@zamaudio.com>2016-06-29 14:41:47 +1000
commit80203d8fb398f5a11a9b3f48499a5c4a116278f8 (patch)
tree820db528bf4549e8bec5959def3b82ae410f01a5 /widgets
parent932046905a57f698406318765a60807a1f81257d (diff)
Initial checkin of ZamDynamicEQ
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'widgets')
-rw-r--r--widgets/ZamWidgets.hpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/widgets/ZamWidgets.hpp b/widgets/ZamWidgets.hpp
index bf09a93..b45d74d 100644
--- a/widgets/ZamWidgets.hpp
+++ b/widgets/ZamWidgets.hpp
@@ -626,6 +626,132 @@ float ZamKnob::_invlogscale(float value) const
return std::log(value/a)/b;
}
+// -----------------------------------------------------------------------
+
+class ZamSwitch : public Widget
+{
+public:
+ class Callback
+ {
+ public:
+ virtual ~Callback() {}
+ virtual void imageSwitchClicked(ZamSwitch* imageButton, bool down) = 0;
+ };
+
+ explicit ZamSwitch(Window& parent, const Image& imageNormal, const Image& imageDown) noexcept;
+ explicit ZamSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept;
+ explicit ZamSwitch(const ZamSwitch& imageSwitch) noexcept;
+ ZamSwitch& operator=(const ZamSwitch& imageSwitch) noexcept;
+
+ bool isDown() const noexcept;
+ void setDown(bool down) noexcept;
+
+ void setCallback(Callback* callback) noexcept;
+
+protected:
+ void onDisplay() override;
+ bool onMouse(const MouseEvent&) override;
+
+private:
+ Image fImageNormal;
+ Image fImageDown;
+ bool fIsDown;
+
+ Callback* fCallback;
+
+ DISTRHO_LEAK_DETECTOR(ZamSwitch)
+};
+
+ZamSwitch::ZamSwitch(Window& parent, const Image& imageNormal, const Image& imageDown) noexcept
+ : Widget(parent),
+ fImageNormal(imageNormal),
+ fImageDown(imageDown),
+ fIsDown(false),
+ fCallback(nullptr)
+{
+ DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());
+
+ setSize(fImageNormal.getSize());
+}
+
+ZamSwitch::ZamSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept
+ : Widget(widget->getParentWindow()),
+ fImageNormal(imageNormal),
+ fImageDown(imageDown),
+ fIsDown(false),
+ fCallback(nullptr)
+{
+ DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());
+
+ setSize(fImageNormal.getSize());
+}
+
+ZamSwitch::ZamSwitch(const ZamSwitch& imageSwitch) noexcept
+ : Widget(imageSwitch.getParentWindow()),
+ fImageNormal(imageSwitch.fImageNormal),
+ fImageDown(imageSwitch.fImageDown),
+ fIsDown(imageSwitch.fIsDown),
+ fCallback(imageSwitch.fCallback)
+{
+ DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());
+
+ setSize(fImageNormal.getSize());
+}
+
+ZamSwitch& ZamSwitch::operator=(const ZamSwitch& imageSwitch) noexcept
+{
+ fImageNormal = imageSwitch.fImageNormal;
+ fImageDown = imageSwitch.fImageDown;
+ fIsDown = imageSwitch.fIsDown;
+ fCallback = imageSwitch.fCallback;
+
+ DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());
+
+ setSize(fImageNormal.getSize());
+
+ return *this;
+}
+
+bool ZamSwitch::isDown() const noexcept
+{
+ return fIsDown;
+}
+
+void ZamSwitch::setDown(bool down) noexcept
+{
+ fIsDown = down;
+}
+
+void ZamSwitch::setCallback(Callback* callback) noexcept
+{
+ fCallback = callback;
+}
+
+void ZamSwitch::onDisplay()
+{
+ if (fIsDown)
+ fImageDown.draw();
+ else
+ fImageNormal.draw();
+}
+
+bool ZamSwitch::onMouse(const MouseEvent& ev)
+{
+ if (ev.press && contains(ev.pos))
+ {
+ fIsDown = true;
+
+ if (fCallback != nullptr)
+ fCallback->imageSwitchClicked(this, true);
+
+ repaint();
+
+ return true;
+ }
+
+ return false;
+}
+
END_NAMESPACE_DGL
#endif