Adding QPlatformTheme support for Blackberry devices.
authorSean Harmer <sean.harmer.qnx@kdab.com>
Tue, 24 Apr 2012 10:17:18 +0000 (11:17 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 18 May 2012 23:45:04 +0000 (01:45 +0200)
Starting off simple with fonts that follow the Playbook guidelines.

Change-Id: If772f9a20c5e7566543be6bba47b49cdf3bf1524
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
src/plugins/platforms/qnx/qnx.pro
src/plugins/platforms/qnx/qqnxintegration.cpp
src/plugins/platforms/qnx/qqnxintegration.h
src/plugins/platforms/qnx/qqnxsystemsettings.cpp [new file with mode: 0644]
src/plugins/platforms/qnx/qqnxsystemsettings.h [new file with mode: 0644]
src/plugins/platforms/qnx/qqnxtheme.cpp [new file with mode: 0644]
src/plugins/platforms/qnx/qqnxtheme.h [new file with mode: 0644]

index 7ca9ddf..6cbc6c1 100644 (file)
@@ -85,12 +85,16 @@ CONFIG(blackberry) {
     SOURCES += qqnxnavigatorbps.cpp \
                qqnxeventdispatcher_blackberry.cpp \
                qqnxbpseventfilter.cpp \
-               qqnxvirtualkeyboardbps.cpp
+               qqnxvirtualkeyboardbps.cpp \
+               qqnxtheme.cpp \
+               qqnxsystemsettings.cpp
 
     HEADERS += qqnxnavigatorbps.h \
                qqnxeventdispatcher_blackberry.h \
                qqnxbpseventfilter.h \
-               qqnxvirtualkeyboardbps.h
+               qqnxvirtualkeyboardbps.h  \
+               qqnxtheme.h \
+               qqnxsystemsettings.h
 
     LIBS += -lbps
 }
index dd1a6f8..2f4e8cd 100644 (file)
@@ -54,6 +54,7 @@
 #if defined(Q_OS_BLACKBERRY)
 #include "qqnxbpseventfilter.h"
 #include "qqnxnavigatorbps.h"
+#include "qqnxtheme.h"
 #include "qqnxvirtualkeyboardbps.h"
 #elif defined(QQNX_PPS)
 #include "qqnxnavigatorpps.h"
@@ -383,6 +384,23 @@ QPlatformServices * QQnxIntegration::services() const
     return m_services;
 }
 
