Browse Source

Generic ImageBaseSwitch

pull/272/head
falkTX 4 years ago
parent
commit
f0c52659b9
2 changed files with 83 additions and 50 deletions
  1. +1
    -7
      dgl/ImageBaseWidgets.hpp
  2. +82
    -43
      dgl/src/ImageBaseWidgets.cpp

+ 1
- 7
dgl/ImageBaseWidgets.hpp View File

@@ -255,6 +255,7 @@ public:
explicit ImageBaseSwitch(Widget* parentWidget, const ImageType& imageNormal, const ImageType& imageDown) noexcept; explicit ImageBaseSwitch(Widget* parentWidget, const ImageType& imageNormal, const ImageType& imageDown) noexcept;
explicit ImageBaseSwitch(const ImageBaseSwitch& imageSwitch) noexcept; explicit ImageBaseSwitch(const ImageBaseSwitch& imageSwitch) noexcept;
ImageBaseSwitch& operator=(const ImageBaseSwitch& imageSwitch) noexcept; ImageBaseSwitch& operator=(const ImageBaseSwitch& imageSwitch) noexcept;
~ImageBaseSwitch() override;


bool isDown() const noexcept; bool isDown() const noexcept;
void setDown(bool down) noexcept; void setDown(bool down) noexcept;
@@ -269,13 +270,6 @@ private:
struct PrivateData; struct PrivateData;
PrivateData* const pData; PrivateData* const pData;


/*
Image fImageNormal;
Image fImageDown;
bool fIsDown;
Callback* fCallback;
*/

DISTRHO_LEAK_DETECTOR(ImageBaseSwitch) DISTRHO_LEAK_DETECTOR(ImageBaseSwitch)
}; };




+ 82
- 43
dgl/src/ImageBaseWidgets.cpp View File

@@ -947,89 +947,128 @@ void ImageSlider::_recheckArea() noexcept


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------


#if 0
ImageSwitch::ImageSwitch(Widget* parentWidget, const Image& imageNormal, const Image& imageDown) noexcept
template <class ImageType>
struct ImageBaseSwitch<ImageType>::PrivateData {
ImageBaseSwitch<ImageType>* const self;
ImageType imageNormal;
ImageType imageDown;
bool isDown;
Callback* callback;

PrivateData(ImageBaseSwitch<ImageType>* const s, const ImageType& normal, const ImageType& down)
: self(s),
imageNormal(normal),
imageDown(down),
isDown(false),
callback(nullptr)
{
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize());
}

PrivateData(ImageBaseSwitch<ImageType>* const s, PrivateData* const other)
: self(s),
imageNormal(other->imageNormal),
imageDown(other->imageDown),
isDown(other->isDown),
callback(other->callback)
{
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize());
}

void assignFrom(PrivateData* const other)
{
imageNormal = other->imageNormal;
imageDown = other->imageDown;
isDown = other->isDown;
callback = other->callback;
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize());
}

DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData)
};

// --------------------------------------------------------------------------------------------------------------------

template <class ImageType>
ImageBaseSwitch<ImageType>::ImageBaseSwitch(Widget* const parentWidget, const ImageType& imageNormal, const ImageType& imageDown) noexcept
: SubWidget(parentWidget), : SubWidget(parentWidget),
fImageNormal(imageNormal),
fImageDown(imageDown),
fIsDown(false),
fCallback(nullptr)
pData(new PrivateData(this, imageNormal, imageDown))
{ {
DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());

setSize(fImageNormal.getSize());
setSize(imageNormal.getSize());
} }


ImageSwitch::ImageSwitch(const ImageSwitch& imageSwitch) noexcept
template <class ImageType>
ImageBaseSwitch<ImageType>::ImageBaseSwitch(const ImageBaseSwitch<ImageType>& imageSwitch) noexcept
: SubWidget(imageSwitch.getParentWidget()), : SubWidget(imageSwitch.getParentWidget()),
fImageNormal(imageSwitch.fImageNormal),
fImageDown(imageSwitch.fImageDown),
fIsDown(imageSwitch.fIsDown),
fCallback(imageSwitch.fCallback)
pData(new PrivateData(this, imageSwitch.pData))
{ {
DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());

setSize(fImageNormal.getSize());
setSize(pData->imageNormal.getSize());
} }


ImageSwitch& ImageSwitch::operator=(const ImageSwitch& imageSwitch) noexcept
template <class ImageType>
ImageBaseSwitch<ImageType>& ImageBaseSwitch<ImageType>::operator=(const ImageBaseSwitch<ImageType>& imageSwitch) noexcept
{ {
fImageNormal = imageSwitch.fImageNormal;
fImageDown = imageSwitch.fImageDown;
fIsDown = imageSwitch.fIsDown;
fCallback = imageSwitch.fCallback;

DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageDown.getSize());

setSize(fImageNormal.getSize());

pData->assignFrom(imageSwitch.pData);
setSize(pData->imageNormal.getSize());
return *this; return *this;
} }


bool ImageSwitch::isDown() const noexcept
template <class ImageType>
ImageBaseSwitch<ImageType>::~ImageBaseSwitch()
{ {
return fIsDown;
delete pData;
} }


void ImageSwitch::setDown(bool down) noexcept
template <class ImageType>
bool ImageBaseSwitch<ImageType>::isDown() const noexcept
{ {
if (fIsDown == down)
return pData->isDown;
}

template <class ImageType>
void ImageBaseSwitch<ImageType>::setDown(const bool down) noexcept
{
if (pData->isDown == down)
return; return;


fIsDown = down;
pData->isDown = down;
repaint(); repaint();
} }


void ImageSwitch::setCallback(Callback* callback) noexcept
template <class ImageType>
void ImageBaseSwitch<ImageType>::setCallback(Callback* const callback) noexcept
{ {
fCallback = callback;
pData->callback = callback;
} }


void ImageSwitch::onDisplay()
template <class ImageType>
void ImageBaseSwitch<ImageType>::onDisplay()
{ {
if (fIsDown)
fImageDown.draw();
const GraphicsContext& context(getGraphicsContext());

if (pData->isDown)
pData->imageDown.draw(context);
else else
fImageNormal.draw();
pData->imageNormal.draw(context);
} }


bool ImageSwitch::onMouse(const MouseEvent& ev)
template <class ImageType>
bool ImageBaseSwitch<ImageType>::onMouse(const MouseEvent& ev)
{ {
if (ev.press && contains(ev.pos)) if (ev.press && contains(ev.pos))
{ {
fIsDown = !fIsDown;
pData->isDown = !pData->isDown;


repaint(); repaint();


if (fCallback != nullptr)
fCallback->imageSwitchClicked(this, fIsDown);
if (pData->callback != nullptr)
pData->callback->imageSwitchClicked(this, pData->isDown);


return true; return true;
} }


return false; return false;
} }
#endif


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------




Loading…
Cancel
Save