diff options
author | Darrell Anderson <humanreadable@yahoo.com> | 2013-08-18 10:14:48 -0500 |
---|---|---|
committer | Darrell Anderson <humanreadable@yahoo.com> | 2013-08-18 10:14:48 -0500 |
commit | dad42352f4ad47d34caf50040367dc2a95772baa (patch) | |
tree | 6d2887d13f9b1403b8ce15be48a6ea7cec32fd96 /tdestyles/plastik/plastik.h | |
parent | 365f03061337a81bcffb4a45c4ad637edad27019 (diff) | |
download | tdelibs-dad42352f4ad47d34caf50040367dc2a95772baa.tar.gz tdelibs-dad42352f4ad47d34caf50040367dc2a95772baa.zip |
Rename KStyle to TDEStyle to avoid conflicts with KDE4.
Diffstat (limited to 'tdestyles/plastik/plastik.h')
-rw-r--r-- | tdestyles/plastik/plastik.h | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/tdestyles/plastik/plastik.h b/tdestyles/plastik/plastik.h new file mode 100644 index 000000000..68f707d79 --- /dev/null +++ b/tdestyles/plastik/plastik.h @@ -0,0 +1,373 @@ +/* Plastik widget style for KDE 3 + Copyright (C) 2003 Sandro Giessl <ceebx@users.sourceforge.net> + + based on the KDE style "dotNET": + Copyright (C) 2001-2002, Chris Lee <clee@kde.org> + Carsten Pfeiffer <pfeiffer@kde.org> + Karol Szwed <gallium@kde.org> + 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 <malte@kde.org> + (c) 2002,2003 Maksim Orlovich <mo002j@mail.rochester.edu> + based on the KDE3 HighColor Style + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + (C) 2001-2002 Fredrik H�glund <fredrik@kde.org> + Drawing routines adapted from the KDE2 HCStyle, + Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org> + (C) 2000 Dirk Mueller <mueller@kde.org> + (C) 2001 Martijn Klingens <klingens@kde.org> + Progressbar code based on TDEStyle, + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +#ifndef __PLASTIK_H +#define __PLASTIK_H + +#include <tdestyle.h> +#include <tqbitmap.h> +#include <tqintcache.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 TQSettings; +class TQTab; +class TQTimer; + +class PlastikStyle : public TDEStyle +{ + Q_OBJECT + +public: + PlastikStyle(); + virtual ~PlastikStyle(); + + void applicationPolish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *); + void polish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *); + void unPolish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *); + + void drawTDEStylePrimitive(TDEStylePrimitive kpe, + TQPainter* p, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + void drawPrimitive(TQ_PrimitiveElement pe, + TQPainter *p, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption &opt = TQStyleOption::Default ) const; + + void drawControl(TQ_ControlElement element, + TQPainter *p, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget *widget = 0 ) const; + + void drawControlMask( TQ_ControlElement, TQPainter *, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQRect &, const TQStyleOption &, const TQWidget * = 0) const; + + void drawComplexControl(TQ_ComplexControl control, + TQPainter *p, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + SCFlags controls = SC_All, + SCFlags active = SC_None, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget *widget = 0 ) const; + + int pixelMetric(PixelMetric m, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, + const TQWidget *widget = 0 ) const; + + TQRect subRect(SubRect r, const TQStyleControlElementData &ceData, const ControlElementFlags elementFlags, + const TQWidget *widget ) const; + + TQRect querySubControlMetrics(TQ_ComplexControl control, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + SubControl subcontrol, + const TQStyleOption &opt = TQStyleOption::Default, + const TQWidget *widget = 0 ) const; + + void drawComplexControlMask(TQStyle::TQ_ComplexControl c, + TQPainter *p, + const TQStyleControlElementData &ceData, + const ControlElementFlags elementFlags, + const TQRect &r, + const TQStyleOption &o=TQStyleOption::Default, + const TQWidget *w = 0) const; + + TQSize sizeFromContents(TQStyle::ContentsType t, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQSize &s, + const TQStyleOption &o, + const TQWidget *w = 0) const; + + int styleHint(TQ_StyleHint, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, + const TQStyleOption & = TQStyleOption::Default, + TQStyleHintReturn * = 0, const TQWidget * = 0 ) const; + +protected: + enum TabPosition + { + First = 0, + Middle, + Last, + Single // only one tab! + }; + + enum ColorType + { + ButtonContour, + DragButtonContour, + DragButtonSurface, + PanelContour, + PanelLight, + PanelLight2, + PanelDark, + PanelDark2, + MouseOverHighlight, + FocusHighlight, + CheckMark + }; + + 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 + }; + + void renderContour(TQPainter *p, + const TQRect &r, + const TQColor &backgroundColor, + const TQColor &contourColor, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight) const; + + void renderMask(TQPainter *p, + const TQRect &r, + const TQColor &color, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight) const; + + void renderSurface(TQPainter *p, + const TQRect &r, + const TQColor &backgroundColor, + const TQColor &buttonColor, + const TQColor &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(TQPainter *p, + const TQPoint &pos, + const int alpha, + const TQColor &color, + const TQColor &background = TQColor(), + bool fullAlphaBlend = true) const; + + void renderButton(TQPainter *p, + const TQRect &r, + const TQColorGroup &g, + bool sunken = false, + bool mouseOver = false, + bool horizontal = true, + bool enabled = true, + bool tdehtmlMode = false) const; + + void renderPanel(TQPainter *p, + const TQRect &r, + const TQColorGroup &g, + const bool pseudo3d = true, + const bool sunken = true) const; + + void renderDot(TQPainter *p, + const TQPoint &point, + const TQColor &baseColor, + const bool thick = false, + const bool sunken = false) const; + + void renderGradient(TQPainter *p, + const TQRect &r, + const TQColor &c1, + const TQColor &c2, + bool horizontal = true) const; + + void renderTab(TQPainter *p, + const TQRect &r, + const TQColorGroup &g, + bool mouseOver = false, + const bool selected = false, + const bool bottom = false, + const TabPosition pos = Middle, + const bool triangular = false, + const bool cornerWidget = false) const; + + virtual void renderMenuBlendPixmap( KPixmap& pix, const TQColorGroup& cg, + const TQPopupMenu* popup ) const; + + virtual bool objectEventHandler( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void* source, TQEvent *e ); + +protected slots: + void tdehtmlWidgetDestroyed(TQObject* w); + + //Animation slots. + void updateProgressPos(); + void progressBarDestroyed(TQObject* bar); + + inline TQColor getColor(const TQColorGroup &cg, const ColorType t, const bool enabled = true)const; + inline TQColor getColor(const TQColorGroup &cg, const ColorType t, const WidgetState s)const; +private: +// Disable copy constructor and = operator + PlastikStyle( const PlastikStyle & ); + PlastikStyle& operator=( const PlastikStyle & ); + + bool kickerMode, kornMode; + mutable bool flatMode; + + int _contrast; + bool _scrollBarLines; + bool _animateProgressBar; + bool _drawToolBarSeparator; + bool _drawToolBarItemSeparator; + bool _drawFocusRect; + bool _drawTriangularExpander; + bool _inputFocusHighlight; + bool _customOverHighlightColor; + bool _customFocusHighlightColor; + bool _customCheckMarkColor; + TQColor _overHighlightColor; + TQColor _focusHighlightColor; + TQColor _checkMarkColor; + + // track tdehtml widgets. + TQMap<const TQWidget*,bool> tdehtmlWidgets; + + //Animation support. + TQMap<TQWidget*, int> progAnimWidgets; + + // pixmap cache. + enum CacheEntryType { + cSurface, + cGradientTile, + cAlphaDot + }; + struct CacheEntry + { + CacheEntryType type; + int width; + int height; + QRgb c1Rgb; + QRgb c2Rgb; + bool horizontal; + + TQPixmap* pixmap; + + CacheEntry(CacheEntryType t, int w, int h, QRgb c1, QRgb c2 = 0, + bool hor = false, TQPixmap* 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 TQIntCache. + // 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) { +// tqDebug("operator ==: CacheEntries don't match!"); +// tqDebug("width: %d\t\tother width: %d", width, other.width); +// tqDebug("height: %d\t\tother height: %d", height, other.height); +// tqDebug("fgRgb: %d\t\tother fgRgb: %d", fgRgb, other.fgRgb); +// tqDebug("bgRgb: %d\t\tother bgRgb: %d", bgRgb, other.bgRgb); +// tqDebug("surfaceFlags: %d\t\tother surfaceFlags: %d", surfaceFlags, other.surfaceFlags); +// } + return match; + } + }; + TQIntCache<CacheEntry> *pixmapCache; + + // For KPE_ListViewBranch + mutable TQBitmap *verticalLine; + mutable TQBitmap *horizontalLine; + + // For progress bar animation + TQTimer *animationTimer; +}; + +#endif // __PLASTIK_H |