summaryrefslogtreecommitdiffstats
path: root/tdefx/tdestyle.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdefx/tdestyle.h')
-rw-r--r--tdefx/tdestyle.h383
1 files changed, 383 insertions, 0 deletions
diff --git a/tdefx/tdestyle.h b/tdefx/tdestyle.h
new file mode 100644
index 000000000..9c3867bb3
--- /dev/null
+++ b/tdefx/tdestyle.h
@@ -0,0 +1,383 @@
+/*
+ * $Id$
+ *
+ * TDEStyle
+ * Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org>
+ *
+ * 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 <tqcommonstyle.h>
+
+#include <tdelibs_export.h>
+
+class KPixmap;
+
+struct TDEStylePrivate;
+/**
+ * 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::QStyle
+ * @see TQCommonStyle::QCommonStyle
+ * @author Karol Szwed (gallium@kde.org)
+ * @version $Id$
+ */
+class TDEFX_EXPORT TDEStyle: public TQCommonStyle
+{
+ Q_OBJECT
+
+
+ public:
+
+ /**
+ * TDEStyle Flags:
+ *
+ * @li Default - Default style setting, where menu transparency
+ * and the FilledFrameWorkaround are disabled.
+ *
+ * @li AllowMenuTransparency - Enable this flag to use TDEStyle'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 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 (gallium@kde.org)
+ */
+ TDEStyle( TDEStyleFlags flags = TDEStyle::Default,
+ TDEStyleScrollBarType sbtype = TDEStyle::WindowsStyleScrollBar );
+
+ /**
+ * Destructs the TDEStyle object.
+ */
+ ~TDEStyle();
+
+ /**
+ * 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 TDEStyle
+ * constructor should suffice.
+ * @param sbtype the scroll bar type
+ * @see TDEStyle::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;
+
+ // ---------------------------------------------------------------------------
+
+ /**
+ * 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.
+ * TDEStyle 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;
+
+ /**
+ * TDEStyle Primitive Elements:
+ *
+ * The TDEStyle class extends the Qt's Style API by providing certain
+ * simplifications for parts of TQStyle. To do this, the TDEStylePrimitive
+ * 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 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 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 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
+ };
+
+ // Old API
+ // DEPRECATED
+ virtual void drawTDEStylePrimitive( TDEStylePrimitive kpe,
+ TQPainter* p,
+ const TQWidget* widget,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags = Style_Default,
+ const TQStyleOption& = TQStyleOption::SO_Default ) const;
+
+ /**
+ * This function is identical to Qt's TQStyle::tqdrawPrimitive(), 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::tqdrawPrimitive
+ * @see TQStyle::drawComplexControl
+ */
+ virtual void drawTDEStylePrimitive( TDEStylePrimitive kpe,
+ TQPainter* p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags = Style_Default,
+ const TQStyleOption& = TQStyleOption::SO_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, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQWidget* widget = 0 ) const;
+
+ // ---------------------------------------------------------------------------
+
+ void polish( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+ void unPolish( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+ void polishPopupMenu( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr );
+
+ void drawPrimitive( TQ_PrimitiveElement pe,
+ TQPainter* p,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQRect &r,
+ const TQColorGroup &cg,
+ SFlags flags = Style_Default,
+ const TQStyleOption& = TQStyleOption::SO_Default ) const;
+
+// #ifdef USE_QT4 // tdebindings / smoke needs this function declaration available at all times. Furthermore I don't think it would hurt to have the declaration available at all times...so leave these commented out for now
+
+// void drawPrimitive( TQ_ControlElement pe,
+// TQPainter* p,
+// const TQStyleControlElementData &ceData,
+// ControlElementFlags elementFlags,
+// const TQRect &r,
+// const TQColorGroup &cg,
+// SFlags flags = Style_Default,
+// const TQStyleOption& = TQStyleOption::SO_Default ) const;
+
+// #endif // USE_QT4
+
+ 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::SO_Default,
+ const TQWidget* widget = 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::SO_Default,
+ const TQWidget* widget = 0 ) const;
+
+ SubControl querySubControl( TQ_ComplexControl control,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQPoint &pos,
+ const TQStyleOption& = TQStyleOption::SO_Default,
+ const TQWidget* widget = 0 ) const;
+
+ TQRect querySubControlMetrics( TQ_ComplexControl control,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ SubControl sc,
+ const TQStyleOption& = TQStyleOption::SO_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 = 0 ) const;
+
+ TQPixmap stylePixmap( StylePixmap stylepixmap,
+ const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQStyleOption& = TQStyleOption::SO_Default,
+ const TQWidget* widget = 0 ) const;
+
+ int styleHint( TQ_StyleHint sh, const TQStyleControlElementData &ceData,
+ ControlElementFlags elementFlags,
+ const TQStyleOption &opt = TQStyleOption::SO_Default,
+ TQStyleHintReturn* shr = 0,
+ const TQWidget* w = 0 ) const;
+
+ protected:
+ virtual bool objectEventHandler( const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void* source, TQEvent *e );
+
+ private:
+ // Disable copy constructor and = operator
+ TDEStyle( const TDEStyle & );
+ TDEStyle& operator=( const TDEStyle & );
+
+ protected:
+ virtual void virtual_hook( int id, void* data );
+ private:
+ TDEStylePrivate *d;
+};
+
+
+// vim: set noet ts=4 sw=4:
+#endif
+