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.
tde-style-baghira/deco/baghiraclient.h

446 lines
12 KiB

//////////////////////////////////////////////////////////////////////////////
// baghiraclient.h
// -------------------
// Baghira window decoration for KDE
// -------------------
// Copyright (c) 2004, 2005 Thomas Lübking
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//////////////////////////////////////////////////////////////////////////////
#ifndef BAGHIRACLIENT_H
#define BAGHIRACLIENT_H
#include <tqcolor.h>
#include <tqbutton.h>
#include <kdecoration.h>
#include <kdecorationfactory.h>
#include <kpixmap.h>
#include <tdeversion.h>
/*
#define BUTTONSIZE 15;
#define MENUBUTTONWIDTH 20;
#define DECOSIZE 8;
#define TITLESIZESMALL 18;
#define MARGIN 4;*/
class TQSpacerItem;
class TQPoint;
class TQBitmap;
class KWinModule;
namespace Baghira {
enum PixmapType {
TitleBar = 0,
TitleCenter,
PixmapTypeCount
};
enum ColorType {
ColorTitleBar=0,
ColorTitleBlend,
ColorTypeCount
};
enum ButtonType{
MinButton = 0,
MaxButton,
CloseButton,
StickyButton,
ShadeButton,
AboveBelowButton,
MenuButton,
HelpButton,
ButtonTypeAmount,
InactiveButton = ButtonTypeAmount
};
enum ButtonStyle{
Panther = 0,
Jaguar,
Milk,
NostalgiaButton
};
enum ButtonState{
ButtonInactive,
ButtonActive,
Hovered,
Pressed,
ButtonStateAmount
};
enum WindowState{
WindowInactive,
WindowActive,
WindowStateAmount
};
enum TitlebarType{
Gradient,
Stipples,
Nostalgia,
Glossy,
Brushed,
FlatStipples
};
class BaghiraClient;
// #if KDE_IS_VERSION(3,3,91)
class ResizeHandle : public TQWidget
{
//#if KDE_IS_VERSION(3,3,91)
friend class BaghiraClient;
Q_OBJECT
#if KDE_IS_VERSION(3,3,91)
public:
ResizeHandle(BaghiraClient *parent);
protected:
virtual void mousePressEvent ( TQMouseEvent * );
virtual void mouseReleaseEvent ( TQMouseEvent * );
virtual void paintEvent ( TQPaintEvent * );
void updateLook(bool rp = FALSE);
private:
bool eventFilter(TQObject *obj, TQEvent *e);
void shape();
BaghiraClient *client;
TQPixmap pix;
#endif
};
// #endif
class DeMaximizer : public TQWidget
{
friend class BaghiraClient;
friend class BaghiraFactory;
Q_OBJECT
public:
DeMaximizer();
void setClient(BaghiraClient *);
protected:
void mouseReleaseEvent( TQMouseEvent * e );
void mousePressEvent ( TQMouseEvent * e );
void enterEvent ( TQEvent * e );
void leaveEvent ( TQEvent * e );
void setPixmap(int i, TQImage &image);
private:
BaghiraClient *client_;
TQPixmap pixmap[5];
void setState(int i);
};
// BaghiraFactory //////////////////////////////////////////////////////////////
class BaghiraFactory: public KDecorationFactory
{
public:
BaghiraFactory();
virtual ~BaghiraFactory();
virtual KDecoration *createDecoration(KDecorationBridge *b);
virtual bool reset(unsigned long changed);
virtual TQValueList<BorderSize> borderSizes() const;
static TQPixmap &ButtonPixmap(Baghira::WindowState wState, Baghira::ButtonType type, Baghira::ButtonState state, int current, bool small);
TQImage* DecoImage(TQPixmap *pix, int x, int y, int width, int height);
static TQBitmap helpMask, jaguarDownMask, jaguarMenuDownMask,
jaguarMenuMask, jaguarMask, milkMenuDownMask,
milkMenuMask, milkMask, pantherMenuMask, pantherMask, milkDownMask, arrowUp, arrowDown;
static bool initialized();
static bool noModalDeco();
static bool delAppname();
static TQColor &color(int current, Baghira::ColorType c, bool active=true);
static KPixmap &pix(int current, PixmapType p, bool active=true, bool small=false);
static TitlebarType &effect(int current, bool active);
static ButtonStyle buttonStyle(int current);
static TQt::AlignmentFlags titleAlign();
static int borderSize(int current);
static int contrast();
static int _3DImpact(int current);
static int LineImpact(int current);
static bool bgStipple();
static bool resizeGrip();
static uint defaultMode();
static bool drawComicFrame();
static bool shapeUL(int current);
static bool shapeUR(int current);
static bool shapeLL(int current);
static bool shapeLR(int current);
static bool drawIcon(int current);
static bool showTitle();
static bool allowEasyClosing();
static bool addAutoSpacing();
static bool maxResizable();
TitlebarType titleEffect();
static DeMaximizer &deMaximizer();
static bool fullSpec();
static TQColor &BrushedMetalColor();
private:
// bool blend( const TQImage & upper, const TQImage & lower, TQImage & output);
unsigned long readConfig();
void createPixmaps();
void createGradient(KPixmap &pix, const TQColor &light, const TQColor &dark, Baghira::TitlebarType effect);
void createOS8Buttons(int style);
TQString indexedString(TQString s, int index);
TQImage* tintBrush( const TQImage &img, const TQColor &c ) const;
TQImage* tintGlossy(const TQImage &src, const TQColor &c ) const;
private:
static bool initialized_;
static bool noModalDeco_;
static bool delAppname_;
static bool bgStipple_;
static bool comicFrame_;
static bool resizeGrip_;
static bool shape_ul[5], shape_ur[5], shape_ll[5], shape_lr[5];
static bool allowEasyClosing_;
static bool addAutoSpacing_;
static bool maxResizable_;
static bool drawIcon_[5];
static ButtonStyle buttonStyle_[5];
static TitlebarType effect_[5][2];
static TQt::AlignmentFlags titlealign_;
static TQColor colors_[5][ColorTypeCount][2];
static KPixmap pix_[5][PixmapTypeCount][2][2];
static TQPixmap ButtonPixmap_[5][WindowStateAmount][ButtonTypeAmount][ButtonStateAmount][2];
static TQColor ButtonColor_[ButtonTypeAmount+1];
static TQColor brushedMetalColor;
static TQPixmap nostalgia_[5][3][2];
static int contrast_;
static int bordersize_[5];
static uint defaultMode_;
static int minimumTitleHeight_;
static int _3DImpact_[5];
static int LineImpact_[5];
static bool tintBrush_;
static bool showTitle_;
static TQColor brushTint;
static DeMaximizer deMaximizer_;
static bool fullSpec_;
};
inline bool BaghiraFactory::fullSpec()
{ return fullSpec_; }
inline bool BaghiraFactory::noModalDeco()
{ return noModalDeco_; }
inline bool BaghiraFactory::delAppname()
{ return delAppname_; }
inline DeMaximizer &BaghiraFactory::deMaximizer()
{ return deMaximizer_; }
inline bool BaghiraFactory::shapeUL(int current)
{ return shape_ul[current]; }
inline bool BaghiraFactory::shapeUR(int current)
{ return shape_ur[current]; }
inline bool BaghiraFactory::shapeLL(int current)
{ return shape_ll[current]; }
inline bool BaghiraFactory::shapeLR(int current)
{ return shape_lr[current]; }
inline bool BaghiraFactory::allowEasyClosing()
{ return allowEasyClosing_; }
inline bool BaghiraFactory::addAutoSpacing()
{ return addAutoSpacing_; }
inline bool BaghiraFactory::maxResizable()
{ return maxResizable_; }
inline bool BaghiraFactory::resizeGrip()
{ return resizeGrip_; }
inline uint BaghiraFactory::defaultMode()
{ return defaultMode_; }
inline bool BaghiraFactory::drawIcon(int current)
{ return drawIcon_[current]; }
inline bool BaghiraFactory::showTitle()
{ return showTitle_; }
inline int BaghiraFactory::contrast()
{ return contrast_; }
inline int BaghiraFactory::_3DImpact(int current)
{ return _3DImpact_[current]; }
inline int BaghiraFactory::LineImpact(int current)
{ return LineImpact_[current]; }
inline bool BaghiraFactory::drawComicFrame()
{ return comicFrame_; }
inline bool BaghiraFactory::bgStipple()
{ return bgStipple_; }
inline ButtonStyle BaghiraFactory::buttonStyle(int current)
{ return BaghiraFactory::buttonStyle_[current]; }
inline bool BaghiraFactory::initialized()
{ return initialized_; }
inline TQColor &BaghiraFactory::BrushedMetalColor()
{ return brushedMetalColor; }
inline TQColor &BaghiraFactory::color(int current, Baghira::ColorType c, bool active)
{ return colors_[current][c][active]; }
inline KPixmap &BaghiraFactory::pix(int current, PixmapType p, bool active, bool small)
{ return pix_[current][p][active][small]; }
inline Baghira::TitlebarType &BaghiraFactory::effect(int current, bool active)
{ return effect_[current][active]; }
inline TQt::AlignmentFlags BaghiraFactory::titleAlign()
{ return titlealign_; }
inline int BaghiraFactory::borderSize(int current)
{ return bordersize_[current]; }
// BaghiraButton ///////////////////////////////////////////////////////////////
class BaghiraButton : public TQButton
{
Q_OBJECT
public:
BaghiraButton(BaghiraClient *parent=0, const char *name=0, const TQString &tip=NULL, bool small=false, ButtonType type=MinButton, int style=0);
~BaghiraButton();
TQSize sizeHint() const;
int lastMousePress() const;
void reset();
inline void setMasks(TQBitmap *bitmask, TQBitmap *bitmaskDown);
Baghira::ButtonState state();
inline void setType(Baghira::ButtonType type)
{type_ = type; }
TQBitmap *mask;
TQBitmap *maskDown;
private:
void enterEvent(TQEvent *e);
void leaveEvent(TQEvent *e);
void mousePressEvent(TQMouseEvent *e);
void mouseReleaseEvent(TQMouseEvent *e);
void drawButton(TQPainter *painter);
private slots:
void delayedEnterEvent();
private:
bool _blocked;
BaghiraClient *client_;
ButtonType type_;
TQBitmap *deco_;
TQPixmap *pixmap[2][5];
KPixmap icon_;
bool small_;
int lastmouse_;
bool mouseover_;
bool down_;
};
inline int BaghiraButton::lastMousePress() const
{ return lastmouse_; }
inline void BaghiraButton::reset()
{ repaint(false); }
// BaghiraClient ///////////////////////////////////////////////////////////////
class BaghiraClient : public KDecoration
{
friend class BaghiraButton;
friend class ResizeHandle;
Q_OBJECT
public:
BaghiraClient(KDecorationBridge *b, KDecorationFactory *f);
virtual ~BaghiraClient();
virtual void init();
TQString caption() const;
virtual void activeChange();
virtual void desktopChange();
virtual void captionChange();
virtual void iconChange();
virtual void maximizeChange();
virtual void shadeChange();
void demaxButtonPressed();
virtual void borders(int &l, int &r, int &t, int &b) const;
virtual void resize(const TQSize &size);
virtual TQSize minimumSize() const;
virtual Position mousePosition(const TQPoint &point) const;
uint currentStyle;
signals:
void hide();
protected:
bool isTool() const;
int titleheight_;
private:
void addButtons(TQBoxLayout* layout, const TQString& buttons);
bool eventFilter(TQObject *obj, TQEvent *e);
void mouseDoubleClickEvent(TQMouseEvent *e);
void wheelEvent(TQWheelEvent *e);
void paintEvent(TQPaintEvent *);
void resizeEvent(TQResizeEvent *);
void showEvent(TQShowEvent *);
private slots:
void doShape();
void maxButtonPressed();
void menuButtonPressed();
void aboveBelowButtonPressed();
void shadeButtonPressed();
private:
BaghiraButton *button[ButtonTypeAmount];
TQSpacerItem *titlebar_;
TQPixmap HandlePix;
int excursion; // skewness because of unequality of left/right buttons - bad for center aligned titles...
int plusminus;
bool isFaded;
bool leftClose;
bool rightClose;
bool performEasyClose;
bool noDeco_;
TQHBoxLayout *windowlayout;
int ICONX, ICONY;
ResizeHandle *grip;
TQString caption_;
};
} // namespace Baghira
#endif // BAGHIRACLIENT_H