DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 0432f4de23095a7b3ef4433aac091787745498c1
parent 2a076932ef2f0870bb96743e9fb02ae7ca1f32b9
Author: falkTX <falktx@gmail.com>
Date:   Fri, 30 May 2014 06:24:28 +0100

Cleanup, cut outer bounds of widgets

Diffstat:
Mdgl/src/Window.cpp | 26+++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp @@ -562,6 +562,8 @@ struct Window::PrivateData { { fSelf->onDisplayBefore(); + bool needsDisableScissor = false; + FOR_EACH_WIDGET(it) { Widget* const widget(*it); @@ -575,32 +577,30 @@ struct Window::PrivateData { { // full viewport size glViewport(0, 0, fView->width, fView->height); - - // display widget - widget->onDisplay(); } else if (! widget->fNeedsScaling) { // only set viewport pos glViewport(widget->getAbsoluteX(), /*fView->height - widget->getHeight()*/ - widget->getAbsoluteY(), fView->width, fView->height); - // display widget - widget->onDisplay(); + // then cut the outer bounds + glScissor(widget->getAbsoluteX(), fView->height - widget->getHeight() - widget->getAbsoluteY(), widget->getWidth(), widget->getHeight()); + glEnable(GL_SCISSOR_TEST); + needsDisableScissor = true; } else { // limit viewport to widget bounds glViewport(widget->getAbsoluteX(), fView->height - widget->getHeight() - widget->getAbsoluteY(), widget->getWidth(), widget->getHeight()); + } - // scale contents to match viewport size - glPushMatrix(); - glScalef(float(fView->width)/float(widget->getWidth()), float(fView->height)/float(widget->getHeight()), 1.0f); - - // display widget - widget->onDisplay(); + // display widget + widget->onDisplay(); - // done - glPopMatrix(); + if (needsDisableScissor) + { + glDisable(GL_SCISSOR_TEST); + needsDisableScissor = false; } } }