diff options
Diffstat (limited to 'style/qtc_tdestyle.h')
-rw-r--r-- | style/qtc_tdestyle.h | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/style/qtc_tdestyle.h b/style/qtc_tdestyle.h new file mode 100644 index 0000000..28fa024 --- /dev/null +++ b/style/qtc_tdestyle.h @@ -0,0 +1,339 @@ +/* + * $Id$ + * + * TDEStyle + * Copyright (C) 2001-2002 Karol Szwed <[email protected]> + * + * TQWindowsStyle CC_ListView and style images were kindly donated by TrollTech, + * Copyright (C) 1998-2000 TrollTech AS. + * + * Many thanks to Bradley T. Hughes for the 3 button scrollbar code. + * + * 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 __TQTC_KSTYLE_H +#define __TQTC_KSTYLE_H + +// W A R N I N G +// ------------- +// This API is still subject to change. +// I will remove this warning when I feel the API is sufficiently flexible. + +#include <tqcommonstyle.h> + +struct TQtCTDEStylePrivate; +/** + * Simplifies and extends the TQStyle API to make style coding easier. + * + * The TDEStyle class provides a simple internal menu transparency engine + * which attempts to use XRender for accelerated blending where requested, + * or falls back to fast internal software tinting/blending routines. + * It also simplifies more complex portions of the TQStyle API, such as + * the PopupMenuItems, ScrollBars and Sliders by providing extra "primitive + * elements" which are simple to implement by the style writer. + * + * @see TQStyle::TQStyle + * @see TQCommonStyle::TQCommonStyle + * @author Karol Szwed ([email protected]) + * @version $Id$ + */ +class TQtCTDEStyle: public TQCommonStyle +{ + Q_OBJECT + + + public: + + /** + * TQtCTDEStyle Flags: + * + * @li Default - Default style setting, where menu transparency + * and the FilledFrameWorkaround are disabled. + * + * @li AllowMenuTransparency - Enable this flag to use TQtCTDEStyle's + * internal menu transparency engine. + * + * @li FilledFrameWorkaround - Enable this flag to facilitate + * proper repaints of TQMenuBars and TQToolBars when the style chooses + * to paint the interior of a TQFrame. The style primitives in question + * are PE_PanelMenuBar and PE_PanelDockWindow. The HighColor style uses + * this workaround to enable painting of gradients in menubars and + * toolbars. + */ + typedef uint TDEStyleFlags; + enum TDEStyleOption { + Default = 0x00000000, //!< All options disabled + AllowMenuTransparency = 0x00000001, //!< Internal transparency enabled + FilledFrameWorkaround = 0x00000002 //!< Filled frames enabled + }; + + /** + * TDEStyle ScrollBarType: + * + * Allows the style writer to easily select what type of scrollbar + * should be used without having to duplicate large amounts of source + * code by implementing the complex control CC_ScrollBar. + * + * @li WindowsStyleScrollBar - Two button scrollbar with the previous + * button at the top/left, and the next button at the bottom/right. + * + * @li PlatinumStyleScrollBar - Two button scrollbar with both the + * previous and next buttons at the bottom/right. + * + * @li ThreeButtonScrollBar - %KDE style three button scrollbar with + * two previous buttons, and one next button. The next button is always + * at the bottom/right, whilst the two previous buttons are on either + * end of the scrollbar. + * + * @li NextStyleScrollBar - Similar to the PlatinumStyle scroll bar, but + * with the buttons grouped on the opposite end of the scrollbar. + * + * @see TDEStyle::TDEStyle() + */ + enum TDEStyleScrollBarType { + WindowsStyleScrollBar = 0x00000000, //!< two button, windows style + PlatinumStyleScrollBar = 0x00000001, //!< two button, platinum style + ThreeButtonScrollBar = 0x00000002, //!< three buttons, %KDE style + NextStyleScrollBar = 0x00000004 //!< two button, NeXT style + }; + + /** + * Constructs a TDEStyle object. + * + * Select the appropriate TDEStyle flags and scrollbar type + * for your style. The user's style preferences selected in KControl + * are read by using TQSettings and are automatically applied to the style. + * As a fallback, TDEStyle paints progressbars and tabbars. It inherits from + * TQCommonStyle for speed, so don't expect much to be implemented. + * + * It is advisable to use a currently implemented style such as the HighColor + * style as a foundation for any new TDEStyle, so the limited number of + * drawing fallbacks should not prove problematic. + * + * @param flags the style to be applied + * @param sbtype the scroll bar type + * @see TDEStyle::TDEStyleFlags + * @see TDEStyle::TDEStyleScrollBarType + * @author Karol Szwed ([email protected]) + */ + TQtCTDEStyle( TDEStyleFlags flags = TQtCTDEStyle::Default, + TDEStyleScrollBarType sbtype = TQtCTDEStyle::WindowsStyleScrollBar ); + + /** + * Destructs the TQtCTDEStyle object. + */ + ~TQtCTDEStyle(); + + /** + * Returns the default widget style depending on color depth. + */ + static TQString defaultStyle(); + + /** + * Modifies the scrollbar type used by the style. + * + * This function is only provided for convenience. It allows + * you to make a late decision about what scrollbar type to use for the + * style after performing some processing in your style's constructor. + * In most situations however, setting the scrollbar type via the TQtCTDEStyle + * constructor should suffice. + * @param sbtype the scroll bar type + * @see TQtCTDEStyle::TDEStyleScrollBarType + */ + void setScrollBarType(TDEStyleScrollBarType sbtype); + + /** + * Returns the TDEStyle flags used to initialize the style. + * + * This is used solely for the kcmstyle module, and hence is internal. + */ + TDEStyleFlags styleFlags() const; + + /** + * TDEStyle Primitive Elements: + * + * The TDEStyle class extends the TQt's Style API by providing certain + * simplifications for parts of TQStyle. To do this, the TDEStylePrimitive + * elements were defined, which are very similar to TQt's PrimitiveElement. + * + * The first three Handle primitives simplify and extend PE_DockWindowHandle, + * so do not reimplement PE_DockWindowHandle if you want the TDEStyle handle + * simplifications to be operable. Similarly do not reimplement CC_Slider, + * SC_SliderGroove and SC_SliderHandle when using the TDEStyle slider + * primitives. TDEStyle automatically double-buffers slider painting + * when they are drawn via these TDEStyle primitives to avoid flicker. + * + * @li KPE_DockWindowHandle - This primitive is already implemented in TDEStyle, + * and paints a bevelled rect with the DockWindow caption text. Re-implement + * this primitive to perform other more fancy effects when drawing the dock window + * handle. + * + * @li KPE_ToolBarHandle - This primitive must be reimplemented. It currently + * only paints a filled rectangle as default behavior. This primitive is used + * to render TQToolBar handles. + * + * @li KPE_GeneralHandle - This primitive must be reimplemented. It is used + * to render general handles that are not part of a TQToolBar or TQDockWindow, such + * as the applet handles used in Kicker. The default implementation paints a filled + * rect of arbitrary color. + * + * @li KPE_SliderGroove - This primitive must be reimplemented. It is used to + * paint the slider groove. The default implementation paints a filled rect of + * arbitrary color. + * + * @li KPE_SliderHandle - This primitive must be reimplemented. It is used to + * paint the slider handle. The default implementation paints a filled rect of + * arbitrary color. + * + * @li KPE_ListViewExpander - This primitive is already implemented in TDEStyle. It + * is used to draw the Expand/Collapse element in TQListViews. To indicate the + * expanded state, the style flags are set to Style_Off, while Style_On implies collapsed. + * + * @li KPE_ListViewBranch - This primitive is already implemented in TDEStyle. It is + * used to draw the ListView branches where necessary. + */ + enum TDEStylePrimitive { + KPE_DockWindowHandle, + KPE_ToolBarHandle, + KPE_GeneralHandle, + + KPE_SliderGroove, + KPE_SliderHandle, + + KPE_ListViewExpander, + KPE_ListViewBranch + }; + + /** + * This function is identical to TQt's TQStyle::drawPrimitive(), except that + * it adds one further parameter, 'widget', that can be used to determine + * the widget state of the TDEStylePrimitive in question. + * + * @see TDEStyle::TDEStylePrimitive + * @see TQStyle::drawPrimitive + * @see TQStyle::drawComplexControl + */ + virtual void drawTDEStylePrimitive( TDEStylePrimitive kpe, + TQPainter* p, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + + enum TDEStylePixelMetric { + KPM_MenuItemSeparatorHeight = 0x00000001, + KPM_MenuItemHMargin = 0x00000002, + KPM_MenuItemVMargin = 0x00000004, + KPM_MenuItemHFrame = 0x00000008, + KPM_MenuItemVFrame = 0x00000010, + KPM_MenuItemCheckMarkHMargin = 0x00000020, + KPM_MenuItemArrowHMargin = 0x00000040, + KPM_MenuItemTabSpacing = 0x00000080, + KPM_ListViewBranchThickness = 0x00000100 + }; + + int kPixelMetric( TDEStylePixelMetric kpm, TQStyleControlElementData ceData, ControlElementFlags elementFlags, const TQWidget* widget = 0 ) const; + + // --------------------------------------------------------------------------- + + void polish( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void * ); + void unPolish( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void * ); + void polishPopupMenu( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr ); + + void drawPrimitive( PrimitiveElement pe, + TQPainter* p, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption& = TQStyleOption::Default ) const; + + void drawControl( ControlElement element, + TQPainter* p, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags = Style_Default, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + void drawComplexControl( ComplexControl control, + TQPainter *p, + 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; + + SubControl querySubControl( ComplexControl control, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + const TQPoint &pos, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + TQRect querySubControlMetrics( ComplexControl control, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + SubControl sc, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + int pixelMetric( PixelMetric m, TQStyleControlElementData ceData, ControlElementFlags elementFlags, + const TQWidget* widget = 0 ) const; + + TQRect subRect( SubRect r, const TQStyleControlElementData ceData, const ControlElementFlags elementFlags, + const TQWidget* widget = 0 ) const; + + TQPixmap stylePixmap( StylePixmap stylepixmap, + TQStyleControlElementData ceData, + ControlElementFlags elementFlags, + const TQStyleOption& = TQStyleOption::Default, + const TQWidget* widget = 0 ) const; + + int styleHint( StyleHint sh, TQStyleControlElementData ceData, ControlElementFlags elementFlags, + const TQStyleOption &opt = TQStyleOption::Default, + TQStyleHintReturn* shr = 0, + const TQWidget* w = 0 ) const; + + protected: + virtual bool objectEventHandler( TQStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, TQEvent *e ); + + private: + // Disable copy constructor and = operator + TQtCTDEStyle( const TQtCTDEStyle & ); + TQtCTDEStyle& operator=( const TQtCTDEStyle & ); + + protected: + virtual void virtual_hook( int id, void* data ); + private: + TQtCTDEStylePrivate *d; +}; + + +// vim: set noet ts=4 sw=4: +#endif + |