+#if defined(Q_OS_BLACKBERRY)
+QStringList QQnxIntegration::themeNames() const
+{
+    return QStringList(QQnxTheme::name());
+}
+
+QPlatformTheme *QQnxIntegration::createPlatformTheme(const QString &name) const
+{
+#if defined(QQNXINTEGRATION_DEBUG)
+    qDebug() << Q_FUNC_INFO << "name =" << name;
+#endif
+    if (name == QQnxTheme::name())
+        return new QQnxTheme(m_fontDatabase);
+    return QPlatformIntegration::createPlatformTheme(name);
+}
+#endif
+
 QWindow *QQnxIntegration::window(screen_window_t qnxWindow)
 {
 #if defined(QQNXINTEGRATION_DEBUG)
index e0da8cc..6820dc1 100644 (file)
@@ -112,6 +112,11 @@ public:
 
     QPlatformServices *services() const;
 
+#if defined(Q_OS_BLACKBERRY)
+    QStringList themeNames() const;
+    QPlatformTheme *createPlatformTheme(const QString &name) const;
+#endif
+
     static QWindow *window(screen_window_t qnxWindow);
 
 private:
diff --git a/src/plugins/platforms/qnx/qqnxsystemsettings.cpp b/src/plugins/platforms/qnx/qqnxsystemsettings.cpp
new file mode 100644 (file)
index 0000000..ca09aa0
--- /dev/null
@@ -0,0 +1,83 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqnxsystemsettings.h"
+
+#include <QFont>
+#include <qpa/qplatformfontdatabase.h>
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+QHash<QPlatformTheme::Font, QFont *> qt_qnx_createRoleFonts(QPlatformFontDatabase *fontDatabase)
+{
+    qDebug() << Q_FUNC_INFO;
+    // See http://docs.blackberry.com/en/developers/deliverables/27299/Text_tablet_1526156_11.jsp
+    // which recommends using normal font size of 21 pixels and 36 pixels for titles (not covered
+    // by the theme system).
+    QFont baseFont = fontDatabase->defaultFont();
+    baseFont.setPixelSize(21);
+
+    QHash<QPlatformTheme::Font, QFont *> fonts;
+    fonts.insert(QPlatformTheme::SystemFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::PushButtonFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::ListViewFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::ListBoxFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::TitleBarFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::MenuFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::ComboMenuItemFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::HeaderViewFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::TipLabelFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::LabelFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::ToolButtonFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::MenuItemFont, new QFont(baseFont));
+    fonts.insert(QPlatformTheme::ComboLineEditFont, new QFont(baseFont));
+
+    QFont smallFont(baseFont);
+    smallFont.setPixelSize(15);
+    fonts.insert(QPlatformTheme::SmallFont, new QFont(smallFont));
+    fonts.insert(QPlatformTheme::MiniFont, new QFont(smallFont));
+
+    return fonts;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxsystemsettings.h b/src/plugins/platforms/qnx/qqnxsystemsettings.h
new file mode 100644 (file)
index 0000000..47cd38d
--- /dev/null
@@ -0,0 +1,56 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQNXSYSTEMSETTINGS_H
+#define QQNXSYSTEMSETTINGS_H
+
+#include <QtCore/qhash.h>
+#include <qpa/qplatformtheme.h>
+
+class QPlatformFontDatabase;
+
+QT_BEGIN_NAMESPACE
+
+QHash<QPlatformTheme::Font, QFont *> qt_qnx_createRoleFonts(QPlatformFontDatabase *fontDatabase);
+
+QT_END_NAMESPACE
+
+#endif // QQNXSYSTEMSETTINGS_H
diff --git a/src/plugins/platforms/qnx/qqnxtheme.cpp b/src/plugins/platforms/qnx/qqnxtheme.cpp
new file mode 100644 (file)
index 0000000..cd82e0c
--- /dev/null
@@ -0,0 +1,65 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqnxtheme.h"
+
+#include "qqnxsystemsettings.h"
+
+QT_BEGIN_NAMESPACE
+
+QQnxTheme::QQnxTheme(QPlatformFontDatabase *fontDatabase)
+    : m_fontDatabase(fontDatabase)
+{
+}
+
+QQnxTheme::~QQnxTheme()
+{
+    qDeleteAll(m_fonts);
+}
+
+const QFont *QQnxTheme::font(Font type) const
+{
+    if (m_fonts.isEmpty() && m_fontDatabase)
+        m_fonts = qt_qnx_createRoleFonts(m_fontDatabase);
+    return m_fonts.value(type, 0);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxtheme.h b/src/plugins/platforms/qnx/qqnxtheme.h
new file mode 100644 (file)
index 0000000..dc9c7be
--- /dev/null
@@ -0,0 +1,73 @@
+/***************************************************************************
+**
+** Copyright (C) 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQNXTHEME_H
+#define QQNXTHEME_H
+
+#include <qpa/qplatformtheme.h>
+
+#include <QtGui/qfont.h>
+
+#include <QtCore/qhash.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformFontDatabase;
+
+class QQnxTheme : public QPlatformTheme
+{
+public:
+    QQnxTheme(QPlatformFontDatabase *fontDatabase);
+    ~QQnxTheme();
+
+    static QString name() { return QStringLiteral("blackberry"); }
+
+    const QFont *font(Font type = SystemFont) const;
+
+private:
+    QPlatformFontDatabase *m_fontDatabase;
+    mutable QHash<QPlatformTheme::Font, QFont*> m_fonts;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQNXTHEME_H