author | sandman <sandman> | 2002-06-30 20:34:40 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-06-30 20:34:40 (UTC) |
commit | 8d8081142f19cf697c4a1fe044add4e2db9a36b2 (patch) (side-by-side diff) | |
tree | 200b2c26f47cb8b66652414dbc0fa5f96686cc6a | |
parent | 1c6b25945236e3d6e4dd611ec6fc6003d5f87280 (diff) | |
download | opie-8d8081142f19cf697c4a1fe044add4e2db9a36b2.zip opie-8d8081142f19cf697c4a1fe044add4e2db9a36b2.tar.gz opie-8d8081142f19cf697c4a1fe044add4e2db9a36b2.tar.bz2 |
ew feature - when liquid is active a new window decoration is set
(this deco is inspired by the classic KDE liquid kwin style)
-rw-r--r-- | noncore/styles/liquid/liquid.cpp | 5 | ||||
-rw-r--r-- | noncore/styles/liquid/liquid.pro | 2 | ||||
-rw-r--r-- | noncore/styles/liquid/liquiddeco.cpp | 183 | ||||
-rw-r--r-- | noncore/styles/liquid/liquiddeco.h | 41 |
4 files changed, 231 insertions, 0 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp index 2b6eaa4..9a7d2dd 100644 --- a/noncore/styles/liquid/liquid.cpp +++ b/noncore/styles/liquid/liquid.cpp @@ -7,12 +7,13 @@ #ifndef INCLUDE_MENUITEM_DEF #define INCLUDE_MENUITEM_DEF #endif #include <qmenudata.h> #include "liquid.h" +#include "liquiddeco.h" #include <qapplication.h> #include <qpe/config.h> #include "effects.h" #include <qpalette.h> #include <qbitmap.h> #include <qtabbar.h> @@ -984,21 +985,25 @@ void LiquidStyle::polish(QApplication *app) if(menuAni) app->setEffectEnabled(UI_AnimateMenu, false); if(menuFade) app->setEffectEnabled(UI_FadeMenu, false); qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); + + QApplication::qwsSetDecoration ( new LiquidDecoration ( )); } void LiquidStyle::unPolish(QApplication *app) { QWindowsStyle::unPolish(app); app->setEffectEnabled(UI_AnimateMenu, menuAni); app->setEffectEnabled(UI_FadeMenu, menuFade); qt_set_draw_menu_bar_impl ( 0 ); + + QApplication::qwsSetDecoration ( new QPEDecoration ( )); } /* * This is a fun method ;-) Here's an overview. KToolBar grabs resize to * force everything to erase and repaint on resize. This is going away, I'm * trying to get shaped widgets to work right without masking. QPushButton, diff --git a/noncore/styles/liquid/liquid.pro b/noncore/styles/liquid/liquid.pro index 8689d3d..23dce09 100644 --- a/noncore/styles/liquid/liquid.pro +++ b/noncore/styles/liquid/liquid.pro @@ -1,13 +1,15 @@ TEMPLATE = lib CONFIG = qt embedded release warn_on SOURCES = liquid.cpp \ + liquiddeco.cpp \ effects.cpp \ plugin.cpp HEADERS = liquid.h \ + liquiddeco.h \ effects.h LIBS += -lqpe INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(OPIEDIR)/plugins/styles TARGET = liquid VERSION = 1.0.0 diff --git a/noncore/styles/liquid/liquiddeco.cpp b/noncore/styles/liquid/liquiddeco.cpp new file mode 100644 index 0000000..8eee1b1 --- a/dev/null +++ b/noncore/styles/liquid/liquiddeco.cpp @@ -0,0 +1,183 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include <qapplication.h> +#include <qstyle.h> +#include <qwidget.h> +#include <qpainter.h> +#include <qtimer.h> +#include <qwhatsthis.h> +#include <qpe/qcopenvelope_qws.h> +#include <qpe/qpedecoration_qws.h> +#include <qdialog.h> +#include <qdrawutil.h> +#include <qgfx_qws.h> +#include <qpe/qpeapplication.h> +#include <qpe/resource.h> +#include <qpe/global.h> +#include <qfile.h> +#include <qsignal.h> + +#include "liquiddeco.h" + +#include <stdlib.h> + +extern QRect qt_maxWindowRect; + +class HackWidget : public QWidget +{ +public: + bool needsOk() + { + return ( getWState() & WState_Reserved1 ); + } +}; + + +LiquidDecoration::LiquidDecoration() + : QPEDecoration() +{} + +LiquidDecoration::~LiquidDecoration() +{} + +int LiquidDecoration::getTitleHeight( const QWidget * ) +{ + return 15; +} + + +void LiquidDecoration::paint( QPainter *painter, const QWidget *widget ) +{ + int titleWidth = getTitleWidth( widget ); + int titleHeight = getTitleHeight( widget ); + + QRect rect( widget->rect() ); + + // Border rect + QRect br( rect.left() - BORDER_WIDTH, + rect.top() - BORDER_WIDTH - titleHeight, + rect.width() + 2 * BORDER_WIDTH, + rect.height() + BORDER_WIDTH + BOTTOM_BORDER_WIDTH + titleHeight ); + + // title bar rect + QRect tr; + + tr = QRect( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); + + QRegion oldClip = painter->clipRegion(); + painter->setClipRegion( oldClip - QRegion( tr ) ); // reduce flicker + + bool isActive = ( widget == qApp->activeWindow() ); + + QColorGroup cg = QApplication::palette().active(); + if ( isActive ) + cg. setBrush ( QColorGroup::Button, cg. brush ( QColorGroup::Highlight ) ); + + qDrawWinPanel( painter, br.x(), br.y(), br.width(), + br.height() - 4, cg, FALSE, + &cg.brush( QColorGroup::Background ) ); + + painter->setClipRegion( oldClip ); + + if ( titleWidth > 0 ) { + QBrush titleBrush; + QPen titlePen; + QPen titleLines; + int titleLeft = titleHeight + 4; + + titleLeft = rect.left() + 5; + painter->setPen( cg.midlight() ); + painter->drawLine( rect.left() - BORDER_WIDTH + 2, + rect.bottom() + 1, rect.right() + BORDER_WIDTH - 2, + rect.bottom() + 1 ); + + QRect t ( rect.left() - 2, rect.top() - titleHeight - 2, rect.width() + 3, titleHeight + 2 ); + + + + QApplication::style().drawBevelButton( painter, t.x(), t.y(), t.width(), t.height(), cg, isActive ); + + t.setLeft( t.left() + 4 ); + t.setRight( t.right() - 2 ); + + QFont f( QApplication::font() ); + f.setWeight( QFont::Bold ); + + painter-> setFont( f ); + + QColor textcol = cg.color( isActive ? QColorGroup::HighlightedText : QColorGroup::Text ); + QColor shadecol = ( qGray ( textcol. rgb ( ) ) > 128 ) ? textcol. dark ( 130 ) : textcol.light( 200 ); + + if ( textcol == shadecol ) { + if ( qGray ( shadecol. rgb ( ) ) < 128 ) + shadecol = QColor ( 225, 225, 225 ); + else + shadecol = QColor ( 30, 30, 30 ); + } + + painter-> setPen( shadecol ); + painter-> drawText( t.x() + 1, t.y() + 1, t.width(), t.height(), Qt::AlignLeft | Qt::AlignVCenter | Qt::SingleLine, widget->caption() ); + painter-> setPen( textcol ); + painter-> drawText( t.x(), t.y(), t.width(), t.height(), Qt::AlignLeft | Qt::AlignVCenter | Qt::SingleLine, widget->caption() ); + } + +#ifndef MINIMIZE_HELP_HACK + paintButton( painter, widget, ( QWSDecoration::Region ) Help, 0 ); +#endif +} + +void LiquidDecoration::paintButton( QPainter *painter, const QWidget *w, + QWSDecoration::Region type, int state ) +{ + const QColorGroup & cg = w->palette().active(); + + QRect brect( region( w, w->rect(), type ).boundingRect() ); + + const QImage *img = 0; + + switch ( ( int ) type ) { + case Close: + img = &imageClose; + break; + case Minimize: + if ( ( ( HackWidget * ) w ) ->needsOk() || + ( w->inherits( "QDialog" ) && !w->inherits( "QMessageBox" ) ) ) + img = &imageOk; + else if ( helpExists ) + img = &imageHelp; + break; + case Help: + img = &imageHelp; + break; + default: + return ; + } + + if ( img ) { + if ( ( state & QWSButton::MouseOver ) && ( state & QWSButton::Clicked ) ) + painter->drawImage( brect.x() + 1, brect.y() + 3, *img ); + else + painter->drawImage( brect.x(), brect.y() + 2, *img ); + } +} + + + diff --git a/noncore/styles/liquid/liquiddeco.h b/noncore/styles/liquid/liquiddeco.h new file mode 100644 index 0000000..d975fe5 --- a/dev/null +++ b/noncore/styles/liquid/liquiddeco.h @@ -0,0 +1,41 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ +#ifndef OPIE_LIQUIDDECO_H__ +#define OPIE_LIQUIDDECO_H__ + +#include <qpe/qpedecoration_qws.h> + + +class LiquidDecoration : public QPEDecoration +{ +public: + LiquidDecoration(); + virtual ~LiquidDecoration(); + + virtual void paint(QPainter *, const QWidget *); + virtual void paintButton(QPainter *, const QWidget *, Region, int state); + +protected: + virtual int getTitleHeight(const QWidget *); +}; + + + +#endif // OPIE_LIQUIDDECO_H__ |