|
Packit |
8e9c33 |
#ifndef adwaitastyle_h
|
|
Packit |
8e9c33 |
#define adwaitastyle_h
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*************************************************************************
|
|
Packit |
8e9c33 |
* Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr> *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is free software; you can redistribute it and/or modify *
|
|
Packit |
8e9c33 |
* it under the terms of the GNU General Public License as published by *
|
|
Packit |
8e9c33 |
* the Free Software Foundation; either version 2 of the License, or *
|
|
Packit |
8e9c33 |
* (at your option) any later version. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is distributed in the hope that it will be useful, *
|
|
Packit |
8e9c33 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
Packit |
8e9c33 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
Packit |
8e9c33 |
* GNU General Public License for more details. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* You should have received a copy of the GNU General Public License *
|
|
Packit |
8e9c33 |
* along with this program; if not, write to the *
|
|
Packit |
8e9c33 |
* Free Software Foundation, Inc., *
|
|
Packit |
8e9c33 |
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
Packit |
8e9c33 |
*************************************************************************/
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaita.h"
|
|
Packit |
8e9c33 |
#include "config-adwaita.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
#include "kstylekde4compat.h"
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QAbstractItemView>
|
|
Packit |
8e9c33 |
#include <QAbstractScrollArea>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QCommonStyle>
|
|
Packit |
8e9c33 |
#include <QDockWidget>
|
|
Packit |
8e9c33 |
#include <QHash>
|
|
Packit |
8e9c33 |
#include <QIcon>
|
|
Packit |
8e9c33 |
#include <QMdiSubWindow>
|
|
Packit |
8e9c33 |
#include <QStyleOption>
|
|
Packit |
8e9c33 |
#include <QWidget>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
#include <QCommandLinkButton>
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace AdwaitaPrivate
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
class TabBarData;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace Adwaita
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
class Animations;
|
|
Packit |
8e9c33 |
class Helper;
|
|
Packit |
8e9c33 |
class Mnemonics;
|
|
Packit |
8e9c33 |
class SplitterFactory;
|
|
Packit |
8e9c33 |
class WidgetExplorer;
|
|
Packit |
8e9c33 |
class WindowManager;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* convenience typedef for base class
|
|
Packit |
8e9c33 |
#if ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
using ParentStyleClass = KStyleKDE4Compat;
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
using ParentStyleClass = QCommonStyle;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* base class for adwaita style
|
|
Packit |
8e9c33 |
/** it is responsible to draw all the primitives to be displayed on screen, on request from Qt paint engine */
|
|
Packit |
8e9c33 |
class Style: public ParentStyleClass
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
Q_OBJECT
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/* this tells kde applications that custom style elements are supported, using the kstyle mechanism */
|
|
Packit |
8e9c33 |
Q_CLASSINFO ("X-KDE-CustomElements", "true")
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
public:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* constructor
|
|
Packit |
8e9c33 |
explicit Style( bool dark );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* destructor
|
|
Packit |
8e9c33 |
virtual ~Style( void );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* needed to avoid warnings at compilation time
|
|
Packit |
8e9c33 |
using ParentStyleClass::polish;
|
|
Packit |
8e9c33 |
using ParentStyleClass::unpolish;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* widget polishing
|
|
Packit |
8e9c33 |
virtual void polish( QWidget* );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* widget unpolishing
|
|
Packit |
8e9c33 |
virtual void unpolish( QWidget* );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* palette polishing
|
|
Packit |
8e9c33 |
virtual void polish( QPalette &palette );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* polish scrollarea
|
|
Packit |
8e9c33 |
void polishScrollArea( QAbstractScrollArea* );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* pixel metrics
|
|
Packit |
8e9c33 |
virtual int pixelMetric(PixelMetric, const QStyleOption* = nullptr, const QWidget* = nullptr) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* style hints
|
|
Packit |
8e9c33 |
virtual int styleHint(StyleHint, const QStyleOption* = nullptr, const QWidget* = nullptr, QStyleHintReturn* = nullptr) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns rect corresponding to one widget's subelement
|
|
Packit |
8e9c33 |
virtual QRect subElementRect( SubElement, const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns rect corresponding to one widget's subcontrol
|
|
Packit |
8e9c33 |
virtual QRect subControlRect( ComplexControl, const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns size matching contents
|
|
Packit |
8e9c33 |
QSize sizeFromContents( ContentsType, const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns which subcontrol given QPoint corresponds to
|
|
Packit |
8e9c33 |
SubControl hitTestComplexControl( ComplexControl, const QStyleOptionComplex*, const QPoint&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* primitives
|
|
Packit |
8e9c33 |
void drawPrimitive( PrimitiveElement, const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* controls
|
|
Packit |
8e9c33 |
void drawControl( ControlElement, const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* complex controls
|
|
Packit |
8e9c33 |
void drawComplexControl( ComplexControl, const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* generic text rendering
|
|
Packit |
8e9c33 |
virtual void drawItemText(
|
|
Packit |
8e9c33 |
QPainter*, const QRect&, int alignment, const QPalette&, bool enabled,
|
|
Packit |
8e9c33 |
const QString&, QPalette::ColorRole = QPalette::NoRole) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name event filters
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
virtual bool eventFilter(QObject *, QEvent *);
|
|
Packit |
8e9c33 |
bool eventFilterScrollArea( QWidget*, QEvent* );
|
|
Packit |
8e9c33 |
bool eventFilterComboBoxContainer( QWidget*, QEvent* );
|
|
Packit |
8e9c33 |
bool eventFilterDockWidget( QDockWidget*, QEvent* );
|
|
Packit |
8e9c33 |
bool eventFilterMdiSubWindow( QMdiSubWindow*, QEvent* );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
bool eventFilterCommandLinkButton( QCommandLinkButton*, QEvent* );
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* install event filter to object, in a unique way
|
|
Packit |
8e9c33 |
void addEventFilter( QObject* object )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
object->removeEventFilter( this );
|
|
Packit |
8e9c33 |
object->installEventFilter( this );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
protected Q_SLOTS:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* update configuration
|
|
Packit |
8e9c33 |
void configurationChanged( void );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* standard icons
|
|
Packit |
8e9c33 |
virtual QIcon standardIconImplementation( StandardPixmap, const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
protected:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* standard icons
|
|
Packit |
8e9c33 |
virtual QIcon standardIcon( StandardPixmap pixmap, const QStyleOption* option = nullptr, const QWidget* widget = nullptr) const
|
|
Packit |
8e9c33 |
{ return standardIconImplementation( pixmap, option, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* load configuration
|
|
Packit |
8e9c33 |
void loadConfiguration();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name subelementRect specialized functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* default implementation. Does not change anything
|
|
Packit |
8e9c33 |
QRect defaultSubElementRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return option->rect; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect pushButtonContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect pushButtonFocusRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect checkBoxContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect checkBoxIndicatorRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect checkBoxFocusRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect lineEditContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect progressBarGrooveRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect progressBarContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect progressBarLabelRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect headerArrowRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect headerLabelRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect sliderFocusRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabBarTabLeftButtonRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabBarTabRightButtonRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabWidgetTabBarRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabWidgetTabContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabWidgetTabPaneRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect tabWidgetCornerRect( SubElement, const QStyleOption*, const QWidget* widget ) const;
|
|
Packit |
8e9c33 |
QRect toolBoxTabContentsRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect genericLayoutItemRect( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name subcontrol Rect specialized functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect groupBoxSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect toolButtonSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect comboBoxSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect spinBoxSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect scrollBarInternalSubControlRect( const QStyleOptionComplex*, SubControl ) const;
|
|
Packit |
8e9c33 |
QRect scrollBarSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect dialSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QRect sliderSubControlRect( const QStyleOptionComplex*, SubControl, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name sizeFromContents
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
QSize defaultSizeFromContents( const QStyleOption*, const QSize& size, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return size; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSize checkBoxSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize lineEditSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize comboBoxSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize spinBoxSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize sliderSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize pushButtonSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize toolButtonSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize menuBarItemSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize menuItemSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize progressBarSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize tabWidgetSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize tabBarTabSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize headerSectionSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
QSize itemViewItemSizeFromContents( const QStyleOption*, const QSize&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name primitives specialized functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool emptyPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawFramePrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameLineEditPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameFocusRectPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameMenuPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameGroupBoxPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameTabWidgetPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameTabBarBasePrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawFrameWindowPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawIndicatorArrowUpPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return drawIndicatorArrowPrimitive( ArrowUp, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawIndicatorArrowDownPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return drawIndicatorArrowPrimitive( ArrowDown, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawIndicatorArrowLeftPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return drawIndicatorArrowPrimitive( ArrowLeft, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawIndicatorArrowRightPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return drawIndicatorArrowPrimitive( ArrowRight, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool drawIndicatorArrowPrimitive( ArrowOrientation, const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorHeaderArrowPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelButtonCommandPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelButtonToolPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawTabBarPanelButtonToolPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelScrollAreaCornerPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelMenuPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelTipLabelPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawPanelItemViewItemPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorCheckBoxPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorRadioButtonPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorButtonDropDownPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorTabClosePrimitive( const QStyleOption*, QPainter* painter, const QWidget* widget ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorTabTearPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorToolBarHandlePrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorToolBarSeparatorPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawIndicatorBranchPrimitive( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name controls specialized functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool emptyControl( const QStyleOption*, QPainter*, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
virtual bool drawPushButtonLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawToolButtonLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawCheckBoxLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawComboBoxLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawMenuBarEmptyArea( const QStyleOption*, QPainter* , const QWidget*) const;
|
|
Packit |
8e9c33 |
virtual bool drawMenuBarItemControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawMenuEmptyAreaControl( const QStyleOption*, QPainter* , const QWidget*) const;
|
|
Packit |
8e9c33 |
virtual bool drawMenuItemControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawProgressBarControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawProgressBarContentsControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawProgressBarGrooveControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawProgressBarLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawScrollBarSliderControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawScrollBarAddLineControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawScrollBarSubLineControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawShapedFrameControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawRubberBandControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawHeaderSectionControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawHeaderLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawHeaderEmptyAreaControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawTabBarTabLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawTabBarTabShapeControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawToolBoxTabLabelControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawToolBoxTabShapeControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
virtual bool drawDockWidgetTitleControl( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name complex ontrols specialized functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
bool drawGroupBoxComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawToolButtonComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawComboBoxComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawSpinBoxComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawSliderComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawDialComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawScrollBarComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
bool drawTitleBarComplexControl( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//!*@name various utilty functions
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* spinbox arrows
|
|
Packit |
8e9c33 |
void renderSpinBoxArrow( const SubControl&, const QStyleOptionSpinBox*, QPainter*, const QWidget*) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* menu title
|
|
Packit |
8e9c33 |
void renderMenuTitle( const QStyleOptionToolButton*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return dial angle based on option and value
|
|
Packit |
8e9c33 |
qreal dialAngle( const QStyleOptionSlider*, int ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns relevant scrollbar parent
|
|
Packit |
8e9c33 |
/** needed to detect parent focus */
|
|
Packit |
8e9c33 |
const QWidget* scrollBarParent( const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns true if given scrollbar arrow is animated
|
|
Packit |
8e9c33 |
QColor scrollBarArrowColor( const QStyleOptionSlider*, const SubControl&, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* scrollbar buttons
|
|
Packit |
8e9c33 |
enum ScrollBarButtonType
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
NoButton,
|
|
Packit |
8e9c33 |
SingleButton,
|
|
Packit |
8e9c33 |
DoubleButton
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns height for scrollbar buttons depending of button types
|
|
Packit |
8e9c33 |
int scrollBarButtonHeight( const ScrollBarButtonType& type ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
switch( type )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case NoButton: return Metrics::ScrollBar_NoButtonHeight;
|
|
Packit |
8e9c33 |
case SingleButton: return Metrics::ScrollBar_SingleButtonHeight;
|
|
Packit |
8e9c33 |
case DoubleButton: return Metrics::ScrollBar_DoubleButtonHeight;
|
|
Packit |
8e9c33 |
default: return 0;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* translucent background
|
|
Packit |
8e9c33 |
void setTranslucentBackground( QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/**
|
|
Packit |
8e9c33 |
separator can have a title and an icon
|
|
Packit |
8e9c33 |
in that case they are rendered as sunken flat toolbuttons
|
|
Packit |
8e9c33 |
return toolbutton option that matches named separator menu items
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
QStyleOptionToolButton separatorMenuItemOption( const QStyleOptionMenuItem*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* create toolbar extension icon
|
|
Packit |
8e9c33 |
QIcon toolBarExtensionIcon( StandardPixmap, const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* create title bar button icon
|
|
Packit |
8e9c33 |
QIcon titleBarButtonIcon( StandardPixmap, const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns item view parent if any
|
|
Packit |
8e9c33 |
/** needed to have correct color on focused checkboxes and radiobuttons */
|
|
Packit |
8e9c33 |
const QAbstractItemView* itemViewParent( const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns true if a given widget is a selected item in a focused list
|
|
Packit |
8e9c33 |
/**
|
|
Packit |
8e9c33 |
This is necessary to have the correct colors used for e.g. checkboxes and radiobuttons in lists
|
|
Packit |
8e9c33 |
@param widget The widget to be checked
|
|
Packit |
8e9c33 |
@param position Used to find the relevant QModelIndex
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
bool isSelectedItem( const QWidget*, const QPoint& ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if option corresponds to QtQuick control
|
|
Packit |
8e9c33 |
bool isQtQuickControl( const QStyleOption*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* adjust rect based on provided margins
|
|
Packit |
8e9c33 |
QRect insideMargin( const QRect& r, int margin ) const
|
|
Packit |
8e9c33 |
{ return insideMargin( r, margin, margin ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* adjust rect based on provided margins
|
|
Packit |
8e9c33 |
QRect insideMargin( const QRect& r, int marginWidth, int marginHeight ) const
|
|
Packit |
8e9c33 |
{ return r.adjusted( marginWidth, marginHeight, -marginWidth, -marginHeight ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* expand size based on margins
|
|
Packit |
8e9c33 |
QSize expandSize( const QSize& size, int margin ) const
|
|
Packit |
8e9c33 |
{ return expandSize( size, margin, margin ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* expand size based on margins
|
|
Packit |
8e9c33 |
QSize expandSize( const QSize& size, int marginWidth, int marginHeight ) const
|
|
Packit |
8e9c33 |
{ return size + 2*QSize( marginWidth, marginHeight ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns true for vertical tabs
|
|
Packit |
8e9c33 |
bool isVerticalTab( const QStyleOptionTab* option ) const
|
|
Packit |
8e9c33 |
{ return isVerticalTab( option->shape ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool isVerticalTab( const QTabBar::Shape& shape ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
return shape == QTabBar::RoundedEast
|
|
Packit |
8e9c33 |
|| shape == QTabBar::RoundedWest
|
|
Packit |
8e9c33 |
|| shape == QTabBar::TriangularEast
|
|
Packit |
8e9c33 |
|| shape == QTabBar::TriangularWest;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* right to left alignment handling
|
|
Packit |
8e9c33 |
using ParentStyleClass::visualRect;
|
|
Packit |
8e9c33 |
QRect visualRect(const QStyleOption* opt, const QRect& subRect) const
|
|
Packit |
8e9c33 |
{ return ParentStyleClass::visualRect(opt->direction, opt->rect, subRect); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* centering
|
|
Packit |
8e9c33 |
QRect centerRect(const QRect &rect, const QSize& size ) const
|
|
Packit |
8e9c33 |
{ return centerRect( rect, size.width(), size.height() ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect centerRect(const QRect &rect, int width, int height) const
|
|
Packit |
8e9c33 |
{ return QRect(rect.left() + (rect.width() - width)/2, rect.top() + (rect.height() - height)/2, width, height); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
Checks whether the point is before the bound rect for bound of given orientation.
|
|
Packit |
8e9c33 |
This is needed to implement custom number of buttons in scrollbars,
|
|
Packit |
8e9c33 |
as well as proper mouse-hover
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
inline bool preceeds( const QPoint&, const QRect&, const QStyleOption* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return which arrow button is hit by point for scrollbar double buttons
|
|
Packit |
8e9c33 |
inline QStyle::SubControl scrollBarHitTest( const QRect&, const QPoint&, const QStyleOption* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//! return true if one of the widget's parent inherits requested type
|
|
Packit |
8e9c33 |
inline bool hasParent( const QWidget*, const char* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if one of the widget's parent inherits requested type
|
|
Packit |
8e9c33 |
template<typename T> bool hasParent( const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if icons should be shown in menus
|
|
Packit |
8e9c33 |
bool showIconsInMenuItems( void ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if icons should be shown on buttons
|
|
Packit |
8e9c33 |
bool showIconsOnPushButtons( void ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if passed widget is a menu title (KMenu::addTitle)
|
|
Packit |
8e9c33 |
bool isMenuTitle( const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* return true if passed widget is a menu title (KMenu::addTitle)
|
|
Packit |
8e9c33 |
bool hasAlteredBackground( const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
private:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name scrollbar button types (for addLine and subLine )
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
ScrollBarButtonType _addLineButtons;
|
|
Packit |
8e9c33 |
ScrollBarButtonType _subLineButtons;
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* helper
|
|
Packit |
8e9c33 |
Helper* _helper;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* animations
|
|
Packit |
8e9c33 |
Animations* _animations;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* keyboard accelerators
|
|
Packit |
8e9c33 |
Mnemonics* _mnemonics;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* window manager
|
|
Packit |
8e9c33 |
WindowManager* _windowManager;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* splitter Factory, to extend splitters hit area
|
|
Packit |
8e9c33 |
SplitterFactory* _splitterFactory;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* widget explorer
|
|
Packit |
8e9c33 |
WidgetExplorer* _widgetExplorer;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* tabbar data
|
|
Packit |
8e9c33 |
AdwaitaPrivate::TabBarData* _tabBarData;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* icon hash
|
|
Packit |
8e9c33 |
using IconCache = QHash<StandardPixmap, QIcon>;
|
|
Packit |
8e9c33 |
IconCache _iconCache;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* pointer to primitive specialized function
|
|
Packit |
8e9c33 |
using StylePrimitive = bool(Style::*)(const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
StylePrimitive _frameFocusPrimitive = nullptr;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* pointer to control specialized function
|
|
Packit |
8e9c33 |
using StyleControl = bool (Style::*)( const QStyleOption*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* pointer to control specialized function
|
|
Packit |
8e9c33 |
using StyleComplexControl = bool (Style::*)( const QStyleOptionComplex*, QPainter*, const QWidget* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//*@name custom elements
|
|
Packit |
8e9c33 |
//@{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* use Argb Drag and Drop Window
|
|
Packit |
8e9c33 |
QStyle::StyleHint SH_ArgbDndWindow;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//! styled painting for KCapacityBar
|
|
Packit |
8e9c33 |
QStyle::ControlElement CE_CapacityBar;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool _dark { false };
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool _isGNOME { false };
|
|
Packit |
8e9c33 |
bool _isKDE { false };
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//@}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::preceeds( const QPoint& point, const QRect& bound, const QStyleOption* option ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( option->state&QStyle::State_Horizontal)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( option->direction == Qt::LeftToRight) return point.x() < bound.right();
|
|
Packit |
8e9c33 |
else return point.x() > bound.x();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return point.y() < bound.y();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_________________________________________________________________________
|
|
Packit |
8e9c33 |
QStyle::SubControl Style::scrollBarHitTest( const QRect& rect, const QPoint& point, const QStyleOption* option ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( option->state & QStyle::State_Horizontal)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( option->direction == Qt::LeftToRight ) return point.x() < rect.center().x() ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine;
|
|
Packit |
8e9c33 |
else return point.x() > rect.center().x() ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return point.y() < rect.center().y() ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::hasParent( const QWidget* widget, const char* className ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !widget ) return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
while( (widget = widget->parentWidget()) )
|
|
Packit |
8e9c33 |
{ if( widget->inherits( className ) ) return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_________________________________________________________________________
|
|
Packit |
8e9c33 |
template< typename T > bool Style::hasParent( const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !widget ) return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
while( (widget = widget->parentWidget()) )
|
|
Packit |
8e9c33 |
{ if( qobject_cast<const T*>( widget ) ) return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#endif
|