Browse Source

Fix nanovg subwidgets, need viewport scaling

Signed-off-by: falkTX <falktx@falktx.com>
pull/272/head
falkTX 4 years ago
parent
commit
bc9bf65844
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 9 additions and 11 deletions
  1. +0
    -4
      dgl/OpenGL.hpp
  2. +1
    -0
      dgl/SubWidget.hpp
  3. +1
    -0
      dgl/src/NanoVG.cpp
  4. +4
    -6
      dgl/src/OpenGL.cpp
  5. +2
    -1
      dgl/src/SubWidgetPrivateData.cpp
  6. +1
    -0
      dgl/src/SubWidgetPrivateData.hpp

+ 0
- 4
dgl/OpenGL.hpp View File

@@ -232,10 +232,6 @@ public:
// TODO mark as deprecated // TODO mark as deprecated
void drawAt(const Point<int>& pos); void drawAt(const Point<int>& pos);


protected:
/** @internal */
// void _drawAt(const Point<int>& pos) override;

private: private:
GLenum fFormat; GLenum fFormat;
GLenum fType; GLenum fType;


+ 1
- 0
dgl/SubWidget.hpp View File

@@ -124,6 +124,7 @@ private:
struct PrivateData; struct PrivateData;
PrivateData* const pData; PrivateData* const pData;
friend class Widget; friend class Widget;
template <class BaseWidget> friend class NanoWidget;
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SubWidget) DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SubWidget)
}; };




+ 1
- 0
dgl/src/NanoVG.cpp View File

@@ -963,6 +963,7 @@ NanoWidget<BaseWidget>::NanoWidget(Widget* const parent, int flags)
NanoVG(flags), NanoVG(flags),
nData(new PrivateData(this)) nData(new PrivateData(this))
{ {
BaseWidget::pData->viewportNeedsScaling = true;
} }


// TopLevelWidget // TopLevelWidget


+ 4
- 6
dgl/src/OpenGL.cpp View File

@@ -365,12 +365,11 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling
{ {
// full viewport size // full viewport size
glViewport(0, 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 // limit viewport to widget bounds
glViewport(absolutePos.getX(), glViewport(absolutePos.getX(),
@@ -378,7 +377,6 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling
self->getWidth(), self->getWidth(),
self->getHeight()); self->getHeight());
} }
*/
else else
{ {
// only set viewport pos // only set viewport pos


+ 2
- 1
dgl/src/SubWidgetPrivateData.cpp View File

@@ -24,7 +24,8 @@ START_NAMESPACE_DGL
SubWidget::PrivateData::PrivateData(SubWidget* const s, Widget* const pw) SubWidget::PrivateData::PrivateData(SubWidget* const s, Widget* const pw)
: self(s), : self(s),
parentWidget(pw), parentWidget(pw),
absolutePos()
absolutePos(),
viewportNeedsScaling(false)
{ {
parentWidget->pData->subWidgets.push_back(self); parentWidget->pData->subWidgets.push_back(self);
} }


+ 1
- 0
dgl/src/SubWidgetPrivateData.hpp View File

@@ -27,6 +27,7 @@ struct SubWidget::PrivateData {
SubWidget* const self; SubWidget* const self;
Widget* const parentWidget; Widget* const parentWidget;
Point<int> absolutePos; Point<int> absolutePos;
bool viewportNeedsScaling; // needed for NanoVG


explicit PrivateData(SubWidget* const s, Widget* const pw); explicit PrivateData(SubWidget* const s, Widget* const pw);
~PrivateData(); ~PrivateData();


Loading…
Cancel
Save