diff options
Diffstat (limited to 'twin-styles/icewm/icewm.h')
-rw-r--r-- | twin-styles/icewm/icewm.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/twin-styles/icewm/icewm.h b/twin-styles/icewm/icewm.h new file mode 100644 index 00000000..f343912c --- /dev/null +++ b/twin-styles/icewm/icewm.h @@ -0,0 +1,193 @@ +/* + $Id$ + + Gallium-IceWM themeable KWin client + + Copyright 2001 + Karol Szwed <gallium@kde.org> + http://gallium.n3.net/ + + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + ----------------------------------------------------------------------------- + This client loads most icewm 1.0.X pixmap themes, without taking into account + specific font settings for clients, or coloured mouse cursors. Titlebar + fonts can be changed via the kde control center. Bi-colour mouse cursors + may be added in future if requested by users, as well as theme font support. + Any styles using inbuilt icewm titlebar drawing without using pixmaps (e.g. + Warp4, win95 etc.) are not fully supported, and may cause drawing errors, + as these themes use in-built icewm drawing mechanisms. + + When a pixmap theme is not present (or a corrupt one is present) then very + plain title decorations are painted instead, so that users don't see + non-painted window areas where possible ;) + + At a later date, frame shaping may be added if really requested, and an + update to support the latest icewm 1.1.X theme format may be made. +*/ + +#ifndef __KDEGALLIUM_ICEWM_H +#define __KDEGALLIUM_ICEWM_H + +#include <tqbutton.h> +#include <tqlayout.h> +#include <kpixmap.h> +#include <kdecoration.h> +#include <kdecorationfactory.h> +#include <tqbutton.h> +class TQLabel; +class TQSpacerItem; +class TQBoxLayout; +class TQGridLayout; + +namespace IceWM { + +class IceWMClient; + +// Pixmap group +enum { InActive=0, Active }; +// Pixmap stretching mode +enum { Vertical=0, Horizontal=1 }; + + +// Handles the resetClients() signal from the Options class, +// and manages the dynamic pixmaps, configuration and theme changing +class ThemeHandler: public KDecorationFactory +{ + public: + ThemeHandler(); + ~ThemeHandler(); + + virtual KDecoration* createDecoration( KDecorationBridge* ); + virtual bool reset( unsigned long changed ); + virtual bool supports( Ability ability ); + + private: + bool initialized; + TQString themeName; + + void readConfig(); + TQColor decodeColor( TQString& s ); + bool isFrameValid(); + void initTheme(); + void freePixmaps(); + void freePixmapGroup( TQPixmap* p[] ); + void setPixmap( TQPixmap* p[], TQString s1, TQString s2, bool + stretch=false, bool stretchHoriz=true ); + void setPixmapButton( TQPixmap* p[], TQString s1, TQString s2); + TQPixmap* stretchPixmap( TQPixmap* src, bool stretchHoriz=true, + int stretchSize=-1); + TQPixmap* duplicateValidPixmap( bool act, int size = -1 ); + void convertButtons( TQString& s ); + TQString reverseString( TQString s ); +}; + + +class IceWMButton : public TQButton +{ + public: + IceWMButton( IceWMClient *parent=0, const char *name=0, + TQPixmap* (*p)[2]=0L, bool isToggle=false, + const TQString& tip=NULL, const int realizeBtns = Qt::LeftButton ); + void setTipText(const TQString &tip); + void usePixmap( TQPixmap* (*p)[2] ); + TQSize tqsizeHint() const; + void turnOn( bool isOn ); + ButtonState last_button; + + protected: + void mousePressEvent( TQMouseEvent* e ); + void mouseReleaseEvent( TQMouseEvent* e ); + + void drawButton( TQPainter *p ); + void drawButtonLabel( TQPainter * ) {;} + + private: + int m_realizeButtons; + IceWMClient* client; + TQPixmap* (*pix)[2]; // Points to active/inactive pixmap array +}; + + +class IceWMClient : public KDecoration +{ + Q_OBJECT + TQ_OBJECT + public: + IceWMClient( KDecorationBridge* bridge, KDecorationFactory* factory ); + ~IceWMClient(); + + virtual void init(); + virtual void resize(const TQSize&); + virtual bool eventFilter( TQObject* o, TQEvent* e ); + + protected: + void resizeEvent( TQResizeEvent* ); + void paintEvent( TQPaintEvent* ); + void showEvent( TQShowEvent* ); + void mouseDoubleClickEvent( TQMouseEvent * ); + void wheelEvent( TQWheelEvent * ); + virtual void captionChange(); + virtual void maximizeChange(); + virtual void shadeChange(); + virtual void activeChange(); + // void shadeChange(bool); /* KWin Client class doesn't provide this yet */ + Position mousePosition( const TQPoint& ) const; + void renderMenuIcons(); + void iconChange(); + virtual void desktopChange( ); + virtual void borders(int&, int&, int&, int&) const; + virtual TQSize tqminimumSize() const; + + protected slots: + void slotMaximize(); + void menuButtonPressed(); + void menuButtonReleased(); + void toggleShade(); + + private: + // These are all the icewm button types :) + enum Buttons{ BtnSysMenu=0, BtnClose, BtnMaximize, BtnMinimize, + BtnHide, BtnRollup, BtnDepth, BtnCount }; + + TQString shortenCaption( const TQString* s ); + void calcHiddenButtons(); + int titleTextWidth( const TQString& s ); + void addClientButtons( const TQString& s ); + TQSpacerItem* addPixmapSpacer( TQPixmap* p[], + TQSizePolicy::SizeType = TQSizePolicy::Maximum, int hsize = -1 ); + + IceWMButton* button[ IceWMClient::BtnCount ]; + TQPixmap* menuButtonWithIconPix[2]; + TQSpacerItem* titleSpacerJ; + TQSpacerItem* titleSpacerL; + TQSpacerItem* titleSpacerS; + TQSpacerItem* titleSpacerP; + TQSpacerItem* titlebar; + TQSpacerItem* titleSpacerM; + TQSpacerItem* titleSpacerB; + TQSpacerItem* titleSpacerR; + TQSpacerItem* titleSpacerQ; + TQBoxLayout* hb; + TQGridLayout* grid; + bool m_closing; +}; + +} + +#endif + +// vim: ts=4 |