From 568b765007958ba86bed1553b7f34dcc1bb2ed3f Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 25 May 2014 04:21:22 +0100 Subject: [PATCH] Fix for ImageSlider --- dgl/ImageSlider.hpp | 6 ++++++ dgl/NanoVG.hpp | 5 +---- dgl/Widget.hpp | 13 +++++++------ dgl/src/ImageSlider.cpp | 8 ++++---- dgl/src/Widget.cpp | 9 +++++++-- dgl/src/Window.cpp | 10 +++++++++- 6 files changed, 34 insertions(+), 17 deletions(-) diff --git a/dgl/ImageSlider.hpp b/dgl/ImageSlider.hpp index eed1e7be..0da8bd7d 100644 --- 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&) const noexcept {} + DISTRHO_LEAK_DETECTOR(ImageSlider) }; diff --git a/dgl/NanoVG.hpp b/dgl/NanoVG.hpp index 37caa475..12f08434 100644 --- 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 index 93637358..c98dba00 100644 --- a/dgl/Widget.hpp +++ b/dgl/Widget.hpp @@ -159,6 +159,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. */ @@ -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 fArea; diff --git a/dgl/src/ImageSlider.cpp b/dgl/src/ImageSlider.cpp index 5fe30b52..89665e9b 100644 --- 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 index 691365d7..d58893d9 100644 --- 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 index 88febb9b..0ee57f4f 100644 --- 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(0, 0, fView->width, fView->height)) + if (widget->fNeedsFullViewport || widget->fArea == Rectangle(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()