summaryrefslogtreecommitdiffstats
path: root/kwin-styles/openlook
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit8b2aa1b5301ab60368a03e36df4ff5216726e87d (patch)
tree36163d4ee667c23b5cf232df2f3004cd0a76202a /kwin-styles/openlook
downloadtdeartwork-8b2aa1b5301ab60368a03e36df4ff5216726e87d.tar.gz
tdeartwork-8b2aa1b5301ab60368a03e36df4ff5216726e87d.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeartwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kwin-styles/openlook')
-rw-r--r--kwin-styles/openlook/Makefile.am16
-rw-r--r--kwin-styles/openlook/OpenLook.cpp728
-rw-r--r--kwin-styles/openlook/OpenLook.h115
-rw-r--r--kwin-styles/openlook/openlook.desktop14
4 files changed, 873 insertions, 0 deletions
diff --git a/kwin-styles/openlook/Makefile.am b/kwin-styles/openlook/Makefile.am
new file mode 100644
index 00000000..25ed43d0
--- /dev/null
+++ b/kwin-styles/openlook/Makefile.am
@@ -0,0 +1,16 @@
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kwin3_openlook.la
+
+kwin3_openlook_la_SOURCES = OpenLook.cpp
+kwin3_openlook_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module
+kwin3_openlook_la_LIBADD = -lkdecorations
+
+noinst_HEADERS = OpenLook.h
+METASOURCES = AUTO
+
+linkdir = $(kde_datadir)/kwin/
+link_DATA = openlook.desktop
+
+EXTRA_DIST = $(link_DATA)
+
diff --git a/kwin-styles/openlook/OpenLook.cpp b/kwin-styles/openlook/OpenLook.cpp
new file mode 100644
index 00000000..0f31a6ec
--- /dev/null
+++ b/kwin-styles/openlook/OpenLook.cpp
@@ -0,0 +1,728 @@
+/*
+ 'OpenLook' kwin client
+
+ Porting to kde3.2 API
+ Copyright 2003 Luciano Montanaro <mikelima@cirulla.net>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "config.h"
+#include <unistd.h> // for usleep
+#include <math.h>
+
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qtoolbutton.h>
+#include <qimage.h>
+#include <qlabel.h>
+#include <qpixmap.h>
+
+#include <kapplication.h>
+#include <klocale.h>
+
+#include "OpenLook.h"
+
+extern "C" KDE_EXPORT KDecorationFactory* create_factory()
+{
+ return new OpenLook::DecorationFactory();
+}
+
+namespace OpenLook {
+
+static uint openLookCornerSize = 11;
+static uint openLookMargin = 5;
+static const uint openLookTextVMargin = 1;
+static uint titleHeight;
+
+// ---------------------------------------
+
+DecorationFactory::DecorationFactory()
+{
+}
+
+DecorationFactory::~DecorationFactory()
+{
+}
+
+KDecoration *DecorationFactory::createDecoration(KDecorationBridge *b)
+{
+ return new OpenLook(b, this);
+}
+
+bool DecorationFactory::reset(unsigned long /*changed*/)
+{
+ // TODO Do not recreate decorations if it is not needed. Look at
+ // ModernSystem for how to do that
+ // For now just return true.
+ return true;
+}
+
+bool DecorationFactory::supports( Ability ability )
+{
+ switch( ability )
+ {
+ case AbilityAnnounceButtons:
+ case AbilityButtonMinimize:
+ return true;
+ default:
+ return false;
+ };
+}
+
+QValueList< DecorationFactory::BorderSize >
+DecorationFactory::borderSizes() const
+{
+ // the list must be sorted
+ return QValueList< BorderSize >() << BorderNormal <<
+ BorderLarge << BorderVeryLarge << BorderHuge <<
+ BorderVeryHuge << BorderOversized;
+}
+
+// ---------------------------------------
+
+static inline const KDecorationOptions* options()
+{
+ return KDecoration::options();
+}
+
+// ---------------------------------------
+
+OpenLook::OpenLook(KDecorationBridge *b, KDecorationFactory *f) :
+ KDecoration(b, f),
+ titleSpacer_ (0),
+ mousePressPoint_(0, 0), // Anywhere outside button rect.
+ buttonDown_ (false)
+{
+}
+
+void OpenLook::init()
+{
+ static const int SUPPORTED_WINDOW_TYPES_MASK = NET::NormalMask |
+ NET::DesktopMask | NET::DockMask | NET::ToolbarMask | NET::MenuMask |
+ NET::DialogMask | NET::OverrideMask | NET::TopMenuMask |
+ NET::UtilityMask | NET::SplashMask;
+
+ createMainWidget(WStaticContents | WResizeNoErase | WRepaintNoErase);
+ widget()->installEventFilter(this);
+ widget()->setBackgroundMode(NoBackground);
+ NET::WindowType type = windowType(SUPPORTED_WINDOW_TYPES_MASK);
+ tool_ = (type == NET::Toolbar || type == NET::Utility || type == NET::Menu);
+ QFontMetrics fm(options()->font(isActive(), tool_));
+
+ titleHeight = fm.height() + openLookTextVMargin * 2;
+
+ switch(KDecoration::options()->preferredBorderSize(factory())) {
+ case KDecoration::BorderLarge:
+ openLookMargin = 9;
+ break;
+ case KDecoration::BorderVeryLarge:
+ openLookMargin = 13;
+ break;
+ case KDecoration::BorderHuge:
+ openLookMargin = 18;
+ break;
+ case KDecoration::BorderVeryHuge:
+ openLookMargin = 27;
+ break;
+ case KDecoration::BorderOversized:
+ openLookMargin = 40;
+ break;
+ case KDecoration::BorderNormal:
+ default:
+ openLookMargin = 5;
+ }
+ openLookCornerSize = 2*openLookMargin + 1;
+ if (titleHeight <= openLookMargin)
+ titleHeight = openLookMargin+1;
+
+ doLayout();
+}
+
+OpenLook::~OpenLook()
+{
+ // Empty.
+}
+
+bool OpenLook::eventFilter(QObject *o, QEvent *e)
+{
+ if (o != widget()) return false;
+ switch (e->type()) {
+ case QEvent::Resize:
+ resizeEvent(static_cast< QResizeEvent* >(e));
+ return true;
+ case QEvent::Paint:
+ paintEvent(static_cast< QPaintEvent* >(e));
+ return true;
+ case QEvent::MouseButtonDblClick:
+ mouseDoubleClickEvent(static_cast< QMouseEvent* >(e));
+ return true;
+ case QEvent::Wheel:
+ wheelEvent( static_cast< QWheelEvent* >( e ));
+ return true;
+ case QEvent::MouseButtonPress:
+ if (!isButtonPress(static_cast< QMouseEvent* >(e))) {
+ processMousePressEvent(static_cast< QMouseEvent* >(e));
+ }
+ return true;
+ case QEvent::MouseButtonRelease:
+ if (isButtonRelease(static_cast< QMouseEvent* >(e))) {
+ return true;
+ } else {
+ return false;
+ }
+ case QEvent::Show:
+ showEvent(static_cast< QShowEvent* >(e));
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
+ void
+OpenLook::borders(int &left, int &right, int &top, int &bottom) const
+{
+ // FRAME XXX Check
+ left = right = bottom = openLookMargin;
+ top = titleHeight + openLookMargin;
+}
+
+ void
+OpenLook::captionChange()
+{
+ widget()->update(titleRect());
+}
+
+ void
+OpenLook::shadeChange()
+{
+}
+
+QSize OpenLook::minimumSize() const
+{
+ int left, right, top, bottom;
+ borders(left, right, top, bottom);
+ return QSize(left + right + 2 * titleHeight, top + bottom);
+}
+
+ void
+OpenLook::resize(const QSize& s)
+{
+ widget()->resize(s);
+ widget()->repaint(); //there is some strange wrong repaint of the frame without
+}
+
+ void
+OpenLook::paintEvent(QPaintEvent * pe)
+{
+ QRect tr(titleRect());
+
+ QPainter p(widget());
+
+ QRegion clipRegion(pe->region());
+
+ p.setClipRegion(clipRegion);
+
+ paintBorder(p);
+
+ paintTopLeftRect(p);
+ paintTopRightRect(p);
+ paintBottomLeftRect(p);
+ paintBottomRightRect(p);
+
+ p.setClipRegion(clipRegion + buttonRect());
+
+ QBrush titleBackground(options()->color(KDecoration::ColorTitleBar, true));
+
+ if (isActive())
+ qDrawShadePanel(&p, tr, widget()->colorGroup(), true, 1, &titleBackground);
+ else
+ p.fillRect(tr, widget()->colorGroup().brush(QColorGroup::Background));
+
+ p.setClipRegion(clipRegion);
+
+ paintButton(p);
+
+ p.setFont(options()->font(isActive(), tool_));
+
+ p.setPen(options()->color(KDecoration::ColorFont, isActive()));
+
+ tr.setLeft(openLookCornerSize + 3 + buttonRect().width() + 2);
+
+ p.drawText(tr, AlignCenter, caption());
+}
+
+ void
+OpenLook::showEvent(QShowEvent *)
+{
+ widget()->repaint();
+}
+
+ void
+OpenLook::mouseDoubleClickEvent(QMouseEvent * e)
+{
+ if (e->button() == LeftButton && titleRect().contains(e->pos()))
+ {
+ titlebarDblClickOperation();
+ }
+}
+
+ void
+OpenLook::wheelEvent(QWheelEvent *e)
+{
+ if (isSetShade() || titleRect().contains(e->pos()))
+ {
+ titlebarMouseWheelOperation( e->delta());
+ }
+}
+
+ void
+OpenLook::resizeEvent(QResizeEvent* e)
+{
+ widget()->update();
+}
+
+ void
+OpenLook::activeChange()
+{
+ widget()->repaint();
+}
+
+ KDecoration::Position
+OpenLook::mousePosition(const QPoint & p) const
+{
+ if (topLeftRect().contains(p))
+ return PositionTopLeft;
+ else if (topRightRect().contains(p))
+ return PositionTopRight;
+ else if (bottomLeftRect().contains(p))
+ return PositionBottomLeft;
+ else if (bottomRightRect().contains(p))
+ return PositionBottomRight;
+ else
+ return PositionCenter;
+}
+
+ void
+OpenLook::iconChange()
+{
+}
+
+ void
+OpenLook::desktopChange()
+{
+}
+
+ void
+OpenLook::maximizeChange()
+{
+ widget()->repaint(false);
+}
+
+ void
+OpenLook::doLayout()
+{
+ QVBoxLayout * layout = new QVBoxLayout(widget(), openLookMargin);
+
+ titleSpacer_ =
+ new QSpacerItem
+ (
+ 0,
+ titleHeight,
+ QSizePolicy::Expanding,
+ QSizePolicy::Fixed
+ );
+
+ layout->addItem(titleSpacer_);
+
+ layout->addSpacing(2);
+
+ QBoxLayout * midLayout =
+ new QBoxLayout(layout, QBoxLayout::LeftToRight, 0, 0);
+
+ if (isPreview()) {
+ midLayout->addWidget(new QLabel(
+ i18n("<center><b>OpenLook preview</b></center>"),
+ widget()),
+ 1);
+ } else {
+ midLayout->addItem( new QSpacerItem( 0, 0 ));
+ }
+
+}
+
+ bool
+OpenLook::animateMinimize(bool /*iconify*/)
+{
+#if 0
+ QRect icongeom(iconGeometry());
+
+ if (!icongeom.isValid())
+ return false;
+
+ QRect wingeom(geometry());
+
+ QPainter p(workspaceWidget());
+
+ p.setRasterOp(Qt::NotROP);
+
+#if 0
+ if (iconify)
+ p.setClipRegion(
+ QRegion(workspace()->desktopWidget()->rect()) - wingeom
+ );
+#endif
+
+ for (uint count = 0; count < 4; count++)
+ {
+ grabXServer();
+
+ p.drawLine(wingeom.bottomRight(), icongeom.bottomRight());
+ p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft());
+ p.drawLine(wingeom.topLeft(), icongeom.topLeft());
+ p.drawLine(wingeom.topRight(), icongeom.topRight());
+
+ p.flush();
+
+ kapp->syncX();
+
+ usleep(10000);
+
+ p.drawLine(wingeom.bottomRight(), icongeom.bottomRight());
+ p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft());
+ p.drawLine(wingeom.topLeft(), icongeom.topLeft());
+ p.drawLine(wingeom.topRight(), icongeom.topRight());
+
+ p.flush();
+
+ kapp->syncX();
+
+ usleep(10000);
+
+ ungrabXServer();
+ }
+#endif
+ return true;
+}
+
+ QRect
+OpenLook::topLeftRect() const
+{
+ return QRect
+ (
+ 0,
+ 0,
+ openLookCornerSize,
+ openLookCornerSize
+ );
+}
+
+ QRect
+OpenLook::topRightRect() const
+{
+ return QRect
+ (
+ width() - openLookCornerSize,
+ 0,
+ openLookCornerSize,
+ openLookCornerSize
+ );
+}
+
+ QRect
+OpenLook::bottomLeftRect() const
+{
+ return QRect
+ (
+ 0,
+ height() - openLookCornerSize,
+ openLookCornerSize,
+ openLookCornerSize
+ );
+}
+
+ QRect
+OpenLook::bottomRightRect() const
+{
+ return QRect
+ (
+ width() - openLookCornerSize,
+ height() - openLookCornerSize,
+ openLookCornerSize,
+ openLookCornerSize
+ );
+}
+
+ void
+OpenLook::paintTopLeftRect(QPainter & p) const
+{
+ QColor handleColour(options()->color(KDecoration::ColorHandle, isActive()));
+
+ QRect r(topLeftRect());
+
+ int x1(r.left());
+ int y1(r.top());
+ int x2(r.right());
+ int y2(r.bottom());
+
+ p.setPen(widget()->colorGroup().light());
+
+ p.drawLine(x1, y1, x2, y1);
+ p.drawLine(x1, y1 + 1, x1, y2);
+
+ p.fillRect(x1 + 1, y1 + 1, r.width()-2, openLookMargin-2, handleColour);
+ p.fillRect(x1 + 1, y1 + 1, openLookMargin-2, r.height()-2, handleColour);
+
+ p.setPen(widget()->colorGroup().dark());
+
+ p.drawLine(x2, y1 + 1, x2, y1 + openLookMargin-1);
+
+ p.drawLine(x1 + openLookMargin-1, y1 + openLookMargin-1, x2 - 1, y1 + openLookMargin-1);
+
+ p.drawLine(x1 + openLookMargin-1, y1 + openLookMargin, x1 + openLookMargin-1, y2 - 1);
+
+ p.drawLine(x1 + 1, y2, x1 + openLookMargin-1, y2);
+}
+
+ void
+OpenLook::paintTopRightRect(QPainter & p) const
+{
+ QColor handleColour(options()->color(KDecoration::ColorHandle, isActive()));
+
+ QRect r(topRightRect());
+
+ int x1(r.left());
+ int y1(r.top());
+ int x2(r.right());
+ int y2(r.bottom());
+
+ p.setPen(widget()->colorGroup().light());
+
+ p.drawLine(x1, y1, x2, y1);
+ p.drawLine(x1, y1 + 1, x1, y1 + openLookMargin-1);
+ p.drawLine(x2 - openLookMargin+1, y1 + openLookMargin, x2 - openLookMargin+1, y2);
+
+ p.fillRect(x1 + 1, y1 + 1, r.width()-2, openLookMargin-2, handleColour);
+ p.fillRect(x2 - openLookMargin + 2, y1 + 1, openLookMargin-2, r.height()-2, handleColour);
+
+ p.setPen(widget()->colorGroup().dark());
+
+ p.drawLine(x1 + 1, y1 + openLookMargin-1, x2 - openLookMargin+1, y1 + openLookMargin-1);
+ p.drawLine(x2, y1 + 1, x2, y2);
+ p.drawLine(x2 - openLookMargin+1, y2, x2 - 1, y2);
+}
+
+ void
+OpenLook::paintBottomLeftRect(QPainter & p) const
+{
+ QColor handleColour(options()->color(KDecoration::ColorHandle, isActive()));
+
+ QRect r(bottomLeftRect());
+
+ int x1(r.left());
+ int y1(r.top());
+ int x2(r.right());
+ int y2(r.bottom());
+
+ p.setPen(widget()->colorGroup().light());
+
+ p.drawLine(x1, y1, x1 + openLookMargin-1, y1);
+ p.drawLine(x1, y1 + 1, x1, y2);
+ p.drawLine(x1 + openLookMargin, y2 - openLookMargin+1, x2, y2 - openLookMargin+1);
+
+ p.fillRect(x1 + 1, y2 - openLookMargin + 2, r.width()-2, openLookMargin-2, handleColour);
+ p.fillRect(x1 + 1, y1 + 1, openLookMargin-2, r.height()-2, handleColour);
+
+ p.setPen(widget()->colorGroup().dark());
+
+ p.drawLine(x1 + openLookMargin-1, y1 + 1, x1 + openLookMargin-1, y2 - openLookMargin);
+ p.drawLine(x1 + 1, y2, x2, y2);
+ p.drawLine(x2, y2 - openLookMargin+2, x2, y2 - 1);
+}
+
+ void
+OpenLook::paintBottomRightRect(QPainter & p) const
+{
+ QColor handleColour(options()->color(KDecoration::ColorHandle, isActive()));
+
+ QRect r(bottomRightRect());
+
+ int x1(r.left());
+ int y1(r.top());
+ int x2(r.right());
+ int y2(r.bottom());
+
+ p.setPen(widget()->colorGroup().light());
+
+ p.drawLine(x1, y2 - openLookMargin+1, x1, y2);
+ p.drawLine(x1 + 1, y2 - openLookMargin+1, x2 - openLookMargin+1, y2 - openLookMargin+1);
+ p.drawLine(x2 - openLookMargin+1, y1 + 1, x2 - openLookMargin+1, y2 - openLookMargin);
+ p.drawLine(x2 - openLookMargin+1, y1, x2, y1);
+
+ p.fillRect(x1 + 1, y2 - openLookMargin + 2, r.width()-2, openLookMargin-2, handleColour);
+ p.fillRect(x2 - openLookMargin + 2, y1 + 1, openLookMargin-2, r.height()-2, handleColour);
+
+ p.setPen(widget()->colorGroup().dark());
+
+ p.drawLine(x1 + 1, y2, x2, y2);
+ p.drawLine(x2, y1 + 1, x2, y2 - 1);
+}
+
+ QRect
+OpenLook::buttonRect() const
+{
+ return QRect
+ (
+ openLookCornerSize + 3,
+ titleRect().top(),
+ titleRect().height(),
+ titleRect().height()
+ );
+}
+
+ void
+OpenLook::paintButton(QPainter & p) const
+{
+ QRect r(buttonRect());
+
+ p.fillRect
+ (
+ r.left() + 1,
+ r.top() + 1,
+ r.width() - 2,
+ r.height() - 2,
+ buttonDown_
+ ? widget()->colorGroup().dark()
+ : options()->color(KDecoration::ColorButtonBg, isActive())
+ );
+
+ p.setPen(buttonDown_ ? widget()->colorGroup().dark() : widget()->colorGroup().light());
+
+ p.drawLine(r.left() + 1, r.top(), r.right() - 1, r.top());
+ p.drawLine(r.left(), r.top() + 1, r.left(), r.bottom() - 1);
+
+ p.setPen(buttonDown_ ? widget()->colorGroup().light() : widget()->colorGroup().dark());
+
+ p.drawLine(r.right(), r.top() + 1, r.right(), r.bottom() - 1);
+ p.drawLine(r.left() + 1, r.bottom(), r.right() - 1, r.bottom());
+
+ paintArrow(p);
+}
+
+ void
+OpenLook::paintArrow(QPainter & p) const
+{
+ QRect br(buttonRect());
+
+ int x = br.left() + 5;
+ int y = br.top() + 5;
+ int w = br.width() - 10;
+ int h = br.height() - 10;
+
+ QPointArray poly(3);
+
+ p.setBrush(widget()->colorGroup().mid());
+
+ poly.setPoint(0, x, y);
+ poly.setPoint(1, x + w - 1, y);
+ poly.setPoint(2, x + (w / 2), y + h - 1);
+
+ p.drawPolygon(poly);
+
+ p.setPen(widget()->colorGroup().dark());
+
+ p.drawLine(x, y, x + w - 1, y);
+
+ p.drawLine(x, y, x + (w / 2), y + h - 1);
+
+ p.setPen(widget()->colorGroup().light());
+
+ p.drawLine(x + (w / 2), y + h - 1, x + w - 1, y);
+}
+
+ void
+OpenLook::paintBorder(QPainter & p) const
+{
+ const uint cs(openLookCornerSize);
+
+ uint x = widget()->rect().left();
+ uint y = widget()->rect().top();
+ uint w = widget()->rect().width();
+ uint h = widget()->rect().height();
+ uint r = widget()->rect().right();
+ uint b = widget()->rect().bottom();
+
+ p.fillRect(x + cs, y, w - cs - cs, 2, widget()->colorGroup().shadow());
+ p.fillRect(x + cs, b - 1, w - cs - cs, 2, widget()->colorGroup().shadow());
+ p.fillRect(x, y + cs, 2, h - cs - cs, widget()->colorGroup().shadow());
+ p.fillRect(r - 1, y + cs, 2, h - cs - cs, widget()->colorGroup().shadow());
+
+ QColor frameColour(options()->color(KDecoration::ColorFrame, isActive()));
+
+ p.fillRect(x + cs, y + 2, w - cs - cs, openLookMargin-2, frameColour);
+ p.fillRect(x + cs, b - openLookMargin + 1, w - cs - cs, openLookMargin-2, frameColour);
+ p.fillRect(x + 2, y + cs, openLookMargin-2, h - cs - cs, frameColour);
+ p.fillRect(r - openLookMargin + 1, y + cs, openLookMargin-2, h - cs - cs, frameColour);
+
+ p.fillRect
+ (
+ openLookMargin,
+ titleRect().bottom() + 1,
+ width() - 2 * openLookMargin,
+ 2,
+ widget()->colorGroup().background()
+ );
+}
+
+ QRect
+OpenLook::titleRect() const
+{
+ return titleSpacer_->geometry();
+}
+
+ bool
+OpenLook::isButtonPress(QMouseEvent * e)
+{
+ mousePressPoint_ = e->pos();
+
+ buttonDown_ = buttonRect().contains(mousePressPoint_);
+
+ widget()->repaint(buttonRect());
+ return buttonDown_;
+}
+
+ bool
+OpenLook::isButtonRelease(QMouseEvent * e)
+{
+ if (buttonDown_ && buttonRect().contains(e->pos()))
+ {
+ minimize();
+ return true;
+ }
+ buttonDown_ = false;
+ widget()->repaint(buttonRect());
+
+ return false;
+}
+
+}
+
+#include "OpenLook.moc"
+// vim:ts=2:sw=2:tw=78:set et:
diff --git a/kwin-styles/openlook/OpenLook.h b/kwin-styles/openlook/OpenLook.h
new file mode 100644
index 00000000..698dec4d
--- /dev/null
+++ b/kwin-styles/openlook/OpenLook.h
@@ -0,0 +1,115 @@
+/*
+ 'OpenLook' kwin client
+
+ Porting to kde3.2 API
+ Copyright 2003 Luciano Montanaro <mikelima@cirulla.net>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef KWIN_WEB_H
+#define KWIN_WEB_H
+
+#include <qptrlist.h>
+#include <qbutton.h>
+
+#include <kdecoration.h>
+#include <kdecorationfactory.h>
+
+class QSpacerItem;
+
+namespace OpenLook
+{
+ class OpenLookButton;
+
+ class OpenLook : public KDecoration
+ {
+ Q_OBJECT
+ public:
+
+ OpenLook(KDecorationBridge *b, KDecorationFactory *f);
+ ~OpenLook();
+ void init();
+
+ protected:
+ bool eventFilter(QObject *o, QEvent *e);
+ void resizeEvent(QResizeEvent *e);
+ void paintEvent(QPaintEvent *e);
+ void showEvent(QShowEvent *e);
+
+ virtual void captionChange();
+ void desktopChange();
+ void activeChange();
+ void shadeChange();
+ void iconChange();
+ void maximizeChange();
+ void borders(int &left, int &right, int &top, int &bottom) const;
+ QSize minimumSize() const;
+ void resize( const QSize& );
+ virtual void mouseDoubleClickEvent(QMouseEvent *);
+ virtual void wheelEvent(QWheelEvent *e);
+
+ virtual Position mousePosition(const QPoint &) const;
+ virtual bool animateMinimize(bool);
+
+ private:
+
+ void doLayout();
+
+ QRect titleRect() const;
+
+ QRect topLeftRect() const;
+ QRect topRightRect() const;
+ QRect bottomLeftRect() const;
+ QRect bottomRightRect() const;
+
+ QRect buttonRect() const;
+
+ void paintBorder(QPainter &) const;
+
+ void paintTopLeftRect(QPainter &) const;
+ void paintTopRightRect(QPainter &) const;
+ void paintBottomLeftRect(QPainter &) const;
+ void paintBottomRightRect(QPainter &) const;
+
+ void paintButton(QPainter &) const;
+ void paintArrow(QPainter &) const;
+
+ bool isButtonPress(QMouseEvent *);
+ bool isButtonRelease(QMouseEvent *);
+
+ QSpacerItem * titleSpacer_;
+ QPoint mousePressPoint_;
+ bool tool_;
+ bool buttonDown_;
+ };
+
+ class DecorationFactory: public QObject, public KDecorationFactory
+ {
+ public:
+ DecorationFactory();
+ virtual ~DecorationFactory();
+ virtual KDecoration *createDecoration(KDecorationBridge *);
+ virtual bool reset(unsigned long changed);
+ virtual bool supports( Ability ability );
+ QValueList< DecorationFactory::BorderSize > borderSizes() const;
+ };
+}
+
+#endif
+// vim:ts=2:sw=2:tw=78:set et:
diff --git a/kwin-styles/openlook/openlook.desktop b/kwin-styles/openlook/openlook.desktop
new file mode 100644
index 00000000..575a583e
--- /dev/null
+++ b/kwin-styles/openlook/openlook.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Name=OpenLook
+Name[af]=Openlook
+Name[cy]=GolwgAgored
+Name[fa]=نگاه‌باز
+Name[hi]=ओपन-लुक
+Name[lt]=Open išvaizda
+Name[lv]=AtvērtsSkats
+Name[ne]=ओपन लूक
+Name[ta]=திறந்தபார்வை
+Name[ven]=Vula wo sedza
+Name[vi]=Hình thức mở
+Name[zu]=Vula Ubone
+X-KDE-Library=kwin3_openlook