This theme emulates the look and feel of the RISC OS 'window manager'.

svn path=/trunk/kdebase/kwin/; revision=45001
This commit is contained in:
Rik Hemsley 2000-03-28 21:34:23 +00:00
parent 9e709f2784
commit ca8293aa21
25 changed files with 1416 additions and 0 deletions

View file

@ -0,0 +1,20 @@
INCLUDES = $(all_includes)
lib_LTLIBRARIES = libkwinriscos.la
libkwinriscos_la_SOURCES = riscosclient.cpp
METASOURCES = AUTO
noinst_HEADERS = riscosclient.h
lnkdir = $(kde_datadir)/kwin/
lnk_DATA = riscos.desktop
EXTRA_DIST = $(lnk_DATA)
libkwinriscos_la_LDFLAGS = $(all_libraries) -version-info 1:0:0 -module -rdynamic
###KMAKE-start (don't edit or delete this block)
###KMAKE-end

67
clients/riscos/README Normal file
View file

@ -0,0 +1,67 @@
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 ;)
I've optimised it for speed, so you should find it quite nippy.
Particularly the fact that the left and right borders are single-pixel
gives a large speedup on my Matrox card when dragging windows.
I've requested save-under in the window decorations for that extra
speed kick, plus double-buffered the title bar and resize bar.
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.
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.
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.

20
clients/riscos/bar.xpm Normal file
View file

@ -0,0 +1,20 @@
/* XPM */
static char * bar_xpm[] = {
"12 12 5 1",
" c None",
". c #BBBBBB",
"+ c #555555",
"@ c #FFFFFF",
"# c #999999",
" ",
" ",
" ",
" ",
" +++++++++. ",
" +........@ ",
" +........@ ",
" #@@@@@@@@@ ",
" ",
" ",
" ",
" "};

View file

@ -0,0 +1,29 @@
/* XPM */
static char * base_down_xpm[] = {
"18 18 8 1",
" c None",
". c #555555",
"+ c #777777",
"@ c #BBBBBB",
"# c #969696",
"$ c #FFFFFF",
"% c #A8A8A8",
"& c #DDDDDD",
"................+@",
".###############@$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
".#%%%%%%%%%%%%%%&$",
"+@&&&&&&&&&&&&&&&$",
"@$$$$$$$$$$$$$$$$$"};

View file

@ -0,0 +1,28 @@
/* XPM */
static char * base_up_xpm[] = {
"18 18 7 1",
" c None",
". c #FFFFFF",
"+ c #BBBBBB",
"@ c #DDDDDD",
"# c #777777",
"$ c #999999",
"% c #555555",
".................+",
".@@@@@@@@@@@@@@@+#",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".@++++++++++++++$%",
".+$$$$$$$$$$$$$$$%",
"+#%%%%%%%%%%%%%%%%"};

22
clients/riscos/close.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * close_xpm[] = {
"12 12 7 1",
" c None",
". c #BBBBBB",
"+ c #DDDDDD",
"@ c #555555",
"# c #777777",
"$ c #999999",
"% c #FFFFFF",
" ",
"+@#+ @$+",
"+%@#+ @$++",
" +%@#+ @$++ ",
" +%@$#$%+ ",
" ++$$%+ ",
" @$$@+ ",
" @$+%$@ ",
" @$+++%$@ ",
" @$++ +%$@ ",
" $++ +%$ ",
" ++ ++ "};

22
clients/riscos/lower.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * lower_xpm[] = {
"12 12 7 1",
" c None",
". c #555555",
"+ c #777777",
"@ c #BBBBBB",
"# c #FFFFFF",
"$ c #DDDDDD",
"% c #999999",
".......+ ",
".######@$ ",
".# +# ",
".# .......+ ",
".# .######@$",
".# .# +#",
".# .# .#",
".@+.# .#",
"%$#.# .#",
" .# .#",
" .@+.....#",
" %$#######"};

22
clients/riscos/max.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * max_xpm[] = {
"12 12 7 1",
" c None",
". c #BBBBBB",
"+ c #555555",
"@ c #777777",
"# c #FFFFFF",
"$ c #DDDDDD",
"% c #999999",
" ",
" ",
" ++++++@. ",
" +#####.$ ",
" +# @# ",
" +# +# ",
" +# +# ",
" +# +# ",
" +.@++++# ",
" %$###### ",
" ",
" "};

22
clients/riscos/resize.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * resize_xpm[] = {
"12 12 7 1",
" c None",
". c #FFFFFF",
"+ c #BBBBBB",
"@ c #DDDDDD",
"# c #777777",
"$ c #999999",
"% c #555555",
"%%%%%%%%%%%+",
"%....+....+@",
"%. #. #.",
"%. %. %.",
"%. %. %.",
"%+#%%%. %.",
"%...... %.",
"%. %.",
"%. %.",
"%. %.",
"%+#%%%%%%%%.",
"$@.........."};

