summaryrefslogtreecommitdiffstats
path: root/deco/baghiraclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'deco/baghiraclient.h')
-rw-r--r--deco/baghiraclient.h445
1 files changed, 445 insertions, 0 deletions
diff --git a/deco/baghiraclient.h b/deco/baghiraclient.h
new file mode 100644
index 0000000..c77ea0d
--- /dev/null
+++ b/deco/baghiraclient.h
@@ -0,0 +1,445 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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