blah, I screwed up with some sticky date stuff, somehow.

svn path=/trunk/kdebase/kwin/; revision=57067
icc-effect-5.14.5
Rik Hemsley 2000-07-15 11:27:55 +00:00
parent e482a7d092
commit 6a49e57aa8
26 changed files with 768 additions and 547 deletions

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -23,7 +23,7 @@
#include "Button.h" #include "Button.h"
#include "Static.h" #include "Static.h"
namespace Default namespace RiscOS
{ {
Button::Button(QWidget * parent, SymbolType t) Button::Button(QWidget * parent, SymbolType t)
@ -33,10 +33,7 @@ Button::Button(QWidget * parent, SymbolType t)
down_ (false), down_ (false),
active_ (false) active_ (false)
{ {
if (type_ == Sticky) setFixedSize(19, 20);
setFixedWidth(Static::instance()->buttonWidth2());
else
setFixedWidth(Static::instance()->buttonWidth1());
} }
Button::~Button() Button::~Button()
@ -47,7 +44,10 @@ Button::~Button()
void void
Button::updateDisplay() Button::updateDisplay()
{ {
setBackgroundPixmap(Static::instance()->button(type_, active_, down_)); setBackgroundPixmap(
Static::instance()->button(type_, active_, down_)
);
repaint(true); repaint(true);
} }

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,13 +20,13 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_BUTTON_H #ifndef RISC_OS_BUTTON_H
#define DEFAULT_BUTTON_H #define RISC_OS_BUTTON_H
#include "Static.h" #include "Static.h"
#include <qwidget.h> #include <qwidget.h>
namespace Default namespace RiscOS
{ {
class Button : public QWidget class Button : public QWidget

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -22,7 +22,7 @@
#include "CloseButton.h" #include "CloseButton.h"
namespace Default namespace RiscOS
{ {
CloseButton::CloseButton(QWidget * parent) CloseButton::CloseButton(QWidget * parent)

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_CLOSE_BUTTON_H #ifndef RISC_OS_CLOSE_BUTTON_H
#define DEFAULT_CLOSE_BUTTON_H #define RISC_OS_CLOSE_BUTTON_H
#include "Button.h" #include "Button.h"
namespace Default namespace RiscOS
{ {
class CloseButton : public Button class CloseButton : public Button

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -22,12 +22,11 @@
#include "DBWidget.h" #include "DBWidget.h"
namespace Default namespace RiscOS
{ {
DBWidget::DBWidget(QWidget * parent, const char * name) DBWidget::DBWidget(QWidget * parent, const char * name)
: QWidget(parent, name, WResizeNoErase | WRepaintNoErase | WPaintUnclipped | : QWidget(parent, name, WResizeNoErase | WRepaintNoErase | WPaintUnclipped)
WNorthWestGravity)
{ {
buf_.resize(20, 20); buf_.resize(20, 20);
setBackgroundMode(NoBackground); setBackgroundMode(NoBackground);

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,13 +20,13 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_DOUBLE_BUFFERED_WIDGET_H #ifndef RISC_OS_DOUBLE_BUFFERED_WIDGET_H
#define DEFAULT_DOUBLE_BUFFERED_WIDGET_H #define RISC_OS_DOUBLE_BUFFERED_WIDGET_H
#include <qwidget.h> #include <qwidget.h>
#include <qpixmap.h> #include <qpixmap.h>
namespace Default namespace RiscOS
{ {
class DBWidget : public QWidget class DBWidget : public QWidget

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -22,7 +22,7 @@
#include "IconifyButton.h" #include "IconifyButton.h"
namespace Default namespace RiscOS
{ {
IconifyButton::IconifyButton(QWidget * parent) IconifyButton::IconifyButton(QWidget * parent)

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_ICONIFY_BUTTON_H #ifndef RISC_OS_ICONIFY_BUTTON_H
#define DEFAULT_ICONIFY_BUTTON_H #define RISC_OS_ICONIFY_BUTTON_H
#include "Button.h" #include "Button.h"
namespace Default namespace RiscOS
{ {
class IconifyButton : public Button class IconifyButton : public Button

View File

@ -1,13 +1,13 @@
INCLUDES = $(all_includes) INCLUDES = $(all_includes)
lib_LTLIBRARIES = libkwindefault.la lib_LTLIBRARIES = libkwinriscos.la
libkwindefault_la_SOURCES = \ libkwinriscos_la_SOURCES = \
Button.cpp \ Button.cpp \
CloseButton.cpp \ CloseButton.cpp \
DBWidget.cpp \ DBWidget.cpp \
IconifyButton.cpp \ IconifyButton.cpp \
StickyButton.cpp \ LowerButton.cpp \
Manager.cpp \ Manager.cpp \
MaximiseButton.cpp \ MaximiseButton.cpp \
ResizeBar.cpp \ ResizeBar.cpp \
@ -16,8 +16,8 @@ ResizeSide.cpp \
TitleBar.cpp \ TitleBar.cpp \
TitleText.cpp \ TitleText.cpp \
Static.cpp Static.cpp
libkwindefault_la_LIBADD = ../../kwin.la libkwinriscos_la_LIBADD = ../../kwin.la
libkwindefault_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) libkwinriscos_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
METASOURCES = AUTO METASOURCES = AUTO
noinst_HEADERS = \ noinst_HEADERS = \
@ -25,7 +25,7 @@ Button.h \
CloseButton.h \ CloseButton.h \
DBWidget.h \ DBWidget.h \
IconifyButton.h \ IconifyButton.h \
StickyButton.h \ LowerButton.h \
Manager.h \ Manager.h \
MaximiseButton.h \ MaximiseButton.h \
ResizeBar.h \ ResizeBar.h \
@ -36,7 +36,7 @@ TitleText.h \
Static.h Static.h
lnkdir = $(kde_datadir)/kwin/ lnkdir = $(kde_datadir)/kwin/
lnk_DATA = default.desktop lnk_DATA = riscos.desktop
EXTRA_DIST = $(lnk_DATA) EXTRA_DIST = $(lnk_DATA)

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -35,11 +35,11 @@ extern "C"
{ {
Client * allocate(Workspace * workSpace, WId winId) Client * allocate(Workspace * workSpace, WId winId)
{ {
return new Default::Manager(workSpace, winId); return new RiscOS::Manager(workSpace, winId);
} }
} }
namespace Default namespace RiscOS
{ {
Manager::Manager( Manager::Manager(
@ -77,12 +77,6 @@ Manager::captionChange(const QString &)
titleBar_->updateText(); titleBar_->updateText();
} }
void
Manager::stickyChange(bool b)
{
emit(stickyStatusChanged(b));
}
void void
Manager::paletteChange(const QPalette &) Manager::paletteChange(const QPalette &)
{ {
@ -149,9 +143,9 @@ Manager::mousePosition(const QPoint & p) const
} }
void void
Manager::toggleSticky() Manager::lower()
{ {
setSticky(!isSticky()); workspace()->lowerClient(this);
} }
void void
@ -176,27 +170,10 @@ Manager::resizeEvent(QResizeEvent * e)
void void
Manager::_updateLayout() Manager::_updateLayout()
{ {
titleBar_ -> setGeometry( titleBar_ -> setGeometry(0, 0, width(), 20);
0, windowWrapper() -> setGeometry(1, 20, width() - 2, height() - 30);
0, resizeBar_ -> setGeometry(0, height() - 10, width(), 10);
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(); _updateDisplay();
} }

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_MANAGER_H #ifndef RISC_OS_MANAGER_H
#define DEFAULT_MANAGER_H #define RISC_OS_MANAGER_H
#include "../../client.h" #include "../../client.h"
namespace Default namespace RiscOS
{ {
class TitleBar; class TitleBar;
@ -47,11 +47,10 @@ class Manager : public Client
signals: signals:
void maximiseChanged(bool); void maximiseChanged(bool);
void stickyStatusChanged(bool);
public slots: public slots:
void toggleSticky(); void lower();
void raise(); void raise();
void vMax(); void vMax();
@ -68,7 +67,6 @@ class Manager : public Client
protected slots: protected slots:
void captionChange(const QString &); void captionChange(const QString &);
void stickyChange(bool);
void slotReset(); void slotReset();
private: private:

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -22,7 +22,7 @@
#include "MaximiseButton.h" #include "MaximiseButton.h"
namespace Default namespace RiscOS
{ {
MaximiseButton::MaximiseButton(QWidget * parent) MaximiseButton::MaximiseButton(QWidget * parent)

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_MAXIMISE_BUTTON_H #ifndef RISC_OS_MAXIMISE_BUTTON_H
#define DEFAULT_MAXIMISE_BUTTON_H #define RISC_OS_MAXIMISE_BUTTON_H
#include "Button.h" #include "Button.h"
namespace Default namespace RiscOS
{ {
class MaximiseButton : public Button class MaximiseButton : public Button

View File

@ -1 +1,90 @@
Default KWin theme 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.

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -26,7 +26,7 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
namespace Default namespace RiscOS
{ {
ResizeBar::ResizeBar(QWidget * parent, Manager * client) ResizeBar::ResizeBar(QWidget * parent, Manager * client)
@ -53,7 +53,7 @@ ResizeBar::updateDisplay()
void void
ResizeBar::resizeEvent(QResizeEvent *) ResizeBar::resizeEvent(QResizeEvent *)
{ {
mid_->resize(width() - 60, mid_->height()); mid_->resize(width() - 60, 10);
right_->move(width() - 30, 0); right_->move(width() - 30, 0);
} }

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_RESIZE_BAR_H #ifndef RISC_OS_RESIZE_BAR_H
#define DEFAULT_RESIZE_BAR_H #define RISC_OS_RESIZE_BAR_H
#include <qwidget.h> #include <qwidget.h>
namespace Default namespace RiscOS
{ {
class Manager; class Manager;

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,22 +20,20 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#include <qpainter.h> #include <qpixmap.h>
#include <kstyle.h>
#include <kapp.h>
#include "ResizeMid.h" #include "ResizeMid.h"
#include "Manager.h" #include "Manager.h"
#include "Static.h" #include "Static.h"
namespace Default namespace RiscOS
{ {
ResizeMid::ResizeMid(QWidget * parent, Manager * client) ResizeMid::ResizeMid(QWidget * parent, Manager * client)
: DBWidget(parent, "ResizeMid"), : DBWidget(parent, "ResizeMid"),
client_(client) client_(client)
{ {
setFixedHeight(RESIZE_BAR_HEIGHT); setFixedHeight(10);
setCursor(Qt::sizeVerCursor); setCursor(Qt::sizeVerCursor);
} }
@ -49,20 +47,9 @@ ResizeMid::updatePixmap()
{ {
QPainter p(&buf()); QPainter p(&buf());
QColorGroup g( p.drawPixmap(0, 0, Static::instance()->resizeMidLeft(client_->isActive()));
client_->isActive() ? p.drawPixmap(width() - 2, 0, Static::instance()->resizeMidRight(client_->isActive()));
palette().active() : p.drawTiledPixmap(2, 0, width() - 4, 10, Static::instance()->resizeMidMid(client_->isActive()));
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 void

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_RESIZE_MID_H #ifndef RISC_OS_RESIZE_MID_H
#define DEFAULT_RESIZE_MID_H #define RISC_OS_RESIZE_MID_H
#include "DBWidget.h" #include "DBWidget.h"
namespace Default namespace RiscOS
{ {
class Manager; class Manager;

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -21,14 +21,12 @@
*/ */
#include <qpixmap.h> #include <qpixmap.h>
#include <kstyle.h>
#include <kapp.h>
#include "ResizeSide.h" #include "ResizeSide.h"
#include "Manager.h" #include "Manager.h"
#include "Static.h" #include "Static.h"
namespace Default namespace RiscOS
{ {
ResizeSide::ResizeSide(QWidget * parent, Manager * client, Side s) ResizeSide::ResizeSide(QWidget * parent, Manager * client, Side s)
@ -37,7 +35,7 @@ ResizeSide::ResizeSide(QWidget * parent, Manager * client, Side s)
side_ (s) side_ (s)
{ {
setCursor(side_ == Left ? Qt::sizeBDiagCursor : Qt::sizeFDiagCursor); setCursor(side_ == Left ? Qt::sizeBDiagCursor : Qt::sizeFDiagCursor);
setFixedSize(RESIZE_SIDE_WIDTH, RESIZE_BAR_HEIGHT); setFixedSize(30, 10);
updateDisplay(); updateDisplay();
} }
@ -69,25 +67,7 @@ ResizeSide::mouseMoveEvent(QMouseEvent * e)
void void
ResizeSide::updateDisplay() ResizeSide::updateDisplay()
{ {
QPixmap pix(size()); setBackgroundPixmap(Static::instance()->resize(client_->isActive()));
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 void

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,12 +20,12 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_RESIZE_SIDE_H #ifndef RISC_OS_RESIZE_SIDE_H
#define DEFAULT_RESIZE_SIDE_H #define RISC_OS_RESIZE_SIDE_H
#include <qwidget.h> #include <qwidget.h>
namespace Default namespace RiscOS
{ {
class Manager; class Manager;

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -23,59 +23,300 @@
#include <qimage.h> #include <qimage.h>
#include <qpixmap.h> #include <qpixmap.h>
#include <qpainter.h> #include <qpainter.h>
#include <kpixmapeffect.h>
#include "../../options.h" #include "../../options.h"
#include "Static.h" #include "Static.h"
namespace Default namespace RiscOS
{ {
static void drawButtonFrame(KPixmap & pix, const QColorGroup &g, bool sunken) void
Static::_drawButtonBorder(QPixmap & pix)
{ {
QPainter p; _drawBorder(pix, 17, 17);
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; Static * Static::instance_ = 0L;
void void
Static::_init() 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<QPixmap> it(buttonPixmaps_); it.current(); ++it) {
it.current()->setOptimization(QPixmap::MemoryOptim);
it.current()->resize(19, 20);
it.current()->fill(Qt::black);
}
aResize_.setOptimization(QPixmap::MemoryOptim); aResize_.setOptimization(QPixmap::MemoryOptim);
iResize_.setOptimization(QPixmap::MemoryOptim); iResize_.setOptimization(QPixmap::MemoryOptim);
aResize_.resize(30, RESIZE_BAR_HEIGHT); aResize_.resize(30, 10);
iResize_.resize(30, RESIZE_BAR_HEIGHT); iResize_.resize(30, 10);
aResize_.fill(Qt::black); aResize_.fill(Qt::black);
iResize_.fill(Qt::black); iResize_.fill(Qt::black);
aTitle_ .setOptimization(QPixmap::BestOptim); aTitleTextLeft_ .setOptimization(QPixmap::BestOptim);
iTitle_ .setOptimization(QPixmap::BestOptim); aTitleTextRight_ .setOptimization(QPixmap::BestOptim);
aTitleTextMid_ .setOptimization(QPixmap::BestOptim);
iTitleTextLeft_ .setOptimization(QPixmap::BestOptim);
iTitleTextRight_ .setOptimization(QPixmap::BestOptim);
iTitleTextMid_ .setOptimization(QPixmap::BestOptim);
aResizeMidLeft_ .setOptimization(QPixmap::BestOptim); aResizeMidLeft_ .setOptimization(QPixmap::BestOptim);
aResizeMidRight_ .setOptimization(QPixmap::BestOptim); aResizeMidRight_ .setOptimization(QPixmap::BestOptim);
@ -85,6 +326,21 @@ Static::_init()
iResizeMidRight_ .setOptimization(QPixmap::BestOptim); iResizeMidRight_ .setOptimization(QPixmap::BestOptim);
iResizeMid_ .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); aResizeMidLeft_ .resize(3, 12);
aResizeMidRight_ .resize(3, 12); aResizeMidRight_ .resize(3, 12);
aResizeMidLeft_ .fill(Qt::black); aResizeMidLeft_ .fill(Qt::black);
@ -95,227 +351,275 @@ Static::_init()
iResizeMidLeft_ .fill(Qt::black); iResizeMidLeft_ .fill(Qt::black);
iResizeMidRight_ .fill(Qt::black); iResizeMidRight_ .fill(Qt::black);
aResizeMid_ .resize(128, RESIZE_BAR_HEIGHT); aResizeMid_ .resize(128, 10);
iResizeMid_ .resize(128, RESIZE_BAR_HEIGHT); iResizeMid_ .resize(128, 10);
aResizeMid_ .fill(Qt::black); aResizeMid_ .fill(Qt::black);
iResizeMid_ .fill(Qt::black); iResizeMid_ .fill(Qt::black);
_loadGlyphs();
update(); update();
} }
void void
Static::update() Static::update()
{ {
QPainter p; // -------------------------------------------------------------------------
// Palettes
// -------------------------------------------------------------------------
titleHeight_ = 24; Palette aBut, iBut;
btnWidth1_ = 36; Palette aSym, iSym;
btnWidth2_ = 24;
unsigned int availableTitleHeight = titleHeight_ - 6; if (QPixmap::defaultDepth() > 8) {
aTitle_.resize(36, availableTitleHeight); setPalette(aBut, options->color(Options::ButtonBg, true));
iTitle_.resize(36, availableTitleHeight); setPalette(iBut, options->color(Options::ButtonBg, false));
aTitleText_.resize(36, availableTitleHeight); QColor btnForeground;
iTitleText_.resize(36, availableTitleHeight); 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));
aTitleLeft_.resize(2, availableTitleHeight); setPalette(aResizePal_, options->color(Options::Handle, true));
iTitleLeft_.resize(2, availableTitleHeight); setPalette(iResizePal_, options->color(Options::Handle, false));
}
aTitleRight_.resize(2, availableTitleHeight); // -------------------------------------------------------------------------
iTitleRight_.resize(2, availableTitleHeight); // Bevels
// -------------------------------------------------------------------------
QColor bgColor, light, dark; transx = transy = 0.0;
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);
// Titlebar // Create sides of title text area and resize bar middle.
bgColor = options->color(Options::TitleBar, true); QPixmap temp(4, 20);
temp.fill(Qt::black);
palette_ = aTitlePal_;
down_ = false;
light = bgColor.light(120); _drawBorder(temp, 4, 18);
dark = bgColor.dark(120);
KPixmapEffect::gradient(aTitle_, light, dark, vertGrad); painter_.begin(&aTitleTextLeft_);
KPixmapEffect::gradient(aTitleText_, light, dark, vertGrad); painter_.drawPixmap(1, 1, temp, 0, 1);
KPixmapEffect::gradient(aTitleLeft_, light, dark, vertGrad); painter_.end();
KPixmapEffect::gradient(aTitleRight_, light, dark, vertGrad);
p.begin(&aTitle_); painter_.begin(&aTitleTextRight_);
p.setPen(dark); painter_.drawPixmap(0, 1, temp, 2, 1);
p.drawLine(0, 0, 36, 0); painter_.end();
p.setPen(light);
p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1);
p.end();
p.begin(&aTitleText_); palette_ = iTitlePal_;
p.setPen(dark); _drawBorder(temp, 4, 18);
p.drawLine(0, 0, 36, 0);
p.setPen(light);
p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1);
p.end();
p.begin(&aTitleLeft_); painter_.begin(&iTitleTextLeft_);
p.setPen(dark); painter_.drawPixmap(1, 1, temp, 0, 1);
p.drawPoint(1, 0); painter_.end();
p.drawLine(0, 0, 0, availableTitleHeight - 1);
p.setPen(light);
p.drawPoint(1, availableTitleHeight - 1);
p.end();
p.begin(&aTitleRight_); painter_.begin(&iTitleTextRight_);
p.setPen(dark); painter_.drawPixmap(0, 1, temp, 2, 1);
p.drawPoint(0, 1); painter_.end();
p.setPen(light);
p.drawLine(1, 0, 1, availableTitleHeight - 1); transy = 1.0;
p.drawPoint(0, availableTitleHeight - 1);
p.end();
bgColor = options->color(Options::TitleBar, false); palette_ = aResizePal_;
light = bgColor.light(120); temp.resize(4, 10);
dark = bgColor.dark(120); temp.fill(Qt::black);
_drawBorder(temp, 4, 7);
KPixmapEffect::gradient(iTitle_, light, dark, vertGrad); painter_.begin(&aResizeMidLeft_);
KPixmapEffect::gradient(iTitleText_, light, dark, vertGrad); painter_.drawPixmap(0, 1, temp, 0, 1);
KPixmapEffect::gradient(iTitleLeft_, light, dark, vertGrad); painter_.end();
KPixmapEffect::gradient(iTitleRight_, light, dark, vertGrad);
p.begin(&iTitle_); painter_.begin(&aResizeMidRight_);
p.setPen(dark); painter_.drawPixmap(0, 1, temp, 2, 1);
p.drawLine(0, 0, 36, 0); painter_.end();
p.setPen(light);
p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1);
p.end();
p.begin(&iTitleText_); palette_ = iResizePal_;
p.setPen(dark); _drawBorder(temp, 4, 7);
p.drawLine(0, 0, 36, 0);
p.setPen(light);
p.drawLine(0, availableTitleHeight - 1, 36, availableTitleHeight - 1);
p.end();
p.begin(&iTitleLeft_); painter_.begin(&iResizeMidLeft_);
p.setPen(dark); painter_.drawPixmap(0, 1, temp, 0, 1);
p.drawPoint(1, 0); painter_.end();
p.drawLine(0, 0, 0, availableTitleHeight - 1);
p.setPen(light);
p.drawPoint(1, availableTitleHeight - 1);
p.end();
p.begin(&iTitleRight_); painter_.begin(&iResizeMidRight_);
p.setPen(dark); painter_.drawPixmap(0, 1, temp, 2, 1);
p.drawPoint(0, 1); painter_.end();
p.setPen(light);
p.drawLine(1, 0, 1, availableTitleHeight - 1);
p.drawPoint(0, availableTitleHeight - 1);
p.end();
p.begin(&aTitle_); transx = transy = 0.0;
p.setPen(options->color(Options::TitleBar, true).light(150));
for (unsigned int y = 3; y < availableTitleHeight - 3; y += 3) temp.resize(132, 20);
for (unsigned int x = 1; x < 36; x += 3)
p.drawPoint(x, y); temp.fill(Qt::black);
p.setPen(options->color(Options::TitleBar, true).dark(150)); palette_ = aTitlePal_;
_drawBorder(temp, 132, 17);
painter_.begin(&aTitleTextMid_);
painter_.drawPixmap(0, 1, temp, 2, 0);
painter_.end();
for (unsigned int y = 3; y < availableTitleHeight - 3; y += 3) palette_ = iTitlePal_;
for (unsigned int x = 1; x < 36; x += 3) _drawBorder(temp, 132, 17);
p.drawPoint(x + 1, y + 1);
p.end(); painter_.begin(&iTitleTextMid_);
painter_.drawPixmap(0, 1, temp, 2, 0);
painter_.end();
// Buttons transy = 1.0;
bgColor = buttonBgColorGroup.background(); temp.fill(Qt::black);
light = bgColor.light(120);
dark = bgColor.dark(120);
btnPix1_ .resize(buttonSize1); palette_ = aResizePal_;
btnDownPix1_ .resize(buttonSize1); _drawBorder(temp, 132, 7);
btnPix2_ .resize(buttonSize2);
btnDownPix2_ .resize(buttonSize2); painter_.begin(&aResizeMid_);
painter_.drawPixmap(0, 0, temp, 2, 0);
painter_.end();
iBtnPix1_ .resize(buttonSize1); palette_ = iResizePal_;
iBtnDownPix1_ .resize(buttonSize1); _drawBorder(temp, 132, 7);
iBtnPix2_ .resize(buttonSize2);
iBtnDownPix2_ .resize(buttonSize2); painter_.begin(&iResizeMid_);
painter_.drawPixmap(0, 0, temp, 2, 0);
painter_.end();
KPixmapEffect::gradient(btnPix1_, light, dark, diagGrad); down_ = false;
KPixmapEffect::gradient(btnDownPix1_, dark, light, diagGrad);
KPixmapEffect::gradient(btnPix2_, light, dark, diagGrad);
KPixmapEffect::gradient(btnDownPix2_, dark, light, diagGrad);
KPixmapEffect::gradient(iBtnPix1_, light, dark, diagGrad); palette_ = aBut;
KPixmapEffect::gradient(iBtnDownPix1_, dark, light, diagGrad); transx = transy = 1.0;
KPixmapEffect::gradient(iBtnPix2_, light, dark, diagGrad); _drawButtonBorder(aClose_);
KPixmapEffect::gradient(iBtnDownPix2_, dark, light, diagGrad); _drawButtonBorder(aLower_);
transx = 0.0;
_drawButtonBorder(aIconify_);
_drawButtonBorder(aMax_);
_drawButtonBorder(aUnmax_);
drawButtonFrame(btnPix1_, buttonBgColorGroup, false); palette_ = iBut;
drawButtonFrame(btnDownPix1_, buttonBgColorGroup, true); transx = transy = 1.0;
drawButtonFrame(btnPix2_, buttonBgColorGroup, false); _drawButtonBorder(iClose_);
drawButtonFrame(btnDownPix2_, buttonBgColorGroup, true); _drawButtonBorder(iLower_);
transx = 0.0;
_drawButtonBorder(iIconify_);
_drawButtonBorder(iMax_);
_drawButtonBorder(iUnmax_);
drawButtonFrame(iBtnPix1_, buttonBgColorGroup, false); down_ = true;
drawButtonFrame(iBtnDownPix1_, buttonBgColorGroup, true);
drawButtonFrame(iBtnPix2_, buttonBgColorGroup, false);
drawButtonFrame(iBtnDownPix2_, buttonBgColorGroup, true);
p.flush(); 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);
} }
QPixmap QPixmap
Static::button(SymbolType t, bool active, bool down) Static::button(SymbolType t, bool active, bool down)
{ {
bool buttonSize2 = (t == Sticky || t == Unsticky); QPixmap p(19, 20);
QPixmap px = buttonPixmap(!buttonSize2, active, down);
QBitmap b = glyph(t); if (down) {
b.setMask(b);
QPainter p(&px); switch (t) {
QPoint offset((buttonSize2 ? btnWidth2_ : btnWidth1_) / 2 - 4, (titleHeight_ - 6) / 2 - 4);
p.drawPixmap(offset, b);
return px; 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 {
static unsigned char iconify_bits[] = { switch (t) {
0xff, 0xff, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18};
static unsigned char close_bits[] = { case Iconify: p = active ? aIconify_ : iIconify_; break;
0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00 }; 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 maximize_bits[] = { }
0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0xff, 0xff };
static unsigned char unmax_bits[] = { return p;
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 } // End namespace

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,22 +20,20 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_STATIC_H #ifndef RISC_OS_STATIC_H
#define DEFAULT_STATIC_H #define RISC_OS_STATIC_H
#include <qimage.h> #include <qimage.h>
#include <qpixmap.h> #include <qpixmap.h>
#include <qpainter.h> #include <qpainter.h>
#include <qbitmap.h>
#include <kpixmap.h>
#include "Defines.h" #include "Palette.h"
namespace Default namespace RiscOS
{ {
enum SymbolType { Sticky, Unsticky, Close, Iconify, Max, Unmax }; enum SymbolType { Lower, Close, Iconify, Max, Unmax };
class Static class Static
{ {
@ -63,111 +61,67 @@ class Static
void update(); void update();
const QPixmap & title(bool active) const QPixmap titleTextLeft(bool active)
{ return active ? aTitle_ : iTitle_; } { return active ? aTitleTextLeft_ : iTitleTextLeft_; }
const QPixmap & titleText(bool active) const QPixmap titleTextRight(bool active)
{ return active ? aTitleText_ : iTitleText_; } { return active ? aTitleTextRight_ : iTitleTextRight_; }
const QPixmap & titleLeft(bool active) const QPixmap resizeMidLeft(bool active)
{ return active ? aTitleLeft_ : iTitleLeft_; }
const QPixmap & titleRight(bool active) const
{ return active ? aTitleRight_ : iTitleRight_; }
const QPixmap & resizeMidLeft(bool active) const
{ return active ? aResizeMidLeft_ : iResizeMidLeft_; } { return active ? aResizeMidLeft_ : iResizeMidLeft_; }
const QPixmap & resizeMidRight(bool active) const QPixmap resizeMidRight(bool active)
{ return active ? aResizeMidRight_ : iResizeMidRight_; } { return active ? aResizeMidRight_ : iResizeMidRight_; }
const QPixmap & resizeMidMid(bool active) const QPixmap titleTextMid(bool active)
{ return active ? aTitleTextMid_ : iTitleTextMid_; }
QPixmap resizeMidMid(bool active)
{ return active ? aResizeMid_ : iResizeMid_; } { return active ? aResizeMid_ : iResizeMid_; }
QPixmap button(SymbolType t, bool active, bool down); QPixmap button(SymbolType t, bool active, bool down);
const QPixmap & resize(bool active) const QPixmap resize(bool active)
{ return active ? aResize_ : iResize_; } { return active ? aResize_ : iResize_; }
const QBitmap & glyph(SymbolType t) const Palette & standardPalette()
{ { return standardPal_; }
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: 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 _init();
void _loadGlyphs();
static Static * instance_; static Static * instance_;
QPixmap Palette standardPal_, aTitlePal_, iTitlePal_, aResizePal_, iResizePal_;
aResize_, iResize_,
aResizeDown_, iResizeDown_,
aResizeMidLeft_, aResizeMidRight_,
iResizeMidLeft_, iResizeMidRight_,
aResizeMid_, iResizeMid_;
QBitmap QPixmap aIconify_, aClose_, aLower_, aMax_, aUnmax_,
glyphClose_, iIconify_, iClose_, iLower_, iMax_, iUnmax_,
glyphSticky_, aResize_, iResize_,
glyphUnsticky_, aIconifyDown_, aCloseDown_, aLowerDown_, aMaxDown_, aUnmaxDown_,
glyphIconify_, iIconifyDown_, iCloseDown_, iLowerDown_, iMaxDown_, iUnmaxDown_,
glyphMaximise_, aResizeDown_, iResizeDown_,
glyphUnmaximise_; aTitleTextLeft_, aTitleTextRight_,
aResizeMidLeft_, aResizeMidRight_,
iTitleTextLeft_, iTitleTextRight_,
iResizeMidLeft_, iResizeMidRight_,
aTitleTextMid_, iTitleTextMid_,
aResizeMid_, iResizeMid_;
KPixmap aTitle_, iTitle_; QList<QPixmap> buttonPixmaps_;
KPixmap aTitleLeft_, iTitleLeft_;
KPixmap aTitleRight_, iTitleRight_;
KPixmap aTitleText_, iTitleText_;
KPixmap btnPix1_, btnDownPix1_, iBtnPix1_, iBtnDownPix1_; QPainter painter_;
KPixmap btnPix2_, btnDownPix2_, iBtnPix2_, iBtnDownPix2_; bool down_;
Palette palette_;
unsigned int btnWidth1_; double transx, transy;
unsigned int btnWidth2_;
unsigned int titleHeight_;
}; };
} // End namespace } // End namespace

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -27,78 +27,51 @@
#include "TitleText.h" #include "TitleText.h"
#include "CloseButton.h" #include "CloseButton.h"
#include "IconifyButton.h" #include "IconifyButton.h"
#include "StickyButton.h" #include "LowerButton.h"
#include "MaximiseButton.h" #include "MaximiseButton.h"
namespace Default namespace RiscOS
{ {
TitleBar::TitleBar(Manager * client) TitleBar::TitleBar(Manager * client)
: QWidget(client) : QWidget(client)
{ {
setBackgroundMode(NoBackground);
lower_ = new LowerButton (this);
close_ = new CloseButton (this); close_ = new CloseButton (this);
text_ = new TitleText (this, client); text_ = new TitleText (this, client);
iconify_ = new IconifyButton (this); iconify_ = new IconifyButton (this);
maximise_ = new MaximiseButton (this); maximise_ = new MaximiseButton (this);
sticky_ = new StickyButton (this);
// Close | Text | Sticky | Iconify | Maximise lower_ ->setAlign(Button::Left);
close_ ->setAlign(Button::Left);
iconify_ ->setAlign(Button::Right);
maximise_ ->setAlign(Button::Right);
QHBoxLayout * layout = new QHBoxLayout(this); // Lower | Close | Text | Iconify | Maximise
layout->setMargin(3);
QHBoxLayout * layout = new QHBoxLayout(this);
layout->addWidget(lower_);
layout->addWidget(close_); layout->addWidget(close_);
layout->addSpacing(2);
layout->addWidget(text_, 1); layout->addWidget(text_, 1);
layout->addSpacing(2);
layout->addWidget(sticky_);
layout->addWidget(iconify_); layout->addWidget(iconify_);
layout->addWidget(maximise_); layout->addWidget(maximise_);
connect( connect(lower_, SIGNAL(lowerClient()), client, SLOT(lower()));
close_, SIGNAL(closeClient()), connect(close_, SIGNAL(closeClient()), client, SLOT(closeWindow()));
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( connect(maximise_, SIGNAL(raiseClient()), client, SLOT(raise()));
sticky_, SIGNAL(toggleSticky()), connect(client, SIGNAL(maximiseChanged(bool)), maximise_, SLOT(setOn(bool)));
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 void
TitleBar::updateDisplay() TitleBar::updateDisplay()
{ {
lower_ ->updateDisplay();
close_ ->updateDisplay(); close_ ->updateDisplay();
text_ ->updateDisplay(); text_ ->updateDisplay();
iconify_ ->updateDisplay(); iconify_ ->updateDisplay();
@ -127,32 +100,32 @@ TitleBar::resizeEvent(QResizeEvent *)
switch (sizeProblem) { switch (sizeProblem) {
case 1: case 1:
close_ ->show(); lower_ ->hide();
sticky_ ->hide();
iconify_ ->show(); iconify_ ->show();
maximise_ ->hide(); maximise_ ->hide();
close_ ->show();
break; break;
case 2: case 2:
close_ ->show(); lower_ ->hide();
sticky_ ->hide();
iconify_ ->hide(); iconify_ ->hide();
maximise_ ->hide(); maximise_ ->hide();
close_ ->show();
break; break;
case 3: case 3:
close_ ->hide(); lower_ ->hide();
sticky_ ->hide();
iconify_ ->hide(); iconify_ ->hide();
maximise_ ->hide(); maximise_ ->hide();
close_ ->hide();
break; break;
case 0: case 0:
default: default:
close_ ->show(); lower_ ->show();
sticky_ ->show();
iconify_ ->show(); iconify_ ->show();
maximise_ ->show(); maximise_ ->show();
close_ ->show();
break; break;
} }
} }
@ -160,43 +133,13 @@ TitleBar::resizeEvent(QResizeEvent *)
void void
TitleBar::setActive(bool b) TitleBar::setActive(bool b)
{ {
sticky_->setActive(b); lower_->setActive(b);
close_->setActive(b); close_->setActive(b);
text_->setActive(b); text_->setActive(b);
iconify_->setActive(b); iconify_->setActive(b);
maximise_->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 } // End namespace
// vim:ts=2:sw=2:tw=78 // vim:ts=2:sw=2:tw=78

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,16 +20,16 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_TITLE_BAR_H #ifndef RISC_OS_TITLE_BAR_H
#define DEFAULT_TITLE_BAR_H #define RISC_OS_TITLE_BAR_H
#include <qwidget.h> #include <qwidget.h>
namespace Default namespace RiscOS
{ {
class Manager; class Manager;
class StickyButton; class LowerButton;
class CloseButton; class CloseButton;
class TitleText; class TitleText;
class IconifyButton; class IconifyButton;
@ -51,15 +51,14 @@ class TitleBar : public QWidget
protected: protected:
void resizeEvent(QResizeEvent *); void resizeEvent(QResizeEvent *);
void paintEvent(QPaintEvent *);
private: private:
LowerButton * lower_;
CloseButton * close_; CloseButton * close_;
TitleText * text_; TitleText * text_;
StickyButton * sticky_;
IconifyButton * iconify_; IconifyButton * iconify_;
MaximiseButton * maximise_; MaximiseButton * maximise_;
}; };

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -28,7 +28,7 @@
#include "Manager.h" #include "Manager.h"
#include "Static.h" #include "Static.h"
namespace Default namespace RiscOS
{ {
TitleText::TitleText(QWidget * parent, Manager * client) TitleText::TitleText(QWidget * parent, Manager * client)
@ -55,22 +55,13 @@ TitleText::updatePixmap()
QPainter p(&buf()); QPainter p(&buf());
Static * s = Static::instance(); 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.setPen(options->color(Options::Font, active_));
p.setFont(options->font()); p.setFont(options->font());
p.drawText(4, 0, width() - 8, height(), AlignCenter, client_->caption()); p.drawText(4, 0, width() - 8, 18, AlignCenter, client_->caption());
} }
void void

View File

@ -1,5 +1,5 @@
/* /*
Default KWin client RISC OS KWin client
Copyright 2000 Copyright 2000
Rik Hemsley <rik@kde.org> Rik Hemsley <rik@kde.org>
@ -20,15 +20,15 @@
Boston, MA 02111-1307, USA. Boston, MA 02111-1307, USA.
*/ */
#ifndef DEFAULT_TITLE_TEXT_H #ifndef RISC_OS_TITLE_TEXT_H
#define DEFAULT_TITLE_TEXT_H #define RISC_OS_TITLE_TEXT_H
#include <qwidget.h> #include <qwidget.h>
#include <qpoint.h> #include <qpoint.h>
#include "DBWidget.h" #include "DBWidget.h"
namespace Default namespace RiscOS
{ {
class Manager; class Manager;