/* * $Id$ * * KStyle * Copyright (C) 2001-2002 Karol Szwed * * 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 __KSTYLE_H #define __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 #include class KPixmap; struct KStylePrivate; /** * Simplifies and extends the TQStyle API to make style coding easier. * * The KStyle 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::QStyle * @see TQCommonStyle::QCommonStyle * @author Karol Szwed (gallium@kde.org) * @version $Id$ */ class KDEFX_EXPORT KStyle: public QCommonStyle { Q_OBJECT public: /** * KStyle Flags: * * @li Default - Default style setting, where menu transparency * and the FilledFrameWorkaround are disabled. * * @li AllowMenuTransparency - Enable this flag to use KStyle's * internal menu transparency engine. * * @li FilledFrameWorkaround - Enable this flag to facilitate * proper repaints of QMenuBars and QToolBars 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 KStyleFlags; enum KStyleOption { Default = 0x00000000, //!< All options disabled AllowMenuTransparency = 0x00000001, //!< Internal transparency enabled FilledFrameWorkaround = 0x00000002 //!< Filled frames enabled }; /** * KStyle 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 KStyle::KStyle() */ enum KStyleScrollBarType { 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 KStyle object. * * Select the appropriate KStyle 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, KStyle 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 KStyle, 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 KStyle::KStyleFlags * @see KStyle::KStyleScrollBarType * @author Karol Szwed (gallium@kde.org) */ KStyle( KStyleFlags flags = KStyle::Default, KStyleScrollBarType sbtype = KStyle::WindowsStyleScrollBar ); /** * Destructs the KStyle object. */ ~KStyle(); /** * 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 KStyle * constructor should suffice. * @param sbtype the scroll bar type * @see KStyle::KStyleScrollBarType */ void setScrollBarType(KStyleScrollBarType sbtype); /** * Returns the KStyle flags used to initialize the style. * * This is used solely for the kcmstyle module, and hence is internal. */ KStyleFlags styleFlags() const; // --------------------------------------------------------------------------- /** * This virtual function defines the pixmap used to blend between the popup * menu and the background to create different menu transparency effects. * For example, you can fill the pixmap "pix" with a gradient based on the * popup's colorGroup, a texture, or some other fancy painting routine. * KStyle will then internally blend this pixmap with a snapshot of the * background behind the popupMenu to create the illusion of transparency. * * This virtual is never called if XRender/Software blending is disabled by * the user in KDE's style control module. */ virtual void renderMenuBlendPixmap( KPixmap& pix, const TQColorGroup& cg, const TQPopupMenu* popup ) const; /** * KStyle Primitive Elements: * * The KStyle class extends the Qt's Style API by providing certain * simplifications for parts of TQStyle. To do this, the KStylePrimitive * elements were defined, which are very similar to Qt's PrimitiveElement. * * The first three Handle primitives simplify and extend PE_DockWindowHandle, * so do not reimplement PE_DockWindowHandle if you want the KStyle handle * simplifications to be operable. Similarly do not reimplement CC_Slider, * SC_SliderGroove and SC_SliderHandle when using the KStyle slider * primitives. KStyle automatically double-buffers slider painting * when they are drawn via these KStyle primitives to avoid flicker. * * @li KPE_DockWindowHandle - This primitive is already implemented in KStyle, * 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 KStyle. It * is used to draw the Expand/Collapse element in QListViews. 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 KStyle. It is * used to draw the ListView branches where necessary. */ enum KStylePrimitive { KPE_DockWindowHandle, KPE_ToolBarHandle, KPE_GeneralHandle, KPE_SliderGroove, KPE_SliderHandle, KPE_ListViewExpander, KPE_ListViewBranch }; /** * This function is identical to Qt's TQStyle::drawPrimitive(), except that * it adds one further parameter, 'widget', that can be used to determine * the widget state of the KStylePrimitive in question. * * @see KStyle::KStylePrimitive * @see TQStyle::drawPrimitive * @see TQStyle::drawComplexControl */ virtual void drawKStylePrimitive( KStylePrimitive kpe, TQPainter* p, const TQWidget* widget, const TQRect &r, const TQColorGroup &cg, SFlags flags = Style_Default, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; enum KStylePixelMetric { 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( KStylePixelMetric kpm, const TQWidget* widget = 0 ) const; // --------------------------------------------------------------------------- void polish( TQWidget* widget ); void unPolish( TQWidget* widget ); void polishPopupMenu( TQPopupMenu* ); void drawPrimitive( PrimitiveElement pe, TQPainter* p, const TQRect &r, const TQColorGroup &cg, SFlags flags = Style_Default, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; #ifdef USE_QT4 void drawPrimitive( ControlElement pe, TQPainter* p, const TQRect &r, const TQColorGroup &cg, SFlags flags = Style_Default, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; #endif // USE_QT4 void drawControl( ControlElement element, TQPainter* p, const TQWidget* widget, const TQRect &r, const TQColorGroup &cg, SFlags flags = Style_Default, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; void drawComplexControl( ComplexControl control, TQPainter *p, const TQWidget* widget, const TQRect &r, const TQColorGroup &cg, SFlags flags = Style_Default, SCFlags controls = SC_All, SCFlags active = SC_None, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; SubControl querySubControl( ComplexControl control, const TQWidget* widget, const TQPoint &pos, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; TQRect querySubControlMetrics( ComplexControl control, const TQWidget* widget, SubControl sc, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; int pixelMetric( PixelMetric m, const TQWidget* widget = 0 ) const; TQRect subRect( SubRect r, const TQWidget* widget ) const; TQPixmap stylePixmap( StylePixmap stylepixmap, const TQWidget* widget = 0, const TQStyleOption& = TQStyleOption::TQSO_Default ) const; int styleHint( StyleHint sh, const TQWidget* w = 0, const TQStyleOption &opt = TQStyleOption::TQSO_Default, QStyleHintReturn* shr = 0 ) const; protected: bool eventFilter( TQObject* object, TQEvent* event ); private: // Disable copy constructor and = operator KStyle( const KStyle & ); KStyle& operator=( const KStyle & ); protected: virtual void virtual_hook( int id, void* data ); private: KStylePrivate *d; }; // vim: set noet ts=4 sw=4: #endif