summaryrefslogtreecommitdiffstats
path: root/kwin/clients/plastik/plastik.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kwin/clients/plastik/plastik.cpp')
-rw-r--r--kwin/clients/plastik/plastik.cpp598
1 files changed, 0 insertions, 598 deletions
diff --git a/kwin/clients/plastik/plastik.cpp b/kwin/clients/plastik/plastik.cpp
deleted file mode 100644
index 9faf73df0..000000000
--- a/kwin/clients/plastik/plastik.cpp
+++ /dev/null
@@ -1,598 +0,0 @@
-/* Plastik KWin window decoration
- Copyright (C) 2003-2005 Sandro Giessl <sandro@giessl.com>
-
- based on the window decoration "Web":
- Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
- */
-
-#include <tqbitmap.h>
-#include <tqpainter.h>
-#include <tqimage.h>
-
-#include <kconfig.h>
-#include <kpixmap.h>
-#include <kpixmapeffect.h>
-
-#include "misc.h"
-#include "plastik.h"
-#include "plastik.moc"
-#include "plastikclient.h"
-#include "plastikbutton.h"
-
-namespace KWinPlastik
-{
-
-PlastikHandler::PlastikHandler()
-{
- memset(m_pixmaps, 0, sizeof(TQPixmap*)*NumPixmaps*2*2); // set elements to 0
- memset(m_bitmaps, 0, sizeof(TQBitmap*)*NumButtonIcons*2);
-
- reset(0);
-}
-
-PlastikHandler::~PlastikHandler()
-{
- for (int t=0; t < 2; ++t)
- for (int a=0; a < 2; ++a)
- for (int i=0; i < NumPixmaps; ++i)
- delete m_pixmaps[t][a][i];
- for (int t=0; t < 2; ++t)
- for (int i=0; i < NumButtonIcons; ++i)
- delete m_bitmaps[t][i];
-}
-
-bool PlastikHandler::reset(unsigned long changed)
-{
- // we assume the active font to be the same as the inactive font since the control
- // center doesn't offer different settings anyways.
- m_titleFont = KDecoration::options()->font(true, false); // not small
- m_titleFontTool = KDecoration::options()->font(true, true); // small
-
- switch(KDecoration::options()->preferredBorderSize( this )) {
- case BorderTiny:
- m_borderSize = 3;
- break;
- case BorderLarge:
- m_borderSize = 8;
- break;
- case BorderVeryLarge:
- m_borderSize = 12;
- break;
- case BorderHuge:
- m_borderSize = 18;
- break;
- case BorderVeryHuge:
- m_borderSize = 27;
- break;
- case BorderOversized:
- m_borderSize = 40;
- break;
- case BorderNormal:
- default:
- m_borderSize = 4;
- }
-
- // check if we are in reverse layout mode
- m_reverse = TQApplication::reverseLayout();
-
- // read in the configuration
- readConfig();
-
- // pixmaps probably need to be updated, so delete the cache.
- for (int t=0; t < 2; ++t) {
- for (int a=0; a < 2; ++a) {
- for (int i=0; i < NumPixmaps; i++) {
- if (m_pixmaps[t][a][i]) {
- delete m_pixmaps[t][a][i];
- m_pixmaps[t][a][i] = 0;
- }
- }
- }
- }
- for (int t=0; t < 2; ++t) {
- for (int i=0; i < NumButtonIcons; i++) {
- if (m_bitmaps[t][i]) {
- delete m_bitmaps[t][i];
- m_bitmaps[t][i] = 0;
- }
- }
- }
-
- // Do we need to "hit the wooden hammer" ?
- bool needHardReset = true;
- // TODO: besides the Color and Font settings I can maybe handle more changes
- // without a hard reset. I will do this later...
- if (changed & SettingColors || changed & SettingFont)
- {
- needHardReset = false;
- } else if (changed & SettingButtons) {
- // handled by KCommonDecoration
- needHardReset = false;
- }
-
- if (needHardReset) {
- return true;
- } else {
- resetDecorations(changed);
- return false;
- }
-}
-
-KDecoration* PlastikHandler::createDecoration( KDecorationBridge* bridge )
-{
- return new PlastikClient( bridge, this );
-}
-
-bool PlastikHandler::supports( Ability ability )
-{
- switch( ability )
- {
- case AbilityAnnounceButtons:
- case AbilityButtonMenu:
- case AbilityButtonOnAllDesktops:
- case AbilityButtonSpacer:
- case AbilityButtonHelp:
- case AbilityButtonMinimize:
- case AbilityButtonMaximize:
- case AbilityButtonClose:
- case AbilityButtonAboveOthers:
- case AbilityButtonBelowOthers:
- case AbilityButtonShade:
- return true;
- default:
- return false;
- };
-}
-
-void PlastikHandler::readConfig()
-{
- // create a config object
- KConfig config("twinplastikrc");
- config.setGroup("General");
-
- // grab settings
- m_titleShadow = config.readBoolEntry("TitleShadow", true);
-
- TQFontMetrics fm(m_titleFont); // active font = inactive font
- int titleHeightMin = config.readNumEntry("MinTitleHeight", 16);
- // The title should strech with bigger font sizes!
- m_titleHeight = QMAX(titleHeightMin, fm.height() + 4); // 4 px for the shadow etc.
- // have an even title/button size so the button icons are fully centered...
- if ( m_titleHeight%2 == 0)
- m_titleHeight++;
-
- fm = TQFontMetrics(m_titleFontTool); // active font = inactive font
- int titleHeightToolMin = config.readNumEntry("MinTitleHeightTool", 13);
- // The title should strech with bigger font sizes!
- m_titleHeightTool = QMAX(titleHeightToolMin, fm.height() ); // don't care about the shadow etc.
- // have an even title/button size so the button icons are fully centered...
- if ( m_titleHeightTool%2 == 0)
- m_titleHeightTool++;
-
- TQString value = config.readEntry("TitleAlignment", "AlignLeft");
- if (value == "AlignLeft") m_titleAlign = Qt::AlignLeft;
- else if (value == "AlignHCenter") m_titleAlign = Qt::AlignHCenter;
- else if (value == "AlignRight") m_titleAlign = Qt::AlignRight;
-
- m_coloredBorder = config.readBoolEntry("ColoredBorder", true);
- m_animateButtons = config.readBoolEntry("AnimateButtons", true);
- m_menuClose = config.readBoolEntry("CloseOnMenuDoubleClick", true);
-}
-
-TQColor PlastikHandler::getColor(KWinPlastik::ColorType type, const bool active)
-{
- switch (type) {
- case WindowContour:
- return KDecoration::options()->color(ColorTitleBar, active).dark(200);
- case TitleGradient1:
- return hsvRelative(KDecoration::options()->color(ColorTitleBar, active), 0,-10,+10);
- break;
- case TitleGradient2:
- return hsvRelative(KDecoration::options()->color(ColorTitleBar, active), 0,0,-25);
- break;
- case TitleGradient3:
- return KDecoration::options()->color(ColorTitleBar, active);
- break;
- case ShadeTitleLight:
- return alphaBlendColors(KDecoration::options()->color(ColorTitleBar, active),
- Qt::white, active?205:215);
- break;
- case ShadeTitleDark:
- return alphaBlendColors(KDecoration::options()->color(ColorTitleBar, active),
- Qt::black, active?205:215);
- break;
- case Border:
- return KDecoration::options()->color(ColorFrame, active);
- case TitleFont:
- return KDecoration::options()->color(ColorFont, active);
- default:
- return Qt::black;
- }
-}
-
-void PlastikHandler::pretile( TQPixmap *&pix, int size, Qt::Orientation dir ) const
-{
- TQPixmap *newpix;
- TQPainter p;
-
- if ( dir == Qt::Horizontal )
- newpix = new TQPixmap( size, pix->height() );
- else
- newpix = new TQPixmap( pix->width(), size );
-
- p.begin( newpix );
- p.drawTiledPixmap( newpix->rect(), *pix ) ;
- p.end();
-
- delete pix;
- pix = newpix;
-}
-
-const TQPixmap &PlastikHandler::pixmap(Pixmaps type, bool active, bool toolWindow)
-{
- if (m_pixmaps[toolWindow][active][type])
- return *m_pixmaps[toolWindow][active][type];
-
- TQPixmap *pm = 0;
-
- switch (type) {
- case TitleBarTileTop:
- case TitleBarTile:
- {
- const int titleBarTileHeight = (toolWindow ? m_titleHeightTool : m_titleHeight) + 2;
- // gradient used as well in TitleBarTileTop as TitleBarTile
- const int gradientHeight = 2 + titleBarTileHeight-1;
- TQPixmap gradient(1, gradientHeight);
- TQPainter painter(&gradient);
- KPixmap tempPixmap;
- tempPixmap.resize(1, 4);
- KPixmapEffect::gradient(tempPixmap,
- getColor(TitleGradient1, active),
- getColor(TitleGradient2, active),
- KPixmapEffect::VerticalGradient);
- painter.drawPixmap(0,0, tempPixmap);
- tempPixmap.resize(1, gradientHeight-4);
- KPixmapEffect::gradient(tempPixmap,
- getColor(TitleGradient2, active),
- getColor(TitleGradient3, active),
- KPixmapEffect::VerticalGradient);
- painter.drawPixmap(0,4, tempPixmap);
- painter.end();
-
- // actual titlebar tiles
- if (type == TitleBarTileTop) {
- pm = new TQPixmap(1, 4);
- painter.begin(pm);
- // contour
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(0,0);
- // top highlight
- painter.setPen(getColor(ShadeTitleLight, active) );
- painter.drawPoint(0,1);
- // gradient
- painter.drawPixmap(0, 2, gradient);
- painter.end();
- } else {
- pm = new TQPixmap(1, titleBarTileHeight);
- painter.begin(pm);
- painter.tqdrawPixmap(0, 0, gradient, 0,2);
- if (m_coloredBorder) {
- painter.setPen(getColor(TitleGradient3, active).dark(110) );
- } else {
- painter.setPen(getColor(TitleGradient3, active) );
- }
- painter.drawPoint(0,titleBarTileHeight-1);
- painter.end();
- }
-
- pretile(pm, 64, Qt::Horizontal);
-
- break;
- }
-
- case TitleBarLeft:
- {
- const int w = m_borderSize;
- const int h = 4 + (toolWindow ? m_titleHeightTool : m_titleHeight) + 2;
-
- pm = new TQPixmap(w, h);
- TQPainter painter(pm);
-
- painter.drawTiledPixmap(0,0, w, 4, pixmap(TitleBarTileTop, active, toolWindow) );
- painter.drawTiledPixmap(0,4, w, h-4, pixmap(TitleBarTile, active, toolWindow) );
-
- painter.setPen(getColor(WindowContour, active) );
- painter.drawLine(0,0, 0,h);
- painter.drawPoint(1,1);
-
- const TQColor highlightTitleLeft = getColor(ShadeTitleLight, active);
- painter.setPen(highlightTitleLeft);
- painter.drawLine(1,2, 1,h);
-
- if (m_coloredBorder) {
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(2,h-1, w-1,h-1);
- }
-
- // outside the region normally masked by doShape
- painter.setPen(TQColor(0,0,0) );
- painter.drawLine(0, 0, 1, 0 );
- painter.drawPoint(0, 1);
-
- break;
- }
-
- case TitleBarRight:
- {
- const int w = m_borderSize;
- const int h = 4 + (toolWindow ? m_titleHeightTool : m_titleHeight) + 2;
-
- pm = new TQPixmap(w, h);
- TQPainter painter(pm);
-
- painter.drawTiledPixmap(0,0, w, 4, pixmap(TitleBarTileTop, active, toolWindow) );
- painter.drawTiledPixmap(0,4, w, h-4, pixmap(TitleBarTile, active, toolWindow) );
-
- painter.setPen(getColor(WindowContour, active) );
- painter.drawLine(w-1,0, w-1,h);
- painter.drawPoint(w-2,1);
-
- const TQColor highlightTitleRight = getColor(ShadeTitleDark, active);
- painter.setPen(highlightTitleRight);
- painter.drawLine(w-2,2, w-2,h);
-
- if (m_coloredBorder) {
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(0,h-1, w-3,h-1);
- }
-
- // outside the region normally masked by doShape
- painter.setPen(TQColor(0,0,0) );
- painter.drawLine(w-2, 0, w-1, 0 );
- painter.drawPoint(w-1, 1);
-
- break;
- }
-
- case BorderLeftTile:
- {
- const int w = m_borderSize;
-
- pm = new TQPixmap(w, 1);
- TQPainter painter(pm);
- if (m_coloredBorder) {
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(0, 0);
- painter.setPen(getColor(ShadeTitleLight, active) );
- painter.drawPoint(1, 0);
- if (w > 3) {
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(2,0, w-2,0);
- }
- painter.setPen(getColor(TitleGradient3, active).dark(110) );
- painter.drawPoint(w-1,0);
- } else {
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(0, 0);
- painter.setPen(
- alphaBlendColors(getColor(Border, active),
- getColor(ShadeTitleLight, active), 130) );
- painter.drawPoint(1, 0);
- painter.setPen(getColor(Border, active) );
- painter.drawLine(2,0, w-1,0);
- }
-
- painter.end();
-
- pretile(pm, 64, Qt::Vertical);
-
- break;
- }
-
- case BorderRightTile:
- {
- const int w = m_borderSize;
-
- pm = new TQPixmap(w, 1);
- TQPainter painter(pm);
- if (m_coloredBorder) {
- painter.setPen(getColor(TitleGradient3, active).dark(110) );
- painter.drawPoint(0,0);
- if (w > 3) {
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(1,0, w-3,0);
- }
- painter.setPen(getColor(ShadeTitleDark, active) );
- painter.drawPoint(w-2, 0);
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(w-1, 0);
- } else {
- painter.setPen(getColor(Border, active) );
- painter.drawLine(0,0, w-3,0);
- painter.setPen(
- alphaBlendColors(getColor(Border, active),
- getColor(ShadeTitleDark, active), 130) );
- painter.drawPoint(w-2, 0);
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(w-1, 0);
- }
- painter.end();
-
- pretile(pm, 64, Qt::Vertical);
-
- break;
- }
-
- case BorderBottomLeft:
- {
- const int w = m_borderSize;
- const int h = m_borderSize;
-
- pm = new TQPixmap(w, h);
- TQPainter painter(pm);
- painter.drawTiledPixmap(0,0,w,h, pixmap(BorderBottomTile, active, toolWindow) );
- painter.setPen(getColor(WindowContour, active) );
- painter.drawLine(0,0, 0,h);
- if (m_coloredBorder) {
- if (h > 3) {
- painter.setPen(getColor(ShadeTitleLight, active) );
- painter.drawLine(1,0, 1,h-2);
- }
-
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(2,0, w-1,0);
- } else {
- painter.setPen(
- alphaBlendColors(getColor(Border, active),
- getColor(ShadeTitleLight, active), 130) );
- painter.drawLine(1,0, 1,h-2);
- }
-
- painter.end();
-
- break;
- }
-
- case BorderBottomRight:
- {
- const int w = m_borderSize;
- const int h = m_borderSize;
-
- pm = new TQPixmap(w, h);
- TQPainter painter(pm);
- painter.drawTiledPixmap(0,0,w,h, pixmap(BorderBottomTile, active, toolWindow) );
- painter.setPen(getColor(WindowContour, active) );
- painter.drawLine(w-1,0, w-1,h);
- if (m_coloredBorder) {
- painter.setPen(getColor(ShadeTitleDark, active) );
- painter.drawLine(w-2,0, w-2,h-2);
-
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(0,0, w-3,0);
- } else {
- painter.setPen(
- alphaBlendColors(getColor(Border, active),
- getColor(ShadeTitleDark, active), 130) );
- painter.drawLine(w-2,0, w-2,h-2);
- }
-
- painter.end();
-
- break;
- }
-
- case BorderBottomTile:
- default:
- {
- const int h = m_borderSize;
-
- pm = new TQPixmap(1, m_borderSize);
- TQPainter painter(pm);
-
- if (m_coloredBorder) {
- painter.setPen(getColor(TitleGradient3, active).dark(110) );
- painter.drawPoint(0,0);
- painter.setPen(getColor(TitleGradient3, active) );
- painter.drawLine(0,1, 0,h-3);
- painter.setPen(getColor(ShadeTitleDark, active) );
- painter.drawPoint(0, h-2);
- } else {
- painter.setPen(getColor(Border, active) );
- painter.drawLine(0,0, 0,h-3);
- painter.setPen(
- alphaBlendColors(getColor(Border, active),
- getColor(ShadeTitleDark, active), 130) );
- painter.drawPoint(0, h-2);
- }
- painter.setPen(getColor(WindowContour, active) );
- painter.drawPoint(0, h-1);
- painter.end();
-
- pretile(pm, 64, Qt::Horizontal);
-
- break;
- }
- }
-
- m_pixmaps[toolWindow][active][type] = pm;
- return *pm;
-}
-
-const TQBitmap &PlastikHandler::buttonBitmap(ButtonIcon type, const TQSize &size, bool toolWindow)
-{
- int typeIndex = type;
-
- // btn icon size...
- int reduceW = 0, reduceH = 0;
- if(size.width()>14) {
- reduceW = static_cast<int>(2*(size.width()/3.5) );
- }
- else
- reduceW = 6;
- if(size.height()>14)
- reduceH = static_cast<int>(2*(size.height()/3.5) );
- else
- reduceH = 6;
-
- int w = size.width() - reduceW;
- int h = size.height() - reduceH;
-
- if (m_bitmaps[toolWindow][typeIndex] && m_bitmaps[toolWindow][typeIndex]->size()==TQSize(w,h) )
- return *m_bitmaps[toolWindow][typeIndex];
-
- // no matching pixmap found, create a new one...
-
- delete m_bitmaps[toolWindow][typeIndex];
- m_bitmaps[toolWindow][typeIndex] = 0;
-
- TQBitmap bmp = IconEngine::icon(type /*icon*/, QMIN(w,h) );
- TQBitmap *bitmap = new TQBitmap(bmp);
- m_bitmaps[toolWindow][typeIndex] = bitmap;
- return *bitmap;
-}
-
-TQValueList< PlastikHandler::BorderSize >
-PlastikHandler::borderSizes() const
-{
- // the list must be sorted
- return TQValueList< BorderSize >() << BorderTiny << BorderNormal <<
- BorderLarge << BorderVeryLarge << BorderHuge <<
- BorderVeryHuge << BorderOversized;
-}
-
-// make the handler accessible to other classes...
-static PlastikHandler *handler = 0;
-PlastikHandler* Handler()
-{
- return handler;
-}
-
-} // KWinPlastik
-
-//////////////////////////////////////////////////////////////////////////////
-// Plugin Stuff //
-//////////////////////////////////////////////////////////////////////////////
-
-extern "C"
-{
- KDE_EXPORT KDecorationFactory *create_factory()
- {
- KWinPlastik::handler = new KWinPlastik::PlastikHandler();
- return KWinPlastik::handler;
- }
-}