diff options
Diffstat (limited to 'kwin-styles/riscos/Static.cpp')
-rw-r--r-- | kwin-styles/riscos/Static.cpp | 540 |
1 files changed, 540 insertions, 0 deletions
diff --git a/kwin-styles/riscos/Static.cpp b/kwin-styles/riscos/Static.cpp new file mode 100644 index 00000000..675cdfc1 --- /dev/null +++ b/kwin-styles/riscos/Static.cpp @@ -0,0 +1,540 @@ +/* + RISC OS KWin client + + Copyright 2000 + Rik Hemsley <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. +*/ + +// for enable-final +#ifdef Bool +#undef Bool +#endif + +#include <qimage.h> +#include <qpixmap.h> +#include <qpainter.h> +#include <qptrlist.h> + +#include <kdecoration.h> + +// #include <ksimpleconfig.h> + +#include "Static.h" + +namespace RiscOS +{ + +/* XPM */ +static const char * const texture_xpm[] = { +"64 12 3 1", +" c None", +"a c #000000", +"b c #FFFFFF", +" b b b b b b b a b ", +" b aa b aaa aaa b a b aab bb a ", +" b b a b b b b aa b b aa ", +" b b b a a b b b b aa ab ab ", +" b b b b b b b ba ", +" aaa aaa aa b b b b b b ", +" b b bb a b aa b a a aaa a b ", +" b b b b b a b b b b b", +" b b b b a a b b aa b baa ", +" a b a bb aa bb aa aaa b aa a ", +" a a aab b b aa aab a b ", +" b a b b aaa a b bb b b b b"}; + +Static* Static::instance_ = NULL; + +Static::Static() +{ + instance_ = this; + _init(); +} + +Static::~Static() +{ + instance_ = NULL; +} + +const QPixmap& Static::titleTextLeft(bool active) const +{ + return active ? aTitleTextLeft_ : iTitleTextLeft_; +} + +const QPixmap& Static::titleTextRight(bool active) const +{ + return active ? aTitleTextRight_ : iTitleTextRight_; +} + +const QPixmap& Static::resizeMidLeft(bool active) const +{ + return active ? aResizeMidLeft_ : iResizeMidLeft_; +} + +const QPixmap& Static::resizeMidRight(bool active) const +{ + return active ? aResizeMidRight_ : iResizeMidRight_; +} + +const QPixmap& Static::titleTextMid(bool active) const +{ + return active ? aTitleTextMid_ : iTitleTextMid_; +} + +const QPixmap& Static::resizeMidMid(bool active) const +{ + return active ? aResizeMid_ : iResizeMid_; +} + +const QPixmap& Static::resize(bool active) const +{ + return active ? aResize_ : iResize_; +} + +int Static::animationStyle() const +{ + return animationStyle_; +} + +int Static::titleHeight() const +{ + return titleHeight_; +} + +int Static::resizeHeight() const +{ + return resizeHeight_; +} + +void Static::_drawBorder(QPixmap &pix, int w, int h) +{ + // 0111111113 + // 1122222235 + // 12 46 + // 12 46 + // 12 46 + // 1344444476 + // 3566666667 + + painter_.begin(&pix); + painter_.translate(transx, transy); + + QColor c0 = down_ ? palette_[7] : palette_[0]; + QColor c1 = down_ ? palette_[6] : palette_[1]; + QColor c2 = down_ ? palette_[5] : palette_[2]; + QColor c3 = down_ ? palette_[4] : palette_[3]; + QColor c4 = down_ ? palette_[3] : palette_[4]; + QColor c5 = down_ ? palette_[2] : palette_[5]; + QColor c6 = down_ ? palette_[2] : palette_[6]; + QColor c7 = down_ ? palette_[1] : palette_[7]; + + painter_.setPen(c0); + painter_.drawPoint(0, 0); + + painter_.setPen(c1); + painter_.drawPoint(1, 1); + painter_.drawLine(1, 0, w - 1, 0); + painter_.drawLine(0, 1, 0, h - 1); + + painter_.setPen(c2); + painter_.drawLine(2, 1, w - 2, 1); + painter_.drawLine(1, 2, 1, h - 2); + + painter_.setPen(c3); + painter_.drawPoint(0, h); + painter_.drawPoint(1, h - 1); + painter_.drawPoint(w, 0); + painter_.drawPoint(w - 1, 1); + painter_.fillRect(2, 2, w - 2, h - 2, c3); + + painter_.setPen(c4); + painter_.drawLine(2, h - 1, w - 2, h - 1); + painter_.drawLine(w - 1, 2, w - 1, h - 2); + + painter_.setPen(c5); + painter_.drawPoint(w, 1); + painter_.drawPoint(1, h); + + painter_.setPen(c6); + painter_.drawLine(w, 2, w, h - 1); + painter_.drawLine(2, h, w - 1, h); + + painter_.setPen(c7); + painter_.drawPoint(w - 1, h - 1); + painter_.drawPoint(w, h); + + painter_.end(); + + painter_.resetXForm(); +} + +void setPalette(Palette &pal, QColor c) +{ + pal[3] = c.rgb(); + + int h, s, v; + c.hsv(&h, &s, &v); + + if (v < 72) + c.setHsv(h, s, 72); + + pal[0] = c.light(200).rgb(); + pal[1] = c.light(166).rgb(); + pal[2] = c.light(125).rgb(); + pal[4] = c.dark(133).rgb(); + pal[5] = c.dark(166).rgb(); + pal[6] = c.dark(200).rgb(); + pal[7] = c.dark(300).rgb(); +} + +void Static::_init() +{ + hicolour_ = QPixmap::defaultDepth() > 8; + animationStyle_ = 0; + updatePixmaps(); +} + +void Static::reset() +{ + updatePixmaps(); +// Workspace::self()->slotResetAllClientsDelayed(); +} + +void Static::updatePixmaps() +{ + _initSizes(); + + _resizeAllPixmaps(); + + _blankAllPixmaps(); + + if (hicolour_) + { + _initPalettes(); + _initTextures(); + } + + _drawTitleTextAreaSides(); + + _drawResizeCentralAreaSides(); + + _drawTitleTextAreaBackground(); + + _drawResizeCentralAreaBackground(); + + _drawResizeHandles(); + + _drawButtonBackgrounds(); +} + +void Static::_createTexture(QPixmap &px, int t, bool active) +{ + const QImage texture(QPixmap((const char **)texture_xpm).convertToImage()); + const QRgb w(qRgb(255, 255, 255)); + const QRgb b(qRgb(0, 0, 0)); + + QColor c(KDecoration::options()->color(KDecoration::ColorType(t), active)); + + QRgb mid (c.rgb()); + QRgb light (c.light(110).rgb()); + QRgb dark (c.dark(110).rgb()); + + QRgb* data(reinterpret_cast<QRgb *>(texture.bits())); + + for (int x = 0; x < 64*12; x++) + if (data[x] == w) + data[x] = light; + else if (data[x] == b) + data[x] = dark; + else + data[x] = mid; + + px.convertFromImage(texture); +} + +const QPixmap& Static::buttonBase(bool active, bool down) const +{ + if (active) + return down ? aButtonDown_ : aButtonUp_; + else + return down ? iButtonDown_ : iButtonUp_; +} + +void Static::_initSizes() +{ + QFont f(KDecoration::options()->font(true)); // XXX false doesn't work right at the moment + + QFontMetrics fm(f); + + int h = fm.height(); + + titleHeight_ = h + 6; + + if (titleHeight_ < 20) + titleHeight_ = 20; + + buttonSize_ = titleHeight_ - 1; + + resizeHeight_ = 10; +} + +void Static::_resizeAllPixmaps() +{ + aResize_ .resize(30, resizeHeight_); + iResize_ .resize(30, resizeHeight_); + aTitleTextLeft_ .resize( 3, titleHeight_); + aTitleTextRight_.resize( 3, titleHeight_); + iTitleTextLeft_ .resize( 3, titleHeight_); + iTitleTextRight_.resize( 3, titleHeight_); + aTitleTextMid_ .resize(64, titleHeight_); + iTitleTextMid_ .resize(64, titleHeight_); + aResizeMidLeft_ .resize( 3, resizeHeight_); + aResizeMidRight_.resize( 3, resizeHeight_); + iResizeMidLeft_ .resize( 3, resizeHeight_); + iResizeMidRight_.resize( 3, resizeHeight_); + aResizeMid_ .resize(64, resizeHeight_); + iResizeMid_ .resize(64, resizeHeight_); + + aButtonUp_ .resize(buttonSize_, buttonSize_); + iButtonUp_ .resize(buttonSize_, buttonSize_); + aButtonDown_ .resize(buttonSize_, buttonSize_); + iButtonDown_ .resize(buttonSize_, buttonSize_); +} + +void Static::_blankAllPixmaps() +{ + aResize_ .fill(Qt::black); + iResize_ .fill(Qt::black); + aTitleTextLeft_ .fill(Qt::black); + aTitleTextRight_.fill(Qt::black); + iTitleTextLeft_ .fill(Qt::black); + iTitleTextRight_.fill(Qt::black); + aTitleTextMid_ .fill(Qt::black); + iTitleTextMid_ .fill(Qt::black); + aResizeMidLeft_ .fill(Qt::black); + aResizeMidRight_.fill(Qt::black); + iResizeMidLeft_ .fill(Qt::black); + iResizeMidRight_.fill(Qt::black); + aResizeMid_ .fill(Qt::black); + iResizeMid_ .fill(Qt::black); + aButtonUp_ .fill(Qt::black); + iButtonUp_ .fill(Qt::black); + aButtonDown_ .fill(Qt::black); + iButtonDown_ .fill(Qt::black); +} + +void Static::_initPalettes() +{ + const KDecorationOptions* options = KDecoration::options(); + setPalette(aButPal_, options->color(KDecoration::ColorButtonBg, true)); + setPalette(iButPal_, options->color(KDecoration::ColorButtonBg, false)); + + setPalette(aTitlePal_, options->color(KDecoration::ColorTitleBar, true)); + setPalette(iTitlePal_, options->color(KDecoration::ColorTitleBar, false)); + + setPalette(aResizePal_, options->color(KDecoration::ColorTitleBar, true)); + setPalette(iResizePal_, options->color(KDecoration::ColorTitleBar, false)); +} + +void Static::_initTextures() +{ + _createTexture(aTexture_, KDecoration::ColorTitleBar, true); + _createTexture(iTexture_, KDecoration::ColorTitleBar, false); + _createTexture(abTexture_, KDecoration::ColorButtonBg, true); + _createTexture(ibTexture_, KDecoration::ColorButtonBg, false); +} + +void Static::_drawTitleTextAreaSides() +{ + QPixmap temp(4, titleHeight_); + temp.fill(Qt::black); + + transx = transy = 0.0; + + palette_ = aTitlePal_; + down_ = false; + + _drawBorder(temp, 4, titleHeight_ - 2); + + painter_.begin(&aTitleTextLeft_); + painter_.drawPixmap(1, 1, temp, 0, 1); + painter_.end(); + + painter_.begin(&aTitleTextRight_); + painter_.drawPixmap(0, 1, temp, 2, 1); + painter_.end(); + + palette_ = iTitlePal_; + _drawBorder(temp, 4, titleHeight_ - 2); + + painter_.begin(&iTitleTextLeft_); + painter_.drawPixmap(1, 1, temp, 0, 1); + painter_.end(); + + painter_.begin(&iTitleTextRight_); + painter_.drawPixmap(0, 1, temp, 2, 1); + painter_.end(); +} + +void Static::_drawResizeCentralAreaSides() +{ + QPixmap temp(4, resizeHeight_); + temp.fill(Qt::black); + + transy = 1.0; + + palette_ = aResizePal_; + + _drawBorder(temp, 4, resizeHeight_ - 3); + + painter_.begin(&aResizeMidLeft_); + painter_.drawPixmap(0, 1, temp, 0, 1); + painter_.end(); + + painter_.begin(&aResizeMidRight_); + painter_.drawPixmap(0, 1, temp, 2, 1); + painter_.end(); + + palette_ = iResizePal_; + _drawBorder(temp, 4, resizeHeight_ - 3); + + painter_.begin(&iResizeMidLeft_); + painter_.drawPixmap(0, 1, temp, 0, 1); + painter_.end(); + + painter_.begin(&iResizeMidRight_); + painter_.drawPixmap(0, 1, temp, 2, 1); + painter_.end(); +} + +void Static::_drawTitleTextAreaBackground() +{ + QPixmap temp(70, titleHeight_); + temp.fill(Qt::black); + + transx = transy = 0.0; + + palette_ = aTitlePal_; + _drawBorder(temp, 70, titleHeight_ - 3); + + painter_.begin(&aTitleTextMid_); + painter_.drawPixmap(0, 1, temp, 2, 0); + if (hicolour_) + painter_.drawTiledPixmap(0, 4, 64, titleHeight_ - 8, aTexture_); + painter_.end(); + + palette_ = iTitlePal_; + _drawBorder(temp, 70, titleHeight_ - 3); + + painter_.begin(&iTitleTextMid_); + painter_.drawPixmap(0, 1, temp, 2, 0); + if (hicolour_) + painter_.drawTiledPixmap(0, 4, 64, titleHeight_ - 8, iTexture_); + painter_.end(); +} + +void Static::_drawResizeCentralAreaBackground() +{ + QPixmap temp(70, titleHeight_); + temp.fill(Qt::black); + + transy = 1.0; + + palette_ = aResizePal_; + _drawBorder(temp, 70, resizeHeight_ - 3); + + painter_.begin(&aResizeMid_); + painter_.drawPixmap(0, 0, temp, 2, 0); + if (hicolour_) + painter_.drawTiledPixmap(0, 4, 64, resizeHeight_ - 8, aTexture_); + painter_.end(); + + palette_ = iResizePal_; + _drawBorder(temp, 70, 7); + + painter_.begin(&iResizeMid_); + painter_.drawPixmap(0, 0, temp, 2, 0); + if (hicolour_) + painter_.drawTiledPixmap(0, 4, 64, resizeHeight_ - 8, iTexture_); + painter_.end(); +} + +void Static::_drawResizeHandles() +{ + transx = transy = 1.0; + + down_ = false; + + palette_ = aResizePal_; + _drawBorder(aResize_, 28, resizeHeight_ - 3); + + if (hicolour_) + { + painter_.begin(&aResize_); + painter_.drawTiledPixmap(4, 4, 20, resizeHeight_ - 8, aTexture_); + painter_.end(); + } + + palette_ = iResizePal_; + _drawBorder(iResize_, 28, resizeHeight_ - 3); + + if (hicolour_) + { + painter_.begin(&iResize_); + painter_.drawTiledPixmap(4, 4, 20, resizeHeight_ - 8, iTexture_); + painter_.end(); + } +} + +void Static::_drawButtonBackgrounds() +{ + buttonSize_ -= 2; + + down_ = false; + transx = 0.0; + transy = 1.0; + palette_ = aButPal_; + _drawBorder(aButtonUp_, buttonSize_, buttonSize_); + down_ = true; + _drawBorder(aButtonDown_, buttonSize_, buttonSize_); + + palette_ = iButPal_; + _drawBorder(iButtonDown_, buttonSize_, buttonSize_); + down_ = false; + _drawBorder(iButtonUp_, buttonSize_, buttonSize_); + + painter_.begin(&aButtonUp_); + + if (hicolour_) + painter_.drawTiledPixmap(2, 4, buttonSize_ - 4, buttonSize_ - 5, + abTexture_); + + painter_.end(); + + painter_.begin(&iButtonUp_); + if (hicolour_) + painter_.drawTiledPixmap(2, 4, buttonSize_ - 4, buttonSize_ - 5, + ibTexture_); + + painter_.end(); +} + +} // End namespace + +// vim:ts=2:sw=2:tw=78 + |