summaryrefslogtreecommitdiffstats
path: root/src/plugins/styles/bb10style/qpixmapstyle.h
diff options
context:
space:
mode:
authorVladimir Minenko <vminenko@blackberry.com>2014-10-16 11:31:25 +0200
committerVladimir Minenko <vminenko@blackberry.com>2014-11-07 16:35:47 +0100
commita3398c1824e8d290d346d1610b604370d2b252e0 (patch)
tree142a48d5ccf4c3d5951849f1eca2ccd6b244060a /src/plugins/styles/bb10style/qpixmapstyle.h
parent190bfbae64006216b4114a02153c60d604ac24f7 (diff)
BlackBerry 10 specific widget style as a style plugin
- upstreaming the implementation of a BlackBerry 10 specific widget style - modfied to be integrated as a style plugin being a part of the QtBase - according docs are provided in QtDocs in another commit - attributing the excellent work at KDAB who was the original developer Change-Id: I57c548f6ec4cf02f125ee216f1ce1b764f29e8bb Reviewed-by: Bernd Weimer <bweimer@blackberry.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins/styles/bb10style/qpixmapstyle.h')
-rw-r--r--src/plugins/styles/bb10style/qpixmapstyle.h236
1 files changed, 236 insertions, 0 deletions
diff --git a/src/plugins/styles/bb10style/qpixmapstyle.h b/src/plugins/styles/bb10style/qpixmapstyle.h
new file mode 100644
index 0000000000..d4a223aab8
--- /dev/null
+++ b/src/plugins/styles/bb10style/qpixmapstyle.h
@@ -0,0 +1,236 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPIXMAPSTYLE_H
+#define QPIXMAPSTYLE_H
+
+#include <QCommonStyle>
+#include <QString>
+#include <QPixmap>
+#include <QMargins>
+#include <QTileRules>
+#include <QHash>
+#include <QPainter>
+
+QT_BEGIN_NAMESPACE
+
+class QPixmapStyle : public QCommonStyle
+{
+ Q_OBJECT
+
+public:
+ struct Descriptor {
+ QString fileName;
+ QSize size;
+ QMargins margins;
+ QTileRules tileRules;
+ };
+
+ enum ControlDescriptor {
+ BG_Background=0,
+ 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
+ };
+
+ struct Pixmap {
+ QPixmap pixmap;
+ QMargins margins;
+ };
+ 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);
+ void polish(QPalette &palette);
+ void polish(QWidget *widget);
+ void unpolish(QWidget *widget);
+
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget=0) const;
+
+ QSize sizeFromContents(ContentsType type, const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget = 0) const;
+ QRect subElementRect(SubElement element, const QStyleOption *option,
+ const QWidget *widget = 0) const;
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget = 0) const;
+
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0,
+ const QWidget *widget = 0) const;
+ int styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *returnData) const;
+ SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
+ const QPoint &pos, const QWidget *widget) const;
+
+ bool eventFilter(QObject *watched, QEvent *event);
+
+protected:
+ 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);
+
+ 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,
+ SubControl sc, const QWidget *widget) const;
+ QRect scrollBarSubControlRect(const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget) const;
+
+private:
+ QPixmap getCachedPixmap(ControlDescriptor control,
+ const Descriptor &desc, const QSize &size) const;
+
+ QSize computeSize(const Descriptor &desc, int width, int height) const;
+
+private:
+ QHash<ControlDescriptor, Descriptor> m_descriptors;
+ QHash<ControlPixmap, Pixmap> m_pixmaps;
+};
+
+QT_END_NAMESPACE
+
+#endif // QPIXMAPSTYLE_H