Browse Source

Make ImageWidgets build again

Signed-off-by: falkTX <falktx@falktx.com>
pull/272/head
falkTX 4 years ago
parent
commit
6bf22d0fc1
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 68 additions and 155 deletions
  1. +18
    -32
      dgl/ImageWidgets.hpp
  2. +1
    -0
      dgl/Makefile
  3. +5
    -0
      dgl/SubWidget.hpp
  4. +5
    -5
      dgl/src/Common.hpp
  5. +23
    -118
      dgl/src/ImageWidgets.cpp
  6. +16
    -0
      dgl/src/SubWidget.cpp

+ 18
- 32
dgl/ImageWidgets.hpp View File

@@ -18,36 +18,29 @@
#define DGL_IMAGE_WIDGETS_HPP_INCLUDED #define DGL_IMAGE_WIDGETS_HPP_INCLUDED


#include "Image.hpp" #include "Image.hpp"
#include "Widget.hpp"
#include "Window.hpp"
#include "StandaloneWindow.hpp"
#include "SubWidget.hpp"


START_NAMESPACE_DGL START_NAMESPACE_DGL


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


#ifndef DISTRHO_OS_HAIKU
class ImageAboutWindow : public Window,
public Widget
#else
// crash when creating or opening 2nd window
class ImageAboutWindow
#endif
class ImageAboutWindow : public StandaloneWindow
{ {
public: public:
explicit ImageAboutWindow(Window& parent, const Image& image = Image());
explicit ImageAboutWindow(Widget* widget, const Image& image = Image());
explicit ImageAboutWindow(Window& parentWindow, const Image& image = Image());
explicit ImageAboutWindow(TopLevelWidget* parentTopLevelWidget, const Image& image = Image());


void setImage(const Image& image); void setImage(const Image& image);


#ifndef DISTRHO_OS_HAIKU
// TODO
void exec() {}

protected: protected:
void onDisplay() override; void onDisplay() override;
bool onKeyboard(const KeyboardEvent&) override; bool onKeyboard(const KeyboardEvent&) override;
bool onMouse(const MouseEvent&) override; bool onMouse(const MouseEvent&) override;
void onReshape(uint width, uint height) override; void onReshape(uint width, uint height) override;
#else
void exec() {}
#endif


private: private:
Image fImgBackground; Image fImgBackground;
@@ -57,7 +50,7 @@ private:


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


class ImageButton : public Widget
class ImageButton : public SubWidget
{ {
public: public:
class Callback class Callback
@@ -67,13 +60,9 @@ public:
virtual void imageButtonClicked(ImageButton* imageButton, int button) = 0; virtual void imageButtonClicked(ImageButton* imageButton, int button) = 0;
}; };


explicit ImageButton(Window& parent, const Image& image);
explicit ImageButton(Window& parent, const Image& imageNormal, const Image& imageDown);
explicit ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown);

explicit ImageButton(Widget* widget, const Image& image);
explicit ImageButton(Widget* widget, const Image& imageNormal, const Image& imageDown);
explicit ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown);
explicit ImageButton(Widget* parentWidget, const Image& image);
explicit ImageButton(Widget* parentWidget, const Image& imageNormal, const Image& imageDown);
explicit ImageButton(Widget* parentWidget, const Image& imageNormal, const Image& imageHover, const Image& imageDown);


~ImageButton() override; ~ImageButton() override;


@@ -93,7 +82,7 @@ private:


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


