From 4c8257e2add60b6ec044b4d68562d485db2d05b8 Mon Sep 17 00:00:00 2001 From: Rik Hemsley Date: Sat, 15 Jul 2000 06:59:08 +0000 Subject: [PATCH] Default theme, first draft. svn path=/trunk/kdebase/kwin/; revision=57032 --- clients/riscos/Button.cpp | 14 +- clients/riscos/Button.h | 8 +- clients/riscos/CloseButton.cpp | 4 +- clients/riscos/CloseButton.h | 8 +- clients/riscos/DBWidget.cpp | 7 +- clients/riscos/DBWidget.h | 8 +- clients/riscos/IconifyButton.cpp | 4 +- clients/riscos/IconifyButton.h | 8 +- clients/riscos/Makefile.am | 14 +- clients/riscos/Manager.cpp | 41 +- clients/riscos/Manager.h | 12 +- clients/riscos/MaximiseButton.cpp | 4 +- clients/riscos/MaximiseButton.h | 8 +- clients/riscos/README | 91 +--- clients/riscos/ResizeBar.cpp | 6 +- clients/riscos/ResizeBar.h | 8 +- clients/riscos/ResizeMid.cpp | 27 +- clients/riscos/ResizeMid.h | 8 +- clients/riscos/ResizeSide.cpp | 28 +- clients/riscos/ResizeSide.h | 8 +- clients/riscos/Static.cpp | 702 +++++++++--------------------- clients/riscos/Static.h | 137 ++++-- clients/riscos/TitleBar.cpp | 119 +++-- clients/riscos/TitleBar.h | 13 +- clients/riscos/TitleText.cpp | 21 +- clients/riscos/TitleText.h | 8 +- 26 files changed, 548 insertions(+), 768 deletions(-) diff --git a/clients/riscos/Button.cpp b/clients/riscos/Button.cpp index a5031de397..ac18463ac3 100644 --- a/clients/riscos/Button.cpp +++ b/clients/riscos/Button.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -23,7 +23,7 @@ #include "Button.h" #include "Static.h" -namespace RiscOS +namespace Default { Button::Button(QWidget * parent, SymbolType t) @@ -33,7 +33,10 @@ Button::Button(QWidget * parent, SymbolType t) down_ (false), active_ (false) { - setFixedSize(19, 20); + if (type_ == Sticky) + setFixedWidth(Static::instance()->buttonWidth2()); + else + setFixedWidth(Static::instance()->buttonWidth1()); } Button::~Button() @@ -44,10 +47,7 @@ Button::~Button() void Button::updateDisplay() { - setBackgroundPixmap( - Static::instance()->button(type_, active_, down_) - ); - + setBackgroundPixmap(Static::instance()->button(type_, active_, down_)); repaint(true); } diff --git a/clients/riscos/Button.h b/clients/riscos/Button.h index 20c6e3b252..fe84e9d838 100644 --- a/clients/riscos/Button.h +++ b/clients/riscos/Button.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,13 +20,13 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_BUTTON_H -#define RISC_OS_BUTTON_H +#ifndef DEFAULT_BUTTON_H +#define DEFAULT_BUTTON_H #include "Static.h" #include -namespace RiscOS +namespace Default { class Button : public QWidget diff --git a/clients/riscos/CloseButton.cpp b/clients/riscos/CloseButton.cpp index 39bbf05639..450d375826 100644 --- a/clients/riscos/CloseButton.cpp +++ b/clients/riscos/CloseButton.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -22,7 +22,7 @@ #include "CloseButton.h" -namespace RiscOS +namespace Default { CloseButton::CloseButton(QWidget * parent) diff --git a/clients/riscos/CloseButton.h b/clients/riscos/CloseButton.h index 31fc7641cf..465cdc66e8 100644 --- a/clients/riscos/CloseButton.h +++ b/clients/riscos/CloseButton.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_CLOSE_BUTTON_H -#define RISC_OS_CLOSE_BUTTON_H +#ifndef DEFAULT_CLOSE_BUTTON_H +#define DEFAULT_CLOSE_BUTTON_H #include "Button.h" -namespace RiscOS +namespace Default { class CloseButton : public Button diff --git a/clients/riscos/DBWidget.cpp b/clients/riscos/DBWidget.cpp index 76fc926676..af4599c727 100644 --- a/clients/riscos/DBWidget.cpp +++ b/clients/riscos/DBWidget.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -22,11 +22,12 @@ #include "DBWidget.h" -namespace RiscOS +namespace Default { DBWidget::DBWidget(QWidget * parent, const char * name) - : QWidget(parent, name, WResizeNoErase | WRepaintNoErase | WPaintUnclipped) + : QWidget(parent, name, WResizeNoErase | WRepaintNoErase | WPaintUnclipped | +WNorthWestGravity) { buf_.resize(20, 20); setBackgroundMode(NoBackground); diff --git a/clients/riscos/DBWidget.h b/clients/riscos/DBWidget.h index a2a4716aa5..9988012be5 100644 --- a/clients/riscos/DBWidget.h +++ b/clients/riscos/DBWidget.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,13 +20,13 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_DOUBLE_BUFFERED_WIDGET_H -#define RISC_OS_DOUBLE_BUFFERED_WIDGET_H +#ifndef DEFAULT_DOUBLE_BUFFERED_WIDGET_H +#define DEFAULT_DOUBLE_BUFFERED_WIDGET_H #include #include -namespace RiscOS +namespace Default { class DBWidget : public QWidget diff --git a/clients/riscos/IconifyButton.cpp b/clients/riscos/IconifyButton.cpp index d1724553cc..2c92f175de 100644 --- a/clients/riscos/IconifyButton.cpp +++ b/clients/riscos/IconifyButton.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -22,7 +22,7 @@ #include "IconifyButton.h" -namespace RiscOS +namespace Default { IconifyButton::IconifyButton(QWidget * parent) diff --git a/clients/riscos/IconifyButton.h b/clients/riscos/IconifyButton.h index ad6880d610..5bcccf7e74 100644 --- a/clients/riscos/IconifyButton.h +++ b/clients/riscos/IconifyButton.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_ICONIFY_BUTTON_H -#define RISC_OS_ICONIFY_BUTTON_H +#ifndef DEFAULT_ICONIFY_BUTTON_H +#define DEFAULT_ICONIFY_BUTTON_H #include "Button.h" -namespace RiscOS +namespace Default { class IconifyButton : public Button diff --git a/clients/riscos/Makefile.am b/clients/riscos/Makefile.am index d42c89cb02..4f84ededd4 100644 --- a/clients/riscos/Makefile.am +++ b/clients/riscos/Makefile.am @@ -1,13 +1,13 @@ INCLUDES = $(all_includes) -lib_LTLIBRARIES = libkwinriscos.la +lib_LTLIBRARIES = libkwindefault.la -libkwinriscos_la_SOURCES = \ +libkwindefault_la_SOURCES = \ Button.cpp \ CloseButton.cpp \ DBWidget.cpp \ IconifyButton.cpp \ -LowerButton.cpp \ +StickyButton.cpp \ Manager.cpp \ MaximiseButton.cpp \ ResizeBar.cpp \ @@ -16,8 +16,8 @@ ResizeSide.cpp \ TitleBar.cpp \ TitleText.cpp \ Static.cpp -libkwinriscos_la_LIBADD = ../../kwin.la -libkwinriscos_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) +libkwindefault_la_LIBADD = ../../kwin.la +libkwindefault_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) METASOURCES = AUTO noinst_HEADERS = \ @@ -25,7 +25,7 @@ Button.h \ CloseButton.h \ DBWidget.h \ IconifyButton.h \ -LowerButton.h \ +StickyButton.h \ Manager.h \ MaximiseButton.h \ ResizeBar.h \ @@ -36,7 +36,7 @@ TitleText.h \ Static.h lnkdir = $(kde_datadir)/kwin/ -lnk_DATA = riscos.desktop +lnk_DATA = default.desktop EXTRA_DIST = $(lnk_DATA) diff --git a/clients/riscos/Manager.cpp b/clients/riscos/Manager.cpp index d00c7d654a..53ce606802 100644 --- a/clients/riscos/Manager.cpp +++ b/clients/riscos/Manager.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -35,11 +35,11 @@ extern "C" { Client * allocate(Workspace * workSpace, WId winId) { - return new RiscOS::Manager(workSpace, winId); + return new Default::Manager(workSpace, winId); } } -namespace RiscOS +namespace Default { Manager::Manager( @@ -77,6 +77,12 @@ Manager::captionChange(const QString &) titleBar_->updateText(); } + void +Manager::stickyChange(bool b) +{ + emit(stickyStatusChanged(b)); +} + void Manager::paletteChange(const QPalette &) { @@ -143,9 +149,9 @@ Manager::mousePosition(const QPoint & p) const } void -Manager::lower() +Manager::toggleSticky() { - workspace()->lowerClient(this); + setSticky(!isSticky()); } void @@ -170,10 +176,27 @@ Manager::resizeEvent(QResizeEvent * e) void Manager::_updateLayout() { - titleBar_ -> setGeometry(0, 0, width(), 20); - windowWrapper() -> setGeometry(1, 20, width() - 2, height() - 30); - resizeBar_ -> setGeometry(0, height() - 10, width(), 10); - + titleBar_ -> setGeometry( + 0, + 0, + width(), + Static::instance()->titleHeight() + ); + + windowWrapper() -> setGeometry( + 1, + Static::instance()->titleHeight(), + width() - 2, + height() - Static::instance()->titleHeight() - RESIZE_BAR_HEIGHT + ); + + resizeBar_ -> setGeometry( + 0, + height() - RESIZE_BAR_HEIGHT, + width(), + RESIZE_BAR_HEIGHT + ); + _updateDisplay(); } diff --git a/clients/riscos/Manager.h b/clients/riscos/Manager.h index 65adad068f..7f2f654e26 100644 --- a/clients/riscos/Manager.h +++ b/clients/riscos/Manager.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_MANAGER_H -#define RISC_OS_MANAGER_H +#ifndef DEFAULT_MANAGER_H +#define DEFAULT_MANAGER_H #include "../../client.h" -namespace RiscOS +namespace Default { class TitleBar; @@ -47,10 +47,11 @@ class Manager : public Client signals: void maximiseChanged(bool); + void stickyStatusChanged(bool); public slots: - void lower(); + void toggleSticky(); void raise(); void vMax(); @@ -67,6 +68,7 @@ class Manager : public Client protected slots: void captionChange(const QString &); + void stickyChange(bool); void slotReset(); private: diff --git a/clients/riscos/MaximiseButton.cpp b/clients/riscos/MaximiseButton.cpp index 677ab6526a..f6dc95f636 100644 --- a/clients/riscos/MaximiseButton.cpp +++ b/clients/riscos/MaximiseButton.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -22,7 +22,7 @@ #include "MaximiseButton.h" -namespace RiscOS +namespace Default { MaximiseButton::MaximiseButton(QWidget * parent) diff --git a/clients/riscos/MaximiseButton.h b/clients/riscos/MaximiseButton.h index a23c8ec4df..ea2bf595ce 100644 --- a/clients/riscos/MaximiseButton.h +++ b/clients/riscos/MaximiseButton.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_MAXIMISE_BUTTON_H -#define RISC_OS_MAXIMISE_BUTTON_H +#ifndef DEFAULT_MAXIMISE_BUTTON_H +#define DEFAULT_MAXIMISE_BUTTON_H #include "Button.h" -namespace RiscOS +namespace Default { class MaximiseButton : public Button diff --git a/clients/riscos/README b/clients/riscos/README index 04ebd85d4e..278bfc87cd 100644 --- a/clients/riscos/README +++ b/clients/riscos/README @@ -1,90 +1 @@ -This theme emulates the look and feel of the RISC OS 'window manager'. -Actually, RISC OS doesn't have a window manager in the same way X -does, but if you imagine it does, this is an emulation of that ;) - -The look is obviously quite different, but coming anywhere close to -the unique look of RISC OS would be quite blatantly obvious, so to -avoid copyright issues, the look of this theme is unique. You may -consider it to be RISC OS grown up ;) - -Functions that will be implemented but are currently missing: - Transparent resize. - Shading. - Backward-resize. - NOTE: Backward-resize is an interesting feature and quite useful. - If you resize a window such that you hit the screen edge - in the process, the window resizes 'backwards' (i.e. - moves in the opposite direction to your drag and at the - same time continues increasing in size). So instead - of having to let go of the resize handle, move the window - and resize again, it just does what you want it to do. - -Button functions: (Missing functionality is marked with TODO) - -Button One: - - Left button: TODO - Lower window and drop focus. This is currently unimplemented - in kwin itself. - -Button Two: - - Left button: Close window. - - Right button: TODO, if I can be bothered. - Close window. - If window is filer window, open another filer window - in parent dir. - If window is document window, open a filer window in - dir containing document. - If you hold Shift, the window doesn't close. - NOTE: - This requires app support. - If I were to implement this, I would do it in konqy - and probably not bother for other apps. - -Titlebar: - - Left button: Raise, focus and move window - - Middle button: Move window - - Right button: Menu - Note: Buttons are this way around for compatibility with - other kwin themes. - -Button Three: - - Left button: Iconify window. - -Button Four: - - Left button: Maximise or restore window plus raise and focus. - - Middle button: Maximise vertically or restore window plus raise and focus. - - Right button: Maximise or restore window. - -Resize bar left/right: - - Left button: Move that corner (resizes window) and raise - - Other buttons: Same without raising - -Resize bar centre: - - Left button: Move that edge (resizes window) and raise - - Other buttons: Same without raising - -The lower bar is used for resizing. It works in the NeXT style. -This doesn't exist on RISC OS. In RISC OS, there is a 'resize handle' -in the lower right corner of the window (actually inside the window). - -To emulate this would mean covering part of the window with the decorations, -which is not acceptable. RISC OS gets away with it by making sure that -there is a vertical scrollbar visible at all times, which is just stupid. -It's also an impossibility with X11, as the window manager does not know -anything about scrollbars - they belong to the application, so don't ask -me to implement it. - +Default KWin theme diff --git a/clients/riscos/ResizeBar.cpp b/clients/riscos/ResizeBar.cpp index e36ccd665f..22f561d60c 100644 --- a/clients/riscos/ResizeBar.cpp +++ b/clients/riscos/ResizeBar.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -26,7 +26,7 @@ #include -namespace RiscOS +namespace Default { ResizeBar::ResizeBar(QWidget * parent, Manager * client) @@ -53,7 +53,7 @@ ResizeBar::updateDisplay() void ResizeBar::resizeEvent(QResizeEvent *) { - mid_->resize(width() - 60, 10); + mid_->resize(width() - 60, mid_->height()); right_->move(width() - 30, 0); } diff --git a/clients/riscos/ResizeBar.h b/clients/riscos/ResizeBar.h index 10bb81c6cc..449e834067 100644 --- a/clients/riscos/ResizeBar.h +++ b/clients/riscos/ResizeBar.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_RESIZE_BAR_H -#define RISC_OS_RESIZE_BAR_H +#ifndef DEFAULT_RESIZE_BAR_H +#define DEFAULT_RESIZE_BAR_H #include -namespace RiscOS +namespace Default { class Manager; diff --git a/clients/riscos/ResizeMid.cpp b/clients/riscos/ResizeMid.cpp index 5429c94710..b6ead24fc3 100644 --- a/clients/riscos/ResizeMid.cpp +++ b/clients/riscos/ResizeMid.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,20 +20,22 @@ Boston, MA 02111-1307, USA. */ -#include +#include +#include +#include #include "ResizeMid.h" #include "Manager.h" #include "Static.h" -namespace RiscOS +namespace Default { ResizeMid::ResizeMid(QWidget * parent, Manager * client) : DBWidget(parent, "ResizeMid"), client_(client) { - setFixedHeight(10); + setFixedHeight(RESIZE_BAR_HEIGHT); setCursor(Qt::sizeVerCursor); } @@ -47,9 +49,20 @@ ResizeMid::updatePixmap() { QPainter p(&buf()); - p.drawPixmap(0, 0, Static::instance()->resizeMidLeft(client_->isActive())); - p.drawPixmap(width() - 2, 0, Static::instance()->resizeMidRight(client_->isActive())); - p.drawTiledPixmap(2, 0, width() - 4, 10, Static::instance()->resizeMidMid(client_->isActive())); + QColorGroup g( + client_->isActive() ? + palette().active() : + palette().inactive() + ); + + QBrush b(g.button()); + + QStyle * style = kapp->kstyle(); + + if (0 != style) + style->drawPanel(&p, 0, 0, width(), height(), g, false, 2, &b); + else + kapp->style().drawPanel(&p, 0, 0, width(), height(), g, false, 2, &b); } void diff --git a/clients/riscos/ResizeMid.h b/clients/riscos/ResizeMid.h index 111d9bae66..25b455cd3d 100644 --- a/clients/riscos/ResizeMid.h +++ b/clients/riscos/ResizeMid.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_RESIZE_MID_H -#define RISC_OS_RESIZE_MID_H +#ifndef DEFAULT_RESIZE_MID_H +#define DEFAULT_RESIZE_MID_H #include "DBWidget.h" -namespace RiscOS +namespace Default { class Manager; diff --git a/clients/riscos/ResizeSide.cpp b/clients/riscos/ResizeSide.cpp index f06e4d7a02..b617704fd1 100644 --- a/clients/riscos/ResizeSide.cpp +++ b/clients/riscos/ResizeSide.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -21,12 +21,14 @@ */ #include +#include +#include #include "ResizeSide.h" #include "Manager.h" #include "Static.h" -namespace RiscOS +namespace Default { ResizeSide::ResizeSide(QWidget * parent, Manager * client, Side s) @@ -35,7 +37,7 @@ ResizeSide::ResizeSide(QWidget * parent, Manager * client, Side s) side_ (s) { setCursor(side_ == Left ? Qt::sizeBDiagCursor : Qt::sizeFDiagCursor); - setFixedSize(30, 10); + setFixedSize(RESIZE_SIDE_WIDTH, RESIZE_BAR_HEIGHT); updateDisplay(); } @@ -67,7 +69,25 @@ ResizeSide::mouseMoveEvent(QMouseEvent * e) void ResizeSide::updateDisplay() { - setBackgroundPixmap(Static::instance()->resize(client_->isActive())); + QPixmap pix(size()); + QPainter p(&pix); + + QColorGroup g( + client_->isActive() ? + palette().active() : + palette().inactive() + ); + + QBrush b(g.button()); + + QStyle * style = kapp->kstyle(); + + if (0 != style) + style->drawPanel(&p, 0, 0, width(), height(), g, false, 2, &b); + else + kapp->style().drawPanel(&p, 0, 0, width(), height(), g, false, 2, &b); + + setBackgroundPixmap(pix); } void diff --git a/clients/riscos/ResizeSide.h b/clients/riscos/ResizeSide.h index 1b31e9d2c0..a0cd7bdb77 100644 --- a/clients/riscos/ResizeSide.h +++ b/clients/riscos/ResizeSide.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,12 +20,12 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_RESIZE_SIDE_H -#define RISC_OS_RESIZE_SIDE_H +#ifndef DEFAULT_RESIZE_SIDE_H +#define DEFAULT_RESIZE_SIDE_H #include -namespace RiscOS +namespace Default { class Manager; diff --git a/clients/riscos/Static.cpp b/clients/riscos/Static.cpp index 235c80ab31..b0cfea5ca1 100644 --- a/clients/riscos/Static.cpp +++ b/clients/riscos/Static.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -23,300 +23,59 @@ #include #include #include +#include #include "../../options.h" #include "Static.h" -namespace RiscOS +namespace Default { - void -Static::_drawButtonBorder(QPixmap & pix) +static void drawButtonFrame(KPixmap & pix, const QColorGroup &g, bool sunken) { - _drawBorder(pix, 17, 17); + QPainter p; + + int w = pix.width(); + int h = pix.height(); + + p.begin(&pix); + + p.setPen(g.dark()); + + p.drawLine(0, 0, w-1, 0); + p.drawLine(0, 0, 0, h-1); + + p.setPen(sunken ? g.dark() : g.light()); + p.drawLine(1, 1, w-2, 1); + p.drawLine(1, 1, 1, h-2); + + p.setPen(sunken ? g.light() : g.dark()); + p.drawLine(w-2, 1, w-2, h-2); + p.drawLine(1, h-2, w-2, h-2); + + p.setPen(g.light()); + p.drawLine(w-1, 0, w-1, h-1); + p.drawLine(0, h-1, w-1, h-1); + + p.end(); } - void -Static::_drawBorder(QPixmap & pix, int w, int h) -{ -// 0111111113 -// 1022222235 -// 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(); -} - - void -Static::_drawCloseSymbol(QPixmap & pixmap) -{ - painter_.begin(&pixmap); - painter_.translate(transx, transy); - - painter_.setPen(QColor(palette_[1])); - painter_.drawLine(2, 0, 11, 9); - painter_.drawLine(0, 2, 9, 11); - - painter_.drawLine(0, 9, 9, 0); - painter_.drawLine(2, 11, 11, 2); - - painter_.drawPoint(0, 1); - painter_.drawPoint(1, 0); - painter_.drawPoint(10, 0); - painter_.drawPoint(11, 1); - painter_.drawPoint(0, 10); - painter_.drawPoint(1, 11); - painter_.drawPoint(10, 11); - painter_.drawPoint(11, 10); - - painter_.setPen(QColor(palette_[6])); - painter_.drawLine(1, 2, 9, 10); - painter_.drawLine(1, 1, 10, 10); - painter_.drawLine(2, 1, 10, 9); - - painter_.drawLine(1, 9, 9, 1); - painter_.drawLine(1, 10, 10, 1); - painter_.drawLine(2, 10, 10, 2); - - painter_.end(); -} - - void -Static::_drawIconifySymbol(QPixmap & pixmap) -{ - painter_.begin(&pixmap); - painter_.translate(transx, transy); - - painter_.setPen(QColor(palette_[1])); - painter_.drawRect(1, 4, 10, 4); - - painter_.setPen(QColor(palette_[3])); - painter_.drawPoint(1, 4); - painter_.drawPoint(1, 7); - painter_.drawPoint(10, 4); - painter_.drawPoint(10, 7); - - painter_.setPen(QColor(palette_[6])); - painter_.drawLine(2, 5, 9, 5); - painter_.drawLine(2, 6, 9, 6); - - painter_.end(); -} - - void -Static::_drawLowerSymbol(QPixmap & pixmap) -{ - painter_.begin(&pixmap); - painter_.translate(transx, transy); - - painter_.fillRect(1, 1, 6, 6, QColor(palette_[6])); - painter_.fillRect(5, 5, 6, 6, QColor(palette_[3])); - - painter_.setPen(QColor(palette_[1])); - painter_.drawRect(0, 0, 8, 8); - painter_.drawRect(4, 4, 8, 8); - - painter_.setPen(QColor(palette_[3])); - painter_.drawPoint(0, 0); - painter_.drawPoint(7, 0); - painter_.drawPoint(0, 7); - painter_.drawPoint(3, 7); - painter_.drawPoint(7, 3); - painter_.drawPoint(4, 4); - painter_.drawPoint(11, 4); - painter_.drawPoint(4, 11); - painter_.drawPoint(11, 11); - - painter_.setPen(QColor(palette_[5])); - painter_.drawPoint(5, 7); - painter_.drawPoint(7, 5); - - painter_.setPen(QColor(palette_[4])); - painter_.drawPoint(7, 6); - painter_.drawPoint(7, 7); - painter_.drawPoint(6, 7); - - painter_.end(); -} - - void -Static::_drawMaxSymbol(QPixmap & pixmap) -{ - painter_.begin(&pixmap); - painter_.translate(transx, transy); - - painter_.setPen(QColor(palette_[1])); - painter_.drawRect(2, 2, 8, 8); - - painter_.setPen(QColor(palette_[3])); - painter_.drawPoint(2, 2); - painter_.drawPoint(2, 9); - painter_.drawPoint(9, 9); - painter_.drawPoint(9, 2); - - painter_.fillRect(3, 3, 6, 6, QColor(palette_[6])); - - painter_.end(); -} - - void -Static::_drawUnmaxSymbol(QPixmap & pixmap) -{ - painter_.begin(&pixmap); - painter_.translate(transx, transy); - - painter_.setPen(QColor(palette_[1])); - painter_.drawRect(0, 0, 12, 12); - - painter_.setPen(QColor(palette_[3])); - painter_.drawPoint(0, 0); - painter_.drawPoint(0, 11); - painter_.drawPoint(11, 0); - painter_.drawPoint(11, 11); - - painter_.fillRect(1, 1, 10, 10, QColor(palette_[6])); - - painter_.end(); -} - - 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 -setInversePalette(Palette & pal, QColor c) -{ - pal[4] = c.rgb(); - - int h, s, v; - c.hsv(&h, &s, &v); - - if (v < 72) - c.setHsv(h, s, 72); - - pal[7] = c.light(200).rgb(); - pal[6] = c.light(166).rgb(); - pal[5] = c.light(125).rgb(); - pal[3] = c.dark(133).rgb(); - pal[2] = c.dark(166).rgb(); - pal[1] = c.dark(200).rgb(); - pal[0] = c.dark(300).rgb(); -} Static * Static::instance_ = 0L; void Static::_init() { - buttonPixmaps_.append(&aIconify_); - buttonPixmaps_.append(&aClose_); - buttonPixmaps_.append(&aLower_); - buttonPixmaps_.append(&aMax_); - buttonPixmaps_.append(&aUnmax_); - buttonPixmaps_.append(&iIconify_); - buttonPixmaps_.append(&iClose_); - buttonPixmaps_.append(&iLower_); - buttonPixmaps_.append(&iMax_); - buttonPixmaps_.append(&iUnmax_); - buttonPixmaps_.append(&aIconifyDown_); - buttonPixmaps_.append(&aCloseDown_); - buttonPixmaps_.append(&aLowerDown_); - buttonPixmaps_.append(&aMaxDown_); - buttonPixmaps_.append(&aUnmaxDown_); - buttonPixmaps_.append(&iIconifyDown_); - buttonPixmaps_.append(&iCloseDown_); - buttonPixmaps_.append(&iLowerDown_); - buttonPixmaps_.append(&iMaxDown_); - buttonPixmaps_.append(&iUnmaxDown_); - - for (QListIterator it(buttonPixmaps_); it.current(); ++it) { - - it.current()->setOptimization(QPixmap::MemoryOptim); - it.current()->resize(19, 20); - it.current()->fill(Qt::black); - } - aResize_.setOptimization(QPixmap::MemoryOptim); iResize_.setOptimization(QPixmap::MemoryOptim); - aResize_.resize(30, 10); - iResize_.resize(30, 10); + aResize_.resize(30, RESIZE_BAR_HEIGHT); + iResize_.resize(30, RESIZE_BAR_HEIGHT); aResize_.fill(Qt::black); iResize_.fill(Qt::black); - aTitleTextLeft_ .setOptimization(QPixmap::BestOptim); - aTitleTextRight_ .setOptimization(QPixmap::BestOptim); - aTitleTextMid_ .setOptimization(QPixmap::BestOptim); - - iTitleTextLeft_ .setOptimization(QPixmap::BestOptim); - iTitleTextRight_ .setOptimization(QPixmap::BestOptim); - iTitleTextMid_ .setOptimization(QPixmap::BestOptim); + aTitle_ .setOptimization(QPixmap::BestOptim); + iTitle_ .setOptimization(QPixmap::BestOptim); aResizeMidLeft_ .setOptimization(QPixmap::BestOptim); aResizeMidRight_ .setOptimization(QPixmap::BestOptim); @@ -326,21 +85,6 @@ Static::_init() iResizeMidRight_ .setOptimization(QPixmap::BestOptim); iResizeMid_ .setOptimization(QPixmap::BestOptim); - aTitleTextLeft_ .resize(3, 20); - aTitleTextRight_ .resize(3, 20); - aTitleTextLeft_ .fill(Qt::black); - aTitleTextRight_ .fill(Qt::black); - - iTitleTextLeft_ .resize(3, 20); - iTitleTextRight_ .resize(3, 20); - iTitleTextLeft_ .fill(Qt::black); - iTitleTextRight_ .fill(Qt::black); - - aTitleTextMid_ .resize(128, 20); - iTitleTextMid_ .resize(128, 20); - aTitleTextMid_ .fill(Qt::black); - iTitleTextMid_ .fill(Qt::black); - aResizeMidLeft_ .resize(3, 12); aResizeMidRight_ .resize(3, 12); aResizeMidLeft_ .fill(Qt::black); @@ -351,275 +95,227 @@ Static::_init() iResizeMidLeft_ .fill(Qt::black); iResizeMidRight_ .fill(Qt::black); - aResizeMid_ .resize(128, 10); - iResizeMid_ .resize(128, 10); + aResizeMid_ .resize(128, RESIZE_BAR_HEIGHT); + iResizeMid_ .resize(128, RESIZE_BAR_HEIGHT); aResizeMid_ .fill(Qt::black); iResizeMid_ .fill(Qt::black); + _loadGlyphs(); + update(); } void Static::update() { - // ------------------------------------------------------------------------- - // Palettes - // ------------------------------------------------------------------------- + QPainter p; - Palette aBut, iBut; - Palette aSym, iSym; + titleHeight_ = 24; + btnWidth1_ = 36; + btnWidth2_ = 24; - if (QPixmap::defaultDepth() > 8) { + unsigned int availableTitleHeight = titleHeight_ - 6; - setPalette(aBut, options->color(Options::ButtonBg, true)); - setPalette(iBut, options->color(Options::ButtonBg, false)); + aTitle_.resize(36, availableTitleHeight); + iTitle_.resize(36, availableTitleHeight); - QColor btnForeground; - if(qGray(options->color(Options::ButtonBg, true).rgb()) > 128) - btnForeground = Qt::black; - else - btnForeground = Qt::white; - setInversePalette(aSym, btnForeground); - if(qGray(options->color(Options::ButtonBg, false).rgb()) > 128) - btnForeground = Qt::black; - else - btnForeground = Qt::white; - setInversePalette(iSym, btnForeground); - - setPalette(aTitlePal_, options->color(Options::TitleBar, true)); - setPalette(iTitlePal_, options->color(Options::TitleBar, false)); + aTitleText_.resize(36, availableTitleHeight); + iTitleText_.resize(36, availableTitleHeight); - setPalette(aResizePal_, options->color(Options::Handle, true)); - setPalette(iResizePal_, options->color(Options::Handle, false)); - } + aTitleLeft_.resize(2, availableTitleHeight); + iTitleLeft_.resize(2, availableTitleHeight); - // ------------------------------------------------------------------------- - // Bevels - // ------------------------------------------------------------------------- + aTitleRight_.resize(2, availableTitleHeight); + iTitleRight_.resize(2, availableTitleHeight); - transx = transy = 0.0; + QColor bgColor, light, dark; + QColorGroup buttonBgColorGroup = options->colorGroup(Options::ButtonBg, true); + KPixmapEffect::GradientType vertGrad = KPixmapEffect::VerticalGradient; + KPixmapEffect::GradientType diagGrad = KPixmapEffect::DiagonalGradient; + QSize buttonSize1(btnWidth1_, availableTitleHeight); + QSize buttonSize2(btnWidth2_, availableTitleHeight); - // Create sides of title text area and resize bar middle. + // Titlebar - QPixmap temp(4, 20); - temp.fill(Qt::black); - palette_ = aTitlePal_; - down_ = false; + bgColor = options->color(Options::TitleBar, true); - _drawBorder(temp, 4, 18); + light = bgColor.light(120); + dark = bgColor.dark(120); - painter_.begin(&aTitleTextLeft_); - painter_.drawPixmap(1, 1, temp, 0, 1); - painter_.end(); + KPixmapEffect::gradient(aTitle_, light, dark, vertGrad); + KPixmapEffect::gradient(aTitleText_, light, dark, vertGrad); + KPixmapEffect::gradient(aTitleLeft_, light, dark, vertGrad); + KPixmapEffect::gradient(aTitleRight_, light, dark, vertGrad); - painter_.begin(&aTitleTextRight_); - painter_.drawPixmap(0, 1, temp, 2, 1); - painter_.end(); + p.begin(&aTitle_); + p.setPen(dark); + p.drawLine(0, 0, 36, 0); + p.setPen(light); + p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1); + p.end(); - palette_ = iTitlePal_; - _drawBorder(temp, 4, 18); + p.begin(&aTitleText_); + p.setPen(dark); + p.drawLine(0, 0, 36, 0); + p.setPen(light); + p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1); + p.end(); - painter_.begin(&iTitleTextLeft_); - painter_.drawPixmap(1, 1, temp, 0, 1); - painter_.end(); + p.begin(&aTitleLeft_); + p.setPen(dark); + p.drawPoint(1, 0); + p.drawLine(0, 0, 0, availableTitleHeight - 1); + p.setPen(light); + p.drawPoint(1, availableTitleHeight - 1); + p.end(); - painter_.begin(&iTitleTextRight_); - painter_.drawPixmap(0, 1, temp, 2, 1); - painter_.end(); - - transy = 1.0; + p.begin(&aTitleRight_); + p.setPen(dark); + p.drawPoint(0, 1); + p.setPen(light); + p.drawLine(1, 0, 1, availableTitleHeight - 1); + p.drawPoint(0, availableTitleHeight - 1); + p.end(); - palette_ = aResizePal_; - temp.resize(4, 10); - temp.fill(Qt::black); - _drawBorder(temp, 4, 7); + bgColor = options->color(Options::TitleBar, false); + light = bgColor.light(120); + dark = bgColor.dark(120); - painter_.begin(&aResizeMidLeft_); - painter_.drawPixmap(0, 1, temp, 0, 1); - painter_.end(); + KPixmapEffect::gradient(iTitle_, light, dark, vertGrad); + KPixmapEffect::gradient(iTitleText_, light, dark, vertGrad); + KPixmapEffect::gradient(iTitleLeft_, light, dark, vertGrad); + KPixmapEffect::gradient(iTitleRight_, light, dark, vertGrad); - painter_.begin(&aResizeMidRight_); - painter_.drawPixmap(0, 1, temp, 2, 1); - painter_.end(); + p.begin(&iTitle_); + p.setPen(dark); + p.drawLine(0, 0, 36, 0); + p.setPen(light); + p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1); + p.end(); - palette_ = iResizePal_; - _drawBorder(temp, 4, 7); + p.begin(&iTitleText_); + p.setPen(dark); + p.drawLine(0, 0, 36, 0); + p.setPen(light); + p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1); + p.end(); - painter_.begin(&iResizeMidLeft_); - painter_.drawPixmap(0, 1, temp, 0, 1); - painter_.end(); + p.begin(&iTitleLeft_); + p.setPen(dark); + p.drawPoint(1, 0); + p.drawLine(0, 0, 0, availableTitleHeight - 1); + p.setPen(light); + p.drawPoint(1, availableTitleHeight - 1); + p.end(); - painter_.begin(&iResizeMidRight_); - painter_.drawPixmap(0, 1, temp, 2, 1); - painter_.end(); + p.begin(&iTitleRight_); + p.setPen(dark); + p.drawPoint(0, 1); + p.setPen(light); + p.drawLine(1, 0, 1, availableTitleHeight - 1); + p.drawPoint(0, availableTitleHeight - 1); + p.end(); - transx = transy = 0.0; + p.begin(&aTitle_); + p.setPen(options->color(Options::TitleBar, true).light(150)); - temp.resize(132, 20); - - temp.fill(Qt::black); + for (unsigned int y = 3; y < availableTitleHeight - 3; y += 3) + for (unsigned int x = 1; x < 36; x += 3) + p.drawPoint(x, y); - palette_ = aTitlePal_; - _drawBorder(temp, 132, 17); - - painter_.begin(&aTitleTextMid_); - painter_.drawPixmap(0, 1, temp, 2, 0); - painter_.end(); + p.setPen(options->color(Options::TitleBar, true).dark(150)); - palette_ = iTitlePal_; - _drawBorder(temp, 132, 17); - - painter_.begin(&iTitleTextMid_); - painter_.drawPixmap(0, 1, temp, 2, 0); - painter_.end(); + for (unsigned int y = 3; y < availableTitleHeight - 3; y += 3) + for (unsigned int x = 1; x < 36; x += 3) + p.drawPoint(x + 1, y + 1); + p.end(); - transy = 1.0; + // Buttons - temp.fill(Qt::black); + bgColor = buttonBgColorGroup.background(); + light = bgColor.light(120); + dark = bgColor.dark(120); - palette_ = aResizePal_; - _drawBorder(temp, 132, 7); - - painter_.begin(&aResizeMid_); - painter_.drawPixmap(0, 0, temp, 2, 0); - painter_.end(); + btnPix1_ .resize(buttonSize1); + btnDownPix1_ .resize(buttonSize1); + btnPix2_ .resize(buttonSize2); + btnDownPix2_ .resize(buttonSize2); - palette_ = iResizePal_; - _drawBorder(temp, 132, 7); - - painter_.begin(&iResizeMid_); - painter_.drawPixmap(0, 0, temp, 2, 0); - painter_.end(); + iBtnPix1_ .resize(buttonSize1); + iBtnDownPix1_ .resize(buttonSize1); + iBtnPix2_ .resize(buttonSize2); + iBtnDownPix2_ .resize(buttonSize2); - down_ = false; + KPixmapEffect::gradient(btnPix1_, light, dark, diagGrad); + KPixmapEffect::gradient(btnDownPix1_, dark, light, diagGrad); + KPixmapEffect::gradient(btnPix2_, light, dark, diagGrad); + KPixmapEffect::gradient(btnDownPix2_, dark, light, diagGrad); - palette_ = aBut; - transx = transy = 1.0; - _drawButtonBorder(aClose_); - _drawButtonBorder(aLower_); - transx = 0.0; - _drawButtonBorder(aIconify_); - _drawButtonBorder(aMax_); - _drawButtonBorder(aUnmax_); + KPixmapEffect::gradient(iBtnPix1_, light, dark, diagGrad); + KPixmapEffect::gradient(iBtnDownPix1_, dark, light, diagGrad); + KPixmapEffect::gradient(iBtnPix2_, light, dark, diagGrad); + KPixmapEffect::gradient(iBtnDownPix2_, dark, light, diagGrad); - palette_ = iBut; - transx = transy = 1.0; - _drawButtonBorder(iClose_); - _drawButtonBorder(iLower_); - transx = 0.0; - _drawButtonBorder(iIconify_); - _drawButtonBorder(iMax_); - _drawButtonBorder(iUnmax_); + drawButtonFrame(btnPix1_, buttonBgColorGroup, false); + drawButtonFrame(btnDownPix1_, buttonBgColorGroup, true); + drawButtonFrame(btnPix2_, buttonBgColorGroup, false); + drawButtonFrame(btnDownPix2_, buttonBgColorGroup, true); - down_ = true; + drawButtonFrame(iBtnPix1_, buttonBgColorGroup, false); + drawButtonFrame(iBtnDownPix1_, buttonBgColorGroup, true); + drawButtonFrame(iBtnPix2_, buttonBgColorGroup, false); + drawButtonFrame(iBtnDownPix2_, buttonBgColorGroup, true); - palette_ = aBut; - transx = transy = 1.0; - _drawButtonBorder(aCloseDown_); - _drawButtonBorder(aLowerDown_); - transx = 0.0; - _drawButtonBorder(aIconifyDown_); - _drawButtonBorder(aMaxDown_); - _drawButtonBorder(aUnmaxDown_); - - palette_ = iBut; - transx = transy = 1.0; - _drawButtonBorder(iCloseDown_); - _drawButtonBorder(iLowerDown_); - transx = 0.0; - _drawButtonBorder(iIconifyDown_); - _drawButtonBorder(iMaxDown_); - _drawButtonBorder(iUnmaxDown_); - - // ------------------------------------------------------------------------- - // Button symbols - // ------------------------------------------------------------------------- - - transy = 4.0; - - palette_ = aSym; - - transx = 4.0; - _drawCloseSymbol (aClose_); - _drawLowerSymbol (aLower_); - transx = 3.0; - _drawIconifySymbol (aIconify_); - _drawMaxSymbol (aMax_); - _drawUnmaxSymbol (aUnmax_); - - transx = 4.0; - _drawCloseSymbol (aCloseDown_); - _drawLowerSymbol (aLowerDown_); - transx = 3.0; - _drawIconifySymbol (aIconifyDown_); - _drawMaxSymbol (aMaxDown_); - _drawUnmaxSymbol (aUnmaxDown_); - - palette_ = iSym; - - transx = 4.0; - _drawCloseSymbol (iClose_); - _drawLowerSymbol (iLower_); - transx = 3.0; - _drawIconifySymbol (iIconify_); - _drawMaxSymbol (iMax_); - _drawUnmaxSymbol (iUnmax_); - - transx = 4.0; - _drawCloseSymbol (iCloseDown_); - _drawLowerSymbol (iLowerDown_); - transx = 3.0; - _drawIconifySymbol (iIconifyDown_); - _drawMaxSymbol (iMaxDown_); - _drawUnmaxSymbol (iUnmaxDown_); - - // ------------------------------------------------------------------------- - // Resize handles - // ------------------------------------------------------------------------- - - transx = transy = 1.0; - - down_ = false; - - palette_ = aResizePal_; - _drawBorder(aResize_, 28, 7); - - palette_ = iResizePal_; - _drawBorder(iResize_, 28, 7); + p.flush(); } QPixmap Static::button(SymbolType t, bool active, bool down) { - QPixmap p(19, 20); + bool buttonSize2 = (t == Sticky || t == Unsticky); + QPixmap px = buttonPixmap(!buttonSize2, active, down); - if (down) { + QBitmap b = glyph(t); + b.setMask(b); - switch (t) { + QPainter p(&px); + QPoint offset((buttonSize2 ? btnWidth2_ : btnWidth1_) / 2 - 4, (titleHeight_ - 6) / 2 - 4); + p.drawPixmap(offset, b); - case Iconify: p = active ? aIconifyDown_ : iIconifyDown_; break; - case Close: p = active ? aCloseDown_ : iCloseDown_; break; - case Lower: p = active ? aLowerDown_ : iLowerDown_; break; - case Max: p = active ? aMaxDown_ : iMaxDown_; break; - case Unmax: p = active ? aUnmaxDown_ : iUnmaxDown_; break; - default: break; - } - - } else { + return px; +} - switch (t) { +static unsigned char iconify_bits[] = { + 0xff, 0xff, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18}; - case Iconify: p = active ? aIconify_ : iIconify_; break; - case Close: p = active ? aClose_ : iClose_; break; - case Lower: p = active ? aLower_ : iLower_; break; - case Max: p = active ? aMax_ : iMax_; break; - case Unmax: p = active ? aUnmax_ : iUnmax_; break; - default: break; - } +static unsigned char close_bits[] = { + 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00 }; - } +static unsigned char maximize_bits[] = { + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0xff, 0xff }; - return p; +static unsigned char unmax_bits[] = { + 0x30, 0x18, 0xcc, 0xe6, 0xf3, 0xf9, 0xfc, 0xfc}; + +static unsigned char unsticky_bits[] = { + 0x3c, 0x42, 0x99, 0xbd, 0xbd, 0x99, 0x42, 0x3c}; + +static unsigned char sticky_bits[] = { + 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c}; + +static unsigned char question_bits[] = { + 0x3c, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x18}; + + + void +Static::_loadGlyphs() +{ + glyphClose_ = QBitmap(8, 8, close_bits); + glyphMaximise_ = QBitmap(8, 8, maximize_bits); + glyphUnmaximise_ = QBitmap(8, 8, unmax_bits); + glyphSticky_ = QBitmap(8, 8, sticky_bits); + glyphUnsticky_ = QBitmap(8, 8, unsticky_bits); + glyphIconify_ = QBitmap(8, 8, iconify_bits); } } // End namespace diff --git a/clients/riscos/Static.h b/clients/riscos/Static.h index 1078b6bd9b..3ea118b7de 100644 --- a/clients/riscos/Static.h +++ b/clients/riscos/Static.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,19 +20,22 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_STATIC_H -#define RISC_OS_STATIC_H +#ifndef DEFAULT_STATIC_H +#define DEFAULT_STATIC_H #include #include #include +#include -#include "Palette.h" +#include -namespace RiscOS +#include "Defines.h" + +namespace Default { -enum SymbolType { Lower, Close, Iconify, Max, Unmax }; +enum SymbolType { Sticky, Unsticky, Close, Iconify, Max, Unmax }; class Static { @@ -60,67 +63,111 @@ class Static void update(); - QPixmap titleTextLeft(bool active) - { return active ? aTitleTextLeft_ : iTitleTextLeft_; } + const QPixmap & title(bool active) const + { return active ? aTitle_ : iTitle_; } - QPixmap titleTextRight(bool active) - { return active ? aTitleTextRight_ : iTitleTextRight_; } + const QPixmap & titleText(bool active) const + { return active ? aTitleText_ : iTitleText_; } - QPixmap resizeMidLeft(bool active) + const QPixmap & titleLeft(bool active) const + { return active ? aTitleLeft_ : iTitleLeft_; } + + const QPixmap & titleRight(bool active) const + { return active ? aTitleRight_ : iTitleRight_; } + + const QPixmap & resizeMidLeft(bool active) const { return active ? aResizeMidLeft_ : iResizeMidLeft_; } - QPixmap resizeMidRight(bool active) + const QPixmap & resizeMidRight(bool active) const { return active ? aResizeMidRight_ : iResizeMidRight_; } - QPixmap titleTextMid(bool active) - { return active ? aTitleTextMid_ : iTitleTextMid_; } - - QPixmap resizeMidMid(bool active) + const QPixmap & resizeMidMid(bool active) const { return active ? aResizeMid_ : iResizeMid_; } QPixmap button(SymbolType t, bool active, bool down); - QPixmap resize(bool active) + const QPixmap & resize(bool active) const { return active ? aResize_ : iResize_; } - Palette & standardPalette() - { return standardPal_; } + const QBitmap & glyph(SymbolType t) const + { + switch (t) { + case Close: return glyphClose_; + case Sticky: return glyphSticky_; + case Unsticky: return glyphUnsticky_; + case Iconify: return glyphIconify_; + case Max: return glyphMaximise_; + case Unmax: return glyphUnmaximise_; + default: return glyphClose_; + } + } + + unsigned int buttonWidth1() const { return btnWidth1_; } + unsigned int buttonWidth2() const { return btnWidth2_; } + unsigned int titleHeight() const { return titleHeight_; } + + const KPixmap & buttonPixmap(int n, bool active, bool down) const + { + if (active) { + if (n == 1) + if (down) + return btnDownPix1_; + else + return btnPix1_; + else + if (down) + return btnDownPix2_; + else + return btnPix2_; + } else { + if (n == 1) + if (down) + return iBtnDownPix1_; + else + return iBtnPix1_; + else + if (down) + return iBtnDownPix2_; + else + return iBtnPix2_; + } + + } private: - void _drawButtonBorder (QPixmap &); - void _drawBorder (QPixmap &, int, int); - void _drawCloseSymbol (QPixmap &); - void _drawIconifySymbol(QPixmap &); - void _drawLowerSymbol (QPixmap &); - void _drawMaxSymbol (QPixmap &); - void _drawUnmaxSymbol (QPixmap &); - void _init(); + void _loadGlyphs(); static Static * instance_; - Palette standardPal_, aTitlePal_, iTitlePal_, aResizePal_, iResizePal_; + QPixmap + aResize_, iResize_, + aResizeDown_, iResizeDown_, + aResizeMidLeft_, aResizeMidRight_, + iResizeMidLeft_, iResizeMidRight_, + aResizeMid_, iResizeMid_; - QPixmap aIconify_, aClose_, aLower_, aMax_, aUnmax_, - iIconify_, iClose_, iLower_, iMax_, iUnmax_, - aResize_, iResize_, - aIconifyDown_, aCloseDown_, aLowerDown_, aMaxDown_, aUnmaxDown_, - iIconifyDown_, iCloseDown_, iLowerDown_, iMaxDown_, iUnmaxDown_, - aResizeDown_, iResizeDown_, - aTitleTextLeft_, aTitleTextRight_, - aResizeMidLeft_, aResizeMidRight_, - iTitleTextLeft_, iTitleTextRight_, - iResizeMidLeft_, iResizeMidRight_, - aTitleTextMid_, iTitleTextMid_, - aResizeMid_, iResizeMid_; + QBitmap + glyphClose_, + glyphSticky_, + glyphUnsticky_, + glyphIconify_, + glyphMaximise_, + glyphUnmaximise_; - QList buttonPixmaps_; + KPixmap aTitle_, iTitle_; + KPixmap aTitleLeft_, iTitleLeft_; + KPixmap aTitleRight_, iTitleRight_; + KPixmap aTitleText_, iTitleText_; - QPainter painter_; - bool down_; - Palette palette_; - double transx, transy; + KPixmap btnPix1_, btnDownPix1_, iBtnPix1_, iBtnDownPix1_; + KPixmap btnPix2_, btnDownPix2_, iBtnPix2_, iBtnDownPix2_; + + unsigned int btnWidth1_; + unsigned int btnWidth2_; + + unsigned int titleHeight_; }; } // End namespace diff --git a/clients/riscos/TitleBar.cpp b/clients/riscos/TitleBar.cpp index e135a25593..88a64652b4 100644 --- a/clients/riscos/TitleBar.cpp +++ b/clients/riscos/TitleBar.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -27,51 +27,78 @@ #include "TitleText.h" #include "CloseButton.h" #include "IconifyButton.h" -#include "LowerButton.h" +#include "StickyButton.h" #include "MaximiseButton.h" -namespace RiscOS +namespace Default { TitleBar::TitleBar(Manager * client) : QWidget(client) { - setBackgroundMode(NoBackground); - - lower_ = new LowerButton (this); close_ = new CloseButton (this); text_ = new TitleText (this, client); iconify_ = new IconifyButton (this); maximise_ = new MaximiseButton (this); + sticky_ = new StickyButton (this); - lower_ ->setAlign(Button::Left); - close_ ->setAlign(Button::Left); - iconify_ ->setAlign(Button::Right); - maximise_ ->setAlign(Button::Right); + // Close | Text | Sticky | Iconify | Maximise - // Lower | Close | Text | Iconify | Maximise + QHBoxLayout * layout = new QHBoxLayout(this); + layout->setMargin(3); - QHBoxLayout * layout = new QHBoxLayout(this); - - layout->addWidget(lower_); layout->addWidget(close_); + layout->addSpacing(2); layout->addWidget(text_, 1); + layout->addSpacing(2); + layout->addWidget(sticky_); layout->addWidget(iconify_); layout->addWidget(maximise_); - connect(lower_, SIGNAL(lowerClient()), client, SLOT(lower())); - connect(close_, SIGNAL(closeClient()), client, SLOT(closeWindow())); - connect(iconify_, SIGNAL(iconifyClient()), client, SLOT(iconify())); - connect(maximise_, SIGNAL(maximiseClient()), client, SLOT(maximize())); - connect(maximise_, SIGNAL(vMaxClient()), client, SLOT(vMax())); - connect(maximise_, SIGNAL(raiseClient()), client, SLOT(raise())); - connect(client, SIGNAL(maximiseChanged(bool)), maximise_, SLOT(setOn(bool))); + connect( + close_, SIGNAL(closeClient()), + client, SLOT(closeWindow()) + ); + + connect( + sticky_, SIGNAL(toggleSticky()), + client, SLOT(toggleSticky()) + ); + + connect( + client, SIGNAL(stickyStatusChanged(bool)), + sticky_, SLOT(setOn(bool)) + ); + + connect( + iconify_, SIGNAL(iconifyClient()), + client, SLOT(iconify()) + ); + + connect( + maximise_, SIGNAL(maximiseClient()), + client, SLOT(maximize()) + ); + + connect( + maximise_, SIGNAL(vMaxClient()), + client, SLOT(vMax()) + ); + + connect( + maximise_, SIGNAL(raiseClient()), + client, SLOT(raise()) + ); + + connect( + client, SIGNAL(maximiseChanged(bool)), + maximise_, SLOT(setOn(bool)) + ); } void TitleBar::updateDisplay() { - lower_ ->updateDisplay(); close_ ->updateDisplay(); text_ ->updateDisplay(); iconify_ ->updateDisplay(); @@ -100,32 +127,32 @@ TitleBar::resizeEvent(QResizeEvent *) switch (sizeProblem) { case 1: - lower_ ->hide(); + close_ ->show(); + sticky_ ->hide(); iconify_ ->show(); maximise_ ->hide(); - close_ ->show(); break; case 2: - lower_ ->hide(); + close_ ->show(); + sticky_ ->hide(); iconify_ ->hide(); maximise_ ->hide(); - close_ ->show(); break; case 3: - lower_ ->hide(); + close_ ->hide(); + sticky_ ->hide(); iconify_ ->hide(); maximise_ ->hide(); - close_ ->hide(); break; case 0: default: - lower_ ->show(); + close_ ->show(); + sticky_ ->show(); iconify_ ->show(); maximise_ ->show(); - close_ ->show(); break; } } @@ -133,13 +160,43 @@ TitleBar::resizeEvent(QResizeEvent *) void TitleBar::setActive(bool b) { - lower_->setActive(b); + sticky_->setActive(b); close_->setActive(b); text_->setActive(b); iconify_->setActive(b); maximise_->setActive(b); } + void +TitleBar::paintEvent(QPaintEvent * e) +{ + QRect r(e->rect()); + + bool intersectsLeft = + r.intersects(QRect(0, 0, 1, height())); + + bool intersectsRight = + r.intersects(QRect(width() - 1, 0, width(), height())); + + bool intersectsTop = + r.intersects(QRect(0, 0, width(), 1)); + + if (intersectsTop || intersectsLeft || intersectsRight) { + + QPainter p(this); + p.setPen(Qt::black); + + if (intersectsTop) + p.drawLine(r.left(), 0, r.right(), 0); + + if (intersectsLeft) + p.drawLine(0, r.top(), 0, r.bottom()); + + if (intersectsRight) + p.drawLine(width() - 1, r.top(), width() - 1, r.bottom()); + } +} + } // End namespace // vim:ts=2:sw=2:tw=78 diff --git a/clients/riscos/TitleBar.h b/clients/riscos/TitleBar.h index 2e26656d1f..4741a6fee8 100644 --- a/clients/riscos/TitleBar.h +++ b/clients/riscos/TitleBar.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,16 +20,16 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_TITLE_BAR_H -#define RISC_OS_TITLE_BAR_H +#ifndef DEFAULT_TITLE_BAR_H +#define DEFAULT_TITLE_BAR_H #include -namespace RiscOS +namespace Default { class Manager; -class LowerButton; +class StickyButton; class CloseButton; class TitleText; class IconifyButton; @@ -51,14 +51,15 @@ class TitleBar : public QWidget protected: void resizeEvent(QResizeEvent *); + void paintEvent(QPaintEvent *); private: - LowerButton * lower_; CloseButton * close_; TitleText * text_; + StickyButton * sticky_; IconifyButton * iconify_; MaximiseButton * maximise_; }; diff --git a/clients/riscos/TitleText.cpp b/clients/riscos/TitleText.cpp index eb2e1cde17..e6d8d369d3 100644 --- a/clients/riscos/TitleText.cpp +++ b/clients/riscos/TitleText.cpp @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -28,7 +28,7 @@ #include "Manager.h" #include "Static.h" -namespace RiscOS +namespace Default { TitleText::TitleText(QWidget * parent, Manager * client) @@ -55,13 +55,22 @@ TitleText::updatePixmap() QPainter p(&buf()); Static * s = Static::instance(); + + p.drawPixmap(0, 0, s->titleLeft(active_)); + p.drawPixmap(width() - 2, 0, s->titleRight(active_)); + p.drawTiledPixmap(2, 0, width() - 2, height(), s->title(active_)); + + QFontMetrics fm(options->font()); + unsigned int w = fm.width(client_->caption()); + p.drawTiledPixmap( + width() / 2 - w / 2, 0, + w, height(), + s->titleText(active_) + ); - p.drawPixmap(0, 0, s->titleTextLeft(active_)); - p.drawPixmap(width() - 3, 0, s->titleTextRight(active_)); - p.drawTiledPixmap(3, 0, width() - 6, 20, s->titleTextMid(active_)); p.setPen(options->color(Options::Font, active_)); p.setFont(options->font()); - p.drawText(4, 0, width() - 8, 18, AlignCenter, client_->caption()); + p.drawText(4, 0, width() - 8, height(), AlignCenter, client_->caption()); } void diff --git a/clients/riscos/TitleText.h b/clients/riscos/TitleText.h index 72606af6bc..04b8cce9eb 100644 --- a/clients/riscos/TitleText.h +++ b/clients/riscos/TitleText.h @@ -1,5 +1,5 @@ /* - RISC OS KWin client + Default KWin client Copyright 2000 Rik Hemsley @@ -20,15 +20,15 @@ Boston, MA 02111-1307, USA. */ -#ifndef RISC_OS_TITLE_TEXT_H -#define RISC_OS_TITLE_TEXT_H +#ifndef DEFAULT_TITLE_TEXT_H +#define DEFAULT_TITLE_TEXT_H #include #include #include "DBWidget.h" -namespace RiscOS +namespace Default { class Manager;