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