class ImageKnob : public Widget
class ImageKnob : public SubWidget
{ {
public: public:
enum Orientation { enum Orientation {
@@ -110,8 +99,7 @@ public:
virtual void imageKnobValueChanged(ImageKnob* imageKnob, float value) = 0; virtual void imageKnobValueChanged(ImageKnob* imageKnob, float value) = 0;
}; };


explicit ImageKnob(Window& parent, const Image& image, Orientation orientation = Vertical) noexcept;
explicit ImageKnob(Widget* widget, const Image& image, Orientation orientation = Vertical) noexcept;
explicit ImageKnob(Widget* parentWidget, const Image& image, Orientation orientation = Vertical) noexcept;
explicit ImageKnob(const ImageKnob& imageKnob); explicit ImageKnob(const ImageKnob& imageKnob);
ImageKnob& operator=(const ImageKnob& imageKnob); ImageKnob& operator=(const ImageKnob& imageKnob);
~ImageKnob() override; ~ImageKnob() override;
@@ -172,7 +160,7 @@ private:


// note set range and step before setting the value // note set range and step before setting the value


class ImageSlider : public Widget
class ImageSlider : public SubWidget
{ {
public: public:
class Callback class Callback
@@ -184,8 +172,7 @@ public:
virtual void imageSliderValueChanged(ImageSlider* imageSlider, float value) = 0; virtual void imageSliderValueChanged(ImageSlider* imageSlider, float value) = 0;
}; };


explicit ImageSlider(Window& parent, const Image& image) noexcept;
explicit ImageSlider(Widget* widget, const Image& image) noexcept;
explicit ImageSlider(Widget* parentWidget, const Image& image) noexcept;


float getValue() const noexcept; float getValue() const noexcept;
void setValue(float value, bool sendCallback = false) noexcept; void setValue(float value, bool sendCallback = false) noexcept;
@@ -242,7 +229,7 @@ private:


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


class ImageSwitch : public Widget
class ImageSwitch : public SubWidget
{ {
public: public:
class Callback class Callback
@@ -252,8 +239,7 @@ public:
virtual void imageSwitchClicked(ImageSwitch* imageSwitch, bool down) = 0; virtual void imageSwitchClicked(ImageSwitch* imageSwitch, bool down) = 0;
}; };


explicit ImageSwitch(Window& parent, const Image& imageNormal, const Image& imageDown) noexcept;
explicit ImageSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept;
explicit ImageSwitch(Widget* parentWidget, const Image& imageNormal, const Image& imageDown) noexcept;
explicit ImageSwitch(const ImageSwitch& imageSwitch) noexcept; explicit ImageSwitch(const ImageSwitch& imageSwitch) noexcept;
ImageSwitch& operator=(const ImageSwitch& imageSwitch) noexcept; ImageSwitch& operator=(const ImageSwitch& imageSwitch) noexcept;




+ 1
- 0
dgl/Makefile View File

@@ -59,6 +59,7 @@ OBJS_cairo = $(OBJS_common) \
# --------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------


OBJS_opengl = $(OBJS_common) \ OBJS_opengl = $(OBJS_common) \
../build/dgl/ImageWidgets.cpp.o \
../build/dgl/OpenGL.cpp.opengl.o \ ../build/dgl/OpenGL.cpp.opengl.o \
../build/dgl/NanoVG.cpp.opengl.o \ ../build/dgl/NanoVG.cpp.opengl.o \
../build/dgl/pugl.cpp.opengl.o ../build/dgl/pugl.cpp.opengl.o


+ 5
- 0
dgl/SubWidget.hpp View File

@@ -109,6 +109,11 @@ public:
*/ */
void setAbsolutePos(const Point<int>& pos) noexcept; void setAbsolutePos(const Point<int>& pos) noexcept;


/**
Get parent Widget, as passed in the constructor.
*/
Widget* getParentWidget() const noexcept;

/** /**
Request repaint of this subwidget's area to the window this widget belongs to. Request repaint of this subwidget's area to the window this widget belongs to.
*/ */


+ 5
- 5
dgl/src/Common.hpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Plugin Framework (DPF) * DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com>
* *
* Permission to use, copy, modify, and/or distribute this software for any purpose with * Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this * or without fee is hereby granted, provided that the above copyright notice and this
@@ -32,17 +32,17 @@ struct ButtonImpl {


int button; int button;
int state; int state;
Widget* self;
SubWidget* self;


ImageButton::Callback* callback_img; ImageButton::Callback* callback_img;


ButtonImpl(Widget* const s) noexcept
ButtonImpl(SubWidget* const s) noexcept
: button(-1), : button(-1),
state(kStateNormal), state(kStateNormal),
self(s), self(s),
callback_img(nullptr) {} callback_img(nullptr) {}


bool onMouse(const Widget::MouseEvent& ev)
bool onMouse(const Events::MouseEvent& ev)
{ {
// button was released, handle it now // button was released, handle it now
if (button != -1 && ! ev.press) if (button != -1 && ! ev.press)
@@ -83,7 +83,7 @@ struct ButtonImpl {
return false; return false;
} }


bool onMotion(const Widget::MotionEvent& ev)
bool onMotion(const Events::MotionEvent& ev)
{ {
// keep pressed // keep pressed
if (button != -1) if (button != -1)


+ 23
- 118
dgl/src/ImageWidgets.cpp View File

@@ -25,30 +25,25 @@ START_NAMESPACE_DGL


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


#ifndef DISTRHO_OS_HAIKU
ImageAboutWindow::ImageAboutWindow(Window& parent, const Image& image)
: Window(parent),
Widget((Window&)*this),
ImageAboutWindow::ImageAboutWindow(Window& parentWindow, const Image& image)
: StandaloneWindow(parentWindow.getApp()),
fImgBackground(image) fImgBackground(image)
{ {
// TODO set transient
Window::setResizable(false); Window::setResizable(false);
Window::setSize(image.getSize()); Window::setSize(image.getSize());
Window::setTitle("About"); Window::setTitle("About");
} }


ImageAboutWindow::ImageAboutWindow(Widget* widget, const Image& image)
: Window(widget->getParentWindow()),
Widget((Window&)*this),
ImageAboutWindow::ImageAboutWindow(TopLevelWidget* const parentTopLevelWidget, const Image& image)
: StandaloneWindow(parentTopLevelWidget->getApp()),
fImgBackground(image) fImgBackground(image)
{ {
// TODO set transient
Window::setResizable(false); Window::setResizable(false);
Window::setSize(image.getSize()); Window::setSize(image.getSize());
Window::setTitle("About"); Window::setTitle("About");
} }
#else
ImageAboutWindow::ImageAboutWindow(Window& parent, const Image& image) : fImgBackground(image) {}
ImageAboutWindow::ImageAboutWindow(Widget* widget, const Image& image) : fImgBackground(image) {}
#endif


void ImageAboutWindow::setImage(const Image& image) void ImageAboutWindow::setImage(const Image& image)
{ {
@@ -56,12 +51,9 @@ void ImageAboutWindow::setImage(const Image& image)
return; return;


fImgBackground = image; fImgBackground = image;
#ifndef DISTRHO_OS_HAIKU
Window::setSize(image.getSize()); Window::setSize(image.getSize());
#endif
} }


#ifndef DISTRHO_OS_HAIKU
void ImageAboutWindow::onDisplay() void ImageAboutWindow::onDisplay()
{ {
fImgBackground.draw(); fImgBackground.draw();
@@ -94,7 +86,6 @@ void ImageAboutWindow::onReshape(uint width, uint height)
Widget::setSize(width, height); Widget::setSize(width, height);
Window::onReshape(width, height); Window::onReshape(width, height);
} }
#endif


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


@@ -104,7 +95,7 @@ struct ImageButton::PrivateData {
Image imageHover; Image imageHover;
Image imageDown; Image imageDown;


PrivateData(Widget* const s, const Image& normal, const Image& hover, const Image& down)
PrivateData(SubWidget* const s, const Image& normal, const Image& hover, const Image& down)
: impl(s), : impl(s),
imageNormal(normal), imageNormal(normal),
imageHover(hover), imageHover(hover),
@@ -115,40 +106,15 @@ struct ImageButton::PrivateData {


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


ImageButton::ImageButton(Window& parent, const Image& image)
: Widget(parent),
pData(new PrivateData(this, image, image, image))
{
setSize(image.getSize());
}

ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageDown)
: Widget(parent),
pData(new PrivateData(this, imageNormal, imageNormal, imageDown))
{
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize());

setSize(imageNormal.getSize());
}

ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown)
: Widget(parent),
pData(new PrivateData(this, imageNormal, imageHover, imageDown))
{
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageHover.getSize() && imageHover.getSize() == imageDown.getSize());

setSize(imageNormal.getSize());
}

ImageButton::ImageButton(Widget* widget, const Image& image)
: Widget(widget->getParentWindow()),
ImageButton::ImageButton(Widget* const parentWidget, const Image& image)
: SubWidget(parentWidget),
pData(new PrivateData(this, image, image, image)) pData(new PrivateData(this, image, image, image))
{ {
setSize(image.getSize()); setSize(image.getSize());
} }


ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageDown)
: Widget(widget->getParentWindow()),
ImageButton::ImageButton(Widget* const parentWidget, const Image& imageNormal, const Image& imageDown)
: SubWidget(parentWidget),
pData(new PrivateData(this, imageNormal, imageNormal, imageDown)) pData(new PrivateData(this, imageNormal, imageNormal, imageDown))
{ {
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize()); DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageDown.getSize());
@@ -156,8 +122,8 @@ ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image&
setSize(imageNormal.getSize()); setSize(imageNormal.getSize());
} }


ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown)
: Widget(widget->getParentWindow()),
ImageButton::ImageButton(Widget* const parentWidget, const Image& imageNormal, const Image& imageHover, const Image& imageDown)
: SubWidget(parentWidget),
pData(new PrivateData(this, imageNormal, imageHover, imageDown)) pData(new PrivateData(this, imageNormal, imageHover, imageDown))
{ {
DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageHover.getSize() && imageHover.getSize() == imageDown.getSize()); DISTRHO_SAFE_ASSERT(imageNormal.getSize() == imageHover.getSize() && imageHover.getSize() == imageDown.getSize());
@@ -203,36 +169,8 @@ bool ImageButton::onMotion(const MotionEvent& ev)


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


ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation) noexcept
: Widget(parent),
fImage(image),
fMinimum(0.0f),
fMaximum(1.0f),
fStep(0.0f),
fValue(0.5f),
fValueDef(fValue),
fValueTmp(fValue),
fUsingDefault(false),
fUsingLog(false),
fOrientation(orientation),
fRotationAngle(0),
fDragging(false),
fLastX(0),
fLastY(0),
fCallback(nullptr),
fIsImgVertical(image.getHeight() > image.getWidth()),
fImgLayerWidth(fIsImgVertical ? image.getWidth() : image.getHeight()),
fImgLayerHeight(fImgLayerWidth),
fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerHeight : image.getWidth()/fImgLayerWidth),
fIsReady(false),
fTextureId(0)
{
glGenTextures(1, &fTextureId);
setSize(fImgLayerWidth, fImgLayerHeight);
}

ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation) noexcept
: Widget(widget->getParentWindow()),
ImageKnob::ImageKnob(Widget* const parentWidget, const Image& image, Orientation orientation) noexcept
: SubWidget(parentWidget),
fImage(image), fImage(image),
fMinimum(0.0f), fMinimum(0.0f),
fMaximum(1.0f), fMaximum(1.0f),
@@ -260,7 +198,7 @@ ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation
} }


