|
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 "adwaitastyle.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaita.h"
|
|
Packit |
8e9c33 |
#include "adwaitaanimations.h"
|
|
Packit |
8e9c33 |
#include "adwaitahelper.h"
|
|
Packit |
8e9c33 |
#include "adwaitamnemonics.h"
|
|
Packit |
8e9c33 |
#include "adwaitapropertynames.h"
|
|
Packit |
8e9c33 |
#include "adwaitasplitterproxy.h"
|
|
Packit |
8e9c33 |
#include "fakeadwaitastyleconfigdata.h"
|
|
Packit |
8e9c33 |
#include "adwaitawidgetexplorer.h"
|
|
Packit |
8e9c33 |
#include "adwaitawindowmanager.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QApplication>
|
|
Packit |
8e9c33 |
#include <QCheckBox>
|
|
Packit |
8e9c33 |
#include <QComboBox>
|
|
Packit |
8e9c33 |
#include <QDial>
|
|
Packit |
8e9c33 |
#include <QDialog>
|
|
Packit |
8e9c33 |
#include <QDBusConnection>
|
|
Packit |
8e9c33 |
#include <QDockWidget>
|
|
Packit |
8e9c33 |
#include <QFormLayout>
|
|
Packit |
8e9c33 |
#include <QGraphicsView>
|
|
Packit |
8e9c33 |
#include <QGroupBox>
|
|
Packit |
8e9c33 |
#include <QLineEdit>
|
|
Packit |
8e9c33 |
#include <QMainWindow>
|
|
Packit |
8e9c33 |
#include <QMdiSubWindow>
|
|
Packit |
8e9c33 |
#include <QMenu>
|
|
Packit |
8e9c33 |
#include <QPainter>
|
|
Packit |
8e9c33 |
#include <QProxyStyle>
|
|
Packit |
8e9c33 |
#include <QPushButton>
|
|
Packit |
8e9c33 |
#include <QRadioButton>
|
|
Packit |
8e9c33 |
#include <QScrollBar>
|
|
Packit |
8e9c33 |
#include <QItemDelegate>
|
|
Packit |
8e9c33 |
#include <QSplitterHandle>
|
|
Packit |
8e9c33 |
#include <QTextEdit>
|
|
Packit |
8e9c33 |
#include <QToolBar>
|
|
Packit |
8e9c33 |
#include <QToolBox>
|
|
Packit |
8e9c33 |
#include <QToolButton>
|
|
Packit |
8e9c33 |
#include <QWidgetAction>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace AdwaitaPrivate
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// needed to keep track of tabbars when being dragged
|
|
Packit |
8e9c33 |
class TabBarData: public QObject
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
public:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* constructor
|
|
Packit |
8e9c33 |
explicit TabBarData( QObject* parent ):
|
|
Packit |
8e9c33 |
QObject( parent )
|
|
Packit |
8e9c33 |
{}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* destructor
|
|
Packit |
8e9c33 |
virtual ~TabBarData( void )
|
|
Packit |
8e9c33 |
{}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* assign target tabBar
|
|
Packit |
8e9c33 |
void lock( const QWidget* widget )
|
|
Packit |
8e9c33 |
{ _tabBar = widget; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* true if tabbar is locked
|
|
Packit |
8e9c33 |
bool isLocked( const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return _tabBar && _tabBar.data() == widget; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* release
|
|
Packit |
8e9c33 |
void release( void )
|
|
Packit |
8e9c33 |
{ _tabBar.clear(); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
private:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* pointer to target tabBar
|
|
Packit |
8e9c33 |
Adwaita::WeakPointer<const QWidget> _tabBar;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* needed to have spacing added to items in combobox
|
|
Packit |
8e9c33 |
class ComboBoxItemDelegate: public QItemDelegate
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
public:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* constructor
|
|
Packit |
8e9c33 |
ComboBoxItemDelegate( QAbstractItemView* parent ):
|
|
Packit |
8e9c33 |
QItemDelegate( parent ),
|
|
Packit |
8e9c33 |
_proxy( parent->itemDelegate() ),
|
|
Packit |
8e9c33 |
_itemMargin( Adwaita::Metrics::ItemView_ItemMarginWidth )
|
|
Packit |
8e9c33 |
{}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* destructor
|
|
Packit |
8e9c33 |
virtual ~ComboBoxItemDelegate( void )
|
|
Packit |
8e9c33 |
{}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* paint
|
|
Packit |
8e9c33 |
void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// call either proxy or parent class
|
|
Packit |
8e9c33 |
if( _proxy ) _proxy.data()->paint( painter, option, index );
|
|
Packit |
8e9c33 |
else QItemDelegate::paint( painter, option, index );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* size hint for index
|
|
Packit |
8e9c33 |
virtual QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get size from either proxy or parent class
|
|
Packit |
8e9c33 |
QSize size( _proxy ?
|
|
Packit |
8e9c33 |
_proxy.data()->sizeHint( option, index ):
|
|
Packit |
8e9c33 |
QItemDelegate::sizeHint( option, index ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// adjust and return
|
|
Packit |
8e9c33 |
if( size.isValid() ) { size.rheight() += _itemMargin*2; }
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
private:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* proxy
|
|
Packit |
8e9c33 |
Adwaita::WeakPointer<QAbstractItemDelegate> _proxy;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* margin
|
|
Packit |
8e9c33 |
int _itemMargin;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
void tabLayout(const QStyleOptionTabV3 *opt, const QWidget *widget, QRect *textRect, QRect *iconRect, const QStyle *proxyStyle) {
|
|
Packit |
8e9c33 |
Q_ASSERT(textRect);
|
|
Packit |
8e9c33 |
Q_ASSERT(iconRect);
|
|
Packit |
8e9c33 |
QRect tr = opt->rect;
|
|
Packit |
8e9c33 |
bool verticalTabs = opt->shape == QTabBar::RoundedEast
|
|
Packit |
8e9c33 |
|| opt->shape == QTabBar::RoundedWest
|
|
Packit |
8e9c33 |
|| opt->shape == QTabBar::TriangularEast
|
|
Packit |
8e9c33 |
|| opt->shape == QTabBar::TriangularWest;
|
|
Packit |
8e9c33 |
if (verticalTabs)
|
|
Packit |
8e9c33 |
tr.setRect(0, 0, tr.height(), tr.width()); //0, 0 as we will have a translate transform
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt, widget);
|
|
Packit |
8e9c33 |
int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt, widget);
|
|
Packit |
8e9c33 |
int hpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2;
|
|
Packit |
8e9c33 |
int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2;
|
|
Packit |
8e9c33 |
if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth)
|
|
Packit |
8e9c33 |
verticalShift = -verticalShift;
|
|
Packit |
8e9c33 |
tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding);
|
|
Packit |
8e9c33 |
bool selected = opt->state & QStyle::State_Selected;
|
|
Packit |
8e9c33 |
if (selected) {
|
|
Packit |
8e9c33 |
tr.setTop(tr.top() - verticalShift);
|
|
Packit |
8e9c33 |
tr.setRight(tr.right() - horizontalShift);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// left widget
|
|
Packit |
8e9c33 |
if (!opt->leftButtonSize.isEmpty()) {
|
|
Packit |
8e9c33 |
tr.setLeft(tr.left() + 4 +
|
|
Packit |
8e9c33 |
(verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width()));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
// right widget
|
|
Packit |
8e9c33 |
if (!opt->rightButtonSize.isEmpty()) {
|
|
Packit |
8e9c33 |
tr.setRight(tr.right() - 4 -
|
|
Packit |
8e9c33 |
(verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width()));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// icon
|
|
Packit |
8e9c33 |
if (!opt->icon.isNull()) {
|
|
Packit |
8e9c33 |
QSize iconSize = opt->iconSize;
|
|
Packit |
8e9c33 |
if (!iconSize.isValid()) {
|
|
Packit |
8e9c33 |
int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize);
|
|
Packit |
8e9c33 |
iconSize = QSize(iconExtent, iconExtent);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
QSize tabIconSize = opt->icon.actualSize(iconSize,
|
|
Packit |
8e9c33 |
(opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled,
|
|
Packit |
8e9c33 |
(opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
*iconRect = QRect(tr.left(), tr.center().y() - tabIconSize.height() / 2,
|
|
Packit |
8e9c33 |
tabIconSize.width(), tabIconSize .height());
|
|
Packit |
8e9c33 |
if (!verticalTabs)
|
|
Packit |
8e9c33 |
*iconRect = proxyStyle->visualRect(opt->direction, opt->rect, *iconRect);
|
|
Packit |
8e9c33 |
tr.setLeft(tr.left() + tabIconSize.width() + 4);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!verticalTabs)
|
|
Packit |
8e9c33 |
tr = proxyStyle->visualRect(opt->direction, opt->rect, tr);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
*textRect = tr;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace Adwaita
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
Style::Style( bool dark ):
|
|
Packit |
8e9c33 |
_addLineButtons( SingleButton )
|
|
Packit |
8e9c33 |
, _subLineButtons( SingleButton )
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
, _helper( new Helper( "adwaita" ) )
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
, _helper( new Helper( ) )
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
, _animations( new Animations( this ) )
|
|
Packit |
8e9c33 |
, _mnemonics( new Mnemonics( this ) )
|
|
Packit |
8e9c33 |
, _windowManager( new WindowManager( this ) )
|
|
Packit |
8e9c33 |
, _splitterFactory( new SplitterFactory( this ) )
|
|
Packit |
8e9c33 |
, _widgetExplorer( new WidgetExplorer( this ) )
|
|
Packit |
8e9c33 |
, _tabBarData( new AdwaitaPrivate::TabBarData( this ) )
|
|
Packit |
8e9c33 |
#if ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
, SH_ArgbDndWindow( newStyleHint( QStringLiteral( "SH_ArgbDndWindow" ) ) )
|
|
Packit |
8e9c33 |
, CE_CapacityBar( newControlElement( QStringLiteral( "CE_CapacityBar" ) ) )
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
, _dark(dark)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// use DBus connection to update on adwaita configuration change
|
|
Packit |
8e9c33 |
QDBusConnection dbus = QDBusConnection::sessionBus();
|
|
Packit |
8e9c33 |
dbus.connect( QString(),
|
|
Packit |
8e9c33 |
QStringLiteral( "/AdwaitaStyle" ),
|
|
Packit |
8e9c33 |
QStringLiteral( "org.kde.Adwaita.Style" ),
|
|
Packit |
8e9c33 |
QStringLiteral( "reparseConfiguration" ), this, SLOT(configurationChanged()) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
dbus.connect( QString(),
|
|
Packit |
8e9c33 |
QStringLiteral( "/AdwaitaDecoration" ),
|
|
Packit |
8e9c33 |
QStringLiteral( "org.kde.Adwaita.Style" ),
|
|
Packit |
8e9c33 |
QStringLiteral( "reparseConfiguration" ), this, SLOT(configurationChanged()) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Detect if running under KDE, if so set menus, etc, to have translucent background.
|
|
Packit |
8e9c33 |
// For GNOME desktop, dont want translucent backgrounds otherwise no menu shadow is drawn.
|
|
Packit |
8e9c33 |
_isKDE = qgetenv("XDG_CURRENT_DESKTOP").toLower()=="kde";
|
|
Packit |
8e9c33 |
_isGNOME = qgetenv("XDG_CURRENT_DESKTOP").toLower()=="gnome";
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// call the slot directly; this initial call will set up things that also
|
|
Packit |
8e9c33 |
// need to be reset when the system palette changes
|
|
Packit |
8e9c33 |
loadConfiguration();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
Style::~Style( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
delete _helper;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::polish( QWidget* widget )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !widget ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// register widget to animations
|
|
Packit |
8e9c33 |
_animations->registerWidget( widget );
|
|
Packit |
8e9c33 |
_windowManager->registerWidget( widget );
|
|
Packit |
8e9c33 |
_splitterFactory->registerWidget( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// enable mouse over effects for all necessary widgets
|
|
Packit |
8e9c33 |
if(
|
|
Packit |
8e9c33 |
qobject_cast<QAbstractItemView*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QAbstractSpinBox*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QCheckBox*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QComboBox*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QDial*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QLineEdit*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QPushButton*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QRadioButton*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QScrollBar*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QSlider*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QSplitterHandle*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QTabBar*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QTextEdit*>( widget )
|
|
Packit |
8e9c33 |
|| qobject_cast<QToolButton*>( widget )
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
|| qobject_cast<QHeaderView*>( widget )
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|| widget->inherits( "KTextEditor::View" )
|
|
Packit |
8e9c33 |
)
|
|
Packit |
8e9c33 |
{ widget->setAttribute( Qt::WA_Hover ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (qobject_cast<QTabBar*>(widget)) {
|
|
Packit |
8e9c33 |
qobject_cast<QTabBar*>(widget)->setDrawBase(true);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// enforce translucency for drag and drop window
|
|
Packit |
8e9c33 |
if( widget->testAttribute( Qt::WA_X11NetWmWindowTypeDND ) && _helper->compositingActive() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
widget->setAttribute( Qt::WA_TranslucentBackground );
|
|
Packit |
8e9c33 |
widget->clearMask();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// scrollarea polishing is somewhat complex. It is moved to a dedicated method
|
|
Packit |
8e9c33 |
polishScrollArea( qobject_cast<QAbstractScrollArea*>( widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( QAbstractItemView *itemView = qobject_cast<QAbstractItemView*>( widget ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// enable mouse over effects in itemviews' viewport
|
|
Packit |
8e9c33 |
itemView->viewport()->setAttribute( Qt::WA_Hover );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( QGroupBox* groupBox = qobject_cast<QGroupBox*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// checkable group boxes
|
|
Packit |
8e9c33 |
if( groupBox->isCheckable() )
|
|
Packit |
8e9c33 |
{ groupBox->setAttribute( Qt::WA_Hover ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QAbstractButton*>( widget ) && qobject_cast<QDockWidget*>( widget->parent() ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setAttribute( Qt::WA_Hover );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QAbstractButton*>( widget ) && qobject_cast<QToolBox*>( widget->parent() ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setAttribute( Qt::WA_Hover );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QFrame*>( widget ) && widget->parent() && widget->parent()->inherits( "KTitleWidget" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
if( !StyleConfigData::titleWidgetDrawFrame() )
|
|
Packit |
8e9c33 |
{ widget->setBackgroundRole( QPalette::Window ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( qobject_cast<QScrollBar*>( widget ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// remove opaque painting for scrollbars
|
|
Packit |
8e9c33 |
widget->setAttribute( Qt::WA_OpaquePaintEvent, false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget->inherits( "KTextEditor::View" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( QToolButton* toolButton = qobject_cast<QToolButton*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( toolButton->autoRaise() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// for flat toolbuttons, adjust foreground and background role accordingly
|
|
Packit |
8e9c33 |
widget->setBackgroundRole( QPalette::NoRole );
|
|
Packit |
8e9c33 |
widget->setForegroundRole( QPalette::WindowText );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( widget->parentWidget() &&
|
|
Packit |
8e9c33 |
widget->parentWidget()->parentWidget() &&
|
|
Packit |
8e9c33 |
widget->parentWidget()->parentWidget()->inherits( "Gwenview::SideBarGroup" ) )
|
|
Packit |
8e9c33 |
{ widget->setProperty( PropertyNames::toolButtonAlignment, Qt::AlignLeft ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QDockWidget*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add event filter on dock widgets
|
|
Packit |
8e9c33 |
// and alter palette
|
|
Packit |
8e9c33 |
widget->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
widget->setContentsMargins( Metrics::Frame_FrameWidth, Metrics::Frame_FrameWidth, Metrics::Frame_FrameWidth, Metrics::Frame_FrameWidth );
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QMdiSubWindow*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QToolBox*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setBackgroundRole( QPalette::NoRole );
|
|
Packit |
8e9c33 |
widget->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget->parentWidget() && widget->parentWidget()->parentWidget() && qobject_cast<QToolBox*>( widget->parentWidget()->parentWidget()->parentWidget() ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
widget->setBackgroundRole( QPalette::NoRole );
|
|
Packit |
8e9c33 |
widget->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
widget->parentWidget()->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QMenu*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
setTranslucentBackground( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
} else if( qobject_cast<QCommandLinkButton*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
} else if( QComboBox *comboBox = qobject_cast<QComboBox*>( widget ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !hasParent( widget, "QWebView" ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QAbstractItemView *itemView( comboBox->view() );
|
|
Packit |
8e9c33 |
if( itemView && itemView->itemDelegate() && itemView->itemDelegate()->inherits( "QComboBoxDelegate" ) )
|
|
Packit |
8e9c33 |
{ itemView->setItemDelegate( new AdwaitaPrivate::ComboBoxItemDelegate( itemView ) ); }
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget->inherits( "QComboBoxPrivateContainer" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
setTranslucentBackground( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget->inherits( "QTipLabel" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
setTranslucentBackground( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!widget->parent() || !qobject_cast<QWidget *>(widget->parent())) {
|
|
Packit |
8e9c33 |
addEventFilter( widget );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// base class polishing
|
|
Packit |
8e9c33 |
ParentStyleClass::polish( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::polishScrollArea( QAbstractScrollArea* scrollArea )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check argument
|
|
Packit |
8e9c33 |
if( !scrollArea ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// enable mouse over effect in sunken scrollareas that support focus
|
|
Packit |
8e9c33 |
if( scrollArea->frameShadow() == QFrame::Sunken && scrollArea->focusPolicy()&Qt::StrongFocus )
|
|
Packit |
8e9c33 |
{ scrollArea->setAttribute( Qt::WA_Hover ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( scrollArea->viewport() && scrollArea->inherits( "KItemListContainer" ) && scrollArea->frameShape() == QFrame::NoFrame )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
scrollArea->viewport()->setBackgroundRole( QPalette::Window );
|
|
Packit |
8e9c33 |
scrollArea->viewport()->setForegroundRole( QPalette::WindowText );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add event filter, to make sure proper background is rendered behind scrollbars
|
|
Packit |
8e9c33 |
addEventFilter( scrollArea );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// force side panels as flat, on option
|
|
Packit |
8e9c33 |
if( scrollArea->inherits( "KDEPrivate::KPageListView" ) || scrollArea->inherits( "KDEPrivate::KPageTreeView" ) )
|
|
Packit |
8e9c33 |
{ scrollArea->setProperty( PropertyNames::sidePanelView, true ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// for all side view panels, unbold font (design choice)
|
|
Packit |
8e9c33 |
if( scrollArea->property( PropertyNames::sidePanelView ).toBool() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// upbold list font
|
|
Packit |
8e9c33 |
QFont font( scrollArea->font() );
|
|
Packit |
8e9c33 |
font.setBold( false );
|
|
Packit |
8e9c33 |
scrollArea->setFont( font );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// adjust background role
|
|
Packit |
8e9c33 |
if( !StyleConfigData::sidePanelDrawFrame() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
scrollArea->setBackgroundRole( QPalette::Window );
|
|
Packit |
8e9c33 |
scrollArea->setForegroundRole( QPalette::WindowText );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( scrollArea->viewport() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
scrollArea->viewport()->setBackgroundRole( QPalette::Window );
|
|
Packit |
8e9c33 |
scrollArea->viewport()->setForegroundRole( QPalette::WindowText );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// disable autofill background for flat (== NoFrame) scrollareas, with QPalette::Window as a background
|
|
Packit |
8e9c33 |
// this fixes flat scrollareas placed in a tinted widget, such as groupboxes, tabwidgets or framed dock-widgets
|
|
Packit |
8e9c33 |
if( !(scrollArea->frameShape() == QFrame::NoFrame || scrollArea->backgroundRole() == QPalette::Window ) )
|
|
Packit |
8e9c33 |
{ return; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get viewport and check background role
|
|
Packit |
8e9c33 |
QWidget* viewport( scrollArea->viewport() );
|
|
Packit |
8e9c33 |
if( !( viewport && viewport->backgroundRole() == QPalette::Window ) ) return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// change viewport autoFill background.
|
|
Packit |
8e9c33 |
// do the same for all children if the background role is QPalette::Window
|
|
Packit |
8e9c33 |
viewport->setAutoFillBackground( false );
|
|
Packit |
8e9c33 |
QList<QWidget*> children( viewport->findChildren<QWidget*>() );
|
|
Packit |
8e9c33 |
foreach( QWidget* child, children )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( child->parent() == viewport && child->backgroundRole() == QPalette::Window )
|
|
Packit |
8e9c33 |
{ child->setAutoFillBackground( false ); }
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::unpolish( QWidget* widget )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// register widget to animations
|
|
Packit |
8e9c33 |
_animations->unregisterWidget( widget );
|
|
Packit |
8e9c33 |
_windowManager->unregisterWidget( widget );
|
|
Packit |
8e9c33 |
_splitterFactory->unregisterWidget( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// remove event filter
|
|
Packit |
8e9c33 |
if( qobject_cast<QAbstractScrollArea*>( widget ) ||
|
|
Packit |
8e9c33 |
qobject_cast<QDockWidget*>( widget ) ||
|
|
Packit |
8e9c33 |
qobject_cast<QMdiSubWindow*>( widget ) ||
|
|
Packit |
8e9c33 |
widget->inherits( "QComboBoxPrivateContainer" ) ||
|
|
Packit |
8e9c33 |
qobject_cast<QDialog *>(widget) ||
|
|
Packit |
8e9c33 |
qobject_cast<QMainWindow *>(widget))
|
|
Packit |
8e9c33 |
{ widget->removeEventFilter( this ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
ParentStyleClass::unpolish( widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
void Style::polish(QPalette &palette)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (_dark) {
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Window, QColor("#33393b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::WindowText, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Base, QColor("#232729"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::AlternateBase, QColor("#1c1f20"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ToolTipBase, QColor("#1c1f20"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ToolTipText, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Text, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Button, QColor("#25292b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ButtonText, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::BrightText, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Light, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Midlight, QColor("#d7d7d7"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Mid, QColor("#b4b4b4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Dark, QColor("#1a1a1a"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Link, QColor("#2a76c6"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::LinkVisited, QColor("#2a76c6"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Window, QColor("#2e3436"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Base, QColor("#3d4244"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor("#3a3d3e"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Text, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Button, QColor("#33393b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::BrightText, QColor("#ededed"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Light, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Midlight, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Dark, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Mid, QColor("#c3c3c3"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Link, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Window, QColor("#33393b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::WindowText, QColor("#d3d4d5"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Base, QColor("#252a2c"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor("#1d2021"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Text, QColor("#d3d4d5"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Button, QColor("#33393b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::ButtonText, QColor("#eeeeec"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::BrightText, QColor("#d3d4d5"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Light, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Midlight, QColor("#d7d7d7"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Mid, QColor("#b4b4b4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Dark, QColor("#33393b"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Link, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::LinkVisited, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Window, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::WindowText, QColor("#2e3436"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Base, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::AlternateBase, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ToolTipBase, QColor("#060606"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ToolTipText, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Text, QColor("#2e3436"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Button, QColor("#eeeeee"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::ButtonText, QColor("#2e3436"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::BrightText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Light, QColor("#fafafa"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Midlight, QColor("#f3f3f3"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Dark, QColor("#d3d3d3"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Mid, QColor("#b4b4b4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::Link, QColor("#2a76c6"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::All, QPalette::LinkVisited, QColor("#2a76c6"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Window, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Base, QColor("white"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Text, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Button, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor("#8d9091"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::BrightText, QColor("#ededed"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Light, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Midlight, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Dark, QColor("#f4f4f4"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Mid, QColor("#c3c3c3"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::Link, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Disabled, QPalette::LinkVisited, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Window, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::WindowText, QColor("#54595a"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Base, QColor("#fcfcfc"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Text, QColor("#54595a"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Button, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::ButtonText, QColor("#54595a"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::BrightText, QColor("#ededed"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Light, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Midlight, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Dark, QColor("#ededed"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Mid, QColor("#c3c3c3"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Shadow, QColor("black"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Highlight, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QColor("white"));
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::Link, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
palette.setColor(QPalette::Inactive, QPalette::LinkVisited, QColor("#4a90d9"));
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
int Style::pixelMetric( PixelMetric metric, const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// handle special cases
|
|
Packit |
8e9c33 |
switch( metric )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// frame width
|
|
Packit |
8e9c33 |
case PM_DefaultFrameWidth:
|
|
Packit |
8e9c33 |
if ( widget && widget->inherits("QComboBoxPrivateContainer") ) return 1;
|
|
Packit |
8e9c33 |
if( qobject_cast<const QMenu*>( widget ) ) return Metrics::Menu_FrameWidth;
|
|
Packit |
8e9c33 |
if( qobject_cast<const QLineEdit*>( widget ) ) return Metrics::LineEdit_FrameWidth;
|
|
Packit |
8e9c33 |
if( qobject_cast<const QAbstractScrollArea*>( widget ) ) return Metrics::ScrollArea_FrameWidth;
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
else if( isQtQuickControl( option, widget ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
const QString &elementType = option->styleObject->property( "elementType" ).toString();
|
|
Packit |
8e9c33 |
if( elementType == QLatin1String( "edit" ) || elementType == QLatin1String( "spinbox" ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return Metrics::LineEdit_FrameWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( elementType == QLatin1String( "combobox" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return Metrics::ComboBox_FrameWidth;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
return Metrics::Frame_FrameWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_ComboBoxFrameWidth:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
const QStyleOptionComboBox* comboBoxOption( qstyleoption_cast< const QStyleOptionComboBox*>( option ) );
|
|
Packit |
8e9c33 |
return comboBoxOption && comboBoxOption->editable ? Metrics::LineEdit_FrameWidth : Metrics::ComboBox_FrameWidth;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_SpinBoxFrameWidth: return Metrics::SpinBox_FrameWidth;
|
|
Packit |
8e9c33 |
case PM_ToolBarFrameWidth: return Metrics::ToolBar_FrameWidth;
|
|
Packit |
8e9c33 |
case PM_ToolTipLabelFrameWidth: return Metrics::ToolTip_FrameWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// layout
|
|
Packit |
8e9c33 |
case PM_LayoutLeftMargin:
|
|
Packit |
8e9c33 |
case PM_LayoutTopMargin:
|
|
Packit |
8e9c33 |
case PM_LayoutRightMargin:
|
|
Packit |
8e9c33 |
case PM_LayoutBottomMargin:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* use either Child margin or TopLevel margin,
|
|
Packit |
8e9c33 |
* depending on widget type
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
if( ( option && ( option->state & QStyle::State_Window ) ) || ( widget && widget->isWindow() ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return Metrics::Layout_TopLevelMarginWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget && widget->inherits( "KPageView" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return Metrics::Layout_ChildMarginWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_LayoutHorizontalSpacing: return Metrics::Layout_DefaultSpacing;
|
|
Packit |
8e9c33 |
case PM_LayoutVerticalSpacing: return Metrics::Layout_DefaultSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// buttons
|
|
Packit |
8e9c33 |
case PM_ButtonMargin:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// needs special case for kcalc buttons, to prevent the application to set too small margins
|
|
Packit |
8e9c33 |
if( widget && widget->inherits( "KCalcButton" ) ) return Metrics::Button_MarginWidth + 4;
|
|
Packit |
8e9c33 |
else return Metrics::Button_MarginWidth;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_ButtonDefaultIndicator: return 0;
|
|
Packit |
8e9c33 |
case PM_ButtonShiftHorizontal: return 0;
|
|
Packit |
8e9c33 |
case PM_ButtonShiftVertical: return 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// menubars
|
|
Packit |
8e9c33 |
case PM_MenuBarPanelWidth: return 0;
|
|
Packit |
8e9c33 |
case PM_MenuBarHMargin: return 0;
|
|
Packit |
8e9c33 |
case PM_MenuBarVMargin: return 0;
|
|
Packit |
8e9c33 |
case PM_MenuBarItemSpacing: return 0;
|
|
Packit |
8e9c33 |
case PM_MenuDesktopFrameWidth: return 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// menu buttons
|
|
Packit |
8e9c33 |
case PM_MenuButtonIndicator: return Metrics::MenuButton_IndicatorWidth;
|
|
Packit |
8e9c33 |
case PM_MenuVMargin: return 2;
|
|
Packit |
8e9c33 |
case PM_MenuHMargin: return _isGNOME ? 0 : 1;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// toolbars
|
|
Packit |
8e9c33 |
case PM_ToolBarHandleExtent: return Metrics::ToolBar_HandleExtent;
|
|
Packit |
8e9c33 |
case PM_ToolBarSeparatorExtent: return Metrics::ToolBar_SeparatorWidth;
|
|
Packit |
8e9c33 |
case PM_ToolBarExtensionExtent:
|
|
Packit |
8e9c33 |
return pixelMetric( PM_SmallIconSize, option, widget ) + 2*Metrics::ToolButton_MarginWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_ToolBarItemMargin: return 0;
|
|
Packit |
8e9c33 |
case PM_ToolBarItemSpacing: return Metrics::ToolBar_ItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// tabbars
|
|
Packit |
8e9c33 |
case PM_TabBarTabShiftVertical: return 0;
|
|
Packit |
8e9c33 |
case PM_TabBarTabShiftHorizontal: return 0;
|
|
Packit |
8e9c33 |
case PM_TabBarTabOverlap: return Metrics::TabBar_TabOverlap;
|
|
Packit |
8e9c33 |
case PM_TabBarBaseOverlap: return Metrics::TabBar_BaseOverlap;
|
|
Packit |
8e9c33 |
case PM_TabBarTabHSpace: return 2*Metrics::TabBar_TabMarginWidth;
|
|
Packit |
8e9c33 |
case PM_TabBarTabVSpace: return 2*Metrics::TabBar_TabMarginHeight;
|
|
Packit |
8e9c33 |
case PM_TabCloseIndicatorWidth:
|
|
Packit |
8e9c33 |
case PM_TabCloseIndicatorHeight:
|
|
Packit |
8e9c33 |
return pixelMetric( PM_SmallIconSize, option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// scrollbars
|
|
Packit |
8e9c33 |
case PM_ScrollBarExtent: return Metrics::ScrollBar_Extend;
|
|
Packit |
8e9c33 |
case PM_ScrollBarSliderMin: return Metrics::ScrollBar_MinSliderHeight;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// title bar
|
|
Packit |
8e9c33 |
case PM_TitleBarHeight: return 2*Metrics::TitleBar_MarginWidth + pixelMetric( PM_SmallIconSize, option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// sliders
|
|
Packit |
8e9c33 |
case PM_SliderThickness: return Metrics::Slider_ControlThickness;
|
|
Packit |
8e9c33 |
case PM_SliderControlThickness: return Metrics::Slider_ControlThickness;
|
|
Packit |
8e9c33 |
case PM_SliderLength: return Metrics::Slider_ControlThickness;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// checkboxes and radio buttons
|
|
Packit |
8e9c33 |
case PM_IndicatorWidth: return Metrics::CheckBox_Size;
|
|
Packit |
8e9c33 |
case PM_IndicatorHeight: return Metrics::CheckBox_Size;
|
|
Packit |
8e9c33 |
case PM_ExclusiveIndicatorWidth: return Metrics::CheckBox_Size;
|
|
Packit |
8e9c33 |
case PM_ExclusiveIndicatorHeight: return Metrics::CheckBox_Size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// list heaaders
|
|
Packit |
8e9c33 |
case PM_HeaderMarkSize: return Metrics::Header_ArrowSize;
|
|
Packit |
8e9c33 |
case PM_HeaderMargin: return Metrics::Header_MarginWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// dock widget
|
|
Packit |
8e9c33 |
// return 0 here, since frame is handled directly in polish
|
|
Packit |
8e9c33 |
case PM_DockWidgetFrameWidth: return 0;
|
|
Packit |
8e9c33 |
case PM_DockWidgetTitleMargin: return Metrics::Frame_FrameWidth;
|
|
Packit |
8e9c33 |
case PM_DockWidgetTitleBarButtonMargin: return Metrics::ToolButton_MarginWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PM_SplitterWidth: return Metrics::Splitter_SplitterWidth;
|
|
Packit |
8e9c33 |
case PM_DockWidgetSeparatorExtent: return Metrics::Splitter_SplitterWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::pixelMetric( metric, option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
int Style::styleHint( StyleHint hint, const QStyleOption* option, const QWidget* widget, QStyleHintReturn* returnData ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
switch( hint )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SH_RubberBand_Mask:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask*>( returnData ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
mask->region = option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* need to check on widget before removing inner region
|
|
Packit |
8e9c33 |
* in order to still preserve rubberband in MainWindow and QGraphicsView
|
|
Packit |
8e9c33 |
* in QMainWindow because it looks better
|
|
Packit |
8e9c33 |
* in QGraphicsView because the painting fails completely otherwise
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
if( widget && (
|
|
Packit |
8e9c33 |
qobject_cast<const QAbstractItemView*>( widget->parent() ) ||
|
|
Packit |
8e9c33 |
qobject_cast<const QGraphicsView*>( widget->parent() ) ||
|
|
Packit |
8e9c33 |
qobject_cast<const QMainWindow*>( widget->parent() ) ) )
|
|
Packit |
8e9c33 |
{ return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// also check if widget's parent is some itemView viewport
|
|
Packit |
8e9c33 |
if( widget && widget->parent() &&
|
|
Packit |
8e9c33 |
qobject_cast<const QAbstractItemView*>( widget->parent()->parent() ) &&
|
|
Packit |
8e9c33 |
static_cast<const QAbstractItemView*>( widget->parent()->parent() )->viewport() == widget->parent() )
|
|
Packit |
8e9c33 |
{ return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// mask out center
|
|
Packit |
8e9c33 |
mask->region -= insideMargin( option->rect, 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return true;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SH_ComboBox_ListMouseTracking: return true;
|
|
Packit |
8e9c33 |
case SH_MenuBar_MouseTracking: return true;
|
|
Packit |
8e9c33 |
case SH_Menu_MouseTracking: return true;
|
|
Packit |
8e9c33 |
case SH_Menu_SubMenuPopupDelay: return 150;
|
|
Packit |
8e9c33 |
case SH_Menu_SloppySubMenus: return true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
case SH_Widget_Animate: return StyleConfigData::animationsEnabled();
|
|
Packit |
8e9c33 |
case SH_Menu_SupportsSections: return true;
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SH_DialogButtonBox_ButtonsHaveIcons: return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SH_GroupBox_TextLabelVerticalAlignment: return Qt::AlignVCenter;
|
|
Packit |
8e9c33 |
case SH_TabBar_Alignment: return StyleConfigData::tabBarDrawCenteredTabs() ? Qt::AlignCenter:Qt::AlignLeft;
|
|
Packit |
8e9c33 |
case SH_ToolBox_SelectedPageTitleBold: return false;
|
|
Packit |
8e9c33 |
case SH_ScrollBar_MiddleClickAbsolutePosition: return true;
|
|
Packit |
8e9c33 |
case SH_ScrollView_FrameOnlyAroundContents: return false;
|
|
Packit |
8e9c33 |
case SH_FormLayoutFormAlignment: return Qt::AlignLeft | Qt::AlignTop;
|
|
Packit |
8e9c33 |
case SH_FormLayoutLabelAlignment: return Qt::AlignRight;
|
|
Packit |
8e9c33 |
case SH_FormLayoutFieldGrowthPolicy: return QFormLayout::ExpandingFieldsGrow;
|
|
Packit |
8e9c33 |
case SH_FormLayoutWrapPolicy: return QFormLayout::DontWrapRows;
|
|
Packit |
8e9c33 |
case SH_MessageBox_TextInteractionFlags: return Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse;
|
|
Packit |
8e9c33 |
case SH_ProgressDialog_CenterCancelButton: return false;
|
|
Packit |
8e9c33 |
case SH_MessageBox_CenterButtons: return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SH_RequestSoftwareInputPanel: return RSIP_OnMouseClick;
|
|
Packit |
8e9c33 |
case SH_TitleBar_NoBorder: return true;
|
|
Packit |
8e9c33 |
case SH_DockWidget_ButtonsHaveFrame: return false;
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::styleHint( hint, option, widget, returnData );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::subElementRect( SubElement element, const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SE_PushButtonContents: return pushButtonContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_PushButtonFocusRect: return pushButtonFocusRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_CheckBoxContents: return checkBoxContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_CheckBoxIndicator: return checkBoxIndicatorRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_CheckBoxFocusRect: return checkBoxFocusRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_RadioButtonContents: return checkBoxContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_RadioButtonIndicator: return checkBoxIndicatorRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_RadioButtonFocusRect: return checkBoxFocusRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_LineEditContents: return lineEditContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_ProgressBarGroove: return progressBarGrooveRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_ProgressBarContents: return progressBarContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_ProgressBarLabel: return progressBarLabelRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_HeaderArrow: return headerArrowRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_HeaderLabel: return headerLabelRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_SliderFocusRect: return sliderFocusRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabBarTabLeftButton: return tabBarTabLeftButtonRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabBarTabRightButton: return tabBarTabRightButtonRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabWidgetTabBar: return tabWidgetTabBarRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabWidgetTabContents: return tabWidgetTabContentsRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabWidgetTabPane: return tabWidgetTabPaneRect( option, widget );
|
|
Packit |
8e9c33 |
case SE_TabWidgetLeftCorner: return tabWidgetCornerRect( SE_TabWidgetLeftCorner, option, widget );
|
|
Packit |
8e9c33 |
case SE_TabWidgetRightCorner: return tabWidgetCornerRect( SE_TabWidgetRightCorner, option, widget );
|
|
Packit |
8e9c33 |
case SE_ToolBoxTabContents: return toolBoxTabContentsRect( option, widget );
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::subElementRect( element, option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::subControlRect( ComplexControl element, const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case CC_GroupBox: return groupBoxSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_ToolButton: return toolButtonSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_ComboBox: return comboBoxSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_SpinBox: return spinBoxSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_ScrollBar: return scrollBarSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_Dial: return dialSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
case CC_Slider: return sliderSubControlRect( option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::subControlRect( element, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::sizeFromContents( ContentsType element, const QStyleOption* option, const QSize& size, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case CT_CheckBox: return checkBoxSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_RadioButton: return checkBoxSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_LineEdit: return lineEditSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_ComboBox: return comboBoxSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_SpinBox: return spinBoxSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_Slider: return sliderSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_PushButton: return pushButtonSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_ToolButton: return toolButtonSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_MenuBar: return defaultSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_MenuBarItem: return menuBarItemSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_MenuItem: return menuItemSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_ProgressBar: return progressBarSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_TabWidget: return tabWidgetSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_TabBarTab: return tabBarTabSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_HeaderSection: return headerSectionSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
case CT_ItemViewItem: return itemViewItemSizeFromContents( option, size, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::sizeFromContents( element, option, size, widget );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QStyle::SubControl Style::hitTestComplexControl( ComplexControl control, const QStyleOptionComplex* option, const QPoint& point, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
switch( control )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case CC_ScrollBar:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect grooveRect = subControlRect( CC_ScrollBar, option, SC_ScrollBarGroove, widget );
|
|
Packit |
8e9c33 |
if( grooveRect.contains( point ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// Must be either page up/page down, or just click on the slider.
|
|
Packit |
8e9c33 |
QRect sliderRect = subControlRect( CC_ScrollBar, option, SC_ScrollBarSlider, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( sliderRect.contains( point ) ) return SC_ScrollBarSlider;
|
|
Packit |
8e9c33 |
else if( preceeds( point, sliderRect, option ) ) return SC_ScrollBarSubPage;
|
|
Packit |
8e9c33 |
else return SC_ScrollBarAddPage;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// This is one of the up/down buttons. First, decide which one it is.
|
|
Packit |
8e9c33 |
if( preceeds( point, grooveRect, option ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( _subLineButtons == DoubleButton )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect buttonRect = scrollBarInternalSubControlRect( option, SC_ScrollBarSubLine );
|
|
Packit |
8e9c33 |
return scrollBarHitTest( buttonRect, point, option );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return SC_ScrollBarSubLine;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( _addLineButtons == DoubleButton )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect buttonRect = scrollBarInternalSubControlRect( option, SC_ScrollBarAddLine );
|
|
Packit |
8e9c33 |
return scrollBarHitTest( buttonRect, point, option );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return SC_ScrollBarAddLine;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::hitTestComplexControl( control, option, point, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::drawPrimitive( PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
StylePrimitive fcn( nullptr );
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case PE_PanelButtonCommand: fcn = &Style::drawPanelButtonCommandPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_PanelButtonTool: fcn = &Style::drawPanelButtonToolPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_PanelScrollAreaCorner: fcn = &Style::drawPanelScrollAreaCornerPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_PanelMenu: fcn = &Style::drawPanelMenuPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_PanelTipLabel: fcn = &Style::drawPanelTipLabelPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_PanelItemViewItem: fcn = &Style::drawPanelItemViewItemPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorCheckBox: fcn = &Style::drawIndicatorCheckBoxPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorRadioButton: fcn = &Style::drawIndicatorRadioButtonPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorButtonDropDown: fcn = &Style::drawIndicatorButtonDropDownPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorTabClose: fcn = &Style::drawIndicatorTabClosePrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorTabTear: fcn = &Style::drawIndicatorTabTearPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorArrowUp: fcn = &Style::drawIndicatorArrowUpPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorArrowDown: fcn = &Style::drawIndicatorArrowDownPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorArrowLeft: fcn = &Style::drawIndicatorArrowLeftPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorArrowRight: fcn = &Style::drawIndicatorArrowRightPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorHeaderArrow: fcn = &Style::drawIndicatorHeaderArrowPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorToolBarHandle: fcn = &Style::drawIndicatorToolBarHandlePrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorToolBarSeparator: fcn = &Style::drawIndicatorToolBarSeparatorPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_IndicatorBranch: fcn = &Style::drawIndicatorBranchPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameStatusBar: fcn = &Style::emptyPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_Frame: fcn = &Style::drawFramePrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameLineEdit: fcn = &Style::drawFrameLineEditPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameMenu: fcn = &Style::drawFrameMenuPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameGroupBox: fcn = &Style::drawFrameGroupBoxPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameTabWidget: fcn = &Style::drawFrameTabWidgetPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameTabBarBase: fcn = &Style::drawFrameTabBarBasePrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameWindow: fcn = &Style::drawFrameWindowPrimitive; break;
|
|
Packit |
8e9c33 |
case PE_FrameFocusRect: fcn = _frameFocusPrimitive; break;
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// call function if implemented
|
|
Packit |
8e9c33 |
if( !( fcn && ( this->*fcn )( option, painter, widget ) ) )
|
|
Packit |
8e9c33 |
{ ParentStyleClass::drawPrimitive( element, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
StyleControl fcn( nullptr );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if ADWAITA_HAVE_KSTYLE||ADWAITA_USE_KDE4
|
|
Packit |
8e9c33 |
if( element == CE_CapacityBar )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
fcn = &Style::drawProgressBarControl;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( element ) {
|
|
Packit |
8e9c33 |
case CE_PushButtonBevel: fcn = &Style::drawPanelButtonCommandPrimitive; break;
|
|
Packit |
8e9c33 |
case CE_PushButtonLabel: fcn = &Style::drawPushButtonLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_CheckBoxLabel: fcn = &Style::drawCheckBoxLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_RadioButtonLabel: fcn = &Style::drawCheckBoxLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_ToolButtonLabel: fcn = &Style::drawToolButtonLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_ComboBoxLabel: fcn = &Style::drawComboBoxLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_MenuBarEmptyArea: fcn = &Style::drawMenuBarEmptyArea; break;
|
|
Packit |
8e9c33 |
case CE_MenuBarItem: fcn = &Style::drawMenuBarItemControl; break;
|
|
Packit |
8e9c33 |
case CE_MenuEmptyArea: fcn = &Style::drawMenuEmptyAreaControl; break;
|
|
Packit |
8e9c33 |
case CE_MenuItem: fcn = &Style::drawMenuItemControl; break;
|
|
Packit |
8e9c33 |
case CE_ToolBar: fcn = &Style::emptyControl; break;
|
|
Packit |
8e9c33 |
case CE_ProgressBar: fcn = &Style::drawProgressBarControl; break;
|
|
Packit |
8e9c33 |
case CE_ProgressBarContents: fcn = &Style::drawProgressBarContentsControl; break;
|
|
Packit |
8e9c33 |
case CE_ProgressBarGroove: fcn = &Style::drawProgressBarGrooveControl; break;
|
|
Packit |
8e9c33 |
case CE_ProgressBarLabel: fcn = &Style::drawProgressBarLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_ScrollBarSlider: fcn = &Style::drawScrollBarSliderControl; break;
|
|
Packit |
8e9c33 |
case CE_ScrollBarAddLine: fcn = &Style::drawScrollBarAddLineControl; break;
|
|
Packit |
8e9c33 |
case CE_ScrollBarSubLine: fcn = &Style::drawScrollBarSubLineControl; break;
|
|
Packit |
8e9c33 |
case CE_ScrollBarAddPage: fcn = &Style::emptyControl; break;
|
|
Packit |
8e9c33 |
case CE_ScrollBarSubPage: fcn = &Style::emptyControl; break;
|
|
Packit |
8e9c33 |
case CE_ShapedFrame: fcn = &Style::drawShapedFrameControl; break;
|
|
Packit |
8e9c33 |
case CE_RubberBand: fcn = &Style::drawRubberBandControl; break;
|
|
Packit |
8e9c33 |
case CE_SizeGrip: fcn = &Style::emptyControl; break;
|
|
Packit |
8e9c33 |
case CE_HeaderSection: fcn = &Style::drawHeaderSectionControl; break;
|
|
Packit |
8e9c33 |
case CE_HeaderLabel: fcn = &Style::drawHeaderLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_HeaderEmptyArea: fcn = &Style::drawHeaderEmptyAreaControl; break;
|
|
Packit |
8e9c33 |
case CE_TabBarTabLabel: fcn = &Style::drawTabBarTabLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_TabBarTabShape: fcn = &Style::drawTabBarTabShapeControl; break;
|
|
Packit |
8e9c33 |
case CE_ToolBoxTabLabel: fcn = &Style::drawToolBoxTabLabelControl; break;
|
|
Packit |
8e9c33 |
case CE_ToolBoxTabShape: fcn = &Style::drawToolBoxTabShapeControl; break;
|
|
Packit |
8e9c33 |
case CE_DockWidgetTitle: fcn = &Style::drawDockWidgetTitleControl; break;
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// call function if implemented
|
|
Packit |
8e9c33 |
if( !( fcn && ( this->*fcn )( option, painter, widget ) ) )
|
|
Packit |
8e9c33 |
{ ParentStyleClass::drawControl( element, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
void Style::drawComplexControl( ComplexControl element, const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
StyleComplexControl fcn( nullptr );
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case CC_GroupBox: fcn = &Style::drawGroupBoxComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_ToolButton: fcn = &Style::drawToolButtonComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_ComboBox: fcn = &Style::drawComboBoxComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_SpinBox: fcn = &Style::drawSpinBoxComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_Slider: fcn = &Style::drawSliderComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_Dial: fcn = &Style::drawDialComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_ScrollBar: fcn = &Style::drawScrollBarComplexControl; break;
|
|
Packit |
8e9c33 |
case CC_TitleBar: fcn = &Style::drawTitleBarComplexControl; break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->save();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// call function if implemented
|
|
Packit |
8e9c33 |
if( !( fcn && ( this->*fcn )( option, painter, widget ) ) )
|
|
Packit |
8e9c33 |
{ ParentStyleClass::drawComplexControl( element, option, painter, widget ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter->restore();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________
|
|
Packit |
8e9c33 |
void Style::drawItemText(
|
|
Packit |
8e9c33 |
QPainter* painter, const QRect& rect, int flags, const QPalette& palette, bool enabled,
|
|
Packit |
8e9c33 |
const QString &text, QPalette::ColorRole textRole ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// hide mnemonics if requested
|
|
Packit |
8e9c33 |
if( !_mnemonics->enabled() && ( flags&Qt::TextShowMnemonic ) && !( flags&Qt::TextHideMnemonic ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
flags &= ~Qt::TextShowMnemonic;
|
|
Packit |
8e9c33 |
flags |= Qt::TextHideMnemonic;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure vertical alignment is defined
|
|
Packit |
8e9c33 |
// fallback on Align::VCenter if not
|
|
Packit |
8e9c33 |
if( !(flags&Qt::AlignVertical_Mask) ) flags |= Qt::AlignVCenter;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( _animations->widgetEnabilityEngine().enabled() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* check if painter engine is registered to WidgetEnabilityEngine, and animated
|
|
Packit |
8e9c33 |
* if yes, merge the palettes. Note: a static_cast is safe here, since only the address
|
|
Packit |
8e9c33 |
* of the pointer is used, not the actual content.
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
const QWidget* widget( static_cast<const QWidget*>( painter->device() ) );
|
|
Packit |
8e9c33 |
if( _animations->widgetEnabilityEngine().isAnimated( widget, AnimationEnable ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPalette copy( _helper->disabledPalette( palette, _animations->widgetEnabilityEngine().opacity( widget, AnimationEnable ) ) );
|
|
Packit |
8e9c33 |
return ParentStyleClass::drawItemText( painter, rect, flags, copy, enabled, text, textRole );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
return ParentStyleClass::drawItemText( painter, rect, flags, palette, enabled, text, textRole );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_____________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::eventFilter( QObject *object, QEvent *event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( QDockWidget* dockWidget = qobject_cast<QDockWidget*>( object ) ) { return eventFilterDockWidget( dockWidget, event ); }
|
|
Packit |
8e9c33 |
else if( QMdiSubWindow* subWindow = qobject_cast<QMdiSubWindow*>( object ) ) { return eventFilterMdiSubWindow( subWindow, event ); }
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
else if( QCommandLinkButton* commandLinkButton = qobject_cast<QCommandLinkButton*>( object ) ) { return eventFilterCommandLinkButton( commandLinkButton, event ); }
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
// cast to QWidget
|
|
Packit |
8e9c33 |
QWidget *widget = static_cast<QWidget*>( object );
|
|
Packit |
8e9c33 |
if( widget->inherits( "QAbstractScrollArea" ) || widget->inherits( "KTextEditor::View" ) ) { return eventFilterScrollArea( widget, event ); }
|
|
Packit |
8e9c33 |
else if( widget->inherits( "QComboBoxPrivateContainer" ) ) { return eventFilterComboBoxContainer( widget, event ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if ((!widget->parent() || !qobject_cast<QWidget *>(widget->parent())) &&
|
|
Packit |
8e9c33 |
(QEvent::Show==event->type() || QEvent::StyleChange==event->type())) {
|
|
Packit |
8e9c33 |
_helper->setVariant(widget, _dark ? "dark" : "light");
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// fallback
|
|
Packit |
8e9c33 |
return ParentStyleClass::eventFilter( object, event );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::eventFilterScrollArea( QWidget* widget, QEvent* event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( event->type() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QEvent::Paint:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get scrollarea viewport
|
|
Packit |
8e9c33 |
QAbstractScrollArea* scrollArea( qobject_cast<QAbstractScrollArea*>( widget ) );
|
|
Packit |
8e9c33 |
QWidget* viewport;
|
|
Packit |
8e9c33 |
if( !( scrollArea && (viewport = scrollArea->viewport()) ) ) break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get scrollarea horizontal and vertical containers
|
|
Packit |
8e9c33 |
QWidget* child( nullptr );
|
|
Packit |
8e9c33 |
QList<QWidget*> children;
|
|
Packit |
8e9c33 |
if( ( child = scrollArea->findChild<QWidget*>( "qt_scrollarea_vcontainer" ) ) && child->isVisible() )
|
|
Packit |
8e9c33 |
{ children.append( child ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( ( child = scrollArea->findChild<QWidget*>( "qt_scrollarea_hcontainer" ) ) && child->isVisible() )
|
|
Packit |
8e9c33 |
{ children.append( child ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( children.empty() ) break;
|
|
Packit |
8e9c33 |
if( !scrollArea->styleSheet().isEmpty() ) break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure proper background is rendered behind the containers
|
|
Packit |
8e9c33 |
QPainter painter( scrollArea );
|
|
Packit |
8e9c33 |
painter.setClipRegion( static_cast<QPaintEvent*>( event )->region() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter.setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// decide background color
|
|
Packit |
8e9c33 |
const QPalette::ColorRole role( viewport->backgroundRole() );
|
|
Packit |
8e9c33 |
QColor background;
|
|
Packit |
8e9c33 |
if( role == QPalette::Window && hasAlteredBackground( viewport ) ) background = _helper->frameBackgroundColor( viewport->palette() );
|
|
Packit |
8e9c33 |
else background = viewport->palette().color( role );
|
|
Packit |
8e9c33 |
painter.setBrush( background );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
foreach( auto* child, children )
|
|
Packit |
8e9c33 |
{ painter.drawRect( child->geometry() ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QEvent::MouseButtonPress:
|
|
Packit |
8e9c33 |
case QEvent::MouseButtonRelease:
|
|
Packit |
8e9c33 |
case QEvent::MouseMove:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// case event
|
|
Packit |
8e9c33 |
QMouseEvent* mouseEvent( static_cast<QMouseEvent*>( event ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get frame framewidth
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_DefaultFrameWidth, 0, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// find list of scrollbars
|
|
Packit |
8e9c33 |
QList<QScrollBar*> scrollBars;
|
|
Packit |
8e9c33 |
if( QAbstractScrollArea* scrollArea = qobject_cast<QAbstractScrollArea*>( widget ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( scrollArea->horizontalScrollBarPolicy() != Qt::ScrollBarAlwaysOff ) scrollBars.append( scrollArea->horizontalScrollBar() );
|
|
Packit |
8e9c33 |
if( scrollArea->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff )scrollBars.append( scrollArea->verticalScrollBar() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( widget->inherits( "KTextEditor::View" ) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
scrollBars = widget->findChildren<QScrollBar*>();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// loop over found scrollbars
|
|
Packit |
8e9c33 |
foreach( QScrollBar* scrollBar, scrollBars )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !( scrollBar && scrollBar->isVisible() ) ) continue;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPoint offset;
|
|
Packit |
8e9c33 |
if( scrollBar->orientation() == Qt::Horizontal ) offset = QPoint( 0, frameWidth );
|
|
Packit |
8e9c33 |
else offset = QPoint( QApplication::isLeftToRight() ? frameWidth : -frameWidth, 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// map position to scrollarea
|
|
Packit |
8e9c33 |
QPoint position( scrollBar->mapFrom( widget, mouseEvent->pos() - offset ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check if contains
|
|
Packit |
8e9c33 |
if( !scrollBar->rect().contains( position ) ) continue;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy event, send and return
|
|
Packit |
8e9c33 |
QMouseEvent copy(
|
|
Packit |
8e9c33 |
mouseEvent->type(),
|
|
Packit |
8e9c33 |
position,
|
|
Packit |
8e9c33 |
scrollBar->mapToGlobal( position ),
|
|
Packit |
8e9c33 |
mouseEvent->button(),
|
|
Packit |
8e9c33 |
mouseEvent->buttons(), mouseEvent->modifiers());
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QCoreApplication::sendEvent( scrollBar, © );
|
|
Packit |
8e9c33 |
event->setAccepted( true );
|
|
Packit |
8e9c33 |
return true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return ParentStyleClass::eventFilter( widget, event );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::eventFilterComboBoxContainer( QWidget* widget, QEvent* event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( event->type() == QEvent::Paint )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPainter painter( widget );
|
|
Packit |
8e9c33 |
QPaintEvent *paintEvent = static_cast<QPaintEvent*>( event );
|
|
Packit |
8e9c33 |
painter.setClipRegion( paintEvent->region() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( widget->rect() );
|
|
Packit |
8e9c33 |
const QPalette& palette( widget->palette() );
|
|
Packit |
8e9c33 |
QColor background( _helper->frameBackgroundColor( palette ) );
|
|
Packit |
8e9c33 |
QColor outline( _helper->frameOutlineColor( palette ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool hasAlpha( _helper->hasAlphaChannel( widget ) );
|
|
Packit |
8e9c33 |
if( hasAlpha )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter.setCompositionMode( QPainter::CompositionMode_Source );
|
|
Packit |
8e9c33 |
_helper->renderMenuFrame( &painter, rect, background, outline, true );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
_helper->renderMenuFrame( &painter, rect, background, outline, false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::eventFilterDockWidget( QDockWidget* dockWidget, QEvent* event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( event->type() == QEvent::Paint )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// create painter and clip
|
|
Packit |
8e9c33 |
QPainter painter( dockWidget );
|
|
Packit |
8e9c33 |
QPaintEvent *paintEvent = static_cast<QPaintEvent*>( event );
|
|
Packit |
8e9c33 |
painter.setClipRegion( paintEvent->region() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// store palette and set colors
|
|
Packit |
8e9c33 |
const QPalette& palette( dockWidget->palette() );
|
|
Packit |
8e9c33 |
QColor background( _helper->frameBackgroundColor( palette ) );
|
|
Packit |
8e9c33 |
QColor outline( _helper->frameOutlineColor( palette ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// store rect
|
|
Packit |
8e9c33 |
QRect rect( dockWidget->rect() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// render
|
|
Packit |
8e9c33 |
if( dockWidget->isFloating() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
_helper->renderMenuFrame( &painter, rect, background, outline, false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( StyleConfigData::dockWidgetDrawFrame() || (dockWidget->features()&QDockWidget::AllDockWidgetFeatures) ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
_helper->renderFrame( &painter, rect, background, outline );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::eventFilterMdiSubWindow( QMdiSubWindow* subWindow, QEvent* event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( event->type() == QEvent::Paint )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QPainter painter( subWindow );
|
|
Packit |
8e9c33 |
QPaintEvent* paintEvent( static_cast<QPaintEvent*>( event ) );
|
|
Packit |
8e9c33 |
painter.setClipRegion( paintEvent->region() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( subWindow->rect() );
|
|
Packit |
8e9c33 |
QColor background( subWindow->palette().color( QPalette::Window ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( subWindow->isMaximized() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// full painting
|
|
Packit |
8e9c33 |
painter.setPen( Qt::NoPen );
|
|
Packit |
8e9c33 |
painter.setBrush( background );
|
|
Packit |
8e9c33 |
painter.drawRect( rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// framed painting
|
|
Packit |
8e9c33 |
_helper->renderMenuFrame( &painter, rect, background, QColor() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// continue with normal painting
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________________
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
bool Style::eventFilterCommandLinkButton( QCommandLinkButton* button, QEvent* event )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( event->type() == QEvent::Paint )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// painter
|
|
Packit |
8e9c33 |
QPainter painter( button );
|
|
Packit |
8e9c33 |
painter.setClipRegion( static_cast<QPaintEvent*>( event )->region() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool isFlat = false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// option
|
|
Packit |
8e9c33 |
QStyleOptionButton option;
|
|
Packit |
8e9c33 |
option.initFrom( button );
|
|
Packit |
8e9c33 |
option.features |= QStyleOptionButton::CommandLinkButton;
|
|
Packit |
8e9c33 |
if( isFlat ) option.features |= QStyleOptionButton::Flat;
|
|
Packit |
8e9c33 |
option.text = QString();
|
|
Packit |
8e9c33 |
option.icon = QIcon();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( button->isChecked() ) option.state|=State_On;
|
|
Packit |
8e9c33 |
if( button->isDown() ) option.state|=State_Sunken;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// frame
|
|
Packit |
8e9c33 |
drawControl(QStyle::CE_PushButton, &option, &painter, button );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// offset
|
|
Packit |
8e9c33 |
int margin( Metrics::Button_MarginWidth + Metrics::Frame_FrameWidth );
|
|
Packit |
8e9c33 |
QPoint offset( margin, margin );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( button->isDown() && !isFlat ) painter.translate( 1, 1 );
|
|
Packit |
8e9c33 |
{ offset += QPoint( 1, 1 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// state
|
|
Packit |
8e9c33 |
const State& state( option.state );
|
|
Packit |
8e9c33 |
bool enabled( state & State_Enabled );
|
|
Packit |
8e9c33 |
bool mouseOver( (state & State_Active) && enabled && ( state & State_MouseOver ) );
|
|
Packit |
8e9c33 |
bool hasFocus( enabled && ( state & State_HasFocus ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// icon
|
|
Packit |
8e9c33 |
if( !button->icon().isNull() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSize pixmapSize( button->icon().actualSize( button->iconSize() ) );
|
|
Packit |
8e9c33 |
QRect pixmapRect( QPoint( offset.x(), button->description().isEmpty() ? (button->height() - pixmapSize.height())/2:offset.y() ), pixmapSize );
|
|
Packit |
8e9c33 |
const QPixmap pixmap( button->icon().pixmap(pixmapSize,
|
|
Packit |
8e9c33 |
enabled ? QIcon::Normal : QIcon::Disabled,
|
|
Packit |
8e9c33 |
button->isChecked() ? QIcon::On : QIcon::Off) );
|
|
Packit |
8e9c33 |
drawItemPixmap( &painter, pixmapRect, Qt::AlignCenter, pixmap );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
offset.rx() += pixmapSize.width() + Metrics::Button_ItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// text rect
|
|
Packit |
8e9c33 |
QRect textRect( offset, QSize( button->size().width() - offset.x() - margin, button->size().height() - 2*margin ) );
|
|
Packit |
8e9c33 |
const QPalette::ColorRole textRole = (enabled && hasFocus && !mouseOver && !isFlat ) ? QPalette::HighlightedText : QPalette::ButtonText;
|
|
Packit |
8e9c33 |
if( !button->text().isEmpty() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QFont font( button->font() );
|
|
Packit |
8e9c33 |
font.setBold( true );
|
|
Packit |
8e9c33 |
painter.setFont( font );
|
|
Packit |
8e9c33 |
if( button->description().isEmpty() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
drawItemText( &painter, textRect, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextHideMnemonic, button->palette(), enabled, button->text(), textRole );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
drawItemText( &painter, textRect, Qt::AlignLeft|Qt::AlignTop|Qt::TextHideMnemonic, button->palette(), enabled, button->text(), textRole );
|
|
Packit |
8e9c33 |
textRect.setTop( textRect.top() + QFontMetrics( font ).height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
painter.setFont( button->font() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !button->description().isEmpty() )
|
|
Packit |
8e9c33 |
{ drawItemText( &painter, textRect, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextWordWrap, button->palette(), enabled, button->description(), textRole ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return true;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// continue with normal painting
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_____________________________________________________________________
|
|
Packit |
8e9c33 |
void Style::configurationChanged( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// reload
|
|
Packit |
8e9c33 |
StyleConfigData::self();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// reload configuration
|
|
Packit |
8e9c33 |
loadConfiguration();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QIcon Style::standardIconImplementation( StandardPixmap standardPixmap, const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// lookup cache
|
|
Packit |
8e9c33 |
if( _iconCache.contains( standardPixmap ) ) return _iconCache.value( standardPixmap );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QIcon icon;
|
|
Packit |
8e9c33 |
switch( standardPixmap )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SP_TitleBarNormalButton:
|
|
Packit |
8e9c33 |
case SP_TitleBarMinButton:
|
|
Packit |
8e9c33 |
case SP_TitleBarMaxButton:
|
|
Packit |
8e9c33 |
case SP_TitleBarCloseButton:
|
|
Packit |
8e9c33 |
case SP_DockWidgetCloseButton:
|
|
Packit |
8e9c33 |
icon = titleBarButtonIcon( standardPixmap, option, widget );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SP_ToolBarHorizontalExtensionButton:
|
|
Packit |
8e9c33 |
case SP_ToolBarVerticalExtensionButton:
|
|
Packit |
8e9c33 |
icon = toolBarExtensionIcon( standardPixmap, option, widget );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default:
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( icon.isNull() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do not cache parent style icon, since it may change at runtime
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
return ParentStyleClass::standardIcon( standardPixmap, option, widget );
|
|
Packit |
8e9c33 |
#else
|
|
Packit |
8e9c33 |
return ParentStyleClass::standardIconImplementation( standardPixmap, option, widget );
|
|
Packit |
8e9c33 |
#endif
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
const_cast<IconCache*>(&_iconCache)->insert( standardPixmap, icon );
|
|
Packit |
8e9c33 |
return icon;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_____________________________________________________________________
|
|
Packit |
8e9c33 |
void Style::loadConfiguration()
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// reinitialize engines
|
|
Packit |
8e9c33 |
_animations->setupEngines();
|
|
Packit |
8e9c33 |
_windowManager->initialize();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// mnemonics
|
|
Packit |
8e9c33 |
_mnemonics->setMode( StyleConfigData::mnemonicsMode() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// splitter proxy
|
|
Packit |
8e9c33 |
_splitterFactory->setEnabled( StyleConfigData::splitterProxyEnabled() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// clear icon cache
|
|
Packit |
8e9c33 |
_iconCache.clear();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// scrollbar buttons
|
|
Packit |
8e9c33 |
switch( StyleConfigData::scrollBarAddLineButtons() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case 0: _addLineButtons = NoButton; break;
|
|
Packit |
8e9c33 |
case 1: _addLineButtons = SingleButton; break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default:
|
|
Packit |
8e9c33 |
case 2: _addLineButtons = DoubleButton; break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( StyleConfigData::scrollBarSubLineButtons() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case 0: _subLineButtons = NoButton; break;
|
|
Packit |
8e9c33 |
case 1: _subLineButtons = SingleButton; break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default:
|
|
Packit |
8e9c33 |
case 2: _subLineButtons = DoubleButton; break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// frame focus
|
|
Packit |
8e9c33 |
if( StyleConfigData::viewDrawFocusIndicator() ) _frameFocusPrimitive = &Style::drawFrameFocusRectPrimitive;
|
|
Packit |
8e9c33 |
else _frameFocusPrimitive = &Style::emptyPrimitive;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// widget explorer
|
|
Packit |
8e9c33 |
_widgetExplorer->setEnabled( StyleConfigData::widgetExplorerEnabled() );
|
|
Packit |
8e9c33 |
_widgetExplorer->setDrawWidgetRects( StyleConfigData::drawWidgetRects() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::pushButtonContentsRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return insideMargin( option->rect, Metrics::Frame_FrameWidth ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::pushButtonFocusRect(const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return insideMargin( option->rect, 3 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::checkBoxContentsRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return visualRect( option, option->rect.adjusted( Metrics::CheckBox_Size + 2 * Metrics::CheckBox_ItemSpacing, 0, 0, 0 ) ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::checkBoxIndicatorRect(const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{ return ParentStyleClass::subElementRect( SE_CheckBoxIndicator, option, widget ).translated( Metrics::CheckBox_ItemSpacing, 0 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::checkBoxFocusRect(const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
return QRect( option->rect.left() + 2,
|
|
Packit |
8e9c33 |
option->rect.top() + 1,
|
|
Packit |
8e9c33 |
ParentStyleClass::subElementRect( SE_CheckBoxFocusRect, option, widget ).right() - option->rect.left(),
|
|
Packit |
8e9c33 |
option->rect.height() - 2
|
|
Packit |
8e9c33 |
);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::lineEditContentsRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionFrame* frameOption( qstyleoption_cast<const QStyleOptionFrame*>( option ) );
|
|
Packit |
8e9c33 |
if( !frameOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check flatness
|
|
Packit |
8e9c33 |
bool flat( frameOption->lineWidth == 0 );
|
|
Packit |
8e9c33 |
if( flat ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect and take out margins
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// take out margins if there is enough room
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_DefaultFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
if( rect.height() >= option->fontMetrics.height() + 2*frameWidth ) return insideMargin( rect, frameWidth );
|
|
Packit |
8e9c33 |
else return rect;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::progressBarGrooveRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast<const QStyleOptionProgressBar*>( option ) );
|
|
Packit |
8e9c33 |
if( !progressBarOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get flags and orientation
|
|
Packit |
8e9c33 |
bool textVisible( progressBarOption->textVisible );
|
|
Packit |
8e9c33 |
bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast<const QStyleOptionProgressBarV2*>( option ) );
|
|
Packit |
8e9c33 |
bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rectangle and adjust
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_DefaultFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
if( horizontal ) rect = insideMargin( rect, frameWidth, 0 );
|
|
Packit |
8e9c33 |
else rect = insideMargin( rect, 0, frameWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( textVisible && !busy && horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect textRect( subElementRect( SE_ProgressBarLabel, option, widget ) );
|
|
Packit |
8e9c33 |
textRect = visualRect( option, textRect );
|
|
Packit |
8e9c33 |
rect.setRight( textRect.left() - Metrics::ProgressBar_ItemSpacing - 1 );
|
|
Packit |
8e9c33 |
rect = visualRect( option, rect );
|
|
Packit |
8e9c33 |
rect = centerRect( rect, rect.width(), Metrics::ProgressBar_Thickness );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else if( horizontal ) {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
rect = centerRect( rect, rect.width(), Metrics::ProgressBar_Thickness );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
rect = centerRect( rect, Metrics::ProgressBar_Thickness, rect.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::progressBarContentsRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast<const QStyleOptionProgressBar*>( option ) );
|
|
Packit |
8e9c33 |
if( !progressBarOption ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get groove rect
|
|
Packit |
8e9c33 |
QRect rect( progressBarGrooveRect( option, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// in busy mode, grooveRect is used
|
|
Packit |
8e9c33 |
bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 );
|
|
Packit |
8e9c33 |
if( busy ) return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get orientation
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast<const QStyleOptionProgressBarV2*>( option ) );
|
|
Packit |
8e9c33 |
bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check inverted appearance
|
|
Packit |
8e9c33 |
bool inverted( progressBarOption2 ? progressBarOption2->invertedAppearance : false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get progress and steps
|
|
Packit |
8e9c33 |
qreal progress( progressBarOption->progress - progressBarOption->minimum );
|
|
Packit |
8e9c33 |
int steps( qMax( progressBarOption->maximum - progressBarOption->minimum, 1 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//Calculate width fraction
|
|
Packit |
8e9c33 |
qreal widthFrac = qMin( qreal(1), progress/steps );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// convert the pixel width
|
|
Packit |
8e9c33 |
int indicatorSize( widthFrac*( horizontal ? rect.width():rect.height() ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect indicatorRect;
|
|
Packit |
8e9c33 |
if( horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
indicatorRect = QRect( inverted ? ( rect.right() - indicatorSize + 1):rect.left(), rect.y(), indicatorSize, rect.height() );
|
|
Packit |
8e9c33 |
indicatorRect = visualRect( option->direction, rect, indicatorRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else indicatorRect = QRect( rect.x(), inverted ? rect.top() : (rect.bottom() - indicatorSize + 1), rect.width(), indicatorSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return indicatorRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::progressBarLabelRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast<const QStyleOptionProgressBar*>( option ) );
|
|
Packit |
8e9c33 |
if( !progressBarOption ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get flags and check
|
|
Packit |
8e9c33 |
bool textVisible( progressBarOption->textVisible );
|
|
Packit |
8e9c33 |
bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 );
|
|
Packit |
8e9c33 |
if( !textVisible || busy ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get direction and check
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast<const QStyleOptionProgressBarV2*>( option ) );
|
|
Packit |
8e9c33 |
bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
if( !horizontal ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int textWidth = qMax(
|
|
Packit |
8e9c33 |
option->fontMetrics.size( _mnemonics->textFlags(), progressBarOption->text ).width(),
|
|
Packit |
8e9c33 |
option->fontMetrics.size( _mnemonics->textFlags(), QStringLiteral( "100%" ) ).width() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( insideMargin( option->rect, Metrics::Frame_FrameWidth, 0 ) );
|
|
Packit |
8e9c33 |
rect.setLeft( rect.right() - textWidth + 1 );
|
|
Packit |
8e9c33 |
rect = visualRect( option, rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::headerArrowRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionHeader* headerOption( qstyleoption_cast<const QStyleOptionHeader*>( option ) );
|
|
Packit |
8e9c33 |
if( !headerOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check if arrow is necessary
|
|
Packit |
8e9c33 |
if( headerOption->sortIndicator == QStyleOptionHeader::None ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect arrowRect( insideMargin( option->rect, Metrics::Header_MarginWidth ) );
|
|
Packit |
8e9c33 |
arrowRect.setLeft( arrowRect.right() - Metrics::Header_ArrowSize + 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return visualRect( option, arrowRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::headerLabelRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionHeader* headerOption( qstyleoption_cast<const QStyleOptionHeader*>( option ) );
|
|
Packit |
8e9c33 |
if( !headerOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check if arrow is necessary
|
|
Packit |
8e9c33 |
// QRect labelRect( insideMargin( option->rect, Metrics::Header_MarginWidth ) );
|
|
Packit |
8e9c33 |
QRect labelRect( insideMargin( option->rect, Metrics::Header_MarginWidth, 0 ) );
|
|
Packit |
8e9c33 |
if( headerOption->sortIndicator == QStyleOptionHeader::None ) return labelRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
labelRect.adjust( 0, 0, -Metrics::Header_ArrowSize-Metrics::Header_ItemSpacing, 0 );
|
|
Packit |
8e9c33 |
return visualRect( option, labelRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::sliderFocusRect(const QStyleOption *option, const QWidget *widget) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QStyleOptionSlider* sliderOption( qstyleoption_cast<const QStyleOptionSlider*>( option ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect r( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (sliderOption->orientation == Qt::Vertical) {
|
|
Packit |
8e9c33 |
int thickness = Slider_GrooveThickness + 8;
|
|
Packit |
8e9c33 |
return QRect(r.center().x() - thickness / 2, r.top() + 1, thickness + 1, r.height() - 1);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else {
|
|
Packit |
8e9c33 |
int thickness = Slider_GrooveThickness + 6;
|
|
Packit |
8e9c33 |
return QRect(r.left() + 1, r.center().y() - thickness / 2, r.width() - 1, thickness + 1);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabBarTabLeftButtonRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabV3 *tabOptionV3( qstyleoption_cast<const QStyleOptionTabV3*>( option ) );
|
|
Packit |
8e9c33 |
if( !tabOptionV3 || tabOptionV3->leftButtonSize.isEmpty() ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
QSize size( tabOptionV3->leftButtonSize );
|
|
Packit |
8e9c33 |
QRect buttonRect( QPoint(0,0), size );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// vertical positioning
|
|
Packit |
8e9c33 |
switch( tabOptionV3->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
buttonRect.moveLeft( rect.left() + Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveTop( ( rect.height() - buttonRect.height() )/2 );
|
|
Packit |
8e9c33 |
buttonRect = visualRect( option, buttonRect );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedWest:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularWest:
|
|
Packit |
8e9c33 |
buttonRect.moveBottom( rect.bottom() - Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveLeft( ( rect.width() - buttonRect.width() )/2 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedEast:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularEast:
|
|
Packit |
8e9c33 |
buttonRect.moveTop( rect.top() + Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveLeft( ( rect.width() - buttonRect.width() )/2 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return buttonRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabBarTabRightButtonRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabV3 *tabOptionV3( qstyleoption_cast<const QStyleOptionTabV3*>( option ) );
|
|
Packit |
8e9c33 |
if( !tabOptionV3 || tabOptionV3->rightButtonSize.isEmpty() ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
QSize size( tabOptionV3->rightButtonSize );
|
|
Packit |
8e9c33 |
QRect buttonRect( QPoint(0,0), size );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// vertical positioning
|
|
Packit |
8e9c33 |
switch( tabOptionV3->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
buttonRect.moveRight( rect.right() - Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveTop( ( rect.height() - buttonRect.height() )/2 );
|
|
Packit |
8e9c33 |
buttonRect = visualRect( option, buttonRect );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedWest:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularWest:
|
|
Packit |
8e9c33 |
buttonRect.moveTop( rect.top() + Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveLeft( ( rect.width() - buttonRect.width() )/2 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedEast:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularEast:
|
|
Packit |
8e9c33 |
buttonRect.moveBottom( rect.bottom() - Metrics::TabBar_TabMarginWidth );
|
|
Packit |
8e9c33 |
buttonRect.moveLeft( ( rect.width() - buttonRect.width() )/2 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return buttonRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabWidgetTabBarRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabWidgetFrame* tabOption = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>( option );
|
|
Packit |
8e9c33 |
if( !tabOption ) return ParentStyleClass::subElementRect( SE_TabWidgetTabBar, option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing if tabbar is hidden
|
|
Packit |
8e9c33 |
QSize tabBarSize( tabOption->tabBarSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
QRect tabBarRect( QPoint(0, 0), tabBarSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
Qt::Alignment tabBarAlignment( styleHint( SH_TabBar_Alignment, option, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// horizontal positioning
|
|
Packit |
8e9c33 |
bool verticalTabs( isVerticalTab( tabOption->shape ) );
|
|
Packit |
8e9c33 |
if( verticalTabs )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
tabBarRect.setTop(option->rect.top() + 1);
|
|
Packit |
8e9c33 |
tabBarRect.setBottom(option->rect.bottom() - 1);
|
|
Packit |
8e9c33 |
//tabBarRect.setHeight( qMin( tabBarRect.height(), rect.height() - 2 ) );
|
|
Packit |
8e9c33 |
//if( tabBarAlignment == Qt::AlignCenter ) tabBarRect.moveTop( rect.top() + ( rect.height() - tabBarRect.height() )/2 );
|
|
Packit |
8e9c33 |
//else tabBarRect.moveTop( rect.top()+1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// account for corner rects
|
|
Packit |
8e9c33 |
// need to re-run visualRect to remove right-to-left handling, since it is re-added on tabBarRect at the end
|
|
Packit |
8e9c33 |
QRect leftButtonRect( visualRect( option, subElementRect( SE_TabWidgetLeftCorner, option, widget ) ) );
|
|
Packit |
8e9c33 |
QRect rightButtonRect( visualRect( option, subElementRect( SE_TabWidgetRightCorner, option, widget ) ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
rect.setLeft( leftButtonRect.width() );
|
|
Packit |
8e9c33 |
rect.setRight( rightButtonRect.left() - 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
tabBarRect.moveLeft( rect.left() + 1 );
|
|
Packit |
8e9c33 |
tabBarRect.setWidth( rect.width() - 2 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
tabBarRect = visualRect( option, tabBarRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// vertical positioning
|
|
Packit |
8e9c33 |
switch( tabOption->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
tabBarRect.moveTop( rect.top()+1 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
tabBarRect.moveBottom( rect.bottom()-1 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedWest:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularWest:
|
|
Packit |
8e9c33 |
tabBarRect.moveLeft( rect.left()+1 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedEast:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularEast:
|
|
Packit |
8e9c33 |
tabBarRect.moveRight( rect.right()-1 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return tabBarRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabWidgetTabContentsRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabWidgetFrame* tabOption = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>( option );
|
|
Packit |
8e9c33 |
if( !tabOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing if tabbar is hidden
|
|
Packit |
8e9c33 |
if( tabOption->tabBarSize.isEmpty() ) return option->rect;
|
|
Packit |
8e9c33 |
QRect rect = tabWidgetTabPaneRect( option, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool documentMode( tabOption->lineWidth == 0 );
|
|
Packit |
8e9c33 |
if( documentMode )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add margin only to the relevant side
|
|
Packit |
8e9c33 |
switch( tabOption->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
return rect.adjusted( 0, Metrics::TabWidget_MarginWidth, 0, 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
return rect.adjusted( 0, 0, 0, -Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedWest:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularWest:
|
|
Packit |
8e9c33 |
return rect.adjusted( Metrics::TabWidget_MarginWidth, 0, 0, 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedEast:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularEast:
|
|
Packit |
8e9c33 |
return rect.adjusted( 0, 0, -Metrics::TabWidget_MarginWidth, 0 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return rect;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return insideMargin( rect, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabWidgetTabPaneRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QStyleOptionTabWidgetFrame* tabOption = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>( option );
|
|
Packit |
8e9c33 |
if( !tabOption || tabOption->tabBarSize.isEmpty() ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int overlap = Metrics::TabBar_BaseOverlap + 1;
|
|
Packit |
8e9c33 |
QSize tabBarSize( tabOption->tabBarSize - QSize( overlap, overlap ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
switch( tabOption->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
rect.adjust( 0, tabBarSize.height(), 0, 0 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
rect.adjust( 0, 0, 0, -tabBarSize.height() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedWest:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularWest:
|
|
Packit |
8e9c33 |
rect.adjust( tabBarSize.width(), 0, 0, 0 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedEast:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularEast:
|
|
Packit |
8e9c33 |
rect.adjust( 0, 0, -tabBarSize.width(), 0 );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return QRect();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::tabWidgetCornerRect( SubElement element, const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabWidgetFrame* tabOption = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>( option );
|
|
Packit |
8e9c33 |
if( !tabOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing if tabbar is hidden
|
|
Packit |
8e9c33 |
QSize tabBarSize( tabOption->tabBarSize );
|
|
Packit |
8e9c33 |
if( tabBarSize.isEmpty() ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing for vertical tabs
|
|
Packit |
8e9c33 |
bool verticalTabs( isVerticalTab( tabOption->shape ) );
|
|
Packit |
8e9c33 |
if( verticalTabs ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
QRect cornerRect;
|
|
Packit |
8e9c33 |
switch( element )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case SE_TabWidgetLeftCorner:
|
|
Packit |
8e9c33 |
cornerRect = QRect( QPoint(0,0), tabOption->leftCornerWidgetSize );
|
|
Packit |
8e9c33 |
cornerRect.moveLeft( rect.left() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SE_TabWidgetRightCorner:
|
|
Packit |
8e9c33 |
cornerRect = QRect( QPoint(0,0), tabOption->rightCornerWidgetSize );
|
|
Packit |
8e9c33 |
cornerRect.moveRight( rect.right() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// expend height to tabBarSize, if needed, to make sure base is properly rendered
|
|
Packit |
8e9c33 |
cornerRect.setHeight( qMax( cornerRect.height(), tabBarSize.height() + 1 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( tabOption->shape )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QTabBar::RoundedNorth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularNorth:
|
|
Packit |
8e9c33 |
cornerRect.moveTop( rect.top() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QTabBar::RoundedSouth:
|
|
Packit |
8e9c33 |
case QTabBar::TriangularSouth:
|
|
Packit |
8e9c33 |
cornerRect.moveBottom( rect.bottom() );
|
|
Packit |
8e9c33 |
break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// return cornerRect;
|
|
Packit |
8e9c33 |
cornerRect = visualRect( option, cornerRect );
|
|
Packit |
8e9c33 |
return cornerRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::toolBoxTabContentsRect( const QStyleOption* option, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionToolBox* toolBoxOption( qstyleoption_cast<const QStyleOptionToolBox *>( option ) );
|
|
Packit |
8e9c33 |
if( !toolBoxOption ) return option->rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
const QRect& rect( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int contentsWidth(0);
|
|
Packit |
8e9c33 |
if( !toolBoxOption->icon.isNull() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int iconSize( pixelMetric( QStyle::PM_SmallIconSize, option, widget ) );
|
|
Packit |
8e9c33 |
contentsWidth += iconSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !toolBoxOption->text.isEmpty() ) contentsWidth += Metrics::ToolBox_TabItemSpacing;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !toolBoxOption->text.isEmpty() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int textWidth = toolBoxOption->fontMetrics.size( _mnemonics->textFlags(), toolBoxOption->text ).width();
|
|
Packit |
8e9c33 |
contentsWidth += textWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
contentsWidth += 2*Metrics::ToolBox_TabMarginWidth;
|
|
Packit |
8e9c33 |
contentsWidth = qMin( contentsWidth, rect.width() );
|
|
Packit |
8e9c33 |
contentsWidth = qMax( contentsWidth, int(Metrics::ToolBox_TabMinWidth) );
|
|
Packit |
8e9c33 |
return centerRect( rect, contentsWidth, rect.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::genericLayoutItemRect( const QStyleOption* option, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return insideMargin( option->rect, -Metrics::Frame_FrameWidth ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::groupBoxSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast<const QStyleOptionGroupBox *>(option))
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QRect rect = ParentStyleClass::subControlRect(CC_GroupBox, option, subControl, widget);
|
|
Packit |
8e9c33 |
int topMargin = 0;
|
|
Packit |
8e9c33 |
int topHeight = 0;
|
|
Packit |
8e9c33 |
int verticalAlignment = proxy()->styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (!groupBox->text.isEmpty())
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
topHeight = groupBox->fontMetrics.height();
|
|
Packit |
8e9c33 |
if (verticalAlignment & Qt::AlignVCenter)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
topMargin = topHeight / 2;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (verticalAlignment & Qt::AlignTop)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
topMargin = topHeight;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
QRect frameRect = groupBox->rect;
|
|
Packit |
8e9c33 |
frameRect.setTop(topMargin);
|
|
Packit |
8e9c33 |
if (subControl == SC_GroupBoxFrame)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
return rect;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (subControl == SC_GroupBoxContents)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int margin = 0;
|
|
Packit |
8e9c33 |
int leftMarginExtension = 16;
|
|
Packit |
8e9c33 |
return frameRect.adjusted(leftMarginExtension + margin, margin + topHeight, -margin, -margin);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (const QGroupBox *groupBoxWidget = qobject_cast<const QGroupBox *>(widget))
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
//Prepare metrics for a bold font
|
|
Packit |
8e9c33 |
QFont font = widget->font();
|
|
Packit |
8e9c33 |
font.setBold(true);
|
|
Packit |
8e9c33 |
QFontMetrics fontMetrics(font);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSize textRect = fontMetrics.boundingRect(groupBoxWidget->title()).size() + QSize(2, 2);
|
|
Packit |
8e9c33 |
if (subControl == SC_GroupBoxCheckBox)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget);
|
|
Packit |
8e9c33 |
int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget);
|
|
Packit |
8e9c33 |
rect.setWidth(indicatorWidth);
|
|
Packit |
8e9c33 |
rect.setHeight(indicatorHeight);
|
|
Packit |
8e9c33 |
rect.moveTop((textRect.height() - indicatorHeight) / 2);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
else if (subControl == SC_GroupBoxLabel)
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
rect.setSize(textRect);
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
return rect;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return ParentStyleClass::subControlRect( CC_GroupBox, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::toolButtonSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionToolButton* toolButtonOption = qstyleoption_cast<const QStyleOptionToolButton*>( option );
|
|
Packit |
8e9c33 |
if( !toolButtonOption ) return ParentStyleClass::subControlRect( CC_ToolButton, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool hasPopupMenu( toolButtonOption->features & QStyleOptionToolButton::MenuButtonPopup );
|
|
Packit |
8e9c33 |
const bool hasInlineIndicator(
|
|
Packit |
8e9c33 |
toolButtonOption->features&QStyleOptionToolButton::HasMenu
|
|
Packit |
8e9c33 |
&& toolButtonOption->features&QStyleOptionToolButton::PopupDelay
|
|
Packit |
8e9c33 |
&& !hasPopupMenu );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// store rect
|
|
Packit |
8e9c33 |
const QRect& rect( option->rect );
|
|
Packit |
8e9c33 |
int menuButtonWidth( Metrics::MenuButton_IndicatorWidth );
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case SC_ToolButtonMenu:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check fratures
|
|
Packit |
8e9c33 |
if( !(hasPopupMenu || hasInlineIndicator ) ) return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check features
|
|
Packit |
8e9c33 |
QRect menuRect( rect );
|
|
Packit |
8e9c33 |
menuRect.setLeft( rect.right() - menuButtonWidth + 1 );
|
|
Packit |
8e9c33 |
if( hasInlineIndicator )
|
|
Packit |
8e9c33 |
{ menuRect.setTop( menuRect.bottom() - menuButtonWidth + 1 ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return visualRect( option, menuRect );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ToolButton:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( hasPopupMenu )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect contentsRect( rect );
|
|
Packit |
8e9c33 |
contentsRect.setRight( rect.right() - menuButtonWidth );
|
|
Packit |
8e9c33 |
return visualRect( option, contentsRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::comboBoxSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionComboBox *comboBoxOption( qstyleoption_cast<const QStyleOptionComboBox*>( option ) );
|
|
Packit |
8e9c33 |
if( !comboBoxOption ) return ParentStyleClass::subControlRect( CC_ComboBox, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool editable( comboBoxOption->editable );
|
|
Packit |
8e9c33 |
bool flat( editable && !comboBoxOption->frame );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case SC_ComboBoxFrame: return flat ? rect : QRect();
|
|
Packit |
8e9c33 |
case SC_ComboBoxListBoxPopup: return rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ComboBoxArrow:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect arrowRect(
|
|
Packit |
8e9c33 |
rect.right() - rect.height() + 1,
|
|
Packit |
8e9c33 |
rect.top(),
|
|
Packit |
8e9c33 |
rect.height(),
|
|
Packit |
8e9c33 |
rect.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return arrowRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ComboBoxEditField:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect labelRect;
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_ComboBoxFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
labelRect = QRect(
|
|
Packit |
8e9c33 |
rect.left(), rect.top(),
|
|
Packit |
8e9c33 |
rect.width() - rect.height() - 4,
|
|
Packit |
8e9c33 |
rect.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// remove margins
|
|
Packit |
8e9c33 |
if( !flat && rect.height() >= option->fontMetrics.height() + 2*frameWidth )
|
|
Packit |
8e9c33 |
{ labelRect.adjust( frameWidth, frameWidth, 0, -frameWidth ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return visualRect( option, labelRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return ParentStyleClass::subControlRect( CC_ComboBox, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::spinBoxSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSpinBox *spinBoxOption( qstyleoption_cast<const QStyleOptionSpinBox*>( option ) );
|
|
Packit |
8e9c33 |
if( !spinBoxOption ) return ParentStyleClass::subControlRect( CC_SpinBox, option, subControl, widget );
|
|
Packit |
8e9c33 |
bool flat( !spinBoxOption->frame );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy rect
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case SC_SpinBoxFrame: return flat ? QRect():rect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_SpinBoxUp:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (rect.width() > 2 * rect.height() + 24)
|
|
Packit |
8e9c33 |
return QRect(rect.right() - rect.height() - 1,
|
|
Packit |
8e9c33 |
rect.top(),
|
|
Packit |
8e9c33 |
rect.height(),
|
|
Packit |
8e9c33 |
rect.height() - 1
|
|
Packit |
8e9c33 |
);
|
|
Packit |
8e9c33 |
else
|
|
Packit |
8e9c33 |
return QRect(rect.right() - 0.6 * rect.height(),
|
|
Packit |
8e9c33 |
rect.top(),
|
|
Packit |
8e9c33 |
rect.height() * 0.6,
|
|
Packit |
8e9c33 |
rect.height() / 2 + 3 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_SpinBoxDown:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (rect.width() > 2 * rect.height() + 24)
|
|
Packit |
8e9c33 |
return QRect(rect.right() - 2 * rect.height(),
|
|
Packit |
8e9c33 |
rect.top(),
|
|
Packit |
8e9c33 |
rect.height(),
|
|
Packit |
8e9c33 |
rect.height() - 1
|
|
Packit |
8e9c33 |
);
|
|
Packit |
8e9c33 |
else
|
|
Packit |
8e9c33 |
return QRect(rect.right() - 0.6 * rect.height(),
|
|
Packit |
8e9c33 |
rect.top() + rect.height() / 2 - 2,
|
|
Packit |
8e9c33 |
rect.height() * 0.6,
|
|
Packit |
8e9c33 |
rect.height() / 2 + 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_SpinBoxEditField:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_SpinBoxFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QRect labelRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if (rect.width() > 2 * rect.height() + 24)
|
|
Packit |
8e9c33 |
labelRect = QRect(
|
|
Packit |
8e9c33 |
rect.left(), rect.top(),
|
|
Packit |
8e9c33 |
rect.width() - 2 * rect.height() - frameWidth,
|
|
Packit |
8e9c33 |
rect.height() );
|
|
Packit |
8e9c33 |
else
|
|
Packit |
8e9c33 |
labelRect = QRect(
|
|
Packit |
8e9c33 |
rect.left(), rect.top(),
|
|
Packit |
8e9c33 |
rect.width() - 0.6 * rect.height() - frameWidth,
|
|
Packit |
8e9c33 |
rect.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// remove right side line editor margins
|
|
Packit |
8e9c33 |
if( !flat && labelRect.height() >= option->fontMetrics.height() + 2*frameWidth )
|
|
Packit |
8e9c33 |
{ labelRect.adjust( frameWidth, frameWidth, 0, -frameWidth ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return visualRect( option, labelRect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: break;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return ParentStyleClass::subControlRect( CC_SpinBox, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::scrollBarInternalSubControlRect( const QStyleOptionComplex* option, SubControl subControl ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QRect& rect = option->rect;
|
|
Packit |
8e9c33 |
const State& state( option->state );
|
|
Packit |
8e9c33 |
bool horizontal( state & State_Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarSubLine:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int majorSize( scrollBarButtonHeight( _subLineButtons ) );
|
|
Packit |
8e9c33 |
if( horizontal ) return visualRect( option, QRect( rect.left(), rect.top(), majorSize, rect.height() ) );
|
|
Packit |
8e9c33 |
else return visualRect( option, QRect( rect.left(), rect.top(), rect.width(), majorSize ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarAddLine:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int majorSize( scrollBarButtonHeight( _addLineButtons ) );
|
|
Packit |
8e9c33 |
if( horizontal ) return visualRect( option, QRect( rect.right() - majorSize + 1, rect.top(), majorSize, rect.height() ) );
|
|
Packit |
8e9c33 |
else return visualRect( option, QRect( rect.left(), rect.bottom() - majorSize + 1, rect.width(), majorSize ) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::scrollBarSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSlider* sliderOption( qstyleoption_cast<const QStyleOptionSlider*>( option ) );
|
|
Packit |
8e9c33 |
if( !sliderOption ) return ParentStyleClass::subControlRect( CC_ScrollBar, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get relevant state
|
|
Packit |
8e9c33 |
const State& state( option->state );
|
|
Packit |
8e9c33 |
bool horizontal( state & State_Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarSubLine:
|
|
Packit |
8e9c33 |
case SC_ScrollBarAddLine:
|
|
Packit |
8e9c33 |
return QRect();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarGroove:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QRect topRect = visualRect( option, scrollBarInternalSubControlRect( option, SC_ScrollBarSubLine ) );
|
|
Packit |
8e9c33 |
QRect bottomRect = visualRect( option, scrollBarInternalSubControlRect( option, SC_ScrollBarAddLine ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QPoint topLeftCorner;
|
|
Packit |
8e9c33 |
QPoint botRightCorner;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
topLeftCorner = QPoint( topRect.right() + 1, topRect.top() );
|
|
Packit |
8e9c33 |
botRightCorner = QPoint( bottomRect.left() - 1, topRect.bottom() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
topLeftCorner = QPoint( topRect.left(), topRect.bottom() + 1 );
|
|
Packit |
8e9c33 |
botRightCorner = QPoint( topRect.right(), bottomRect.top() - 1 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// define rect
|
|
Packit |
8e9c33 |
return visualRect( option, QRect( topLeftCorner, botRightCorner ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarSlider:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// handle RTL here to unreflect things if need be
|
|
Packit |
8e9c33 |
QRect groove = visualRect( option, subControlRect( CC_ScrollBar, option, SC_ScrollBarGroove, widget ) );
|
|
Packit |
8e9c33 |
groove.adjust(0, 0, 1, 1);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( sliderOption->minimum == sliderOption->maximum ) return groove;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Figure out how much room there is
|
|
Packit |
8e9c33 |
int space( horizontal ? groove.width() : groove.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Calculate the portion of this space that the slider should occupy
|
|
Packit |
8e9c33 |
int sliderSize = space * qreal( sliderOption->pageStep ) / ( sliderOption->maximum - sliderOption->minimum + sliderOption->pageStep );
|
|
Packit |
8e9c33 |
sliderSize = qMax( sliderSize, static_cast<int>(Metrics::ScrollBar_MinSliderHeight ) );
|
|
Packit |
8e9c33 |
sliderSize = qMin( sliderSize, space );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
space -= sliderSize;
|
|
Packit |
8e9c33 |
if( space <= 0 ) return groove;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int pos = qRound( qreal( sliderOption->sliderPosition - sliderOption->minimum )/ ( sliderOption->maximum - sliderOption->minimum )*space );
|
|
Packit |
8e9c33 |
if( sliderOption->upsideDown ) pos = space - pos;
|
|
Packit |
8e9c33 |
if( horizontal ) return visualRect( option, QRect( groove.left() + pos, groove.top(), sliderSize, groove.height() ) );
|
|
Packit |
8e9c33 |
else return visualRect( option, QRect( groove.left(), groove.top() + pos, groove.width(), sliderSize ) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarSubPage:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// handle RTL here to unreflect things if need be
|
|
Packit |
8e9c33 |
QRect slider = visualRect( option, subControlRect( CC_ScrollBar, option, SC_ScrollBarSlider, widget ) );
|
|
Packit |
8e9c33 |
QRect groove = visualRect( option, subControlRect( CC_ScrollBar, option, SC_ScrollBarGroove, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( horizontal ) return visualRect( option, QRect( groove.left(), groove.top(), slider.left() - groove.left(), groove.height() ) );
|
|
Packit |
8e9c33 |
else return visualRect( option, QRect( groove.left(), groove.top(), groove.width(), slider.top() - groove.top() ) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case SC_ScrollBarAddPage:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// handle RTL here to unreflect things if need be
|
|
Packit |
8e9c33 |
QRect slider = visualRect( option, subControlRect( CC_ScrollBar, option, SC_ScrollBarSlider, widget ) );
|
|
Packit |
8e9c33 |
QRect groove = visualRect( option, subControlRect( CC_ScrollBar, option, SC_ScrollBarGroove, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( horizontal ) return visualRect( option, QRect( slider.right() + 1, groove.top(), groove.right() - slider.right(), groove.height() ) );
|
|
Packit |
8e9c33 |
else return visualRect( option, QRect( groove.left(), slider.bottom() + 1, groove.width(), groove.bottom() - slider.bottom() ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::subControlRect( CC_ScrollBar, option, subControl, widget );;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::dialSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSlider* sliderOption( qstyleoption_cast<const QStyleOptionSlider*>( option ) );
|
|
Packit |
8e9c33 |
if( !sliderOption ) return ParentStyleClass::subControlRect( CC_Dial, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// adjust rect to be square, and centered
|
|
Packit |
8e9c33 |
QRect rect( option->rect );
|
|
Packit |
8e9c33 |
int dimension( qMin( rect.width(), rect.height() ) );
|
|
Packit |
8e9c33 |
rect = centerRect( rect, dimension, dimension );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case QStyle::SC_DialGroove: return insideMargin( rect, (Metrics::Slider_ControlThickness - Metrics::Slider_GrooveThickness)/2 + 2 );
|
|
Packit |
8e9c33 |
case QStyle::SC_DialHandle:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// calculate angle at which handle needs to be drawn
|
|
Packit |
8e9c33 |
qreal angle( dialAngle( sliderOption, sliderOption->sliderPosition ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// groove rect
|
|
Packit |
8e9c33 |
QRectF grooveRect( insideMargin( rect, Metrics::Slider_ControlThickness/2 ) );
|
|
Packit |
8e9c33 |
qreal radius( grooveRect.width()/2 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// slider center
|
|
Packit |
8e9c33 |
QPointF center( grooveRect.center() + QPointF( radius*std::cos( angle ), -radius*std::sin( angle ) ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// slider rect
|
|
Packit |
8e9c33 |
QRect handleRect( 0, 0, Metrics::Slider_ControlThickness, Metrics::Slider_ControlThickness );
|
|
Packit |
8e9c33 |
handleRect.moveCenter( center.toPoint() );
|
|
Packit |
8e9c33 |
return handleRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::subControlRect( CC_Dial, option, subControl, widget );;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//___________________________________________________________________________________________________________________
|
|
Packit |
8e9c33 |
QRect Style::sliderSubControlRect( const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSlider* sliderOption( qstyleoption_cast<const QStyleOptionSlider*>( option ) );
|
|
Packit |
8e9c33 |
if( !sliderOption ) return ParentStyleClass::subControlRect( CC_Slider, option, subControl, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
switch( subControl )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
case SC_SliderGroove:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// direction
|
|
Packit |
8e9c33 |
bool horizontal( sliderOption->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get base class rect
|
|
Packit |
8e9c33 |
QRect grooveRect( ParentStyleClass::subControlRect( CC_Slider, option, subControl, widget ) );
|
|
Packit |
8e9c33 |
grooveRect = insideMargin( grooveRect, pixelMetric( PM_DefaultFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// centering
|
|
Packit |
8e9c33 |
if( horizontal ) grooveRect = centerRect( grooveRect, grooveRect.width(), Metrics::Slider_GrooveThickness );
|
|
Packit |
8e9c33 |
else grooveRect = centerRect( grooveRect, Metrics::Slider_GrooveThickness, grooveRect.height() );
|
|
Packit |
8e9c33 |
return grooveRect;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
default: return ParentStyleClass::subControlRect( CC_Slider, option, subControl, widget );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::checkBoxSizeFromContents( const QStyleOption*, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// get contents size
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add focus height
|
|
Packit |
8e9c33 |
size = expandSize( size, 0, Metrics::CheckBox_FocusMarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure there is enough height for indicator
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::CheckBox_Size) ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// Add space for the indicator and the icon
|
|
Packit |
8e9c33 |
size.rwidth() += Metrics::CheckBox_Size + Metrics::CheckBox_ItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// also add extra space, to leave room to the right of the label
|
|
Packit |
8e9c33 |
size.rwidth() += Metrics::CheckBox_ItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::lineEditSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionFrame* frameOption( qstyleoption_cast<const QStyleOptionFrame*>( option ) );
|
|
Packit |
8e9c33 |
if( !frameOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool flat( frameOption->lineWidth == 0 );
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_DefaultFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
return flat ? contentsSize : expandSize( contentsSize, frameWidth );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::comboBoxSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionComboBox* comboBoxOption( qstyleoption_cast<const QStyleOptionComboBox*>( option ) );
|
|
Packit |
8e9c33 |
if( !comboBoxOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy size
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add relevant margin
|
|
Packit |
8e9c33 |
bool flat( !comboBoxOption->frame );
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_ComboBoxFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
if( !flat ) size = expandSize( size, frameWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure there is enough height for the button
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::MenuButton_IndicatorWidth) ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add button width and spacing
|
|
Packit |
8e9c33 |
size.rwidth() += size.height() + 4;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::spinBoxSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSpinBox *spinBoxOption( qstyleoption_cast<const QStyleOptionSpinBox*>( option ) );
|
|
Packit |
8e9c33 |
if( !spinBoxOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool flat( !spinBoxOption->frame );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy size
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add editor margins
|
|
Packit |
8e9c33 |
int frameWidth( pixelMetric( PM_SpinBoxFrameWidth, option, widget ) );
|
|
Packit |
8e9c33 |
if( !flat ) size = expandSize( size, frameWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add button width and spacing
|
|
Packit |
8e9c33 |
size.rwidth() += 2 * size.height() - 1;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::sliderSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionSlider *sliderOption( qstyleoption_cast<const QStyleOptionSlider*>( option ) );
|
|
Packit |
8e9c33 |
if( !sliderOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// store tick position and orientation
|
|
Packit |
8e9c33 |
const QSlider::TickPosition& tickPosition( sliderOption->tickPosition );
|
|
Packit |
8e9c33 |
bool horizontal( sliderOption->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
bool disableTicks( !StyleConfigData::sliderDrawTickMarks() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// do nothing if no ticks are requested
|
|
Packit |
8e9c33 |
if( tickPosition == QSlider::NoTicks ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* Qt adds its own tick length directly inside QSlider.
|
|
Packit |
8e9c33 |
* Take it out and replace by ours, if needed
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
const int tickLength( disableTicks ? 0 : (
|
|
Packit |
8e9c33 |
Metrics::Slider_TickLength + Metrics::Slider_TickMarginWidth +
|
|
Packit |
8e9c33 |
(Metrics::Slider_GrooveThickness - Metrics::Slider_ControlThickness)/2 ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int builtInTickLength( 5 );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
if( horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if(tickPosition & QSlider::TicksAbove) size.rheight() += tickLength - builtInTickLength;
|
|
Packit |
8e9c33 |
if(tickPosition & QSlider::TicksBelow) size.rheight() += tickLength - builtInTickLength;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if(tickPosition & QSlider::TicksAbove) size.rwidth() += tickLength - builtInTickLength;
|
|
Packit |
8e9c33 |
if(tickPosition & QSlider::TicksBelow) size.rwidth() += tickLength - builtInTickLength;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::pushButtonSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionButton* buttonOption( qstyleoption_cast<const QStyleOptionButton*>( option ) );
|
|
Packit |
8e9c33 |
if( !buttonOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// output
|
|
Packit |
8e9c33 |
QSize size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check text and icon
|
|
Packit |
8e9c33 |
bool hasText( !buttonOption->text.isEmpty() );
|
|
Packit |
8e9c33 |
bool flat( buttonOption->features & QStyleOptionButton::Flat );
|
|
Packit |
8e9c33 |
bool hasIcon( !buttonOption->icon.isNull() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !( hasText||hasIcon ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
no text nor icon is passed.
|
|
Packit |
8e9c33 |
assume custom button and use contentsSize as a starting point
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
size = contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
rather than trying to guess what Qt puts into its contents size calculation,
|
|
Packit |
8e9c33 |
we recompute the button size entirely, based on button option
|
|
Packit |
8e9c33 |
this ensures consistency with the rendering stage
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// update has icon to honour showIconsOnPushButtons, when possible
|
|
Packit |
8e9c33 |
hasIcon &= (showIconsOnPushButtons() || flat || !hasText );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// text
|
|
Packit |
8e9c33 |
if( hasText ) size = buttonOption->fontMetrics.size( Qt::TextShowMnemonic, buttonOption->text );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// icon
|
|
Packit |
8e9c33 |
if( hasIcon )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
QSize iconSize = buttonOption->iconSize;
|
|
Packit |
8e9c33 |
if( !iconSize.isValid() ) iconSize = QSize( pixelMetric( PM_SmallIconSize, option, widget ), pixelMetric( PM_SmallIconSize, option, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), iconSize.height() ) );
|
|
Packit |
8e9c33 |
size.rwidth() += iconSize.width();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( hasText ) size.rwidth() += Metrics::Button_ItemSpacing;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// menu
|
|
Packit |
8e9c33 |
bool hasMenu( buttonOption->features & QStyleOptionButton::HasMenu );
|
|
Packit |
8e9c33 |
if( hasMenu )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
size.rwidth() += Metrics::MenuButton_IndicatorWidth;
|
|
Packit |
8e9c33 |
if( hasText||hasIcon ) size.rwidth() += Metrics::Button_ItemSpacing;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// expand with buttons margin
|
|
Packit |
8e9c33 |
size = expandSize( size, Metrics::Button_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure buttons have a minimum width
|
|
Packit |
8e9c33 |
if( hasText )
|
|
Packit |
8e9c33 |
{ size.setWidth( qMax( size.width(), int( Metrics::Button_MinWidth ) ) ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// finally add frame margins
|
|
Packit |
8e9c33 |
return expandSize( size, Metrics::Frame_FrameWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::toolButtonSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionToolButton* toolButtonOption = qstyleoption_cast<const QStyleOptionToolButton*>( option );
|
|
Packit |
8e9c33 |
if( !toolButtonOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy size
|
|
Packit |
8e9c33 |
QSize size = contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get relevant state flags
|
|
Packit |
8e9c33 |
const State& state( option->state );
|
|
Packit |
8e9c33 |
bool autoRaise( state & State_AutoRaise );
|
|
Packit |
8e9c33 |
bool hasPopupMenu( toolButtonOption->features & QStyleOptionToolButton::MenuButtonPopup );
|
|
Packit |
8e9c33 |
const bool hasInlineIndicator(
|
|
Packit |
8e9c33 |
toolButtonOption->features&QStyleOptionToolButton::HasMenu
|
|
Packit |
8e9c33 |
&& toolButtonOption->features&QStyleOptionToolButton::PopupDelay
|
|
Packit |
8e9c33 |
&& !hasPopupMenu );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int marginWidth( Metrics::Button_MarginWidth + Metrics::Frame_FrameWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( hasInlineIndicator ) size.rwidth() += Metrics::ToolButton_InlineIndicatorWidth;
|
|
Packit |
8e9c33 |
size = expandSize( size, marginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::menuBarItemSizeFromContents( const QStyleOption*, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{ return expandSize( contentsSize, Metrics::MenuBarItem_MarginWidth, Metrics::MenuBarItem_MarginHeight ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::menuItemSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionMenuItem* menuItemOption = qstyleoption_cast<const QStyleOptionMenuItem*>( option );
|
|
Packit |
8e9c33 |
if( !menuItemOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* First calculate the intrinsic size of the item.
|
|
Packit |
8e9c33 |
* this must be kept consistent with what's in drawMenuItemControl
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
switch( menuItemOption->menuItemType )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QStyleOptionMenuItem::Normal:
|
|
Packit |
8e9c33 |
case QStyleOptionMenuItem::DefaultItem:
|
|
Packit |
8e9c33 |
case QStyleOptionMenuItem::SubMenu:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int iconWidth = 0;
|
|
Packit |
8e9c33 |
if( showIconsInMenuItems() ) iconWidth = isQtQuickControl( option, widget ) ? qMax( pixelMetric(PM_SmallIconSize, option, widget ), menuItemOption->maxIconWidth ) : menuItemOption->maxIconWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int leftColumnWidth( iconWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add space with respect to text
|
|
Packit |
8e9c33 |
leftColumnWidth += Metrics::MenuItem_ItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add checkbox indicator width
|
|
Packit |
8e9c33 |
if( menuItemOption->menuHasCheckableItems )
|
|
Packit |
8e9c33 |
{ leftColumnWidth += Metrics::CheckBox_Size + Metrics::MenuItem_ItemSpacing; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add spacing for accelerator
|
|
Packit |
8e9c33 |
/*
|
|
Packit |
8e9c33 |
* Note:
|
|
Packit |
8e9c33 |
* The width of the accelerator itself is not included here since
|
|
Packit |
8e9c33 |
* Qt will add that on separately after obtaining the
|
|
Packit |
8e9c33 |
* sizeFromContents() for each menu item in the menu to be shown
|
|
Packit |
8e9c33 |
* ( see QMenuPrivate::calcActionRects() )
|
|
Packit |
8e9c33 |
*/
|
|
Packit |
8e9c33 |
bool hasAccelerator( menuItemOption->text.indexOf( QLatin1Char( '\t' ) ) >= 0 );
|
|
Packit |
8e9c33 |
if( hasAccelerator ) size.rwidth() += Metrics::MenuItem_AcceleratorSpace;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// right column
|
|
Packit |
8e9c33 |
int rightColumnWidth = Metrics::MenuButton_IndicatorWidth + Metrics::MenuItem_ItemSpacing;
|
|
Packit |
8e9c33 |
size.rwidth() += leftColumnWidth + rightColumnWidth;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure height is large enough for icon and arrow
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::MenuButton_IndicatorWidth) ) );
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::CheckBox_Size) ) );
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), iconWidth ) );
|
|
Packit |
8e9c33 |
return expandSize( size, Metrics::MenuItem_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
case QStyleOptionMenuItem::Separator:
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( menuItemOption->text.isEmpty() && menuItemOption->icon.isNull() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return expandSize( QSize(0,1), Metrics::MenuItem_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// build toolbutton option
|
|
Packit |
8e9c33 |
QStyleOptionToolButton toolButtonOption( separatorMenuItemOption( menuItemOption, widget ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make sure height is large enough for icon and text
|
|
Packit |
8e9c33 |
int iconWidth( menuItemOption->maxIconWidth );
|
|
Packit |
8e9c33 |
int textHeight( menuItemOption->fontMetrics.height() );
|
|
Packit |
8e9c33 |
if( !menuItemOption->icon.isNull() ) size.setHeight( qMax( size.height(), iconWidth ) );
|
|
Packit |
8e9c33 |
if( !menuItemOption->text.isEmpty() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), textHeight ) );
|
|
Packit |
8e9c33 |
size.setWidth( qMax( size.width(), menuItemOption->fontMetrics.width( menuItemOption->text ) ) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return sizeFromContents( CT_ToolButton, &toolButtonOption, size, widget );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// for all other cases, return input
|
|
Packit |
8e9c33 |
default: return contentsSize;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::progressBarSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast<const QStyleOptionProgressBar*>( option ) );
|
|
Packit |
8e9c33 |
if( !progressBarOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast<const QStyleOptionProgressBarV2*>( option ) );
|
|
Packit |
8e9c33 |
bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// make local copy
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check text visibility
|
|
Packit |
8e9c33 |
bool textVisible( progressBarOption->textVisible );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
size.setWidth( qMax( size.width(), int(Metrics::ProgressBar_Thickness) ) );
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::ProgressBar_Thickness) ) );
|
|
Packit |
8e9c33 |
if( textVisible ) size.setHeight( qMax( size.height(), option->fontMetrics.height() ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
size.setHeight( qMax( size.height(), int(Metrics::ProgressBar_Thickness) ) );
|
|
Packit |
8e9c33 |
size.setWidth( qMax( size.width(), int(Metrics::ProgressBar_Thickness) ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::tabWidgetSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionTabWidgetFrame* tabOption = qstyleoption_cast<const QStyleOptionTabWidgetFrame*>( option );
|
|
Packit |
8e9c33 |
if( !tabOption ) return expandSize( contentsSize, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// try find direct children of type QTabBar and QStackedWidget
|
|
Packit |
8e9c33 |
// this is needed in order to add TabWidget margins only if they are necessary around tabWidget content, not the tabbar
|
|
Packit |
8e9c33 |
if( !widget ) return expandSize( contentsSize, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
QTabBar* tabBar = nullptr;
|
|
Packit |
8e9c33 |
QStackedWidget* stack = nullptr;
|
|
Packit |
8e9c33 |
auto children( widget->children() );
|
|
Packit |
8e9c33 |
foreach( auto child, children )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !tabBar ) tabBar = qobject_cast<QTabBar*>( child );
|
|
Packit |
8e9c33 |
if( !stack ) stack = qobject_cast<QStackedWidget*>( child );
|
|
Packit |
8e9c33 |
if( tabBar && stack ) break;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( !( tabBar && stack ) ) return expandSize( contentsSize, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// tab orientation
|
|
Packit |
8e9c33 |
bool verticalTabs( tabOption && isVerticalTab( tabOption->shape ) );
|
|
Packit |
8e9c33 |
if( verticalTabs )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
int tabBarHeight = tabBar->minimumSizeHint().height();
|
|
Packit |
8e9c33 |
int stackHeight = stack->minimumSizeHint().height();
|
|
Packit |
8e9c33 |
if( contentsSize.height() == tabBarHeight && tabBarHeight + 2*(Metrics::Frame_FrameWidth - 1) >= stackHeight + 2*Metrics::TabWidget_MarginWidth ) return QSize( contentsSize.width() + 2*Metrics::TabWidget_MarginWidth, contentsSize.height() + 2*(Metrics::Frame_FrameWidth - 1) );
|
|
Packit |
8e9c33 |
else return expandSize( contentsSize, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
int tabBarWidth = tabBar->minimumSizeHint().width();
|
|
Packit |
8e9c33 |
int stackWidth = stack->minimumSizeHint().width();
|
|
Packit |
8e9c33 |
if( contentsSize.width() == tabBarWidth && tabBarWidth + 2*(Metrics::Frame_FrameWidth - 1) >= stackWidth + 2*Metrics::TabWidget_MarginWidth) return QSize( contentsSize.width() + 2*(Metrics::Frame_FrameWidth - 1), contentsSize.height() + 2*Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
else return expandSize( contentsSize, Metrics::TabWidget_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::tabBarTabSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
const QStyleOptionTab *tabOption( qstyleoption_cast<const QStyleOptionTab*>( option ) );
|
|
Packit |
8e9c33 |
const QStyleOptionTabV3 *tabOptionV3( qstyleoption_cast<const QStyleOptionTabV3*>( option ) );
|
|
Packit |
8e9c33 |
bool hasText( tabOption && !tabOption->text.isEmpty() );
|
|
Packit |
8e9c33 |
bool hasIcon( tabOption && !tabOption->icon.isNull() );
|
|
Packit |
8e9c33 |
bool hasLeftButton( tabOptionV3 && !tabOptionV3->leftButtonSize.isEmpty() );
|
|
Packit |
8e9c33 |
bool hasRightButton( tabOptionV3 && !tabOptionV3->leftButtonSize.isEmpty() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// calculate width increment for horizontal tabs
|
|
Packit |
8e9c33 |
int widthIncrement = 0;
|
|
Packit |
8e9c33 |
if( hasIcon && !( hasText || hasLeftButton || hasRightButton ) ) widthIncrement -= 4;
|
|
Packit |
8e9c33 |
if( hasText && hasIcon ) widthIncrement += Metrics::TabBar_TabItemSpacing;
|
|
Packit |
8e9c33 |
if( hasLeftButton && ( hasText || hasIcon ) ) widthIncrement += Metrics::TabBar_TabItemSpacing;
|
|
Packit |
8e9c33 |
if( hasRightButton && ( hasText || hasIcon || hasLeftButton ) ) widthIncrement += Metrics::TabBar_TabItemSpacing;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// add margins
|
|
Packit |
8e9c33 |
QSize size( contentsSize );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if ( hasText ) {
|
|
Packit |
8e9c33 |
widthIncrement += option->fontMetrics.width(tabOption->text) * 0.2;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// compare to minimum size
|
|
Packit |
8e9c33 |
bool verticalTabs( tabOption && isVerticalTab( tabOption ) );
|
|
Packit |
8e9c33 |
if( verticalTabs )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
size.rheight() += widthIncrement;
|
|
Packit |
8e9c33 |
if( hasIcon && !hasText ) size = size.expandedTo( QSize( Metrics::TabBar_TabMinHeight, 0 ) );
|
|
Packit |
8e9c33 |
else size = size.expandedTo( QSize( Metrics::TabBar_TabMinHeight, Metrics::TabBar_TabMinWidth ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
size.rwidth() += widthIncrement;
|
|
Packit |
8e9c33 |
if( hasIcon && !hasText ) size = size.expandedTo( QSize( 0, Metrics::TabBar_TabMinHeight ) );
|
|
Packit |
8e9c33 |
else size = size.expandedTo( QSize( Metrics::TabBar_TabMinWidth, Metrics::TabBar_TabMinHeight ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return size;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::headerSectionSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// cast option and check
|
|
Packit |
8e9c33 |
const QStyleOptionHeader* headerOption( qstyleoption_cast<const QStyleOptionHeader*>( option ) );
|
|
Packit |
8e9c33 |
if( !headerOption ) return contentsSize;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// get text size
|
|
Packit |
8e9c33 |
bool horizontal( headerOption->orientation == Qt::Horizontal );
|
|
Packit |
8e9c33 |
bool hasText( !headerOption->text.isEmpty() );
|
|
Packit |
8e9c33 |
bool hasIcon( !headerOption->icon.isNull() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QSize textSize( hasText ? headerOption->fontMetrics.size( 0, headerOption->text ) : QSize() );
|
|
Packit |
8e9c33 |
QSize iconSize( hasIcon ? QSize( 22,22 ) : QSize() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// contents width
|
|
Packit |
8e9c33 |
int contentsWidth( 0 );
|
|
Packit |
8e9c33 |
if( hasText ) contentsWidth += textSize.width();
|
|
Packit |
8e9c33 |
if( hasIcon )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
contentsWidth += iconSize.width();
|
|
Packit |
8e9c33 |
if( hasText ) contentsWidth += Metrics::Header_ItemSpacing;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// contents height
|
|
Packit |
8e9c33 |
int contentsHeight( headerOption->fontMetrics.height() );
|
|
Packit |
8e9c33 |
if( hasIcon ) contentsHeight = qMax( contentsHeight, iconSize.height() );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( horizontal )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// also add space for icon
|
|
Packit |
8e9c33 |
contentsWidth += Metrics::Header_ArrowSize + Metrics::Header_ItemSpacing;
|
|
Packit |
8e9c33 |
contentsHeight = qMax( contentsHeight, int(Metrics::Header_ArrowSize) );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// update contents size, add margins and return
|
|
Packit |
8e9c33 |
QSize size( contentsSize.expandedTo( QSize( contentsWidth, contentsHeight ) ) );
|
|
Packit |
8e9c33 |
return expandSize( size, Metrics::Header_MarginWidth );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
QSize Style::itemViewItemSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// call base class
|
|
Packit |
8e9c33 |
QSize size( ParentStyleClass::sizeFromContents( CT_ItemViewItem, option, contentsSize, widget ) );
|
|
Packit |
8e9c33 |
return expandSize( size, Metrics::ItemView_ItemMarginWidth );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//______________________________________________________________
|
|
Packit |
8e9c33 |
bool Style::drawFramePrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy palette and rect
|
|
Packit |
8e9c33 |
const QPalette& palette( option->palette );
|
|
Packit |
8e9c33 |
const QRect& rect( option->rect );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// detect title widgets
|
|
Packit |
8e9c33 |
const bool isTitleWidget(
|
|
Packit |
8e9c33 |
StyleConfigData::titleWidgetDrawFrame() &&
|
|
Packit |
8e9c33 |
widget &&
|
|
Packit |
8e9c33 |
widget->parent() &&
|
|
Packit |
8e9c33 |
widget->parent()->inherits( "KTitleWidget" ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// copy state
|
|
Packit |
8e9c33 |
const State& state( option->state );
|
|
Packit |
8e9c33 |
if( !isTitleWidget && !( state & (State_Sunken | State_Raised ) ) ) return true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#if QT_VERSION >= 0x050000
|
|
Packit |
8e9c33 |
const bool isInputWidget( ( widget && widget->testAttribute( Qt::WA_Hover ) ) ||
|
< |