summaryrefslogtreecommitdiffstats
path: root/src/widgets/styles/qpixmapstyle_p.h
diff options
context:
space:
mode:
authorRafael Roquetto <rafael.roquetto.qnx@kdab.com>2015-09-21 14:54:00 +0000
committerLouai Al-Khanji <louai.al-khanji@theqtcompany.com>2015-11-19 15:43:53 +0000
commit986a5262e3e753958a6ec9058eb7332d44a9065f (patch)
tree5c097e240cafb439ab10fd0127180ccaeaad9676 /src/widgets/styles/qpixmapstyle_p.h
parent3d93fb077109e2190ca5f2c7ad04a46768ccad50 (diff)
Add QPixmapStyle class
The QPixmapStyle class provides a mechanism for implementing pixmap based QStyles, using the same concept introduced by the BorderImage QML component. The bb10style plugin in qtstyleplugins uses this class and is currently the only user. Change-Id: Ibfa2104e95ba6a91e89a6277baa97a7fc9edaec2 Done-with: Louai Al-Khanji <louai.al-khanji@theqtcompany.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Diffstat (limited to 'src/widgets/styles/qpixmapstyle_p.h')
-rw-r--r--src/widgets/styles/qpixmapstyle_p.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/src/widgets/styles/qpixmapstyle_p.h b/src/widgets/styles/qpixmapstyle_p.h
new file mode 100644
index 0000000000..84f806dfa5
--- /dev/null
+++ b/src/widgets/styles/qpixmapstyle_p.h
@@ -0,0 +1,213 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtWidgets module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPIXMAPSTYLE_H
+#define QPIXMAPSTYLE_H
+
+#include <QtWidgets/QCommonStyle>
+#include <QtWidgets/QTileRules>
+
+QT_BEGIN_NAMESPACE
+
+class QPixmapStylePrivate;
+
+class Q_WIDGETS_EXPORT QPixmapStyle : public QCommonStyle
+{
+ Q_OBJECT
+
+public:
+ enum ControlDescriptor {
+ BG_Background,
+ LE_Enabled, // QLineEdit
+ LE_Disabled,
+ LE_Focused,
+ PB_Enabled, // QPushButton
+ PB_Pressed,
+ PB_PressedDisabled,
+ PB_Checked,
+ PB_Disabled,
+ TE_Enabled, // QTextEdit
+ TE_Disabled,
+ TE_Focused,
+ PB_HBackground, // Horizontal QProgressBar
+ PB_HContent,
+ PB_HComplete,
+ PB_VBackground, // Vertical QProgressBar
+ PB_VContent,
+ PB_VComplete,
+ SG_HEnabled, // Horizontal QSlider groove
+ SG_HDisabled,
+ SG_HActiveEnabled,
+ SG_HActivePressed,
+ SG_HActiveDisabled,
+ SG_VEnabled, // Vertical QSlider groove
+ SG_VDisabled,
+ SG_VActiveEnabled,
+ SG_VActivePressed,
+ SG_VActiveDisabled,
+ DD_ButtonEnabled, // QComboBox (DropDown)
+ DD_ButtonDisabled,
+ DD_ButtonPressed,
+ DD_PopupDown,
+ DD_PopupUp,
+ DD_ItemSelected,
+ ID_Selected, // QStyledItemDelegate
+ SB_Horizontal, // QScrollBar
+ SB_Vertical
+ };
+
+ enum ControlPixmap {
+ CB_Enabled, // QCheckBox
+ CB_Checked,
+ CB_Pressed,
+ CB_PressedChecked,
+ CB_Disabled,
+ CB_DisabledChecked,
+ RB_Enabled, // QRadioButton
+ RB_Checked,
+ RB_Pressed,
+ RB_Disabled,
+ RB_DisabledChecked,
+ SH_HEnabled, // Horizontal QSlider handle
+ SH_HDisabled,
+ SH_HPressed,
+ SH_VEnabled, // Vertical QSlider handle
+ SH_VDisabled,
+ SH_VPressed,
+ DD_ArrowEnabled, // QComboBox (DropDown) arrow
+ DD_ArrowDisabled,
+ DD_ArrowPressed,
+ DD_ArrowOpen,
+ DD_ItemSeparator,
+ ID_Separator // QStyledItemDelegate separator
+ };
+
+public:
+ QPixmapStyle();
+ ~QPixmapStyle();
+
+ void polish(QApplication *application) Q_DECL_OVERRIDE;
+ void polish(QPalette &palette) Q_DECL_OVERRIDE;
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *application) Q_DECL_OVERRIDE;
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ void drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget=0) const Q_DECL_OVERRIDE;
+
+ QSize sizeFromContents(ContentsType type, const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement element, const QStyleOption *option,
+ const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = Q_NULLPTR,
+ const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ int styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE;
+ SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
+ const QPoint &pos, const QWidget *widget) const Q_DECL_OVERRIDE;
+
+ bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+
+ void addDescriptor(ControlDescriptor control, const QString &fileName,
+ QMargins margins = QMargins(),
+ QTileRules tileRules = QTileRules(Qt::RepeatTile, Qt::RepeatTile));
+ void copyDescriptor(ControlDescriptor source, ControlDescriptor dest);
+ void drawCachedPixmap(ControlDescriptor control, const QRect &rect, QPainter *p) const;
+
+ void addPixmap(ControlPixmap control, const QString &fileName,
+ QMargins margins = QMargins());
+ void copyPixmap(ControlPixmap source, ControlPixmap dest);
+
+protected:
+ void drawPushButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawLineEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawTextEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawCheckBox(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawRadioButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawPanelItemViewItem(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarBackground(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarLabel(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarFill(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawSlider(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawComboBox(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawScrollBar(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+
+ QSize pushButtonSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize lineEditSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize progressBarSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize sliderSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize comboBoxSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize itemViewSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+
+ QRect comboBoxSubControlRect(const QStyleOptionComplex *option, QPixmapStyle::SubControl sc,
+ const QWidget *widget) const;
+ QRect scrollBarSubControlRect(const QStyleOptionComplex *option, QPixmapStyle::SubControl sc,
+ const QWidget *widget) const;
+
+protected:
+ QPixmapStyle(QPixmapStylePrivate &dd);
+
+private:
+ Q_DECLARE_PRIVATE(QPixmapStyle)
+};
+
+QT_END_NAMESPACE
+
+#endif // QPIXMAPSTYLE_H