-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 @@ -1,28 +1,29 @@ /*- * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. */ #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> #include <qpopupmenu.h> #include <qobjectlist.h> #include <qimage.h> #include <qtimer.h> #include <qpixmapcache.h> #include <qradiobutton.h> #include <qcombobox.h> #include <qdrawutil.h> #include <qwidgetlist.h> #include <qtoolbutton.h> @@ -974,41 +975,45 @@ void LiquidStyle::unPolish(QWidget *w) w->removeEventFilter(this); } } void LiquidStyle::polish(QApplication *app) { QWindowsStyle::polish(app); menuAni = app->isEffectEnabled(UI_AnimateMenu); menuFade = app->isEffectEnabled(UI_FadeMenu); 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, * QComboBox, and Panel applet handles capture mouse enter and leaves in order * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and * RadioButtons need to do this differently. Qt buffers these in pixmaps and * caches them in QPixmapCache, which is bad for doing things like hover * because the style methods aren't called in paintEvents if everything * is cached. We use our own Paint event handler instead. Taskbuttons and * pager buttons draw into a pixmap buffer, so we handle those with palette * modifications. For QHeader, different header items are actually one widget * that draws multiple items, so we need to check which ID is hightlighted * and draw it. Finally, we also check enter and leave events for QLineEdit, 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,23 +1,25 @@ 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 TRANSLATIONS = ../../../i18n/de/libliquid.ts \ ../../../i18n/en/libliquid.ts \ ../../../i18n/es/libliquid.ts \ ../../../i18n/fr/libliquid.ts \ ../../../i18n/hu/libliquid.ts \ ../../../i18n/ja/libliquid.ts \ ../../../i18n/ko/libliquid.ts \ ../../../i18n/no/libliquid.ts \ ../../../i18n/pl/libliquid.ts \ 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__ |