kwin/effects/_test/demo_showpicture.cpp
2011-01-31 20:07:03 +01:00

62 lines
1.7 KiB
C++

/*****************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2007 Lubos Lunak <l.lunak@kde.org>
You can Freely distribute this program under the GNU General Public
License. See the file "COPYING" for the exact licensing terms.
******************************************************************/
#include "demo_showpicture.h"
#include <kstandarddirs.h>
#include <qimage.h>
namespace KWin
{
KWIN_EFFECT(demo_showpicture, ShowPictureEffect)
ShowPictureEffect::ShowPictureEffect()
: init(true)
, picture(NULL)
{
}
ShowPictureEffect::~ShowPictureEffect()
{
delete picture;
}
void ShowPictureEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
{
effects->paintScreen(mask, region, data);
if (init) {
loadPicture();
init = false;
}
if (picture && region.intersects(pictureRect)) {
glPushAttrib(GL_CURRENT_BIT | GL_ENABLE_BIT);
picture->bind();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
picture->render(region, pictureRect);
picture->unbind();
glPopAttrib();
}
}
void ShowPictureEffect::loadPicture()
{
QString file = KGlobal::dirs()->findResource("appdata", "showpicture.png");
if (file.isEmpty())
return;
QImage im(file);
QRect area = effects->clientArea(PlacementArea, effects->activeScreen(), effects->currentDesktop());
picture = new GLTexture(im);
pictureRect = QRect(area.x() + (area.width() - im.width()) / 2,
area.y() + (area.height() - im.height()) / 2, im.width(), im.height());
}
} // namespace