From 769df90a59d6aa840b8d6568287001e66e263f01 Mon Sep 17 00:00:00 2001 From: sandman Date: Sat, 29 Jun 2002 23:45:19 +0000 Subject: *** empty log message *** --- (limited to 'noncore/styles/theme/othemestyle.h') diff --git a/noncore/styles/theme/othemestyle.h b/noncore/styles/theme/othemestyle.h new file mode 100644 index 0000000..02bec78 --- a/dev/null +++ b/noncore/styles/theme/othemestyle.h @@ -0,0 +1,365 @@ +/* This file is part of the KDE libraries + Copyright (C) 1999 Daniel M. Duley + + 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 __KTHEMESTYLE_H +#define __KTHEMESTYLE_H + +#include "othemebase.h" +#include +#include +#include +#include +#include +#include + + +/** + * KDE themed styles. + * + * It provides methods for + * drawing most widgets with user-specified borders, highlights, pixmaps, + * etc. It also handles various other settings such as scrollbar types, + * rounded buttons, and shading types. For a full list of parameters this + * class handles refer to the KDE theme configuration documentation. + * + */ + +class OThemeStyle: public OThemeBase +{ + Q_OBJECT +public: + /** + * Construct a new @ref OThemeStyle object. + * + * @param configFile A KConfig file to use as the theme configuration. + * Defaults to ~/.kderc. + */ + OThemeStyle( const QString &configFile = QString::null ); + ~OThemeStyle(); + virtual void polish( QWidget* ); + virtual void unPolish( QWidget* ); + /** + * By default this just sets the background brushes to the pixmapped + * background. + */ + virtual void polish( QApplication *app ); + virtual void unPolish( QApplication* ); + + /// @internal + // to make it possible for derived classes to overload this function + virtual void polish( QPalette& pal ); + + /** + * This is a convenience method for drawing widgets with + * borders, highlights, pixmaps, colors, etc... + * You specify the widget type and it will draw it according to the + * config file settings. + * + * @param p The QPainter to draw on. + * @param g The color group to use. + * @param rounded @p true if the widget is rounded, @p false if rectangular. + * @param type The widget type to paint. + * @param fill An optional fill brush. Currently ignored (the config file + * is used instead). + */ + virtual void drawBaseButton( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + bool rounded = FALSE, WidgetType type = Bevel, + const QBrush *fill = 0 ); + /** + * Draw a mask with for widgets that may be rounded. + * + *Currently used + * by pushbuttons and comboboxes. + * + * @param p The QPainter to draw on. + * @param rounded @p true if the widget is rounded, @p false if rectangular. + */ + virtual void drawBaseMask( QPainter *p, int x, int y, int w, int h, + bool rounded ); + /** + * Draw a pushbutton. + * + * This calls @ref drawBaseButton() with @p PushButton as the + * widget type. + */ + virtual void drawButton( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + const QBrush *fill = 0 ); + /** + * Draw a bevel button. + * + * This calls @ref drawBaseButton() with Bevel as the + * widget type. + */ + virtual void drawBevelButton( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + const QBrush *fill = 0 ); +#if 0 + /** + * Draw a toolbar button. + */ + virtual void drawKToolBarButton( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = false, + bool raised = true, bool enabled = true, + bool popup = false, KToolButtonType type = Icon, + const QString &btext = QString::null, + const QPixmap *icon = NULL, + QFont *font = NULL, QWidget *btn = NULL ); + /** + * Draw the handle used in toolbars. + */ + void drawKBarHandle( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, + KToolBarPos type, QBrush *fill = NULL ); + + /** + * Draw a toolbar. + */ + void drawKToolBar( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, KToolBarPos type, + QBrush *fill = NULL ); +#endif + /** + * Return the space available in a pushbutton, taking configurable + * borders and highlights into account. + */ + virtual QRect buttonRect( int x, int y, int w, int h ); + /** + * Draw an arrow in the style specified by the config file. + */ + virtual void drawArrow( QPainter *p, Qt::ArrowType type, bool down, + int x, int y, int w, int h, const QColorGroup &g, + bool enabled = true, const QBrush *fill = 0 ); + /** + * Return the size of the exclusive indicator pixmap if one is specified + * in the config file, otherwise it uses the base style's size. + */ + virtual QSize exclusiveIndicatorSize() const; + /** + * Draw an exclusive indicator widget. + * + * If a pixmap is specified in the + * config file that is used, otherwise the base style's widget is drawn. + */ + virtual void drawExclusiveIndicator( QPainter* p, int x, int y, int w, + int h, const QColorGroup &g, bool on, + bool down = FALSE, + bool enabled = TRUE ); + /** + * Set the mask of an exclusive indicator widget. + * + * If a pixmap is specified + * it is masked according to it's transparent pixels, otherwise the + * base style's mask is used. + */ + virtual void drawExclusiveIndicatorMask( QPainter *p, int x, int y, int w, + int h, bool on ); + /** + * Set the mask of an indicator widget. + * + * If a pixmap is specified + * it is masked according to it's transparent pixels, otherwise the + * base style's mask is used. + */ + virtual void drawIndicatorMask( QPainter *p, int x, int y, int w, int h, + int state ); + /** + * Set the mask for pushbuttons. + */ + virtual void drawButtonMask( QPainter *p, int x, int y, int w, int h ); + /** + * Set the mask for combo boxes. + */ + virtual void drawComboButtonMask( QPainter *p, int x, int y, int w, int h ); + /** + * Return the size of the indicator pixmap if one is specified + * in the config file, otherwise it uses the base style's size. + */ + virtual QSize indicatorSize() const; + /** + * Draw an indicator widget. + * + * If a pixmap is specified in the + * config file that is used, otherwise the base style's widget is drawn. + */ + virtual void drawIndicator( QPainter* p, int x, int y, int w, int h, + const QColorGroup &g, int state, + bool down = FALSE, bool enabled = TRUE ); + /** + * Draw a combobox. + */ + virtual void drawComboButton( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + bool editable = FALSE, bool enabled = TRUE, + const QBrush *fill = 0 ); + /** + * Draw a pushbutton. + */ + virtual void drawPushButton( QPushButton* btn, QPainter *p ); + /** + * Return the amount of button content displacement specified by the + * config file. + */ + virtual void getButtonShift( int &x, int &y ); + /** + * Return the frame width. + */ + virtual int defaultFrameWidth() const; + /** + * Calculate the metrics of the scrollbar controls according to the + * layout specified by the config file. + */ + virtual void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int& ); + /** + * Draw a themed scrollbar. + */ + virtual void drawScrollBarControls( QPainter*, const QScrollBar*, + int sliderStart, uint controls, + uint activeControl ); + /** + * Return the control that the given point is over according to the + * layout in the config file. + */ + virtual ScrollControl scrollBarPointOver( const QScrollBar*, + int sliderStart, const QPoint& ); + /** + * Return the configurable default slider length. + */ + virtual int sliderLength() const; + /** + * Draw a slider control. + */ + virtual void drawSlider( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation, bool tickAbove, + bool tickBelow ); + /** + * Draw a slider groove. + */ + void drawSliderGroove( QPainter *p, int x, int y, int w, int h, + const QColorGroup& g, QCOORD c, + Orientation ); + /** + * Draw the mask for a slider (both the control and groove. + */ + virtual void drawSliderMask( QPainter *p, int x, int y, int w, int h, + Orientation, bool tickAbove, bool tickBelow ); + // void drawSliderGrooveMask(QPainter *p,int x, int y, int w, int h, + // QCOORD c, Orientation ); + /** + * Convience method for drawing themed scrollbar grooves. + * + * Since the + * grooves may be a scaled pixmap you cannot just bitblt the pixmap at + * any offset. This generates a cached pixmap at full size if needed and + * then copies the requested area. + * + * @param p The painter to draw on. + * @param sb The scrollbar (usually given by drawScrollBarControls). + * @param horizontal Is the scrollBar horizontal? + * @param r The rectangle to fill. + * @param g The color group to use. + */ + virtual void drawScrollBarGroove( QPainter *p, const QScrollBar *sb, + bool horizontal, QRect r, QColorGroup g ); + /** + * Draw a shaded rectangle using the given style. + * + * @param p The painter to draw on. + * @param g The color group to use. + * @param rounded Draws a rounded shape if true. Requires bWidth to be + * at least 1. + * @param hWidth The highlight width. + * @param bWidth The border width. + * @param style The shading style to use. + */ + virtual void drawShade( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, bool rounded, + int hWidth, int bWidth, ShadeStyle style ); + /** + * Draw the text for a pushbutton. + */ + virtual void drawPushButtonLabel( QPushButton *btn, QPainter *p ); + /** + * Draw a menubar. + */ +#if 0 + + void drawKMenuBar( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool macMode, + QBrush *fill = NULL ); +#endif + /** + * Draw a menubar item. + */ +#if 0 + + virtual void drawKMenuItem( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool active, + QMenuItem *item, QBrush *fill = NULL ); +#endif + /** + * Return the width of the splitter as specified in the config file. + */ + virtual int splitterWidth() const; + /** + * Draw a splitter widget. + */ + virtual void drawSplitter( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation ); + /** + * Draw a checkmark. + */ + virtual void drawCheckMark( QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool act, bool dis ); + /** + * Draw a menu item. + * + * Note: This method manually handles applying + * inactive menu backgrounds to the entire widget. + */ + virtual void drawPopupMenuItem( QPainter *p, bool checkable, int maxpmw, + int tab, QMenuItem *mi, const QPalette &pal, + bool act, bool enabled, int x, int y, int w, + int h ); + int popupMenuItemHeight( bool checkable, QMenuItem *mi, + const QFontMetrics &fm ); + /** + * Draw the focus rectangle. + */ + void drawFocusRect( QPainter *p, const QRect &r, const QColorGroup &g, + const QColor *c = 0, bool atBorder = false ); + /** + * Draw a @ref KProgess bar. + */ + // virtual void drawKProgressBlock(QPainter *p, int x, int y, int w, int h, + // const QColorGroup &g, QBrush *fill); + /** + * Return the background for @ref KProgress. + */ + // virtual void getKProgressBackground(const QColorGroup &g, QBrush &bg); + virtual void tabbarMetrics( const QTabBar*, int&, int&, int& ); + virtual void drawTab( QPainter*, const QTabBar*, QTab*, bool selected ); + virtual void drawTabMask( QPainter*, const QTabBar*, QTab*, bool selected ); +protected: + QPalette oldPalette, popupPalette, indiPalette, exIndiPalette; + + class OThemeStylePrivate; + OThemeStylePrivate *d; +}; + +#endif -- cgit v0.9.0.2