From 7d08d25fdce5feb67ff22531632535dc826c28ee Mon Sep 17 00:00:00 2001 From: skyjake Date: Tue, 4 Mar 2014 19:23:35 +0200 Subject: [PATCH] Refactor|libappfw: Root widget loads common textures Added a virtual method that derived classes can extend. --- .../include/de/framework/guirootwidget.h | 3 + doomsday/libappfw/src/guirootwidget.cpp | 203 +++++++++--------- 2 files changed, 107 insertions(+), 99 deletions(-) diff --git a/doomsday/libappfw/include/de/framework/guirootwidget.h b/doomsday/libappfw/include/de/framework/guirootwidget.h index 6ab41fc55f..93ef73d903 100644 --- a/doomsday/libappfw/include/de/framework/guirootwidget.h +++ b/doomsday/libappfw/include/de/framework/guirootwidget.h @@ -119,6 +119,9 @@ class LIBAPPFW_PUBLIC GuiRootWidget : public RootWidget */ virtual void handleEventAsFallback(Event const &event); +protected: + virtual void loadCommonTextures(); + private: DENG2_PRIVATE(d) }; diff --git a/doomsday/libappfw/src/guirootwidget.cpp b/doomsday/libappfw/src/guirootwidget.cpp index 78ce7c980d..34ba28eab5 100644 --- a/doomsday/libappfw/src/guirootwidget.cpp +++ b/doomsday/libappfw/src/guirootwidget.cpp @@ -73,110 +73,13 @@ DENG2_PIMPL(GuiRootWidget) { if(atlas.isNull()) { - Style const &st = Style::appStyle(); - atlas.reset(AtlasTexture::newWithKdTreeAllocator( Atlas::BackingStore | Atlas::AllowDefragment, GLTexture::maximumSize().min(GLTexture::Size(4096, 4096)))); uTexAtlas = *atlas; - // A set of general purpose textures: - - // One solid white pixel. - Image const solidWhitePixel = Image::solidColor(Image::Color(255, 255, 255, 255), - Image::Size(1, 1)); - solidWhiteTex = atlas->alloc(solidWhitePixel); - - // Rounded corners. - { - QImage corners(QSize(15, 15), QImage::Format_ARGB32); - corners.fill(QColor(255, 255, 255, 0).rgba()); - QPainter painter(&corners); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setBrush(Qt::NoBrush); - painter.setPen(QPen(Qt::white, 1)); - painter.drawEllipse(QPoint(8, 8), 6, 6); - //painter.setPen(QPen(Qt::black, 1)); - //painter.drawEllipse(QPoint(10, 10), 8, 8); - roundCorners = atlas->alloc(corners); - } - - // Gradient frame. - { - QImage frame(QSize(12, 12), QImage::Format_ARGB32); - frame.fill(QColor(255, 255, 255, 0).rgba()); - QPainter painter(&frame); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(QColor(255, 255, 255, 255), 2)); - painter.setBrush(Qt::NoBrush);//QColor(255, 255, 255, 255)); - painter.drawEllipse(QPoint(6, 6), 4, 4); - /* - painter.setCompositionMode(QPainter::CompositionMode_Source); - painter.setBrush(Qt::NoBrush); - painter.setPen(QColor(255, 255, 255, 32)); - painter.drawRect(QRect(1, 1, 9, 9)); - painter.setPen(QColor(255, 255, 255, 64)); - painter.drawRect(QRect(2, 2, 7, 7)); - painter.setPen(QColor(255, 255, 255, 128)); - painter.drawRect(QRect(3, 3, 5, 5)); - painter.setPen(QColor(255, 255, 255, 255)); - painter.drawRect(QRect(4, 4, 3, 3)); - { - painter.setPen(QColor(255, 255, 255, 192)); - QPointF const points[4] = { - QPointF(4, 4), QPointF(4, 7), - QPointF(7, 4), QPointF(7, 7) - }; - painter.drawPoints(points, 4); - } - { - painter.setPen(QColor(255, 255, 255, 96)); - QPointF const points[4] = { - QPointF(3, 3), QPointF(3, 8), - QPointF(8, 3), QPointF(8, 8) - }; - painter.drawPoints(points, 4); - } - { - painter.setPen(QColor(255, 255, 255, 48)); - QPointF const points[4] = { - QPointF(2, 2), QPointF(2, 9), - QPointF(9, 2), QPointF(9, 9) - }; - painter.drawPoints(points, 4); - } - { - painter.setPen(QColor(255, 255, 255, 16)); - QPointF const points[4] = { - QPointF(1, 1), QPointF(1, 10), - QPointF(10, 1), QPointF(10, 10) - }; - painter.drawPoints(points, 4); - } - */ - gradientFrame = atlas->alloc(frame); - } - - // Border glow. - borderGlow = atlas->alloc(st.images().image("window.borderglow")); - - // On/Off toggle. - toggleOnOff = atlas->alloc(st.images().image("toggle.onoff")); - - // Fold indicator. - fold = atlas->alloc(st.images().image("fold")); - - // Tiny dot. - { - QImage dot(QSize(5, 5), QImage::Format_ARGB32); - dot.fill(QColor(255, 255, 255, 0).rgba()); - QPainter painter(&dot); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(Qt::NoPen); - painter.setBrush(Qt::white); - painter.drawEllipse(QPointF(2.5f, 2.5f), 2, 2); - tinyDot = atlas->alloc(dot); - } + // Load a set of general purpose textures. + self.loadCommonTextures(); } } @@ -216,6 +119,7 @@ AtlasTexture &GuiRootWidget::atlas() GLUniform &GuiRootWidget::uAtlas() { + d->initAtlas(); return d->uTexAtlas; } @@ -301,6 +205,107 @@ bool GuiRootWidget::processEvent(Event const &event) void GuiRootWidget::handleEventAsFallback(Event const &) {} +void GuiRootWidget::loadCommonTextures() +{ + Style const &st = Style::appStyle(); + + // One solid white pixel. + Image const solidWhitePixel = Image::solidColor(Image::Color(255, 255, 255, 255), + Image::Size(1, 1)); + d->solidWhiteTex = d->atlas->alloc(solidWhitePixel); + + // Rounded corners. + { + QImage corners(QSize(15, 15), QImage::Format_ARGB32); + corners.fill(QColor(255, 255, 255, 0).rgba()); + QPainter painter(&corners); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setBrush(Qt::NoBrush); + painter.setPen(QPen(Qt::white, 1)); + painter.drawEllipse(QPoint(8, 8), 6, 6); + //painter.setPen(QPen(Qt::black, 1)); + //painter.drawEllipse(QPoint(10, 10), 8, 8); + d->roundCorners = d->atlas->alloc(corners); + } + + // Gradient frame. + { + QImage frame(QSize(12, 12), QImage::Format_ARGB32); + frame.fill(QColor(255, 255, 255, 0).rgba()); + QPainter painter(&frame); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen(QColor(255, 255, 255, 255), 2)); + painter.setBrush(Qt::NoBrush);//QColor(255, 255, 255, 255)); + painter.drawEllipse(QPoint(6, 6), 4, 4); + /* + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.setBrush(Qt::NoBrush); + painter.setPen(QColor(255, 255, 255, 32)); + painter.drawRect(QRect(1, 1, 9, 9)); + painter.setPen(QColor(255, 255, 255, 64)); + painter.drawRect(QRect(2, 2, 7, 7)); + painter.setPen(QColor(255, 255, 255, 128)); + painter.drawRect(QRect(3, 3, 5, 5)); + painter.setPen(QColor(255, 255, 255, 255)); + painter.drawRect(QRect(4, 4, 3, 3)); + { + painter.setPen(QColor(255, 255, 255, 192)); + QPointF const points[4] = { + QPointF(4, 4), QPointF(4, 7), + QPointF(7, 4), QPointF(7, 7) + }; + painter.drawPoints(points, 4); + } + { + painter.setPen(QColor(255, 255, 255, 96)); + QPointF const points[4] = { + QPointF(3, 3), QPointF(3, 8), + QPointF(8, 3), QPointF(8, 8) + }; + painter.drawPoints(points, 4); + } + { + painter.setPen(QColor(255, 255, 255, 48)); + QPointF const points[4] = { + QPointF(2, 2), QPointF(2, 9), + QPointF(9, 2), QPointF(9, 9) + }; + painter.drawPoints(points, 4); + } + { + painter.setPen(QColor(255, 255, 255, 16)); + QPointF const points[4] = { + QPointF(1, 1), QPointF(1, 10), + QPointF(10, 1), QPointF(10, 10) + }; + painter.drawPoints(points, 4); + } + */ + d->gradientFrame = d->atlas->alloc(frame); + } + + // Border glow. + d->borderGlow = d->atlas->alloc(st.images().image("window.borderglow")); + + // On/Off toggle. + d->toggleOnOff = d->atlas->alloc(st.images().image("toggle.onoff")); + + // Fold indicator. + d->fold = d->atlas->alloc(st.images().image("fold")); + + // Tiny dot. + { + QImage dot(QSize(5, 5), QImage::Format_ARGB32); + dot.fill(QColor(255, 255, 255, 0).rgba()); + QPainter painter(&dot); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(Qt::NoPen); + painter.setBrush(Qt::white); + painter.drawEllipse(QPointF(2.5f, 2.5f), 2, 2); + d->tinyDot = d->atlas->alloc(dot); + } +} + GuiWidget const *GuiRootWidget::globalHitTest(Vector2i const &pos) const { Widget::Children const childs = children();