From a88c946bd978fd50ac628fed548a1b5460b3ffe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Sat, 21 Jan 2017 12:21:36 +0200 Subject: [PATCH] Widgets|Fixed: Label images sometimes not initialized ProceduralImage instances were only GL-initialized if they were set before the widget itself was initialized. --- .../libappfw/include/de/framework/atlasproceduralimage.h | 8 ++++++-- .../sdk/libappfw/include/de/framework/proceduralimage.h | 2 +- .../libappfw/include/de/framework/styleproceduralimage.h | 5 ++++- doomsday/sdk/libappfw/src/widgets/labelwidget.cpp | 3 ++- doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp | 5 ++++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/doomsday/sdk/libappfw/include/de/framework/atlasproceduralimage.h b/doomsday/sdk/libappfw/include/de/framework/atlasproceduralimage.h index a22747635c..16a1a4086e 100644 --- a/doomsday/sdk/libappfw/include/de/framework/atlasproceduralimage.h +++ b/doomsday/sdk/libappfw/include/de/framework/atlasproceduralimage.h @@ -39,7 +39,7 @@ class LIBAPPFW_PUBLIC AtlasProceduralImage : public ProceduralImage { public: AtlasProceduralImage(GuiWidget &owner) - : _owner(owner), _atlas(0), _needUpdate(false) + : _owner(owner), _atlas(0), _id(Id::None), _needUpdate(false) {} ~AtlasProceduralImage() @@ -71,6 +71,7 @@ class LIBAPPFW_PUBLIC AtlasProceduralImage : public ProceduralImage { _atlas->release(_id); _atlas = 0; + _id = Id::None; } } @@ -94,7 +95,10 @@ class LIBAPPFW_PUBLIC AtlasProceduralImage : public ProceduralImage void glInit() { - alloc(); + if (_id.isNone()) + { + alloc(); + } } void glDeinit() diff --git a/doomsday/sdk/libappfw/include/de/framework/proceduralimage.h b/doomsday/sdk/libappfw/include/de/framework/proceduralimage.h index ca65f100f1..aae758164d 100644 --- a/doomsday/sdk/libappfw/include/de/framework/proceduralimage.h +++ b/doomsday/sdk/libappfw/include/de/framework/proceduralimage.h @@ -59,7 +59,7 @@ class LIBAPPFW_PUBLIC ProceduralImage */ virtual bool update(); - virtual void glInit(); + virtual void glInit(); // called repeatedly virtual void glDeinit(); virtual void glMakeGeometry(DefaultVertexBuf::Builder &verts, Rectanglef const &rect) = 0; diff --git a/doomsday/sdk/libappfw/include/de/framework/styleproceduralimage.h b/doomsday/sdk/libappfw/include/de/framework/styleproceduralimage.h index bff12b4d90..943a6b3fde 100644 --- a/doomsday/sdk/libappfw/include/de/framework/styleproceduralimage.h +++ b/doomsday/sdk/libappfw/include/de/framework/styleproceduralimage.h @@ -71,7 +71,10 @@ class StyleProceduralImage : public ProceduralImage void glInit() { - alloc(); + if (_id.isNone()) + { + alloc(); + } } void glDeinit() diff --git a/doomsday/sdk/libappfw/src/widgets/labelwidget.cpp b/doomsday/sdk/libappfw/src/widgets/labelwidget.cpp index 59f28bbcea..c4e184d19e 100644 --- a/doomsday/sdk/libappfw/src/widgets/labelwidget.cpp +++ b/doomsday/sdk/libappfw/src/widgets/labelwidget.cpp @@ -607,7 +607,7 @@ void LabelWidget::setImage(Image const &image) { AtlasProceduralImage *proc = new AtlasProceduralImage(*this); proc->setImage(image); - d->image.reset(proc); + setImage(proc); } else { @@ -798,6 +798,7 @@ void LabelWidget::update() if (isInitialized()) { + if (d->image) d->image->glInit(); d->updateGeometry(); } d->updateAppearanceAnimation(); diff --git a/doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp b/doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp index fbd8f43f46..8fdb339905 100644 --- a/doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp +++ b/doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp @@ -67,7 +67,10 @@ DENG_GUI_PIMPL(PopupMenuWidget) void glInit() { - alloc(); + if (_id.isNone()) + { + alloc(); + } } void glDeinit()