From 8d8081142f19cf697c4a1fe044add4e2db9a36b2 Mon Sep 17 00:00:00 2001 From: sandman Date: Sun, 30 Jun 2002 20:34:40 +0000 Subject: ew feature - when liquid is active a new window decoration is set (this deco is inspired by the classic KDE liquid kwin style) --- 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 @@ -10,6 +10,7 @@ #include #include "liquid.h" +#include "liquiddeco.h" #include #include #include "effects.h" @@ -987,6 +988,8 @@ void LiquidStyle::polish(QApplication *app) app->setEffectEnabled(UI_FadeMenu, false); qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); + + QApplication::qwsSetDecoration ( new LiquidDecoration ( )); } void LiquidStyle::unPolish(QApplication *app) @@ -996,6 +999,8 @@ void LiquidStyle::unPolish(QApplication *app) app->setEffectEnabled(UI_FadeMenu, menuFade); qt_set_draw_menu_bar_impl ( 0 ); + + QApplication::qwsSetDecoration ( new QPEDecoration ( )); } /* 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,10 +1,12 @@ 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 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liquiddeco.h" + +#include + +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 + + +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__ -- cgit v0.9.0.2