ImageKnob::ImageKnob(const ImageKnob& imageKnob) ImageKnob::ImageKnob(const ImageKnob& imageKnob)
: Widget(imageKnob.getParentWindow()),
: SubWidget(imageKnob.getParentWidget()),
fImage(imageKnob.fImage), fImage(imageKnob.fImage),
fMinimum(imageKnob.fMinimum), fMinimum(imageKnob.fMinimum),
fMaximum(imageKnob.fMaximum), fMaximum(imageKnob.fMaximum),
@@ -655,31 +593,8 @@ float ImageKnob::_invlogscale(float value) const


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


ImageSlider::ImageSlider(Window& parent, const Image& image) noexcept
: Widget(parent),
fImage(image),
fMinimum(0.0f),
fMaximum(1.0f),
fStep(0.0f),
fValue(0.5f),
fValueDef(fValue),
fValueTmp(fValue),
fUsingDefault(false),
fDragging(false),
fInverted(false),
fValueIsSet(false),
fStartedX(0),
fStartedY(0),
fCallback(nullptr),
fStartPos(),
fEndPos(),
fSliderArea()
{
setNeedsFullViewport();
}

ImageSlider::ImageSlider(Widget* widget, const Image& image) noexcept
: Widget(widget->getParentWindow()),
ImageSlider::ImageSlider(Widget* const parentWidget, const Image& image) noexcept
: SubWidget(parentWidget),
fImage(image), fImage(image),
fMinimum(0.0f), fMinimum(0.0f),
fMaximum(1.0f), fMaximum(1.0f),
@@ -698,7 +613,9 @@ ImageSlider::ImageSlider(Widget* widget, const Image& image) noexcept
fEndPos(), fEndPos(),
fSliderArea() fSliderArea()
{ {
/* TODO
setNeedsFullViewport(); setNeedsFullViewport();
*/
} }


