Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
@@ -28,13 +28,18 @@ OBJS_common = \ | |||||
../build/dgl/ApplicationPrivateData.cpp.o \ | ../build/dgl/ApplicationPrivateData.cpp.o \ | ||||
../build/dgl/Color.cpp.o \ | ../build/dgl/Color.cpp.o \ | ||||
../build/dgl/Geometry.cpp.o \ | ../build/dgl/Geometry.cpp.o \ | ||||
../build/dgl/ImageBase.cpp.o \ | |||||
../build/dgl/Resources.cpp.o \ | |||||
../build/dgl/SubWidget.cpp.o \ | |||||
../build/dgl/SubWidgetPrivateData.cpp.o \ | |||||
../build/dgl/TopLevelWidget.cpp.o \ | ../build/dgl/TopLevelWidget.cpp.o \ | ||||
../build/dgl/TopLevelWidgetPrivateData.cpp.o \ | |||||
../build/dgl/Widget.cpp.o \ | |||||
../build/dgl/WidgetPrivateData.cpp.o \ | |||||
../build/dgl/Window.cpp.o \ | ../build/dgl/Window.cpp.o \ | ||||
../build/dgl/WindowPrivateData.cpp.o | ../build/dgl/WindowPrivateData.cpp.o | ||||
# ../build/dgl/ImageBase.cpp.o \ | |||||
# ../build/dgl/Resources.cpp.o\ | |||||
# ../build/dgl/StandaloneWindow.cpp.o \ | # ../build/dgl/StandaloneWindow.cpp.o \ | ||||
# ../build/dgl/Widget.cpp.o \ | |||||
# ../build/dgl/WindowFileBrowser.cpp.o | # ../build/dgl/WindowFileBrowser.cpp.o | ||||
# TODO: ImageWidgets.cpp | # TODO: ImageWidgets.cpp | ||||
@@ -42,9 +47,8 @@ OBJS_common = \ | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
OBJS_cairo = $(OBJS_common) \ | OBJS_cairo = $(OBJS_common) \ | ||||
../build/dgl/Cairo.cpp.cairo.o \ | |||||
../build/dgl/pugl.cpp.cairo.o | ../build/dgl/pugl.cpp.cairo.o | ||||
# ../build/dgl/Cairo.cpp.cairo.o \ | |||||
# ../build/dgl/WidgetPrivateData.cpp.cairo.o | |||||
# ifeq ($(MACOS),true) | # ifeq ($(MACOS),true) | ||||
# OBJS_cairo += ../build/dgl/Window.mm.cairo.o | # OBJS_cairo += ../build/dgl/Window.mm.cairo.o | ||||
@@ -55,11 +59,12 @@ OBJS_cairo = $(OBJS_common) \ | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
OBJS_opengl = $(OBJS_common) \ | OBJS_opengl = $(OBJS_common) \ | ||||
../build/dgl/OpenGL.cpp.opengl.o \ | |||||
../build/dgl/NanoVG.cpp.opengl.o \ | |||||
../build/dgl/pugl.cpp.opengl.o | ../build/dgl/pugl.cpp.opengl.o | ||||
# ../build/dgl/OpenGL.cpp.opengl.o \ | |||||
# ../build/dgl/Image.cpp.opengl.o \ | # ../build/dgl/Image.cpp.opengl.o \ | ||||
# ../build/dgl/ImageWidgets.cpp.opengl.o \ | # ../build/dgl/ImageWidgets.cpp.opengl.o \ | ||||
# ../build/dgl/NanoVG.cpp.opengl.o \ | |||||
# ../build/dgl/WidgetPrivateData.cpp.opengl.o \ | # ../build/dgl/WidgetPrivateData.cpp.opengl.o \ | ||||
# ../build/dgl/WindowPrivateData.cpp.opengl.o | # ../build/dgl/WindowPrivateData.cpp.opengl.o | ||||
@@ -15,7 +15,8 @@ | |||||
*/ | */ | ||||
#include "../Cairo.hpp" | #include "../Cairo.hpp" | ||||
#include "WidgetPrivateData.hpp" | |||||
#include "SubWidgetPrivateData.hpp" | |||||
#include "WindowPrivateData.hpp" | |||||
START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||
@@ -64,15 +65,14 @@ void Rectangle<T>::_draw(const bool outline) | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
void Widget::PrivateData::display(const uint width, | |||||
const uint height, | |||||
const double autoScaling, | |||||
const bool renderingSubWidget) | |||||
void SubWidget::PrivateData::display(const uint width, const uint height, const double autoScaling) | |||||
{ | { | ||||
/* | |||||
if ((skipDisplay && ! renderingSubWidget) || size.isInvalid() || ! visible) | if ((skipDisplay && ! renderingSubWidget) || size.isInvalid() || ! visible) | ||||
return; | return; | ||||
*/ | |||||
cairo_t* cr = static_cast<const CairoGraphicsContext&>(parent.getGraphicsContext()).cairo; | |||||
cairo_t* cr = static_cast<const CairoGraphicsContext&>(self->getGraphicsContext()).handle; | |||||
cairo_matrix_t matrix; | cairo_matrix_t matrix; | ||||
cairo_get_matrix(cr, &matrix); | cairo_get_matrix(cr, &matrix); | ||||
cairo_translate(cr, absolutePos.getX(), absolutePos.getY()); | cairo_translate(cr, absolutePos.getX(), absolutePos.getY()); | ||||
@@ -83,7 +83,7 @@ void Widget::PrivateData::display(const uint width, | |||||
cairo_set_matrix(cr, &matrix); | cairo_set_matrix(cr, &matrix); | ||||
displaySubWidgets(width, height, autoScaling); | |||||
// displaySubWidgets(width, height, autoScaling); | |||||
} | } | ||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
@@ -963,7 +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; | |||||
BaseWidget::pData->needsViewportScaling = true; | |||||
} | } | ||||
// TopLevelWidget | // TopLevelWidget | ||||
@@ -16,6 +16,7 @@ | |||||
#include "../OpenGL.hpp" | #include "../OpenGL.hpp" | ||||
#include "SubWidgetPrivateData.hpp" | #include "SubWidgetPrivateData.hpp" | ||||
#include "TopLevelWidgetPrivateData.hpp" | |||||
#include "WidgetPrivateData.hpp" | #include "WidgetPrivateData.hpp" | ||||
#include "WindowPrivateData.hpp" | #include "WindowPrivateData.hpp" | ||||
@@ -357,7 +358,7 @@ void Widget::PrivateData::display(const uint width, | |||||
} | } | ||||
#endif | #endif | ||||
void SubWidget::PrivateData::display(uint width, uint height, double autoScaling) | |||||
void SubWidget::PrivateData::display(const uint width, const uint height, const double autoScaling) | |||||
{ | { | ||||
bool needsDisableScissor = false; | bool needsDisableScissor = false; | ||||
@@ -369,7 +370,7 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling | |||||
width * autoScaling, | width * autoScaling, | ||||
height * autoScaling); | height * autoScaling); | ||||
} | } | ||||
else if (viewportNeedsScaling) | |||||
else if (needsViewportScaling) | |||||
{ | { | ||||
// limit viewport to widget bounds | // limit viewport to widget bounds | ||||
glViewport(absolutePos.getX(), | glViewport(absolutePos.getX(), | ||||
@@ -409,6 +410,25 @@ void SubWidget::PrivateData::display(uint width, uint height, double autoScaling | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
void TopLevelWidget::PrivateData::display() | |||||
{ | |||||
const Size<uint> size(window.getSize()); | |||||
const uint width = size.getWidth(); | |||||
const uint height = size.getHeight(); | |||||
const double autoScaling = window.pData->autoScaling; | |||||
// full viewport size | |||||
glViewport(0, -(height * autoScaling - height), width * autoScaling, height * autoScaling); | |||||
// main widget drawing | |||||
self->onDisplay(); | |||||
// now draw subwidgets if there are any | |||||
selfw->pData->displaySubWidgets(width, height, autoScaling); | |||||
} | |||||
// ----------------------------------------------------------------------- | |||||
const GraphicsContext& Window::PrivateData::getGraphicsContext() const noexcept | const GraphicsContext& Window::PrivateData::getGraphicsContext() const noexcept | ||||
{ | { | ||||
return (const GraphicsContext&)graphicsContext; | return (const GraphicsContext&)graphicsContext; | ||||
@@ -25,7 +25,7 @@ SubWidget::PrivateData::PrivateData(SubWidget* const s, Widget* const pw) | |||||
: self(s), | : self(s), | ||||
parentWidget(pw), | parentWidget(pw), | ||||
absolutePos(), | absolutePos(), | ||||
viewportNeedsScaling(false) | |||||
needsViewportScaling(false) | |||||
{ | { | ||||
parentWidget->pData->subWidgets.push_back(self); | parentWidget->pData->subWidgets.push_back(self); | ||||
} | } | ||||
@@ -27,7 +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 | |||||
bool needsViewportScaling; // needed for NanoVG | |||||
explicit PrivateData(SubWidget* const s, Widget* const pw); | explicit PrivateData(SubWidget* const s, Widget* const pw); | ||||
~PrivateData(); | ~PrivateData(); | ||||
@@ -37,23 +37,6 @@ TopLevelWidget::PrivateData::~PrivateData() | |||||
window.pData->topLevelWidget = nullptr; | window.pData->topLevelWidget = nullptr; | ||||
} | } | ||||
void TopLevelWidget::PrivateData::display() | |||||
{ | |||||
const Size<uint> size(window.getSize()); | |||||
const uint width = size.getWidth(); | |||||
const uint height = size.getHeight(); | |||||
const double autoScaling = window.pData->autoScaling; | |||||
// full viewport size | |||||
glViewport(0, -(height * autoScaling - height), width * autoScaling, height * autoScaling); | |||||
// main widget drawing | |||||
self->onDisplay(); | |||||
// now draw subwidgets if there are any | |||||
selfw->pData->displaySubWidgets(width, height, autoScaling); | |||||
} | |||||
void TopLevelWidget::PrivateData::mouseEvent(const Events::MouseEvent& ev) | void TopLevelWidget::PrivateData::mouseEvent(const Events::MouseEvent& ev) | ||||
{ | { | ||||
Events::MouseEvent rev = ev; | Events::MouseEvent rev = ev; | ||||
@@ -15,7 +15,7 @@ | |||||
*/ | */ | ||||
#include "WidgetPrivateData.hpp" | #include "WidgetPrivateData.hpp" | ||||
#include "../SubWidget.hpp" | |||||
#include "SubWidgetPrivateData.hpp" | |||||
#include "../TopLevelWidget.hpp" | #include "../TopLevelWidget.hpp" | ||||
START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||