diff options
author | Damien Zammit <damien@zamaudio.com> | 2016-06-29 14:41:47 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2016-06-29 14:41:47 +1000 |
commit | 80203d8fb398f5a11a9b3f48499a5c4a116278f8 (patch) | |
tree | 820db528bf4549e8bec5959def3b82ae410f01a5 /widgets | |
parent | 932046905a57f698406318765a60807a1f81257d (diff) |
Initial checkin of ZamDynamicEQ
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/ZamWidgets.hpp | 126 |
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 |