You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/twin/clients/keramik/keramik.h

201 lines
6.2 KiB

/*
*
* Keramik KWin client (version 0.8)
*
* Copyright (C) 2002 Fredrik H<>glund <fredrik@kde.org>
*
* 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.
*/
#ifndef __KERAMIK_H
#define __KERAMIK_H
#include <tqbutton.h>
#include <kdecoration.h>
#include <kdecorationfactory.h>
#include "tiles.h"
class TQSpacerItem;
namespace Keramik {
enum TilePixmap { TitleLeft=0, TitleCenter, TitleRight,
CaptionSmallLeft, CaptionSmallCenter, CaptionSmallRight,
CaptionLargeLeft, CaptionLargeCenter, CaptionLargeRight,
GrabBarLeft, GrabBarCenter, GrabBarRight,
BorderLeft, BorderRight, NumTiles };
enum Button { MenuButton=0, OnAllDesktopsButton, HelpButton, MinButton,
MaxButton, CloseButton, AboveButton, BelowButton, ShadeButton,
NumButtons };
enum ButtonDeco { Menu=0, OnAllDesktops, NotOnAllDesktops, Help, Minimize, Maximize,
Restore, Close, AboveOn, AboveOff, BelowOn, BelowOff, ShadeOn, ShadeOff,
NumButtonDecos };
struct SettingsCache
{
bool largeGrabBars:1;
bool smallCaptionBubbles:1;
};
class KeramikHandler : public KDecorationFactory
{
public:
KeramikHandler();
~KeramikHandler();
virtual TQValueList< BorderSize > borderSizes() const;
virtual bool reset( unsigned long changed );
virtual KDecoration* createDecoration( KDecorationBridge* );
virtual bool supports( Ability ability );
bool showAppIcons() const { return showIcons; }
bool useShadowedText() const { return shadowedText; }
bool largeCaptionBubbles() const { return !smallCaptionBubbles; }
int titleBarHeight( bool large ) const {
return ( large ? activeTiles[CaptionLargeCenter]->height()
: activeTiles[CaptionSmallCenter]->height() );
}
int grabBarHeight() const
{ return activeTiles[GrabBarCenter]->height(); }
const TQPixmap *roundButton() const { return titleButtonRound; }
const TQPixmap *squareButton() const { return titleButtonSquare; }
const TQBitmap *buttonDeco( ButtonDeco deco ) const
{ return buttonDecos[ deco ]; }
inline const TQPixmap *tile( TilePixmap tilePix, bool active ) const;
private:
void readConfig();
void createPixmaps();
void destroyPixmaps();
void addWidth (int width, TQPixmap *&pix, bool left, TQPixmap *bottomPix);
void addHeight (int height, TQPixmap *&pix);
void flip( TQPixmap *&, TQPixmap *& );
void pretile( TQPixmap *&, int, Qt::Orientation );
TQPixmap *composite( TQImage *, TQImage * );
TQImage *loadImage( const TQString &, const TQColor & );
TQPixmap *loadPixmap( const TQString &, const TQColor & );
bool showIcons:1, shadowedText:1,
smallCaptionBubbles:1, largeGrabBars:1;
SettingsCache *settings_cache;
KeramikImageDb *imageDb;
TQPixmap *activeTiles[ NumTiles ];
TQPixmap *inactiveTiles[ NumTiles ];
TQBitmap *buttonDecos[ NumButtonDecos ];
TQPixmap *titleButtonRound, *titleButtonSquare;
}; // class KeramikHandler
class KeramikClient;
class KeramikButton : public TQButton
{
public:
KeramikButton( KeramikClient *, const char *, Button, const TQString &, const int realizeBtns = Qt::LeftButton );
~KeramikButton();
ButtonState lastButton() const { return lastbutton; }
private:
void enterEvent( TQEvent * );
void leaveEvent( TQEvent * );
void mousePressEvent( TQMouseEvent * );
void mouseReleaseEvent( TQMouseEvent * );
void drawButton( TQPainter * );
private:
KeramikClient *client;
Button button;
bool hover;
ButtonState lastbutton;
int realizeButtons;
}; // class KeramikButton
class KeramikClient : public KDecoration
{
Q_OBJECT
public:
KeramikClient( KDecorationBridge* bridge, KDecorationFactory* factory );
~KeramikClient();
virtual void init();
virtual void reset( unsigned long changed );
virtual Position mousePosition( const TQPoint& p ) const;
virtual void borders( int& left, int& right, int& top, int& bottom ) const;
virtual void resize( const TQSize& s );
virtual TQSize minimumSize() const;
virtual bool eventFilter( TQObject* o, TQEvent* e );
virtual void activeChange();
virtual void captionChange();
virtual void maximizeChange();
virtual void desktopChange();
virtual void shadeChange();
private:
void createLayout();
void addButtons( TQBoxLayout*, const TQString & );
void updateMask(); // FRAME
void updateCaptionBuffer();
void iconChange();
void resizeEvent( TQResizeEvent *); // FRAME
void paintEvent( TQPaintEvent *); // FRAME
void mouseDoubleClickEvent( TQMouseEvent * ); // FRAME
void wheelEvent( TQWheelEvent *); //FRAME
int width() const { return widget()->width(); }
int height() const { return widget()->height(); }
void calculateCaptionRect();
inline bool maximizedVertical() const {
return ( maximizeMode() & MaximizeVertical );
}
bool isModalSystemNotification();
private slots:
void menuButtonPressed();
void slotMaximize();
void slotAbove();
void slotBelow();
void slotShade();
void keepAboveChange( bool );
void keepBelowChange( bool );
private:
TQSpacerItem *topSpacer, *titlebar;
KeramikButton *button[ NumButtons ];
TQRect captionRect;
TQPixmap captionBuffer;
TQPixmap *activeIcon, *inactiveIcon;
bool captionBufferDirty:1, maskDirty:1;
bool largeCaption:1, largeTitlebar:1;
}; // class KeramikClient
} // namespace Keramik
#endif // ___KERAMIK_H