DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 568b765007958ba86bed1553b7f34dcc1bb2ed3f
parent ed6fdffbb0f6a86e2dfc60a4ac9616de89cd53ac
Author: falkTX <falktx@gmail.com>
Date:   Sun, 25 May 2014 04:20:57 +0100

Fix for ImageSlider

Diffstat:
Mdgl/ImageSlider.hpp | 6++++++
Mdgl/NanoVG.hpp | 5+----
Mdgl/Widget.hpp | 13+++++++------
Mdgl/src/ImageSlider.cpp | 8++++----
Mdgl/src/Widget.cpp | 9+++++++--
Mdgl/src/Window.cpp | 10+++++++++-
6 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/dgl/ImageSlider.hpp b/dgl/ImageSlider.hpp @@ -84,6 +84,12 @@ private: void _recheckArea() noexcept; + // these should not be used + void setAbsoluteX(int) const noexcept {} + void setAbsoluteY(int) const noexcept {} + void setAbsolutePos(int, int) const noexcept {} + void setAbsolutePos(const Point<int>&) const noexcept {} + DISTRHO_LEAK_DETECTOR(ImageSlider) }; diff --git a/dgl/NanoVG.hpp b/dgl/NanoVG.hpp @@ -793,10 +793,7 @@ public: */ NanoWidget(Window& parent) : Widget(parent), - NanoVG() - { - fInvertedY = true; - } + NanoVG() {} protected: /** diff --git a/dgl/Widget.hpp b/dgl/Widget.hpp @@ -160,6 +160,12 @@ public: void hide(); /** + Tell the parent window this widget this the full viewport. + When enabled, the local widget coordinates are ignored. + */ + void setNeedsFullViewport(bool yesNo) noexcept; + + /** Get width. */ int getWidth() const noexcept; @@ -296,14 +302,9 @@ protected: */ virtual void onResize(const ResizeEvent&); - /** - Wherever the Y position is inverted. - (starts at the bottom) - */ - bool fInvertedY; - private: Window& fParent; + bool fNeedsFullViewport; bool fVisible; Rectangle<int> fArea; diff --git a/dgl/src/ImageSlider.cpp b/dgl/src/ImageSlider.cpp @@ -37,7 +37,7 @@ ImageSlider::ImageSlider(Window& parent, const Image& image, int id) noexcept fStartedY(0), fCallback(nullptr) { - setSize(fImage.getSize()); + setNeedsFullViewport(true); } ImageSlider::ImageSlider(Widget* widget, const Image& image, int id) noexcept @@ -55,7 +55,7 @@ ImageSlider::ImageSlider(Widget* widget, const Image& image, int id) noexcept fStartedY(0), fCallback(nullptr) { - setSize(fImage.getSize()); + setNeedsFullViewport(true); } ImageSlider::ImageSlider(const ImageSlider& imageSlider) noexcept @@ -76,7 +76,7 @@ ImageSlider::ImageSlider(const ImageSlider& imageSlider) noexcept fEndPos(imageSlider.fEndPos), fSliderArea(imageSlider.fSliderArea) { - setSize(fImage.getSize()); + setNeedsFullViewport(true); } int ImageSlider::getId() const noexcept @@ -86,7 +86,7 @@ int ImageSlider::getId() const noexcept void ImageSlider::setId(int id) noexcept { - fId = id;; + fId = id; } float ImageSlider::getValue() const noexcept diff --git a/dgl/src/Widget.cpp b/dgl/src/Widget.cpp @@ -23,8 +23,8 @@ START_NAMESPACE_DGL // Widget Widget::Widget(Window& parent) - : fInvertedY(false), - fParent(parent), + : fParent(parent), + fNeedsFullViewport(false), fVisible(true) { fParent._addWidget(this); @@ -59,6 +59,11 @@ void Widget::hide() setVisible(false); } +void Widget::setNeedsFullViewport(bool yesNo) noexcept +{ + fNeedsFullViewport = yesNo; +} + int Widget::getWidth() const noexcept { return fArea.getWidth(); diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp @@ -578,7 +578,7 @@ struct Window::PrivateData { // reset color glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - if (widget->fArea == Rectangle<int>(0, 0, fView->width, fView->height)) + if (widget->fNeedsFullViewport || widget->fArea == Rectangle<int>(0, 0, fView->width, fView->height)) { // full viewport size glViewport(0, 0, fView->width, fView->height); @@ -725,6 +725,14 @@ struct Window::PrivateData { DBGp("PUGL: onReshape : %i %i\n", width, height); fSelf->onReshape(width, height); + + FOR_EACH_WIDGET(it) + { + Widget* const widget(*it); + + if (widget->fNeedsFullViewport) + widget->setSize(width, height); + } } void onClose()