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.
tdeartwork/twin-styles/smooth-blend/client/smoothblend.h

257 lines
7.0 KiB

//////////////////////////////////////////////////////////////////////////////
// smoothblend.h
// -------------------
// Smooth Blend window decoration for TDE
// -------------------
// Copyright (c) 2005 Ryan Nickell <p0z3r@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; see the file COPYING. If not, write to
// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
// Boston, MA 02110-1301, USA.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef SMOOTHBLEND_H
#define SMOOTHBLEND_H
#include <tqbutton.h>
#include <kdecoration.h>
#include <kdecorationfactory.h>
class TQSpacerItem;
class TQPoint;
namespace smoothblend {
class smoothblendClient;
enum ButtonType {
ButtonHelp=0,
ButtonMax,
ButtonMin,
ButtonClose,
ButtonMenu,
ButtonSticky,
ButtonAbove,
ButtonBelow,
ButtonShade,
ButtonTypeCount
};
// smoothblendFactory /////////////////////////////////////////////////////////
//
// add variables and flags for config like...
//
// public: type function()
// private: type var_
// inline type function(){ return var_ };
//
class smoothblendFactory: public KDecorationFactory {
public:
smoothblendFactory();
virtual ~smoothblendFactory();
virtual KDecoration *createDecoration(KDecorationBridge *b);
virtual bool reset(unsigned long changed);
static bool initialized();
static TQt::AlignmentFlags titleAlign();
static bool roundedCorners();
static int titleSize();
static int buttonSize();
static int frameSize();
static int roundSize();
static TQFont titleFontTool() { return m_titleFontTool; }
static bool titleShadow();
static bool animateButtons() { return animatebuttons; }
static int getBtnComboBox() { return btnComboBox; }
static bool menuClosed() { return menuClose; }
private:
bool readConfig();
private:
static bool initialized_;
static TQt::AlignmentFlags titlealign_;
static bool cornerflags_;
static int titlesize_;
static int buttonsize_;
static int framesize_;
static int roundsize_;
static TQFont m_titleFontTool;
static bool titleshadow_;
static bool animatebuttons;
static int btnComboBox;
static bool menuClose;
};
inline bool smoothblendFactory::initialized() {
return initialized_;
}
inline TQt::AlignmentFlags smoothblendFactory::titleAlign() {
return titlealign_;
}
inline bool smoothblendFactory::roundedCorners() {
return cornerflags_;
}
inline int smoothblendFactory::titleSize() {
return titlesize_;
}
inline int smoothblendFactory::buttonSize() {
return buttonsize_;
}
inline int smoothblendFactory::frameSize() {
return framesize_;
}
inline int smoothblendFactory::roundSize() {
return roundsize_;
}
inline bool smoothblendFactory::titleShadow() {
return titleshadow_;
}
// smoothblendButton //////////////////////////////////////////////////////////
class smoothblendButton : public TQButton {
Q_OBJECT
public:
smoothblendButton(smoothblendClient *parent=0, const char *name=0,
const TQString &tip=NULL,
ButtonType type=ButtonHelp,
int button_size=18,
bool toggle=false);
//const unsigned char *bitmap=0);
~smoothblendButton();
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);
private:
smoothblendClient *client_;
ButtonType type_;
int size_;
TQBitmap *deco_;
TQPixmap *pixmap[2][4];
ButtonState lastmouse_;
bool hover_;
bool m_clicked;
TQTimer *animTmr;
uint animProgress;
};
inline TQt::ButtonState smoothblendButton::lastMousePress() const {
return lastmouse_;
}
inline void smoothblendButton::reset() {
repaint(false);
}
// smoothblendClient //////////////////////////////////////////////////////////
class smoothblendClient : public KDecoration {
Q_OBJECT
public:
smoothblendClient(KDecorationBridge *b, KDecorationFactory *f);
virtual ~smoothblendClient();
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();
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;
smoothblendButton *button[ButtonTypeCount];
TQSpacerItem *titlebar_;
bool pixmaps_created;
int s_titleHeight;
TQFont s_titleFont;
int handlebar;
bool closing;
void create_pixmaps();
void delete_pixmaps();
};
} // namespace smoothblend
#endif // SMOOTHBLEND_H