View file

@ -0,0 +1,15 @@
/* XPM */
static char * resize_bar_left_xpm[] = {
"2 7 5 1",
" c None",
". c #FFFFFF",
"+ c #DDDDDD",
"@ c #BBBBBB",
"# c #777777",
"..",
".+",
".+",
".+",
".+",
".@",
"@#"};

View file

@ -0,0 +1,16 @@
/* XPM */
static char * resize_bar_mid_xpm[] = {
"25 7 6 1",
" c None",
". c #FFFFFF",
"+ c #DDDDDD",
"@ c #BBBBBB",
"# c #999999",
"$ c #555555",
".........................",
"+++++++++++++++++++++++++",
"@@@@@@@@@@@@@@@@@@@@@@@@@",
"@@@@@@@@@@@@@@@@@@@@@@@@@",
"@@@@@@@@@@@@@@@@@@@@@@@@@",
"#########################",
"$$$$$$$$$$$$$$$$$$$$$$$$$"};

View file

@ -0,0 +1,16 @@
/* XPM */
static char * resize_bar_right_xpm[] = {
"2 7 6 1",
" c None",
". c #FFFFFF",
"+ c #BBBBBB",
"@ c #777777",
"# c #999999",
"$ c #555555",
".+",
"+@",
"#$",
"#$",
"#$",
"#$",
"$$"};

View file

@ -0,0 +1,3 @@
[Desktop Entry]
Name=RISC OS
X-KDE-Library=libkwinriscos

View file

