Default theme, first draft.

svn path=/trunk/kdebase/kwin/; revision=57032
This commit is contained in:
Rik Hemsley 2000-07-15 06:59:08 +00:00
parent 7ca46b1e1c
commit 4c8257e2ad
26 changed files with 548 additions and 768 deletions

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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);
}

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
namespace RiscOS
namespace Default
{
class Button : public QWidget

View file

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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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);

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
#include <qpixmap.h>
namespace RiscOS
namespace Default
{
class DBWidget : public QWidget

View file

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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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

View file

@ -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)

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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();
}

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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:

View file

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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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

View file

@ -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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -26,7 +26,7 @@
#include <X11/Xlib.h>
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);
}

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
namespace RiscOS
namespace Default
{
class Manager;

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -20,20 +20,22 @@
Boston, MA 02111-1307, USA.
*/
#include <qpixmap.h>
#include <qpainter.h>
#include <kstyle.h>
#include <kapp.h>
#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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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;

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -21,12 +21,14 @@
*/
#include <qpixmap.h>
#include <kstyle.h>
#include <kapp.h>
#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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
namespace RiscOS
namespace Default
{
class Manager;

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -23,300 +23,59 @@
#include <qimage.h>
#include <qpixmap.h>
#include <qpainter.h>
#include <kpixmapeffect.h>
#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<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);
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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qimage.h>
#include <qpixmap.h>
#include <qpainter.h>
#include <qbitmap.h>
#include "Palette.h"
#include <kpixmap.h>
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<QPixmap> 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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
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_;
};

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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

View file

@ -1,5 +1,5 @@
/*
RISC OS KWin client
Default KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
@ -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 <qwidget.h>
#include <qpoint.h>
#include "DBWidget.h"
namespace RiscOS
namespace Default
{
class Manager;