Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Refactor|libappfw: Root widget loads common textures
Added a virtual method that derived classes can extend.
  • Loading branch information
skyjake committed Mar 4, 2014
1 parent d34f104 commit 7d08d25
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 99 deletions.
3 changes: 3 additions & 0 deletions doomsday/libappfw/include/de/framework/guirootwidget.h
Expand Up @@ -119,6 +119,9 @@ class LIBAPPFW_PUBLIC GuiRootWidget : public RootWidget
*/
virtual void handleEventAsFallback(Event const &event);

protected:
virtual void loadCommonTextures();

private:
DENG2_PRIVATE(d)
};
Expand Down
203 changes: 104 additions & 99 deletions doomsday/libappfw/src/guirootwidget.cpp
Expand Up @@ -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();
}
}

Expand Down Expand Up @@ -216,6 +119,7 @@ AtlasTexture &GuiRootWidget::atlas()

GLUniform &GuiRootWidget::uAtlas()
{
d->initAtlas();
return d->uTexAtlas;
}

Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 7d08d25

Please sign in to comment.