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.
446 lines
12 KiB
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 <qcolor.h>
|
|
#include <qbutton.h>
|
|
#include <kdecoration.h>
|
|
#include <kdecorationfactory.h>
|
|
#include <kpixmap.h>
|
|
#include <kdeversion.h>
|
|
/*
|
|
#define BUTTONSIZE 15;
|
|
#define MENUBUTTONWIDTH 20;
|
|
#define DECOSIZE 8;
|
|
#define TITLESIZESMALL 18;
|
|
#define MARGIN 4;*/
|
|
|
|
class QSpacerItem;
|
|
class QPoint;
|
|
class QBitmap;
|
|
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 QWidget
|
|
{
|
|
//#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 ( QMouseEvent * );
|
|
virtual void mouseReleaseEvent ( QMouseEvent * );
|
|
virtual void paintEvent ( QPaintEvent * );
|
|
void updateLook(bool rp = FALSE);
|
|
private:
|
|
bool eventFilter(QObject *obj, QEvent *e);
|
|
void shape();
|
|
BaghiraClient *client;
|
|
QPixmap pix;
|
|
#endif
|
|
};
|
|
// #endif
|
|
|
|
class DeMaximizer : public QWidget
|
|
{
|
|
friend class BaghiraClient;
|
|
friend class BaghiraFactory;
|
|
Q_OBJECT
|
|
public:
|
|
DeMaximizer();
|
|
void setClient(BaghiraClient *);
|
|
protected:
|
|
void mouseReleaseEvent( QMouseEvent * e );
|
|
void mousePressEvent ( QMouseEvent * e );
|
|
void enterEvent ( QEvent * e );
|
|
void leaveEvent ( QEvent * e );
|
|
void setPixmap(int i, QImage &image);
|
|
private:
|
|
BaghiraClient *client_;
|
|
QPixmap 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 QValueList<BorderSize> borderSizes() const;
|
|
static QPixmap &ButtonPixmap(Baghira::WindowState wState, Baghira::ButtonType type, Baghira::ButtonState state, int current, bool small);
|
|
QImage* DecoImage(QPixmap *pix, int x, int y, int width, int height);
|
|
|
|
static QBitmap helpMask, jaguarDownMask, jaguarMenuDownMask,
|
|
jaguarMenuMask, jaguarMask, milkMenuDownMask,
|
|
milkMenuMask, milkMask, pantherMenuMask, pantherMask, milkDownMask, arrowUp, arrowDown;
|
|
|
|
static bool initialized();
|
|
static bool noModalDeco();
|
|
static bool delAppname();
|
|
static QColor &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 Qt::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 QColor &BrushedMetalColor();
|
|
|
|
private:
|
|
// bool blend( const QImage & upper, const QImage & lower, QImage & output);
|
|
unsigned long readConfig();
|
|
void createPixmaps();
|
|
void createGradient(KPixmap &pix, const QColor &light, const QColor &dark, Baghira::TitlebarType effect);
|
|
void createOS8Buttons(int style);
|
|
QString indexedString(QString s, int index);
|
|
QImage* tintBrush( const QImage &img, const QColor &c ) const;
|
|
QImage* tintGlossy(const QImage &src, const QColor &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 Qt::AlignmentFlags titlealign_;
|
|
static QColor colors_[5][ColorTypeCount][2];
|
|
static KPixmap pix_[5][PixmapTypeCount][2][2];
|
|
static QPixmap ButtonPixmap_[5][WindowStateAmount][ButtonTypeAmount][ButtonStateAmount][2];
|
|
static QColor ButtonColor_[ButtonTypeAmount+1];
|
|
static QColor brushedMetalColor;
|
|
static QPixmap 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 QColor 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 QColor &BaghiraFactory::BrushedMetalColor()
|
|
{ return brushedMetalColor; }
|
|
|
|
inline QColor &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 Qt::AlignmentFlags BaghiraFactory::titleAlign()
|
|
{ return titlealign_; }
|
|
|
|
inline int BaghiraFactory::borderSize(int current)
|
|
{ return bordersize_[current]; }
|
|
|
|
// BaghiraButton ///////////////////////////////////////////////////////////////
|
|
|
|
class BaghiraButton : public QButton
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
BaghiraButton(BaghiraClient *parent=0, const char *name=0, const QString &tip=NULL, bool small=false, ButtonType type=MinButton, int style=0);
|
|
~BaghiraButton();
|
|
|
|
QSize sizeHint() const;
|
|
int lastMousePress() const;
|
|
void reset();
|
|
inline void setMasks(QBitmap *bitmask, QBitmap *bitmaskDown);
|
|
Baghira::ButtonState state();
|
|
inline void setType(Baghira::ButtonType type)
|
|
{type_ = type; }
|
|
QBitmap *mask;
|
|
QBitmap *maskDown;
|
|
|
|
private:
|
|
void enterEvent(QEvent *e);
|
|
void leaveEvent(QEvent *e);
|
|
void mousePressEvent(QMouseEvent *e);
|
|
void mouseReleaseEvent(QMouseEvent *e);
|
|
void drawButton(QPainter *painter);
|
|
|
|
private slots:
|
|
void delayedEnterEvent();
|
|
|
|
private:
|
|
bool _blocked;
|
|
BaghiraClient *client_;
|
|
ButtonType type_;
|
|
QBitmap *deco_;
|
|
QPixmap *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();
|
|
QString 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 QSize &size);
|
|
virtual QSize minimumSize() const;
|
|
virtual Position mousePosition(const QPoint &point) const;
|
|
uint currentStyle;
|
|
|
|
signals:
|
|
void hide();
|
|
|
|
protected:
|
|
bool isTool() const;
|
|
int titleheight_;
|
|
|
|
private:
|
|
void addButtons(QBoxLayout* layout, const QString& buttons);
|
|
|
|
bool eventFilter(QObject *obj, QEvent *e);
|
|
void mouseDoubleClickEvent(QMouseEvent *e);
|
|
void wheelEvent(QWheelEvent *e);
|
|
void paintEvent(QPaintEvent *);
|
|
void resizeEvent(QResizeEvent *);
|
|
void showEvent(QShowEvent *);
|
|
|
|
private slots:
|
|
void doShape();
|
|
void maxButtonPressed();
|
|
void menuButtonPressed();
|
|
void aboveBelowButtonPressed();
|
|
void shadeButtonPressed();
|
|
|
|
private:
|
|
BaghiraButton *button[ButtonTypeAmount];
|
|
|
|
QSpacerItem *titlebar_;
|
|
QPixmap 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_;
|
|
QHBoxLayout *windowlayout;
|
|
int ICONX, ICONY;
|
|
ResizeHandle *grip;
|
|
QString caption_;
|
|
};
|
|
|
|
} // namespace Baghira
|
|
|
|
#endif // BAGHIRACLIENT_H
|