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.
299 lines
8.3 KiB
299 lines
8.3 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
// polyester.h
|
|
// -------------------
|
|
// Polyester window decoration for KDE
|
|
// Copyright (c) 2005 Marco Martin <notmart@gmail.com>
|
|
// -------------------
|
|
// derived from Smooth Blend
|
|
// Copyright (c) 2005 Ryan Nickell <p0z3r@users.sourceforge.net>
|
|
// -------------------
|
|
// Shadow engine from Plastik decoration
|
|
// Copyright (C) 2003 Sandro Giessl <ceebx@users.sourceforge.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; if not, write to the
|
|
// Free Software Foundation, Inc.,
|
|
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef polyester_H
|
|
#define polyester_H
|
|
|
|
#include <tqbutton.h>
|
|
#include <kdecoration.h>
|
|
#include <kdecorationfactory.h>
|
|
|
|
#define TITLEBAR_GLASS 1
|
|
|
|
#define BUTTON_GRADIENT 0
|
|
#define BUTTON_GLASS 1
|
|
#define BUTTON_REVGRADIENT 2
|
|
#define BUTTON_FLAT 3
|
|
|
|
class TQSpacerItem;
|
|
class TQPoint;
|
|
|
|
namespace polyester {
|
|
|
|
class polyesterClient;
|
|
|
|
enum ButtonType {
|
|
ButtonHelp=0,
|
|
ButtonMax,
|
|
ButtonMin,
|
|
ButtonClose,
|
|
ButtonMenu,
|
|
ButtonSticky,
|
|
ButtonAbove,
|
|
ButtonBelow,
|
|
ButtonShade,
|
|
ButtonTypeCount
|
|
};
|
|
|
|
// polyesterFactory /////////////////////////////////////////////////////////
|
|
//
|
|
// add variables and flags for config like...
|
|
//
|
|
// public: type function()
|
|
// private: type var_
|
|
// inline type function(){ return var_ };
|
|
//
|
|
|
|
class polyesterFactory: public KDecorationFactory {
|
|
public:
|
|
polyesterFactory();
|
|
virtual ~polyesterFactory();
|
|
virtual KDecoration *createDecoration(KDecorationBridge *b);
|
|
virtual bool reset(unsigned long changed);
|
|
static bool initialized();
|
|
static TQt::AlignmentFlags titleAlign();
|
|
static int contrast();
|
|
static bool roundedCorners();
|
|
static int titleSize();
|
|
static int buttonSize();
|
|
static bool squareButton();
|
|
static int frameSize();
|
|
static int roundSize();
|
|
static TQFont titleFontTool() { return m_titleFontTool; }
|
|
static bool titleShadow();
|
|
static int titleBarStyle() { return titleBarStyle_;}
|
|
static int buttonStyle() { return buttonStyle_;}
|
|
static bool animateButtons() { return animatebuttons; }
|
|
static bool noModalButtons() { return nomodalbuttons; }
|
|
static bool lightBorder() { return lightBorder_; }
|
|
static int getBtnComboBox() { return btnComboBox; }
|
|
static bool menuClosed() { return menuClose; }
|
|
|
|
private:
|
|
bool readConfig();
|
|
|
|
private:
|
|
static bool initialized_;
|
|
static TQt::AlignmentFlags titlealign_;
|
|
static int contrast_;
|
|
static bool cornerflags_;
|
|
static int titlesize_;
|
|
static int buttonsize_;
|
|
static bool squareButton_;
|
|
static bool lightBorder_;
|
|
static int framesize_;
|
|
static int titleBarStyle_;
|
|
static int buttonStyle_;
|
|
static int roundsize_;
|
|
static TQFont m_titleFontTool;
|
|
static bool titleshadow_;
|
|
static bool animatebuttons;
|
|
static bool nomodalbuttons;
|
|
static int btnComboBox;
|
|
static bool menuClose;
|
|
};
|
|
|
|
inline bool polyesterFactory::initialized() {
|
|
return initialized_;
|
|
}
|
|
inline TQt::AlignmentFlags polyesterFactory::titleAlign() {
|
|
return titlealign_;
|
|
}
|
|
|
|
inline int polyesterFactory::contrast(){
|
|
return contrast_;
|
|
}
|
|
|
|
inline bool polyesterFactory::roundedCorners() {
|
|
return cornerflags_;
|
|
}
|
|
inline int polyesterFactory::titleSize() {
|
|
return titlesize_;
|
|
};
|
|
inline int polyesterFactory::buttonSize() {
|
|
return buttonsize_;
|
|
};
|
|
inline bool polyesterFactory::squareButton() {
|
|
return squareButton_;
|
|
};
|
|
inline int polyesterFactory::frameSize() {
|
|
return framesize_;
|
|
};
|
|
inline int polyesterFactory::roundSize() {
|
|
return roundsize_;
|
|
};
|
|
inline bool polyesterFactory::titleShadow() {
|
|
return titleshadow_;
|
|
};
|
|
|
|
// polyesterButton //////////////////////////////////////////////////////////
|
|
|
|
class polyesterButton : public TQButton {
|
|
TQ_OBJECT
|
|
public:
|
|
polyesterButton(polyesterClient *parent=0, const char *name=0,
|
|
const TQString &tip=NULL,
|
|
ButtonType type=ButtonHelp,
|
|
int button_size=18,
|
|
bool squareButton = true,
|
|
bool toggle=false);
|
|
//const unsigned char *bitmap=0);
|
|
~polyesterButton();
|
|
|
|
void setBitmap(const unsigned char *bitmap);
|
|
TQSize sizeHint() const;
|
|
ButtonState lastMousePress() const;
|
|
void reset();
|
|
TQImage getButtonImage(ButtonType type);
|
|
virtual void setOn(bool on);
|
|
virtual void setDown(bool on);
|
|
|
|
protected slots:
|
|
void animate();
|
|
void buttonClicked();
|
|
void buttonReleased();
|
|
|
|
private:
|
|
void enterEvent(TQEvent *e);
|
|
void leaveEvent(TQEvent *e);
|
|
void mousePressEvent(TQMouseEvent *e);
|
|
void mouseReleaseEvent(TQMouseEvent *e);
|
|
void drawButton(TQPainter *painter);
|
|
void genButtonPix( bool active );
|
|
|
|
private:
|
|
polyesterClient *client_;
|
|
ButtonType type_;
|
|
int size_;
|
|
double buttonProportions_;
|
|
TQBitmap *deco_;
|
|
TQPixmap *pixmap[2][4];
|
|
TQImage *buttonImgActive;
|
|
TQImage *buttonImgInactive;
|
|
ButtonState lastmouse_;
|
|
bool buttonImgActive_created;
|
|
bool buttonImgInactive_created;
|
|
bool hover_;
|
|
bool m_clicked;
|
|
TQTimer *animTmr;
|
|
uint animProgress;
|
|
};
|
|
|
|
inline TQt::ButtonState polyesterButton::lastMousePress() const {
|
|
return lastmouse_;
|
|
}
|
|
inline void polyesterButton::reset() {
|
|
repaint(false);
|
|
}
|
|
|
|
// polyesterClient //////////////////////////////////////////////////////////
|
|
|
|
class polyesterClient : public KDecoration {
|
|
TQ_OBJECT
|
|
public:
|
|
polyesterClient(KDecorationBridge *b, KDecorationFactory *f);
|
|
virtual ~polyesterClient();
|
|
|
|
virtual void init();
|
|
|
|
virtual void activeChange();
|
|
virtual void desktopChange();
|
|
virtual void captionChange();
|
|
virtual void iconChange();
|
|
virtual void maximizeChange();
|
|
virtual void shadeChange();
|
|
|
|
|
|
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;
|
|
|
|
TQPixmap getTitleBarTile(bool active) const
|
|
{
|
|
return active ? *aTitleBarTile : *iTitleBarTile;
|
|
}
|
|
|
|
private:
|
|
void addButtons(TQBoxLayout* layout, const TQString& buttons, int buttonSize = 18);
|
|
bool eventFilter(TQObject *obj, TQEvent *e);
|
|
void mouseDoubleClickEvent(TQMouseEvent *e);
|
|
void wheelEvent(TQWheelEvent *e);
|
|
void paintEvent(TQPaintEvent *e);
|
|
void resizeEvent(TQResizeEvent *);
|
|
void showEvent(TQShowEvent *);
|
|
void updateMask();
|
|
void _resetLayout();
|
|
int frameSize, titleSize, buttonSize;
|
|
bool roundedCorners;
|
|
|
|
TQVBoxLayout *mainLayout_;
|
|
TQHBoxLayout *titleLayout_;
|
|
TQSpacerItem *topSpacer_,
|
|
*titleSpacer_,
|
|
*leftTitleSpacer_, *rightTitleSpacer_,
|
|
*decoSpacer_,
|
|
*leftSpacer_, *rightSpacer_,
|
|
*bottomSpacer_, *windowSpacer_;
|
|
TQPixmap *aCaptionBuffer, *iCaptionBuffer;
|
|
|
|
private slots:
|
|
void maxButtonPressed();
|
|
void menuButtonPressed();
|
|
void menuButtonReleased();
|
|
void aboveButtonPressed();
|
|
void belowButtonPressed();
|
|
void shadeButtonPressed();
|
|
void keepAboveChange(bool);
|
|
void keepBelowChange(bool);
|
|
|
|
signals:
|
|
void keepAboveChanged(bool);
|
|
void keepBelowChanged(bool);
|
|
|
|
private:
|
|
TQPixmap *aTitleBarTile, *iTitleBarTile, *aTitleBarTopTile, *iTitleBarTopTile;
|
|
polyesterButton *button[ButtonTypeCount];
|
|
TQSpacerItem *titlebar_;
|
|
bool pixmaps_created;
|
|
bool closing;
|
|
int s_titleHeight;
|
|
TQFont s_titleFont;
|
|
int handlebar;
|
|
bool maskDirty, aDoubleBufferDirty, iDoubleBufferDirty;
|
|
TQPixmap activeBuff, inactiveBuff;
|
|
|
|
void create_pixmaps();
|
|
void delete_pixmaps();
|
|
};
|
|
|
|
} // namespace polyester
|
|
|
|
#endif // polyester_H
|