@ -0,0 +1,566 @@
/*
RISC OS KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
// Qt includes
#include <qlayout.h>
#include <qpixmap.h>
#include <qpainter.h>
#include <qpushbutton.h>
// Local includes
#include "../../options.h"
#include "../../workspace.h"
#include "riscosclient.h"
#include "title_inactive_left.xpm"
#include "title_inactive.xpm"
#include "title_inactive_right.xpm"
#include "title_active_left.xpm"
#include "title_active.xpm"
#include "title_active_right.xpm"
#include "resize_bar_left.xpm"
#include "resize_bar_mid.xpm"
#include "resize_bar_right.xpm"
#include "base_up.xpm"
#include "base_down.xpm"
#include "close.xpm"
#include "unmax.xpm"
#include "max.xpm"
#include "lower.xpm"
#include "bar.xpm"
#include <X11/Xlib.h>
extern "C"
{
Client * allocate(Workspace * workSpace, WId winId)
{
return new RiscOSClient(workSpace, winId);
}
}
RiscOSButton::RiscOSButton(RiscOSClient * parent)
: QButton(parent, "RiscOSButton"),
client_(parent)
{
setFixedSize(18, 18);
px_base_up_ = QPixmap(base_up_xpm);
px_base_down_ = QPixmap(base_down_xpm);
XSetWindowAttributes wsa;
wsa.save_under = true;
XChangeWindowAttributes(qt_xdisplay(), winId(), 0, &wsa);
}
void
RiscOSButton::drawButton(QPainter * p)
{
if (isDown())
p->drawPixmap(0, 0, px_base_down_);
else
p->drawPixmap(0, 0, px_base_up_);
p->drawPixmap(3, 3, px_symbol_);
}
void
RiscOSButton::setSymbol(const QPixmap & p)
{
px_symbol_ = p;
repaint(false);
}
RiscOSLowerButton::RiscOSLowerButton(RiscOSClient * parent)
: RiscOSButton(parent)
{
// TODO connect(this, SIGNAL(clicked()), client(), (SLOT(lowerAndDeactivate())));
setSymbol(QPixmap(lower_xpm));
}
RiscOSCloseButton::RiscOSCloseButton(RiscOSClient * parent)
: RiscOSButton(parent)
{
connect(this, SIGNAL(clicked()), client(), (SLOT(closeWindow())));
setSymbol(QPixmap(close_xpm));
}
RiscOSIconifyButton::RiscOSIconifyButton(RiscOSClient * parent)
: RiscOSButton(parent)
{
connect(this, SIGNAL(clicked()), client(), (SLOT(iconify())));
setSymbol(QPixmap(bar_xpm));
}
RiscOSMaximiseButton::RiscOSMaximiseButton(RiscOSClient * parent)
: RiscOSButton(parent)
{
setSymbol(QPixmap(max_xpm));
}
void
RiscOSMaximiseButton::setOn(bool on)
{
if (on)
setSymbol(QPixmap(unmax_xpm));
else
setSymbol(QPixmap(max_xpm));
}
void
RiscOSMaximiseButton::mouseReleaseEvent(QMouseEvent * e)
{
RiscOSButton::mouseReleaseEvent(e);
if (!rect().contains(e->pos()))
return;
switch (e->button())
{
case RightButton:
client()->maximizeNoRaise();
break;
case MidButton:
client()->maximizeVertically();
break;
case LeftButton:
default:
client()->maximizeAndRaise();
break;
}
}
RiscOSResizeButton::RiscOSResizeButton(RiscOSClient * parent)
: RiscOSButton(parent)
{
}
RiscOSTitleBar::RiscOSTitleBar(RiscOSClient * parent)
: QWidget(parent, "RiscOSTitleBar"),
client_(parent)
{
setFixedHeight(18);
px_inactive_left_ = QPixmap(title_inactive_left_xpm);
px_inactive_ = QPixmap(title_inactive_xpm);
px_inactive_right_ = QPixmap(title_inactive_right_xpm);
px_active_left_ = QPixmap(title_active_left_xpm);
px_active_ = QPixmap(title_active_xpm);
px_active_right_ = QPixmap(title_active_right_xpm);
XSetWindowAttributes wsa;
wsa.save_under = true;
XChangeWindowAttributes(qt_xdisplay(), winId(), 0, &wsa);
buf_.resize(128,18);
_updatePixmap();
}
void
RiscOSTitleBar::_updatePixmap()
{
if (size().width() > buf_.width())
buf_.resize(size());
QPainter p;
p.begin(&buf_);
if (client_->isActive()) {
p.drawPixmap(0, 0, px_active_left_);
p.drawTiledPixmap(2, 0, width() - 4, 18, px_active_);
p.drawPixmap(width() - 2, 0, px_active_right_);
} else {
p.drawPixmap(0, 0, px_inactive_left_);
p.drawTiledPixmap(2, 0, width() - 4, 18, px_inactive_);
p.drawPixmap(width() - 2, 0, px_inactive_right_);
}
p.setPen(client_->colour());
p.setFont(client_->font());
p.setFont(QFont("times", 10, QFont::Bold));
p.drawText(3, 0, width() - 6, 18, AlignCenter, client_->caption());
}
void
RiscOSTitleBar::resizeEvent(QResizeEvent * e)
{
QWidget::resizeEvent(e);
_updatePixmap();
}
void
RiscOSTitleBar::paintEvent(QPaintEvent * e)
{
QRect r(e->rect());
bitBlt(this, r.topLeft(), &buf_, r, Qt::CopyROP);
}
void
RiscOSTitleBar::mousePressEvent(QMouseEvent * e)
{
switch (e->button()) {
case MidButton:
client_->workspace()->clientPopup(client_)->popup(e->globalPos());
break;
case LeftButton:
client_->workspace()->raiseClient(client_);
client_->workspace()->requestFocus(client_);
case RightButton:
clientPosToMousePos_ = e->globalPos() - client_->pos();
break;
default:
break;
}
}
void
RiscOSTitleBar::mouseReleaseEvent(QMouseEvent * e)
{
}
void
RiscOSTitleBar::mouseMoveEvent(QMouseEvent * e)
{
QPoint adjustedForCursor = e->globalPos() - clientPosToMousePos_;
QPoint adjustedForSnap =
client_->workspace()->adjustClientPosition(client_, adjustedForCursor);
client_->move(adjustedForSnap);
// Do we really need this ?
// QApplication::syncX();
}
void
RiscOSTitleBar::mouseDoubleClickEvent(QMouseEvent * e)
{
client_->setShade(!client_->isShade());
}
void
RiscOSTitleBar::update()
{
_updatePixmap();
repaint(false);
}
RiscOSResizeBar::RiscOSResizeBar(RiscOSClient * parent)
: QWidget(parent, "RiscOSResizeBar")
{
setFixedHeight(8);
left_ = new RiscOSResizeLeft(this, parent);
mid_ = new RiscOSResizeMid(this, parent);
right_ = new RiscOSResizeRight(this, parent);
QHBoxLayout * layout = new QHBoxLayout(this);
layout->addWidget(left_);
layout->addWidget(mid_, 1);
layout->addWidget(right_);
XSetWindowAttributes wsa;
wsa.save_under = true;
XChangeWindowAttributes(qt_xdisplay(), winId(), 0, &wsa);
XChangeWindowAttributes(qt_xdisplay(), left_->winId(), 0, &wsa);
XChangeWindowAttributes(qt_xdisplay(), mid_->winId(), 0, &wsa);
XChangeWindowAttributes(qt_xdisplay(), right_->winId(), 0, &wsa);
}
void
RiscOSResizeBar::update()
{
mid_->update();
}
RiscOSResizeMid::RiscOSResizeMid(RiscOSResizeBar * parent, RiscOSClient * c)
: QWidget(parent, "RiscOSResizeMid"),
client_(c)
{
setCursor(Qt::sizeVerCursor);
px_left_ = QPixmap(resize_bar_left_xpm);
px_mid_ = QPixmap(resize_bar_mid_xpm);
px_right_ = QPixmap(resize_bar_right_xpm);
}
void
RiscOSResizeMid::_updatePixmap()
{
if (size().width() > buf_.width())
buf_.resize(size());
QPainter p;
p.begin(&buf_);
p.drawLine(0, 8, width(), 8);
p.drawPixmap(0, 0, px_left_);
p.drawTiledPixmap(2, 0, width() - 4, 7, px_mid_);
p.drawPixmap(width() - 2, 0, px_right_);
}
void
RiscOSResizeMid::update()
{
_updatePixmap();
repaint(false);
}
void
RiscOSResizeMid::resizeEvent(QResizeEvent * e)
{
QWidget::resizeEvent(e);
_updatePixmap();
}
void
RiscOSResizeMid::paintEvent(QPaintEvent * e)
{
QRect r(e->rect());
bitBlt(this, r.topLeft(), &buf_, r, Qt::CopyROP);
}
void
RiscOSResizeMid::mouseMoveEvent(QMouseEvent * e)
{
QRect g = client_->geometry();
g.setHeight(e->globalPos().y());
QSize adjustedSize = client_->adjustedSize(g.size());
if (adjustedSize != client_->size()) {
g.setBottom(g.top() + adjustedSize.height());
client_->setGeometry(g);
}
}
RiscOSResizeLeft::RiscOSResizeLeft(RiscOSResizeBar * parent, RiscOSClient * c)
: QWidget(parent, "RiscOSResizeLeft"),
client_(c)
{
setCursor(Qt::sizeBDiagCursor);
setFixedSize(30, 8);
setBackgroundColor(Qt::black);
QPixmap pixmap;
pixmap.resize(30, 8);
pixmap.fill(Qt::black);
QPainter p(&pixmap);
p.drawPixmap(1, 0, QPixmap(resize_bar_left_xpm));
p.drawPixmap(3, 0, QPixmap(resize_bar_mid_xpm));
p.drawPixmap(28, 0, QPixmap(resize_bar_right_xpm));
setBackgroundPixmap(pixmap);
}
void
RiscOSResizeLeft::mouseMoveEvent(QMouseEvent * e)
{
QRect g = client_->geometry();
g.setBottom(e->globalPos().y());
g.setLeft(e->globalPos().x());
QSize adjustedSize = client_->adjustedSize(g.size());
if (adjustedSize != client_->size()) {
g.setLeft(g.right() - adjustedSize.width());
g.setBottom(g.top() + adjustedSize.height());
client_->setGeometry(g);
}
}
RiscOSResizeRight::RiscOSResizeRight(RiscOSResizeBar * parent, RiscOSClient * c)
: QWidget(parent, "RiscOSResizeRight"),
client_(c)
{
setCursor(Qt::sizeFDiagCursor);
setFixedSize(30, 8);
setBackgroundColor(Qt::black);
QPixmap pixmap;
pixmap.resize(30, 8);
pixmap.fill(Qt::black);
QPainter p(&pixmap);
p.drawPixmap(0, 0, QPixmap(resize_bar_left_xpm));
p.drawPixmap(2, 0, QPixmap(resize_bar_mid_xpm));
p.drawPixmap(27, 0, QPixmap(resize_bar_right_xpm));
setBackgroundPixmap(pixmap);
}
void
RiscOSResizeRight::mouseMoveEvent(QMouseEvent * e)
{
QRect g = client_->geometry();
g.setBottom(e->globalPos().y());
g.setRight(e->globalPos().x());
QSize adjustedSize = client_->adjustedSize(g.size());
if (adjustedSize != client_->size()) {
g.setRight(g.left() + adjustedSize.width());
g.setBottom(g.top() + adjustedSize.height());
client_->setGeometry(g);
}
}
RiscOSClient::RiscOSClient(
Workspace * workSpace,
WId winId,
QWidget * parent,
const char * name
)
: Client(workSpace, winId, parent, name, WResizeNoErase)
{
setMouseTracking(false); // I don't want this !
setBackgroundColor(Qt::black);
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
lower_ = new RiscOSLowerButton(this);
close_ = new RiscOSCloseButton(this);
title_ = new RiscOSTitleBar(this);
iconify_ = new RiscOSIconifyButton(this);
maximize_ = new RiscOSMaximiseButton(this);
resizeBar_ = new RiscOSResizeBar(this);
// Layout
// Border | Close | Titlebar | Max | Lower | Border
QHBoxLayout * titleLayout = new QHBoxLayout(0, "titleLayout");
titleLayout->addSpacing(1);
titleLayout->addWidget(lower_);
titleLayout->addSpacing(1);
titleLayout->addWidget(close_);
titleLayout->addSpacing(1);
titleLayout->addWidget(title_, 1);
titleLayout->addSpacing(1);
titleLayout->addWidget(iconify_);
titleLayout->addSpacing(1);
titleLayout->addWidget(maximize_);
titleLayout->addSpacing(1);
// Border
// Window
// Border
QHBoxLayout * windowLayout = new QHBoxLayout(0, "windowLayout");
windowLayout->addSpacing(1);
windowLayout->addWidget(windowWrapper(), 1);
windowLayout->addSpacing(1);
// Border
// Titlebar
// Window layout
// Resize bar
QVBoxLayout * mainLayout = new QVBoxLayout(this, 0, 0, "mainLayout");
mainLayout->addSpacing(1);
mainLayout->addLayout(titleLayout);
mainLayout->addSpacing(1);
mainLayout->addLayout(windowLayout, 1);
mainLayout->addSpacing(1);
mainLayout->addWidget(resizeBar_);
title_->update();
resizeBar_->update();
}
void
RiscOSClient::slotReset()
{
// Empty.
}
void
RiscOSClient::captionChange(const QString &)
{
title_->update();
}
void
RiscOSClient::activeChange(bool b)
{
title_->update();
}
void
RiscOSClient::maximizeChange(bool b)
{
maximize_->setOn(b);
}
void
RiscOSClient::maximizeAndRaise()
{
maximize(MaximizeFull);
workspace()->raiseClient(this);
workspace()->requestFocus(this);
}
void
RiscOSClient::maximizeVertically()
{
maximize(MaximizeVertical);
workspace()->raiseClient(this);
workspace()->requestFocus(this);
}
void
RiscOSClient::maximizeNoRaise()
{
maximize(MaximizeFull);
}
void
RiscOSClient::resize(int w, int h)
{
Client::resize(w, h);
}
void
RiscOSClient::setShade(bool b)
{
#if 0
// Hmm. This does screwy things to the layout.
if (b)
resizeBar_->hide();
else
resizeBar_->show();
#endif
// And this is screwed. My window ends up the wrong size when unshaded.
// Client::setShade(b);
}
// vim:ts=2:sw=2:tw=78

View file

@ -0,0 +1,279 @@
/*
RISC OS KWin client
Copyright 2000
Rik Hemsley <rik@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef RISC_OS_CLIENT_H
#define RISC_OS_CLIENT_H
#include <qbutton.h>
#include <qpixmap.h>
#include <qpoint.h>
#include "../../client.h"
class RiscOSClient;
class RiscOSButton : public QButton
{
Q_OBJECT
public:
RiscOSButton(RiscOSClient * parent);
protected:
void drawButton(QPainter *);
void setSymbol(const QPixmap &);
protected:
RiscOSClient * client() { return client_; }
private:
RiscOSClient * client_;
QPixmap px_base_up_;
QPixmap px_base_down_;
QPixmap px_symbol_;
};
class RiscOSLowerButton : public RiscOSButton
{
Q_OBJECT
public:
RiscOSLowerButton(RiscOSClient * parent);
};
class RiscOSCloseButton : public RiscOSButton
{
Q_OBJECT
public:
RiscOSCloseButton(RiscOSClient * parent);
};
class RiscOSIconifyButton : public RiscOSButton
{
Q_OBJECT
public:
RiscOSIconifyButton(RiscOSClient * parent);
};
class RiscOSMaximiseButton : public RiscOSButton
{
Q_OBJECT
public:
RiscOSMaximiseButton(RiscOSClient * parent);
void setOn(bool);
protected:
void mouseReleaseEvent(QMouseEvent *);
};
class RiscOSResizeButton : public RiscOSButton
{
Q_OBJECT
public:
RiscOSResizeButton(RiscOSClient * parent);
};
class RiscOSTitleBar : public QWidget
{
Q_OBJECT
public:
RiscOSTitleBar(RiscOSClient * parent);
void update();
protected:
void paintEvent(QPaintEvent *);
void resizeEvent(QResizeEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseDoubleClickEvent(QMouseEvent *);
private:
void _updatePixmap();
RiscOSClient * client_;
QPixmap px_inactive_left_;
QPixmap px_inactive_;
QPixmap px_inactive_right_;
QPixmap px_active_left_;
QPixmap px_active_;
QPixmap px_active_right_;
QPixmap buf_;
bool active_;
QPoint clientPosToMousePos_;
};
class RiscOSResizeLeft;
class RiscOSResizeMid;
class RiscOSResizeRight;
class RiscOSResizeBar : public QWidget
{
Q_OBJECT
public:
RiscOSResizeBar(RiscOSClient * parent);
void update();
private:
RiscOSResizeLeft * left_;
RiscOSResizeMid * mid_;
RiscOSResizeRight * right_;
};
class RiscOSResizeMid : public QWidget
{
Q_OBJECT
public:
RiscOSResizeMid(RiscOSResizeBar * parent, RiscOSClient * client);
void update();
protected:
void resizeEvent(QResizeEvent *);
void paintEvent(QPaintEvent *);
void mouseMoveEvent(QMouseEvent *);
private:
RiscOSClient * client_;
void _updatePixmap();
QPixmap buf_;
QPixmap px_left_;
QPixmap px_mid_;
QPixmap px_right_;
};
class RiscOSResizeLeft : public QWidget
{
Q_OBJECT
public:
RiscOSResizeLeft(RiscOSResizeBar * parent, RiscOSClient * client);
protected:
void mouseMoveEvent(QMouseEvent *);
private:
RiscOSClient * client_;
};
class RiscOSResizeRight : public QWidget
{
Q_OBJECT
public:
RiscOSResizeRight(RiscOSResizeBar * parent, RiscOSClient * client);
protected:
void mouseMoveEvent(QMouseEvent *);
private:
RiscOSClient * client_;
};
class RiscOSClient : public Client
{
Q_OBJECT
public:
RiscOSClient(Workspace *, WId, QWidget * parent = 0, const char * name = 0);
~RiscOSClient() {}
QColor colour() const { return options->color(Options::Font, isActive()); }
QFont font() const { return options->font(isActive()); }
void maximizeVertically();
void maximizeAndRaise();
void maximizeNoRaise();
void resize(int, int);
void setShade(bool);
protected:
void activeChange(bool);
void maximizeChange(bool);
void mousePressEvent(QMouseEvent *) {} // Disabled
void mouseReleaseEvent(QMouseEvent *) {} // Disabled
protected slots:
void captionChange(const QString &);
void slotReset();
private:
RiscOSLowerButton * lower_;
RiscOSCloseButton * close_;
RiscOSTitleBar * title_;
RiscOSIconifyButton * iconify_;
RiscOSMaximiseButton * maximize_;
RiscOSResizeBar * resizeBar_;
};
#endif
// vim:ts=2:sw=2:tw=78

30
clients/riscos/title.xpm Normal file
View file

@ -0,0 +1,30 @@
/* XPM */
static char * title_xpm[] = {
"8 20 5 1",
"f c #FFFFFF",
"- c #DCDCDC",
"/ c #C3C3C3",
". c #585858",
"o c #000000",
"ffffffff",
"--------",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"////////",
"........",
"oooooooo"};

