////////////////////////////////////////////////////////////////////////////// // crystalclient.h // ------------------- // Crystal window decoration for KDE // ------------------- // Copyright (c) 2006 Sascha Hlusiak // // 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 CRYSTALCLIENT_H #define CRYSTALCLIENT_H #include #include #include #include #include #include class TQSpacerItem; class TQPoint; class CrystalClient; class CrystalFactory; class CrystalButton; class CrystalTray; class QImageHolder; class ButtonImage; extern CrystalFactory *factory; #define TOP_LEFT 1 #define TOP_RIGHT 2 #define BOT_LEFT 4 #define BOT_RIGHT 8 struct WND_CONFIG { int mode; // The mode (fade, emboss, ...) double amount; int outlineMode,inlineMode; TQColor frameColor,inlineColor; TQPixmap overlay; TQImage userdefinedPicture; // Userdefined background image, instead of wallpaper int blur; }; enum ButtonType { ButtonHelp=0, ButtonMax, ButtonMin, ButtonClose, ButtonMenu, ButtonSticky, ButtonShade, ButtonAbove, ButtonBelow, ButtonTypeCount }; enum ButtonImageTypes { ButtonImageMenu=0, ButtonImageHelp, ButtonImageMax, ButtonImageRestore, ButtonImageMin, ButtonImageClose, ButtonImageSticky, ButtonImageUnSticky, ButtonImageShade, ButtonImageUnShade, ButtonImageBelow, ButtonImageUnBelow, ButtonImageAbove, ButtonImageUnAbove, ButtonImageCount }; class CrystalFactory: public KDecorationFactory { public: CrystalFactory(); virtual ~CrystalFactory(); virtual KDecoration *createDecoration(KDecorationBridge *b); virtual bool reset(unsigned long changed); virtual bool supports(Ability ability); static bool initialized() { return initialized_; } static TQt::AlignmentFlags titleAlign() { return titlealign_; } public: QImageHolder *image_holder; TQPixmap logo; int logoEnabled,logoStretch,logoActive,logoDistance; int titlesize; bool hovereffect,tintButtons,animateHover,menuImage,wheelTask; TQColor buttonColor_normal,buttonColor_hovered,buttonColor_pressed; TQColor minColor_normal,minColor_hovered,minColor_pressed; TQColor maxColor_normal,maxColor_hovered,maxColor_pressed; TQColor closeColor_normal,closeColor_hovered,closeColor_pressed; int borderwidth; bool drawcaption,textshadow,captiontooltip; bool trackdesktop,transparency; int roundCorners; int repaintMode,repaintTime; WND_CONFIG active,inactive; int buttontheme; ButtonImage *buttonImages[ButtonImageCount]; TQPtrList clients; private: bool readConfig(); void CreateButtonImages(); private: static bool initialized_; static TQt::AlignmentFlags titlealign_; }; class CrystalClient : public KDecoration { TQ_OBJECT public: CrystalClient(KDecorationBridge *b,CrystalFactory *f); virtual ~CrystalClient(); 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; void ClientWindows(Window* frame,Window* wrapper,Window* client); private: CrystalButton* addButtons(TQBoxLayout* layout, const TQString& buttons); void updateMask(); int borderSpacing(); void updateLayout(); bool isModalSystemNotification(); bool eventFilter(TQObject *obj, TQEvent *e); void mouseDoubleClickEvent(TQMouseEvent *e); void paintEvent(TQPaintEvent *e); void resizeEvent(TQResizeEvent *); void moveEvent(TQMoveEvent *); void showEvent(TQShowEvent *); void mouseWheelEvent(TQWheelEvent *e); private slots: void Repaint(); void maxButtonPressed(); void minButtonPressed(); void shadeButtonPressed(); void aboveButtonPressed(); void belowButtonPressed(); void menuButtonPressed(); void closeButtonPressed(); void keepAboveChange( bool ); void keepBelowChange( bool ); void menuPopUp(); private: CrystalButton *button[ButtonTypeCount]; TQGridLayout *mainlayout; TQHBoxLayout *titlelayout; TQTimer timer; public: bool FullMax; TQSpacerItem *titlebar_; }; #endif