diff --git a/dgl/OpenGL.hpp b/dgl/OpenGL.hpp index db1e0729..b0f37252 100644 --- a/dgl/OpenGL.hpp +++ b/dgl/OpenGL.hpp @@ -232,10 +232,6 @@ public: // TODO mark as deprecated void drawAt(const Point& pos); -protected: - /** @internal */ -// void _drawAt(const Point& pos) override; - private: GLenum fFormat; GLenum fType; diff --git a/dgl/SubWidget.hpp b/dgl/SubWidget.hpp index 6cbe49af..8969ea8e 100644 --- a/dgl/SubWidget.hpp +++ b/dgl/SubWidget.hpp @@ -124,6 +124,7 @@ private: struct PrivateData; PrivateData* const pData; friend class Widget; + template friend class NanoWidget; DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SubWidget) }; diff --git a/dgl/src/NanoVG.cpp b/dgl/src/NanoVG.cpp index 5af16da8..3e1aa459 100644 --- a/dgl/src/NanoVG.cpp +++ b/dgl/src/NanoVG.cpp @@ -963,6 +963,7 @@ NanoWidget::NanoWidget(Widget* const parent, int flags) NanoVG(flags), nData(new PrivateData(this)) { + BaseWidget::pData->viewportNeedsScaling = true; } // TopLevelWidget diff --git a/dgl/src/OpenGL.cpp b/dgl/src/OpenGL.cpp index dd5b39c7..757b7c72 100644 --- a/dgl/src/OpenGL.cpp +++ b/dgl/src/OpenGL.cpp @@ -365,12 +365,11 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling { // full viewport size glViewport(0, - -(height * autoScaling - height), - width * autoScaling, - height * autoScaling); + -(height * autoScaling - height), + width * autoScaling, + height * autoScaling); } - /* - else if (needsScaling) + else if (viewportNeedsScaling) { // limit viewport to widget bounds glViewport(absolutePos.getX(), @@ -378,7 +377,6 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling self->getWidth(), self->getHeight()); } - */ else { // only set viewport pos diff --git a/dgl/src/SubWidgetPrivateData.cpp b/dgl/src/SubWidgetPrivateData.cpp index 98133fa9..4d7a3874 100644 --- a/dgl/src/SubWidgetPrivateData.cpp +++ b/dgl/src/SubWidgetPrivateData.cpp @@ -24,7 +24,8 @@ START_NAMESPACE_DGL SubWidget::PrivateData::PrivateData(SubWidget* const s, Widget* const pw) : self(s), parentWidget(pw), - absolutePos() + absolutePos(), + viewportNeedsScaling(false) { parentWidget->pData->subWidgets.push_back(self); } diff --git a/dgl/src/SubWidgetPrivateData.hpp b/dgl/src/SubWidgetPrivateData.hpp index 699bcac0..e7e7382b 100644 --- a/dgl/src/SubWidgetPrivateData.hpp +++ b/dgl/src/SubWidgetPrivateData.hpp @@ -27,6 +27,7 @@ struct SubWidget::PrivateData { SubWidget* const self; Widget* const parentWidget; Point absolutePos; + bool viewportNeedsScaling; // needed for NanoVG explicit PrivateData(SubWidget* const s, Widget* const pw); ~PrivateData();