diff options
author | Mavridis Philippe <[email protected]> | 2024-03-10 17:53:54 +0200 |
---|---|---|
committer | Mavridis Philippe <[email protected]> | 2024-03-10 17:53:54 +0200 |
commit | 7f408ad635a5e2a7829db68c19e51a295d55b9d1 (patch) | |
tree | a494c34a4c7a10d114a6b95fc4216f3eabce4e81 /style/polyester.h | |
download | tde-style-polyester-7f408ad635a5e2a7829db68c19e51a295d55b9d1.tar.gz tde-style-polyester-7f408ad635a5e2a7829db68c19e51a295d55b9d1.zip |
Imported from Pling
Diffstat (limited to 'style/polyester.h')
-rwxr-xr-x | style/polyester.h | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/style/polyester.h b/style/polyester.h new file mode 100755 index 0000000..26ad080 --- /dev/null +++ b/style/polyester.h @@ -0,0 +1,438 @@ +/* Polyester widget style for KDE 3 + Copyright (C) 2005 Marco Martin <[email protected]> + + based on Plastik widget style for KDE 3 + Copyright (C) 2003 Sandro Giessl <[email protected]> + + based on the KDE style "dotNET": + + Copyright (C) 2001-2002, Chris Lee <[email protected]> + Carsten Pfeiffer <[email protected]> + Karol Szwed <[email protected]> + Drawing routines completely reimplemented from KDE3 HighColor, which was + originally based on some stuff from the KDE2 HighColor. + + based on drawing routines of the style "Keramik": + + Copyright (c) 2002 Malte Starostik <[email protected]> + (c) 2002,2003 Maksim Orlovich <[email protected]> + based on the KDE3 HighColor Style + Copyright (C) 2001-2002 Karol Szwed <[email protected]> + (C) 2001-2002 Fredrik H�lund <[email protected]> + Drawing routines adapted from the KDE2 HCStyle, + Copyright (C) 2000 Daniel M. Duley <[email protected]> + (C) 2000 Dirk Mueller <[email protected]> + (C) 2001 Martijn Klingens <[email protected]> + Progressbar code based on KStyle, + Copyright (C) 2001-2002 Karol Szwed <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. 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 <kstyle.h> +#include <qbitmap.h> +#include <qintcache.h> + +#define u_arrow -4,1, 2,1, -3,0, 1,0, -2,-1, 0,-1, -1,-2 +#define d_arrow -4,-2, 2,-2, -3,-1, 1,-1, -2,0, 0,0, -1,1 +#define l_arrow 0,-3, 0,3,-1,-2,-1,2,-2,-1,-2,1,-3,0 +#define r_arrow -2,-3,-2,3,-1,-2, -1,2,0,-1,0,1,1,0 + +#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) + +class QSettings; +class QTab; +class QTimer; + +//a tiny reimplementation of max... +int max(int a, int b){return (a>b?a:b);} + +class PolyesterStyle : public KStyle +{ + Q_OBJECT + +public: + PolyesterStyle(); + virtual ~PolyesterStyle(); + + void polish(QApplication* app ); + void polish(QWidget* widget ); + void unPolish(QWidget* widget ); + + void drawKStylePrimitive(KStylePrimitive kpe, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawPrimitive(PrimitiveElement pe, + QPainter *p, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption &opt = QStyleOption::Default ) const; + + void drawControl(ControlElement element, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawControlMask( ControlElement, QPainter *, const QWidget *, const QRect &, const QStyleOption &) const; + + void drawComplexControl(ComplexControl control, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + SCFlags controls = SC_All, + SCFlags active = SC_None, + const QStyleOption& = QStyleOption::Default ) const; + + int pixelMetric(PixelMetric m, + const QWidget *widget = 0 ) const; + + int kPixelMetric(KStylePixelMetric kpm, const QWidget *widget) const; + + QRect subRect(SubRect r, + const QWidget *widget ) const; + + QRect querySubControlMetrics(ComplexControl control, + const QWidget *widget, + SubControl subcontrol, + const QStyleOption &opt = QStyleOption::Default ) const; + + void drawComplexControlMask(QStyle::ComplexControl c, + QPainter *p, + const QWidget *w, + const QRect &r, + const QStyleOption &o=QStyleOption::Default) const; + + QSize sizeFromContents(QStyle::ContentsType t, + const QWidget *w, + const QSize &s, + const QStyleOption &o) const; + + int styleHint(StyleHint, const QWidget * = 0, + const QStyleOption & = QStyleOption::Default, + QStyleHintReturn * = 0 ) const; + +protected: + enum TabPosition + { + First = 0, + Middle, + Last, + Single // only one tab! + }; + + enum SelectedTab + { + ThisTab, + NextTab, + PrevTab, + OtherTab + }; + + enum ColorType + { + ButtonContour, + DragButtonContour, + DragButtonSurface, + PanelContour, + PanelLight, + PanelLight2, + PanelDark, + PanelDark2, + MouseOverHighlight, + FocusHighlight, + CheckMark, + MenuBarEmphasis + }; + + enum WidgetState + { + IsEnabled, + IsPressed, // implies IsEnabled + IsHighlighted, // implies IsEnabled + IsDisabled + }; + + // the only way i see to provide all these options + // to renderContour/renderSurface... + enum SurfaceFlags { + Draw_Left = 0x00000001, + Draw_Right = 0x00000002, + Draw_Top = 0x00000004, + Draw_Bottom = 0x00000008, + Highlight_Left = 0x00000010, // surface + Highlight_Right = 0x00000020, // surface + Highlight_Top = 0x00000040, // surface + Highlight_Bottom = 0x00000080, // surface + Is_Sunken = 0x00000100, // surface + Is_Horizontal = 0x00000200, // surface + Is_Highlight = 0x00000400, // surface + Is_Default = 0x00000800, // surface + Is_Disabled = 0x00001000, + Round_UpperLeft = 0x00002000, + Round_UpperRight = 0x00004000, + Round_BottomLeft = 0x00008000, + Round_BottomRight = 0x00010000, + Draw_AlphaBlend = 0x00020000, + Sharp_UpperLeft = 0x00040000, + Sharp_UpperRight = 0x00080000, + Sharp_BottomLeft = 0x00100000, + Sharp_BottomRight = 0x00200000 + }; + + void renderContour(QPainter *p, + const QRect &r, + const QColor &backgroundColor, + const QColor &contourColor, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight) const; + + void renderMask(QPainter *p, + const QRect &r, + const QColor &color, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight) const; + + void renderSurface(QPainter *p, + const QRect &r, + const QColor &backgroundColor, + const QColor &buttonColor, + const QColor &highlightColor, + int intensity = 5, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight| + Is_Horizontal) const; + + inline void renderPixel(QPainter *p, + const QPoint &pos, + const int alpha, + const QColor &color, + const QColor &background = QColor(), + bool fullAlphaBlend = true) const; + + void renderButton(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool sunken = false, + bool mouseOver = false, + bool horizontal = true, + bool enabled = true, + bool khtmlMode = false, + int animFrame = 0, + bool isDefault = false) const; + + void renderPanel(QPainter *p, + const QRect &r, + const QColorGroup &g, + const bool pseudo3d = true, + const bool sunken = true) const; + + void renderDot(QPainter *p, + const QPoint &point, + const QColor &baseColor, + const bool thick = false, + const bool sunken = false) const; + + void renderGradient(QPainter *p, + const QRect &r, + const QColor &c1, + const QColor &c2, + bool horizontal = true) const; + + void renderTab(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool mouseOver = false, + const SelectedTab selected = OtherTab, + const bool bottom = false, + const TabPosition pos = Middle, + const bool triangular = false, + bool cornerWidget = false) const; + + virtual void renderMenuBlendPixmap( KPixmap& pix, const QColorGroup& cg, + const QPopupMenu* popup ) const; + + bool eventFilter(QObject *, QEvent *); + + // what widget has mouse over him? + QWidget* hoverWidget; + // mouse over for listview headers + int hoverHeaderId; + +protected slots: + void khtmlWidgetDestroyed(QObject* w); + + void sliderThumbMoved(int val); + + //Animation slots. + void updateProgressPos(); + void progressBarDestroyed(QObject* bar); + void animWidgetDestroyed(QObject* w); + void animate(); + + inline QColor getColor(const QColorGroup &cg, const ColorType t, const bool enabled = true)const; + inline QColor getColor(const QColorGroup &cg, const ColorType t, const WidgetState s)const; +private: +// Disable copy constructor and = operator + PolyesterStyle( const PolyesterStyle & ); + PolyesterStyle& operator=( const PolyesterStyle & ); + + + + bool kickerMode, kornMode; + mutable bool flatMode; + + int _contrast; + bool _scrollBarLines; + QString _scrollBarStyle; + int _scrollBarExtent; + KStyle::KStyleScrollBarType _scrollBarType; + bool _useLowerCaseText; + bool _animateProgressBar; + bool _animateButton; + bool _animateButtonToDark; + bool _lightBorder; + bool _coloredScrollBar; + bool _centeredTabBar; + bool _highLightTab; + bool _statusBarFrame; + bool _colorizeSortedHeader; + int _menuItemSpacing; + bool _buttonMenuItem; + bool _menuBarEmphasis; + bool _menuBarEmphasisBorder; + bool _customMenuBarEmphasisColor; + bool _menuStripe; + QColor _menuBarEmphasisColor; + bool _shadowedMenuBarText; + bool _shadowedButtonsText; + bool _drawToolBarSeparator; + bool _drawToolBarItemSeparator; + bool _drawFocusRect; + bool _drawTriangularExpander; + bool _inputFocusHighlight; + bool _customOverHighlightColor; + bool _customFocusHighlightColor; + bool _customCheckMarkColor; + QColor _overHighlightColor; + QColor _focusHighlightColor; + QColor _checkMarkColor; + QString _buttonStyle; + + QTab *hoverTab; + + // track khtml widgets. + QMap<const QWidget*,bool> khtmlWidgets; + + //Animation support. + QMap<QWidget*, int> progAnimWidgets; + + // pixmap cache. + enum CacheEntryType { + cSurface, + cGradientTile, + cAlphaDot + }; + struct CacheEntry + { + CacheEntryType type; + int width; + int height; + QRgb c1Rgb; + QRgb c2Rgb; + bool horizontal; + + QPixmap* pixmap; + + CacheEntry(CacheEntryType t, int w, int h, QRgb c1, QRgb c2 = 0, + bool hor = false, QPixmap* p = 0 ): + type(t), width(w), height(h), c1Rgb(c1), c2Rgb(c2), horizontal(hor), pixmap(p) + {} + + ~CacheEntry() + { + delete pixmap; + } + + int key() + { + // create an int key from the properties which is used to refer to entries in the QIntCache. + // the result may not be 100% correct as we don't have so much space in one integer -- use + // == operator after find to make sure we got the right one. :) + return horizontal ^ (type<<1) ^ (width<<5) ^ (height<<10) ^ (c1Rgb<<19) ^ (c2Rgb<<22); + } + + bool operator == (const CacheEntry& other) + { + bool match = (type == other.type) && + (width == other.width) && + (height == other.height) && + (c1Rgb == other.c1Rgb) && + (c1Rgb == other.c1Rgb) && + (horizontal = other.horizontal); +// if(!match) { +// qDebug("operator ==: CacheEntries don't match!"); +// qDebug("width: %d\t\tother width: %d", width, other.width); +// qDebug("height: %d\t\tother height: %d", height, other.height); +// qDebug("fgRgb: %d\t\tother fgRgb: %d", fgRgb, other.fgRgb); +// qDebug("bgRgb: %d\t\tother bgRgb: %d", bgRgb, other.bgRgb); +// qDebug("surfaceFlags: %d\t\tother surfaceFlags: %d", surfaceFlags, other.surfaceFlags); +// } + return match; + } + }; + QIntCache<CacheEntry> *pixmapCache; + + // For renderFocusRect + mutable QBitmap *verticalDots; + mutable QBitmap *horizontalDots; + + // For KPE_ListViewBranch + mutable QBitmap *verticalLine; + mutable QBitmap *horizontalLine; + + // For buttons animation + struct AnimInfo { + bool active; + uint animFrame; + }; + typedef QMap<QWidget*, AnimInfo>AnimWidgetMap; + AnimWidgetMap animWidgets; + QTimer *btnAnimTimer; + + typedef QMap<const QWidget*, int>SliderValuesMap; + SliderValuesMap sliderValues; + + // For progress bar animation + QTimer *animationTimer; + + //for the semi transparent menu stripe + QImage *alphaStripe; +}; + +#endif // __POLYESTER_H |