summaryrefslogtreecommitdiffstats
path: root/kwin-styles/riscos/Static.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kwin-styles/riscos/Static.cpp')
-rw-r--r--kwin-styles/riscos/Static.cpp540
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
+