float ImageSlider::getValue() const noexcept float ImageSlider::getValue() const noexcept
@@ -1008,20 +925,8 @@ void ImageSlider::_recheckArea() noexcept


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


ImageSwitch::ImageSwitch(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());
}

ImageSwitch::ImageSwitch(Widget* widget, const Image& imageNormal, const Image& imageDown) noexcept
: Widget(widget->getParentWindow()),
ImageSwitch::ImageSwitch(Widget* parentWidget, const Image& imageNormal, const Image& imageDown) noexcept
: SubWidget(parentWidget),
fImageNormal(imageNormal), fImageNormal(imageNormal),
fImageDown(imageDown), fImageDown(imageDown),
fIsDown(false), fIsDown(false),
@@ -1033,7 +938,7 @@ ImageSwitch::ImageSwitch(Widget* widget, const Image& imageNormal, const Image&
} }


ImageSwitch::ImageSwitch(const ImageSwitch& imageSwitch) noexcept ImageSwitch::ImageSwitch(const ImageSwitch& imageSwitch) noexcept
: Widget(imageSwitch.getParentWindow()),
: SubWidget(imageSwitch.getParentWidget()),
fImageNormal(imageSwitch.fImageNormal), fImageNormal(imageSwitch.fImageNormal),
fImageDown(imageSwitch.fImageDown), fImageDown(imageSwitch.fImageDown),
fIsDown(imageSwitch.fIsDown), fIsDown(imageSwitch.fIsDown),


+ 16
- 0
dgl/src/SubWidget.cpp View File

@@ -100,6 +100,11 @@ void SubWidget::setAbsolutePos(const Point<int>& pos) noexcept
pData->parentWidget->repaint(); pData->parentWidget->repaint();
} }


Widget* SubWidget::getParentWidget() const noexcept
{
return pData->parentWidget;
}

void SubWidget::repaint() noexcept void SubWidget::repaint() noexcept
{ {
if (! isVisible()) if (! isVisible())
@@ -113,6 +118,17 @@ void SubWidget::onPositionChanged(const PositionChangedEvent&)
{ {
} }


// --------------------------------------------------------------------------------------------------------------------
// Possible template data types

template<>
bool SubWidget::contains(const Point<double>& pos) const noexcept
{
return contains(pos.getX(), pos.getY());
}

// float, int, uint, short, ushort

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


END_NAMESPACE_DGL END_NAMESPACE_DGL

Loading…
Cancel
Save