summaryrefslogtreecommitdiff
path: root/dgl/src/WidgetPrivateData.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'dgl/src/WidgetPrivateData.hpp')
-rw-r--r--dgl/src/WidgetPrivateData.hpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/dgl/src/WidgetPrivateData.hpp b/dgl/src/WidgetPrivateData.hpp
index bf836b7b..5dbe2ace 100644
--- a/dgl/src/WidgetPrivateData.hpp
+++ b/dgl/src/WidgetPrivateData.hpp
@@ -63,7 +63,7 @@ struct Widget::PrivateData {
subWidgets.clear();
}
- void display(const uint width, const uint height, const bool renderingSubWidget)
+ void display(const uint width, const uint height, const double scaling, const bool renderingSubWidget)
{
if ((skipDisplay && ! renderingSubWidget) || size.isInvalid() || ! visible)
return;
@@ -76,29 +76,32 @@ struct Widget::PrivateData {
if (needsFullViewport || (absolutePos.isZero() && size == Size<uint>(width, height)))
{
// full viewport size
- glViewport(0, 0, static_cast<GLsizei>(width), static_cast<GLsizei>(height));
+ glViewport(0,
+ -(height * scaling - height),
+ width * scaling,
+ height * scaling);
}
else if (needsScaling)
{
// limit viewport to widget bounds
glViewport(absolutePos.getX(),
- static_cast<int>(height - self->getHeight()) - absolutePos.getY(),
- static_cast<GLsizei>(self->getWidth()),
- static_cast<GLsizei>(self->getHeight()));
+ height - self->getHeight() - absolutePos.getY(),
+ self->getWidth(),
+ self->getHeight());
}
else
{
// only set viewport pos
- glViewport(absolutePos.getX(),
- /*static_cast<int>(height - self->getHeight())*/ - absolutePos.getY(),
- static_cast<GLsizei>(width),
- static_cast<GLsizei>(height));
+ glViewport(absolutePos.getX() * scaling,
+ -std::round((height * scaling - height) + (absolutePos.getY() * scaling)),
+ std::round(width * scaling),
+ std::round(height * scaling));
// then cut the outer bounds
- glScissor(absolutePos.getX(),
- static_cast<int>(height - self->getHeight()) - absolutePos.getY(),
- static_cast<GLsizei>(self->getWidth()),
- static_cast<GLsizei>(self->getHeight()));
+ glScissor(absolutePos.getX() * scaling,
+ height - std::round((self->getHeight() + absolutePos.getY()) * scaling),
+ std::round(self->getWidth() * scaling),
+ std::round(self->getHeight() * scaling));
glEnable(GL_SCISSOR_TEST);
needsDisableScissor = true;
@@ -113,17 +116,17 @@ struct Widget::PrivateData {
needsDisableScissor = false;
}
- displaySubWidgets(width, height);
+ displaySubWidgets(width, height, scaling);
}
- void displaySubWidgets(const uint width, const uint height)
+ void displaySubWidgets(const uint width, const uint height, const double scaling)
{
for (std::vector<Widget*>::iterator it = subWidgets.begin(); it != subWidgets.end(); ++it)
{
Widget* const widget(*it);
DISTRHO_SAFE_ASSERT_CONTINUE(widget->pData != this);
- widget->pData->display(width, height, true);
+ widget->pData->display(width, height, scaling, true);
}
}