View file

@ -0,0 +1,27 @@
/* XPM */
static char * title_active_xpm[] = {
"128 18 6 1",
" c None",
". c #FFFFFF",
"+ c #E7E7E7",
"@ c #E7E7A5",
"# c #C6C684",
"$ c #636363",
"................................................................................................................................",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"@+@@@.@.@+++@@@..@+@@+@+@+@.+@..@@@@@@@@@+@+++@@@@.@@@++++@@@@..@+@.@@@@@@@@@@@@+.+++++.@@.@@.@.@..@.@.@@@++++++++++@@@@@@@+++++",
".@@@@@.@++++@@.+@.@++@+@+@@@@@+.@@@@@@@+@@++++@@@.@@@+@@++@@@.@@.@+@.@@@@@..@@.@@@+++++@@@@@@@.@@@@.@.@.@@+++++@+@@@+@@@@@++++@+",
".@.@@@+@@++@@@@@@@@@@++@@+@.@..+@@@@@@@@+@++++@@+@@@@@@@+@+@@@@.@+@.@@@@@@@@@@@@@+@+++@+@+@@@@@@@.@.@.@@.@@++++++++@+@+@+@++++@+",
"@@@@@@@@@@@@@@.@.@.+@@@+@@+@.+@@@++@@@@+++@+@+@@@@@@@+@+@+@+@@+@.@.@@@@@@@@.@@@+.@+++++@+@+@.@.@+@@@@@+@+@.++@@@++@+@++@+@@++@@+",
"@@@@+++@+@+@@@.@@@@.@.@+@@@@@@@+++++@@@+@+++@@@@@@@@@@@@@@@+@@@.@+@.+@@@@@++@+@+@@@@++@+++@@@@@@@@@@@++@@@@+@@@@+++@++@+@@@@++@+",
"+@@@+++@@@@@@@@@+@@@@@@.@@@@@+@+@+++@@+@++@@@.@@@@@@@+@@@@@@+@@@@@+.@@@@@@@+++++@.@@@++@@+@@.@@@@+++++++@@@+@+@.@++@+@++@@@++@@@",
"+@@@+@@+@+@+@@.@@@@@+@@@@@+@@@@@++++@@@+++@+@@@@@+@@@@@.@@@+@@+@@@.@+@@@@@+@+++@+@@@+@@@@@.@@@+@@@@@@++@@@@@@@@@@++@@+@+@@@@++@+",
"@@@@@+@++@@@.@@++@@@@@@+@@++++@+@++++.+@@@@@@@@@@@.@@@@@+@@+@+@+++.+@@+@++@+@+@+@++@@+@+@@@@@@@@@@++@+@+@+@@+@@+@+@.++@@@@.@@@@@",
"@@@@@@++@+@@@+@@@@@@@@@@@@++.+@@@@+@+++@@@@@@@@@@@+@@+@+@@+@@@++@++@@@@@@@+.@@@@@@.@+@+@+@@@+@+@@+@@@+@.+@@+@@@@@@@@@@@@+@@@@@@@",
"@@@@@@@@@@+@@@@@+@@@@@+@@++@+++@@@@+++@@+@+@+@+@+++@@@@@@+@@+@+@++@@@+@@@@@@@@@@+@@@@@@@@+.@@+@@@+@+@+@+@+@@@@@+@+@@@@@@++@@@@@@",
"@@@+@@@@@@@@++@@@@@+@+@@+@++@@@@@@@@+@@@+@++@++++@++@+@+@@@+@++@++@@@+@@@+@@@+@@@+@+@@+@+@@@@@@+@@+@@++@+++@@@+++@@@@@@+@@@@@++@",
"@@@@@@@@@@+@@@@@@@+@@@@+@@@@@@@+@+@@+@@++@+@+@@+++@++@@@@+@@++++@+++@@+@+@@@@@@+@@@@+@@+@@@@@@+@@@+@+@++@@++@+@+@+@+@@+@@+@+@@@+",
"@@@@+@@@+@+@+@@++@+@+@@@+@@+@@@+@+@+@++@++@++@++@@++@@@@@@@+++@++@+@@@@@+@+@@@@@@+@@@+++@+@@@@@@@@+@@+@@@++++@+@@+++++@+@+@+@@++",
"@@@@@+@+@+++@@+@++@@+@+@@@+@+@+++@@@++@+@@+@+@+@++@++@@@@@@@@@+@+++@@@@+@@@++++@@@@++@+@+@@@@@@@@@@@@++@+++++@@+@@+@+@+@@+@@@@@+",
"################################################################################################################################",
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"};

View file

@ -0,0 +1,26 @@
/* XPM */
static char * title_active_left_xpm[] = {
"2 18 5 1",
" c None",
". c #FFFFFF",
"+ c #E7E7E7",
"@ c #E7E7A5",
"# c #9C9C9C",
"..",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".@",
"@#"};

View file

@ -0,0 +1,27 @@
/* XPM */
static char * title_active_right_xpm[] = {
"2 18 6 1",
" c None",
". c #FFFFFF",
"+ c #E7E7A5",
"@ c #9C9C9C",
"# c #C6C684",
"$ c #636363",
".+",
"+@",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"$$"};

View file

@ -0,0 +1,27 @@
/* XPM */
static char * title_inactive_xpm[] = {
"128 18 6 1",
" c None",
". c #FFFFFF",
"+ c #DDDDDD",
"@ c #BBBBBB",
"# c #999999",
"$ c #555555",
"................................................................................................................................",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"@+@@@.@.@+++@@@..@+@@+@+@+@.+@..@@@@@@@@@+@+++@@@@.@@@++++@@@@..@+@.@@@@@@@@@@@@+.+++++.@@.@@.@.@..@.@.@@@++++++++++@@@@@@@+++++",
".@@@@@.@++++@@.+@.@++@+@+@@@@@+.@@@@@@@+@@++++@@@.@@@+@@++@@@.@@.@+@.@@@@@..@@.@@@+++++@@@@@@@.@@@@.@.@.@@+++++@+@@@+@@@@@++++@+",
".@.@@@+@@++@@@@@@@@@@++@@+@.@..+@@@@@@@@+@++++@@+@@@@@@@+@+@@@@.@+@.@@@@@@@@@@@@@+@+++@+@+@@@@@@@.@.@.@@.@@++++++++@+@+@+@++++@+",
"@@@@@@@@@@@@@@.@.@.+@@@+@@+@.+@@@++@@@@+++@+@+@@@@@@@+@+@+@+@@+@.@.@@@@@@@@.@@@+.@+++++@+@+@.@.@+@@@@@+@+@.++@@@++@+@++@+@@++@@+",
"@@@@+++@+@+@@@.@@@@.@.@+@@@@@@@+++++@@@+@+++@@@@@@@@@@@@@@@+@@@.@+@.+@@@@@++@+@+@@@@++@+++@@@@@@@@@@@++@@@@+@@@@+++@++@+@@@@++@+",
"+@@@+++@@@@@@@@@+@@@@@@.@@@@@+@+@+++@@+@++@@@.@@@@@@@+@@@@@@+@@@@@+.@@@@@@@+++++@.@@@++@@+@@.@@@@+++++++@@@+@+@.@++@+@++@@@++@@@",
"+@@@+@@+@+@+@@.@@@@@+@@@@@+@@@@@++++@@@+++@+@@@@@+@@@@@.@@@+@@+@@@.@+@@@@@+@+++@+@@@+@@@@@.@@@+@@@@@@++@@@@@@@@@@++@@+@+@@@@++@+",
"@@@@@+@++@@@.@@++@@@@@@+@@++++@+@++++.+@@@@@@@@@@@.@@@@@+@@+@+@+++.+@@+@++@+@+@+@++@@+@+@@@@@@@@@@++@+@+@+@@+@@+@+@.++@@@@.@@@@@",
"@@@@@@++@+@@@+@@@@@@@@@@@@++.+@@@@+@+++@@@@@@@@@@@+@@+@+@@+@@@++@++@@@@@@@+.@@@@@@.@+@+@+@@@+@+@@+@@@+@.+@@+@@@@@@@@@@@@+@@@@@@@",
"@@@@@@@@@@+@@@@@+@@@@@+@@++@+++@@@@+++@@+@+@+@+@+++@@@@@@+@@+@+@++@@@+@@@@@@@@@@+@@@@@@@@+.@@+@@@+@+@+@+@+@@@@@+@+@@@@@@++@@@@@@",
"@@@+@@@@@@@@++@@@@@+@+@@+@++@@@@@@@@+@@@+@++@++++@++@+@+@@@+@++@++@@@+@@@+@@@+@@@+@+@@+@+@@@@@@+@@+@@++@+++@@@+++@@@@@@+@@@@@++@",
"@@@@@@@@@@+@@@@@@@+@@@@+@@@@@@@+@+@@+@@++@+@+@@+++@++@@@@+@@++++@+++@@+@+@@@@@@+@@@@+@@+@@@@@@+@@@+@+@++@@++@+@+@+@+@@+@@+@+@@@+",
"@@@@+@@@+@+@+@@++@+@+@@@+@@+@@@+@+@+@++@++@++@++@@++@@@@@@@+++@++@+@@@@@+@+@@@@@@+@@@+++@+@@@@@@@@+@@+@@@++++@+@@+++++@+@+@+@@++",
"@@@@@+@+@+++@@+@++@@+@+@@@+@+@+++@@@++@+@@+@+@+@++@++@@@@@@@@@+@+++@@@@+@@@++++@@@@++@+@+@@@@@@@@@@@@++@+++++@@+@@+@+@+@@+@@@@@+",
"################################################################################################################################",
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"};

View file

@ -0,0 +1,26 @@
/* XPM */
static char * title_inactive_left_xpm[] = {
"2 18 5 1",
" c None",
". c #FFFFFF",
"+ c #DDDDDD",
"@ c #BBBBBB",
"# c #777777",
"..",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".+",
".@",
"@#"};

View file

@ -0,0 +1,27 @@
/* XPM */
static char * title_inactive_right_xpm[] = {
"2 18 6 1",
" c None",
". c #FFFFFF",
"+ c #BBBBBB",
"@ c #777777",
"# c #999999",
"$ c #555555",
".+",
"+@",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"#$",
"$$"};

View file

@ -0,0 +1,28 @@
/* XPM */
static char * title_left_xpm[] = {
"2 20 4 1",
"f c #FFFFFF",
"- c #DCDCDC",
"/ c #C3C3C3",
"o c #000000",
"ff",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f-",
"f/",
"/o"};

View file

@ -0,0 +1,29 @@
/* XPM */
static char * title_right_xpm[] = {
"2 20 4 1",
"f c #FFFFFF",
"/ c #C3C3C3",
". c #585858",
"o c #000000",
"f/",
"/o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
".o",
"oo"};

22
clients/riscos/unmax.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * unmax_xpm[] = {
"12 12 7 1",
" c None",
". c #5A5A5A",
"+ c #7B7B7B",
"@ c #BDBDBD",
"# c #FFFFFF",
"$ c #DEDEDE",
"% c #9C9C9C",
"..........+@",
".#########@$",
".# +#",
".# .#",
".# .#",
".# .#",
".# .#",
".# .#",
".# .#",
".# .#",
".@+........#",
"%$##########"};