From 095e74825d588fc260f06fba3a1c32ac837cf73d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 3 Jun 2010 11:04:26 +0300 Subject: Fixed S60_VERSION variable exists checks Apparently else:exists(xxx)|exists(yyy) syntax doesn't work as I originally expected if both xxx and yyy exist, so change the check to use nested exists. Reviewed-by: Jason Barron --- mkspecs/common/symbian/symbian-mmp.conf | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf index b0d17be..5a7b2d2 100644 --- a/mkspecs/common/symbian/symbian-mmp.conf +++ b/mkspecs/common/symbian/symbian-mmp.conf @@ -40,15 +40,21 @@ MMP_RULES += "USERINCLUDE ." exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis) { S60_VERSION = 5.2 symbian3 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) { - S60_VERSION = 5.1 symbian2 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { - S60_VERSION = 5.0 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { - S60_VERSION = 3.2 } else { - S60_VERSION = 3.1 - MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) { + S60_VERSION = 5.1 symbian2 + } else { + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { + S60_VERSION = 5.0 + } else { + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { + S60_VERSION = 3.2 + } else { + S60_VERSION = 3.1 + MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET + } + } + } } QMAKE_CXXFLAGS_FAST_VFP.ARMCC = --fpmode fast -- cgit v0.12 From f535efb015314fb07573739fd33aa00ba5502bde Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 12 May 2010 00:24:55 +0200 Subject: Standalone Qml demos for Fluidlauncher There new Qml demos are self-contained Qml applications, ready to be run on Symbian devices: qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter Since these depend on the DEPLOYMENT feature of qmake, they currently will only work for Symbian and theoretically WinCE/Mobile. TODO: create INSTALLS rules in order to support more platforms. Task-number: QTBUG-10148 Reviewed-By: axis --- demos/embedded/embedded.pro | 5 ++ demos/embedded/fluidlauncher/config_s60/config.xml | 7 ++ demos/embedded/fluidlauncher/fluidlauncher.pro | 12 +++ .../fluidlauncher/screenshots/qmlcalculator.png | Bin 0 -> 15455 bytes .../fluidlauncher/screenshots/qmlclocks.png | Bin 0 -> 12409 bytes .../fluidlauncher/screenshots/qmldialcontrol.png | Bin 0 -> 16811 bytes .../fluidlauncher/screenshots/qmleasing.png | Bin 0 -> 3453 bytes .../fluidlauncher/screenshots/qmlflickr.jpg | Bin 0 -> 35616 bytes .../fluidlauncher/screenshots/qmlphotoviewer.jpg | Bin 0 -> 24216 bytes .../fluidlauncher/screenshots/qmltwitter.jpg | Bin 0 -> 35159 bytes demos/embedded/qmlcalculator/deployment.pri | 7 ++ demos/embedded/qmlcalculator/qmlcalculator.cpp | 78 +++++++++++++++++ demos/embedded/qmlcalculator/qmlcalculator.pro | 12 +++ demos/embedded/qmlclocks/deployment.pri | 7 ++ demos/embedded/qmlclocks/qmlclocks.cpp | 78 +++++++++++++++++ demos/embedded/qmlclocks/qmlclocks.pro | 12 +++ demos/embedded/qmldialcontrol/deployment.pri | 7 ++ demos/embedded/qmldialcontrol/qmldialcontrol.cpp | 66 +++++++++++++++ demos/embedded/qmldialcontrol/qmldialcontrol.pro | 11 +++ demos/embedded/qmleasing/deployment.pri | 7 ++ demos/embedded/qmleasing/qmleasing.cpp | 66 +++++++++++++++ demos/embedded/qmleasing/qmleasing.pro | 11 +++ demos/embedded/qmlflickr/deployment.pri | 7 ++ demos/embedded/qmlflickr/qmlflickr.cpp | 92 +++++++++++++++++++++ demos/embedded/qmlflickr/qmlflickr.pro | 14 ++++ demos/embedded/qmlphotoviewer/deployment.pri | 7 ++ demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp | 92 +++++++++++++++++++++ demos/embedded/qmlphotoviewer/qmlphotoviewer.pro | 14 ++++ demos/embedded/qmltwitter/deployment.pri | 7 ++ demos/embedded/qmltwitter/qmltwitter.cpp | 92 +++++++++++++++++++++ demos/embedded/qmltwitter/qmltwitter.pro | 14 ++++ 31 files changed, 725 insertions(+) create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlcalculator.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlclocks.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmleasing.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg create mode 100644 demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg create mode 100644 demos/embedded/qmlcalculator/deployment.pri create mode 100644 demos/embedded/qmlcalculator/qmlcalculator.cpp create mode 100644 demos/embedded/qmlcalculator/qmlcalculator.pro create mode 100644 demos/embedded/qmlclocks/deployment.pri create mode 100644 demos/embedded/qmlclocks/qmlclocks.cpp create mode 100644 demos/embedded/qmlclocks/qmlclocks.pro create mode 100644 demos/embedded/qmldialcontrol/deployment.pri create mode 100644 demos/embedded/qmldialcontrol/qmldialcontrol.cpp create mode 100644 demos/embedded/qmldialcontrol/qmldialcontrol.pro create mode 100644 demos/embedded/qmleasing/deployment.pri create mode 100644 demos/embedded/qmleasing/qmleasing.cpp create mode 100644 demos/embedded/qmleasing/qmleasing.pro create mode 100644 demos/embedded/qmlflickr/deployment.pri create mode 100644 demos/embedded/qmlflickr/qmlflickr.cpp create mode 100644 demos/embedded/qmlflickr/qmlflickr.pro create mode 100644 demos/embedded/qmlphotoviewer/deployment.pri create mode 100644 demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp create mode 100644 demos/embedded/qmlphotoviewer/qmlphotoviewer.pro create mode 100644 demos/embedded/qmltwitter/deployment.pri create mode 100644 demos/embedded/qmltwitter/qmltwitter.cpp create mode 100644 demos/embedded/qmltwitter/qmltwitter.pro diff --git a/demos/embedded/embedded.pro b/demos/embedded/embedded.pro index da764d1..a3fc72b 100644 --- a/demos/embedded/embedded.pro +++ b/demos/embedded/embedded.pro @@ -19,6 +19,11 @@ contains(QT_CONFIG, webkit) { SUBDIRS += anomaly } +contains(QT_CONFIG, declarative) { + # Qml demos require DEPLOYMENT support. Therefore, only symbian. + symbian:SUBDIRS += qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter +} + # install sources.files = README *.pro sources.path = $$[QT_INSTALL_DEMOS]/embedded diff --git a/demos/embedded/fluidlauncher/config_s60/config.xml b/demos/embedded/fluidlauncher/config_s60/config.xml index d926a4b..4f10488 100644 --- a/demos/embedded/fluidlauncher/config_s60/config.xml +++ b/demos/embedded/fluidlauncher/config_s60/config.xml @@ -21,6 +21,13 @@ + + + + + + + diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro index bb512d9..21f3819 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.pro +++ b/demos/embedded/fluidlauncher/fluidlauncher.pro @@ -215,6 +215,16 @@ symbian { $$appResourceDir(examples/script/context2d/context2d.mif) } + qmldemos = qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter + contains(QT_CONFIG, declarative) { + for(qmldemo, qmldemos) { + executables.sources += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe + reg_resource.sources += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc) + resource.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc) + mifs.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif) + } + } + files.sources = $$PWD/screenshots $$PWD/slides files.path = . @@ -243,6 +253,8 @@ symbian { DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \ mifs desktopservices_music desktopservices_images fluidbackup + contains(QT_CONFIG, declarative):for(qmldemo, qmldemos):include($$QT_BUILD_TREE/demos/embedded/$${qmldemo}/deployment.pri) + DEPLOYMENT.installer_header = 0xA000D7CD TARGET.EPOCHEAPSIZE = 100000 20000000 diff --git a/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png b/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png new file mode 100644 index 0000000..f4218f5 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlclocks.png b/demos/embedded/fluidlauncher/screenshots/qmlclocks.png new file mode 100644 index 0000000..ba25a18 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlclocks.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png b/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png new file mode 100644 index 0000000..b8def8c Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmleasing.png b/demos/embedded/fluidlauncher/screenshots/qmleasing.png new file mode 100644 index 0000000..d34c2ac Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmleasing.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg b/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg new file mode 100644 index 0000000..d7faabf Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg b/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg new file mode 100644 index 0000000..673ffc6 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg b/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg new file mode 100644 index 0000000..4399eea Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg differ diff --git a/demos/embedded/qmlcalculator/deployment.pri b/demos/embedded/qmlcalculator/deployment.pri new file mode 100644 index 0000000..d5078f6 --- /dev/null +++ b/demos/embedded/qmlcalculator/deployment.pri @@ -0,0 +1,7 @@ +qmlcalculator_src = $$PWD/../../declarative/calculator +symbian { + qmlcalculator_uid3 = EA8EBD98 + qmlcalculator_files.path = ../$$qmlcalculator_uid3 +} +qmlcalculator_files.sources = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core +DEPLOYMENT += qmlcalculator_files diff --git a/demos/embedded/qmlcalculator/qmlcalculator.cpp b/demos/embedded/qmlcalculator/qmlcalculator.cpp new file mode 100644 index 0000000..3030e81 --- /dev/null +++ b/demos/embedded/qmlcalculator/qmlcalculator.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("calculator.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait) + ) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmlcalculator/qmlcalculator.pro b/demos/embedded/qmlcalculator/qmlcalculator.pro new file mode 100644 index 0000000..1e71eed --- /dev/null +++ b/demos/embedded/qmlcalculator/qmlcalculator.pro @@ -0,0 +1,12 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmlcalculator.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlcalculator_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + LIBS += -lcone -leikcore -lavkon # Screen orientation +} diff --git a/demos/embedded/qmlclocks/deployment.pri b/demos/embedded/qmlclocks/deployment.pri new file mode 100644 index 0000000..84803ec --- /dev/null +++ b/demos/embedded/qmlclocks/deployment.pri @@ -0,0 +1,7 @@ +qmlclocks_src = $$PWD/../../../examples/declarative/toys/clocks +symbian { + qmlclocks_uid3 = E19225B9 + qmlclocks_files.path = ../$$qmlclocks_uid3 +} +qmlclocks_files.sources = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content +DEPLOYMENT += qmlclocks_files diff --git a/demos/embedded/qmlclocks/qmlclocks.cpp b/demos/embedded/qmlclocks/qmlclocks.cpp new file mode 100644 index 0000000..d94cbdd --- /dev/null +++ b/demos/embedded/qmlclocks/qmlclocks.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("clocks.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape) + ) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmlclocks/qmlclocks.pro b/demos/embedded/qmlclocks/qmlclocks.pro new file mode 100644 index 0000000..5edfe14 --- /dev/null +++ b/demos/embedded/qmlclocks/qmlclocks.pro @@ -0,0 +1,12 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmlclocks.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlclocks_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + LIBS += -lcone -leikcore -lavkon # Screen orientation +} diff --git a/demos/embedded/qmldialcontrol/deployment.pri b/demos/embedded/qmldialcontrol/deployment.pri new file mode 100644 index 0000000..8eb39b2 --- /dev/null +++ b/demos/embedded/qmldialcontrol/deployment.pri @@ -0,0 +1,7 @@ +qmldialcontrol_src = $$PWD/../../../examples/declarative/ui-components/dialcontrol +symbian { + qmldialcontrol_uid3 = E59A9283 + qmldialcontrol_files.path = ../$$qmldialcontrol_uid3 +} +qmldialcontrol_files.sources = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content +DEPLOYMENT += qmldialcontrol_files diff --git a/demos/embedded/qmldialcontrol/qmldialcontrol.cpp b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp new file mode 100644 index 0000000..311cee0 --- /dev/null +++ b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("dialcontrol.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmldialcontrol/qmldialcontrol.pro b/demos/embedded/qmldialcontrol/qmldialcontrol.pro new file mode 100644 index 0000000..193cf55 --- /dev/null +++ b/demos/embedded/qmldialcontrol/qmldialcontrol.pro @@ -0,0 +1,11 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmldialcontrol.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmldialcontrol_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmleasing/deployment.pri b/demos/embedded/qmleasing/deployment.pri new file mode 100644 index 0000000..ddab1ba --- /dev/null +++ b/demos/embedded/qmleasing/deployment.pri @@ -0,0 +1,7 @@ +qmleasing_src = $$PWD/../../../examples/declarative/animation/easing +symbian { + qmleasing_uid3 = E8E8E725 + qmleasing_files.path = ../$$qmleasing_uid3 +} +qmleasing_files.sources = $$qmleasing_src/easing.qml +DEPLOYMENT += qmleasing_files diff --git a/demos/embedded/qmleasing/qmleasing.cpp b/demos/embedded/qmleasing/qmleasing.cpp new file mode 100644 index 0000000..d326468 --- /dev/null +++ b/demos/embedded/qmleasing/qmleasing.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("easing.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmleasing/qmleasing.pro b/demos/embedded/qmleasing/qmleasing.pro new file mode 100644 index 0000000..084a880 --- /dev/null +++ b/demos/embedded/qmleasing/qmleasing.pro @@ -0,0 +1,11 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmleasing.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmleasing_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmlflickr/deployment.pri b/demos/embedded/qmlflickr/deployment.pri new file mode 100644 index 0000000..aef3198 --- /dev/null +++ b/demos/embedded/qmlflickr/deployment.pri @@ -0,0 +1,7 @@ +qmlflickr_src = $$PWD/../../declarative/flickr +symbian { + qmlflickr_uid3 = E56D5A92 + qmlflickr_files.path = ../$$qmlflickr_uid3 +} +qmlflickr_files.sources = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile +DEPLOYMENT += qmlflickr_files diff --git a/demos/embedded/qmlflickr/qmlflickr.cpp b/demos/embedded/qmlflickr/qmlflickr.cpp new file mode 100644 index 0000000..6f0c528 --- /dev/null +++ b/demos/embedded/qmlflickr/qmlflickr.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("flickr.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmlflickr.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlflickr/qmlflickr.pro b/demos/embedded/qmlflickr/qmlflickr.pro new file mode 100644 index 0000000..e706134 --- /dev/null +++ b/demos/embedded/qmlflickr/qmlflickr.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmlflickr.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlflickr_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmlphotoviewer/deployment.pri b/demos/embedded/qmlphotoviewer/deployment.pri new file mode 100644 index 0000000..99475cc --- /dev/null +++ b/demos/embedded/qmlphotoviewer/deployment.pri @@ -0,0 +1,7 @@ +qmlphotoviewer_src = $$PWD/../../declarative/photoviewer +symbian { + qmlphotoviewer_uid3 = E8567E72 + qmlphotoviewer_files.path = ../$$qmlphotoviewer_uid3 +} +qmlphotoviewer_files.sources = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore +DEPLOYMENT += qmlphotoviewer_files diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp new file mode 100644 index 0000000..7889842 --- /dev/null +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("photoviewer.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmlphotoviewer.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro new file mode 100644 index 0000000..ead5e67 --- /dev/null +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmlphotoviewer.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlphotoviewer_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmltwitter/deployment.pri b/demos/embedded/qmltwitter/deployment.pri new file mode 100644 index 0000000..e5bd884 --- /dev/null +++ b/demos/embedded/qmltwitter/deployment.pri @@ -0,0 +1,7 @@ +qmltwitter_src = $$PWD/../../declarative/twitter +symbian { + qmltwitter_uid3 = EEF6D468 + qmltwitter_files.path = ../$$qmltwitter_uid3 +} +qmltwitter_files.sources = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore +DEPLOYMENT += qmltwitter_files diff --git a/demos/embedded/qmltwitter/qmltwitter.cpp b/demos/embedded/qmltwitter/qmltwitter.cpp new file mode 100644 index 0000000..e30ab24 --- /dev/null +++ b/demos/embedded/qmltwitter/qmltwitter.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("twitter.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmltwitter.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmltwitter/qmltwitter.pro b/demos/embedded/qmltwitter/qmltwitter.pro new file mode 100644 index 0000000..7f9be57 --- /dev/null +++ b/demos/embedded/qmltwitter/qmltwitter.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmltwitter.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmltwitter_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} -- cgit v0.12 From 7d71e65658d27c200f97b93781c3c7f7c313ff56 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 31 May 2010 00:51:05 +0200 Subject: Using Symbian's future font table getter Api Qt requires raw access to the font tables of used fonts, for a variety of reasons. Until Symbian^4, it is/was not possible to access the font tables of the fonts which are stored in Symbians Font and Bitmap Server. That's why Qt for Symbian's FontDataBase created an own TFontStore where it loaded in all installed fonts. While accessing the font tables via the own TFontStore it still uses the rasterization and metrics from the FBS, which has public Api for those things. However, loading all fonts in the own TFontStore for each Qt Gui process slows down the program startup. Symbian's future font table setter Api is very welcome and this implemets it's usage. This patch lets Qt use the new font API on Symbain^4. The font tables are retrieved via RFontTable. Task-number: QT-2746 Reviewed-by: Jason Barron --- src/gui/text/qfontdatabase_s60.cpp | 76 ++++++++++++++++++++++++++++--------- src/gui/text/qfontengine_s60.cpp | 78 ++++++++++++++++++++++++++++++++------ src/gui/text/qfontengine_s60_p.h | 18 ++++++--- 3 files changed, 137 insertions(+), 35 deletions(-) diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index 489b70b..943df7f 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -49,12 +49,12 @@ #include #include "qendian.h" #include -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE #include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include // COpenFontRasterizer has moved to a new header file #endif // SYMBIAN_ENABLE_SPLIT_HEADERS -#endif +#endif // QT_NO_FREETYPE QT_BEGIN_NAMESPACE @@ -91,7 +91,7 @@ QFileInfoList alternativeFilePaths(const QString &path, const QStringList &nameF return result; } -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras { public: @@ -100,16 +100,41 @@ public: const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const; +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API + struct CFontFromFontStoreReleaser { + static inline void cleanup(CFont *font) + { + if (!font) + return; + const QSymbianFontDatabaseExtrasImplementation *dbExtras = + static_cast(privateDb()->symbianExtras); + dbExtras->m_store->ReleaseFont(font); + } + }; +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API + + struct CFontFromScreenDeviceReleaser { + static inline void cleanup(CFont *font) + { + if (!font) + return; + QS60Data::screenDevice()->ReleaseFont(font); + } + }; + private: +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API RHeap* m_heap; CFontStore *m_store; COpenFontRasterizer *m_rasterizer; mutable QList m_extras; +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API mutable QHash m_extrasHash; }; QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation() { +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API QStringList filters; filters.append(QLatin1String("*.ttf")); filters.append(QLatin1String("*.ccc")); @@ -131,10 +156,14 @@ QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementati TPtrC fontFilePtr(qt_QString2TPtrC(fontFile)); QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr)); } +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API } QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation() { +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API + qDeleteAll(m_extrasHash); +#else // Q_SYMBIAN_HAS_FONTTABLE_API typedef QList::iterator iterator; for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) { m_store->ReleaseFont((*p)->fontOwner()); @@ -143,6 +172,7 @@ QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementat delete m_store; m_heap->Close(); +#endif // Q_SYMBIAN_HAS_FONTTABLE_API } #ifndef FNTSTORE_H_INLINES_SUPPORT_FMM @@ -167,26 +197,37 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c { const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic)); if (!m_extrasHash.contains(searchKey)) { - CFont* font = NULL; TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1); if (bold) searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); if (italic) searchSpec.iFontStyle.SetPosture(EPostureItalic); + + CFont* font = NULL; +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API + const TInt err = QS60Data::screenDevice()->GetNearestFontToDesignHeightInPixels(font, searchSpec); + Q_ASSERT(err == KErrNone && font); + QScopedPointer sFont(font); + QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font); + sFont.take(); + m_extrasHash.insert(searchKey, extras); +#else // Q_SYMBIAN_HAS_FONTTABLE_API const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec); Q_ASSERT(err == KErrNone && font); const CBitmapFont *bitmapFont = static_cast(font); COpenFont *openFont = #ifdef FNTSTORE_H_INLINES_SUPPORT_FMM - bitmapFont->openFont(); -#else + bitmapFont->OpenFont(); +#else // FNTSTORE_H_INLINES_SUPPORT_FMM OpenFontFromBitmapFont(bitmapFont); #endif // FNTSTORE_H_INLINES_SUPPORT_FMM const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib(); const QString foundKey = QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length()); if (!m_extrasHash.contains(foundKey)) { + QScopedPointer sFont(font); QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont); + sFont.take(); m_extras.append(extras); m_extrasHash.insert(searchKey, extras); m_extrasHash.insert(foundKey, extras); @@ -194,10 +235,11 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c m_store->ReleaseFont(font); m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey)); } +#endif // Q_SYMBIAN_HAS_FONTTABLE_API } return m_extrasHash.value(searchKey); } -#else +#else // QT_NO_FREETYPE class QFontEngineFTS60 : public QFontEngineFT { public: @@ -209,7 +251,7 @@ QFontEngineFTS60::QFontEngineFTS60(const QFontDef &fd) { default_hint_style = HintFull; } -#endif // defined(QT_NO_FREETYPE) +#endif // QT_NO_FREETYPE /* QFontEngineS60::pixelsToPoints, QFontEngineS60::pointsToPixels, QFontEngineMultiS60::QFontEngineMultiS60 @@ -261,12 +303,12 @@ static void initializeDb() if(!db || db->count) return; -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE if (!db->symbianExtras) db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation; QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock); - + const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces(); const QSymbianFontDatabaseExtrasImplementation *dbExtras = static_cast(db->symbianExtras); @@ -278,6 +320,7 @@ static void initializeDb() TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11); if (QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec) != KErrNone) continue; + QScopedPointer sFont(font); if (font->TypeUid() == KCFbsFontUid) { TOpenFontFaceAttrib faceAttrib; const CFbsFont *cfbsFont = static_cast(font); @@ -318,14 +361,13 @@ static void initializeDb() fontAdded = true; } - QS60Data::screenDevice()->ReleaseFont(font); } Q_ASSERT(fontAdded); - lock.relock(); + lock.relock(); -#else // defined(QT_NO_FREETYPE) +#else // QT_NO_FREETYPE QDir dir(QDesktopServices::storageLocation(QDesktopServices::FontsLocation)); dir.setNameFilters(QStringList() << QLatin1String("*.ttf") << QLatin1String("*.ttc") << QLatin1String("*.pfa") @@ -334,7 +376,7 @@ static void initializeDb() const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i])); db->addTTFile(file); } -#endif // defined(QT_NO_FREETYPE) +#endif // QT_NO_FREETYPE } static inline void load(const QString &family = QString(), int script = -1) @@ -416,13 +458,13 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo const QString fontFamily = desc.family->name; QFontDef request = req; request.family = fontFamily; -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE const QSymbianFontDatabaseExtrasImplementation *dbExtras = static_cast(db->symbianExtras); const QSymbianTypeFaceExtras *typeFaceExtras = dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal); fe = new QFontEngineS60(request, typeFaceExtras); -#else +#else // QT_NO_FREETYPE QFontEngine::FaceId faceId; const QtFontFamily * const reqQtFontFamily = db->family(fontFamily); faceId.filename = reqQtFontFamily->fontFilename; @@ -433,7 +475,7 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo fe = fte; else delete fte; -#endif +#endif // QT_NO_FREETYPE Q_ASSERT(fe); if (script == QUnicodeTables::Common diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 93f02ff..52a2c3c 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -50,21 +50,73 @@ #include #include #include +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API +#include +#endif // Q_SYMBIAN_HAS_FONTTABLE_API QT_BEGIN_NAMESPACE -QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font) - : m_font(font) - , m_cmap(0) +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API +QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont) + : m_cFont(cFont) , m_symbolCMap(false) - , m_fontOwner(fontOwner) +{ + Q_UNUSED(openFont) +} + +QSymbianTypeFaceExtras::~QSymbianTypeFaceExtras() +{ + QS60Data::screenDevice()->ReleaseFont(m_cFont); +} + +QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const +{ + RFontTable fontTable; + if (fontTable.Open(*m_cFont, tag) != KErrNone) + return QByteArray(); + const QByteArray byteArray(reinterpret_cast + (fontTable.TableContent()),fontTable.TableLength()); + fontTable.Close(); + return byteArray; +} + +bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const +{ + RFontTable fontTable; + if (fontTable.Open(*m_cFont, tag) != KErrNone) + return false; + + bool result = true; + const TInt tableByteLength = fontTable.TableLength(); + + if (*length > 0 && *length < tableByteLength) { + result = false; // Caller did not allocate enough memory + } else { + *length = tableByteLength; + if (buffer) + qMemCopy(buffer, fontTable.TableContent(), tableByteLength); + } + + fontTable.Close(); + return result; +} + +#else // Q_SYMBIAN_HAS_FONTTABLE_API +QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont) + : m_cFont(cFont) + , m_symbolCMap(false) + , m_openFont(openFont) { TAny *trueTypeExtension = NULL; - m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension); + m_openFont->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension); m_trueTypeExtension = static_cast(trueTypeExtension); Q_ASSERT(m_trueTypeExtension); } +QSymbianTypeFaceExtras::~QSymbianTypeFaceExtras() +{ +} + QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const { Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag)); @@ -100,23 +152,25 @@ bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *len m_trueTypeExtension->ReleaseTrueTypeTable(table); return result; } +#endif // Q_SYMBIAN_HAS_FONTTABLE_API -const unsigned char *QSymbianTypeFaceExtras::cmap() const +const uchar *QSymbianTypeFaceExtras::cmap() const { - if (!m_cmap) { - m_cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p')); + if (m_cmapTable.isNull()) { + const QByteArray cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p')); int size = 0; - m_cmap = QFontEngineS60::getCMap(reinterpret_cast(m_cmapTable.constData()), m_cmapTable.size(), &m_symbolCMap, &size); + const uchar *cmap = QFontEngine::getCMap(reinterpret_cast + (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &size); + m_cmapTable = QByteArray(reinterpret_cast(cmap), size); } - return m_cmap; + return reinterpret_cast(m_cmapTable.constData()); } CFont *QSymbianTypeFaceExtras::fontOwner() const { - return m_fontOwner; + return m_cFont; } - // duplicated from qfontengine_xyz.cpp static inline unsigned int getChar(const QChar *str, int &i, const int len) { diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index 6883730..dea32c4 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -58,6 +58,10 @@ #include "qsize.h" #include +#ifdef SYMBIAN_GDI_GLYPHDATA +#define Q_SYMBIAN_HAS_FONTTABLE_API +#endif + class CFont; QT_BEGIN_NAMESPACE @@ -66,20 +70,22 @@ QT_BEGIN_NAMESPACE class QSymbianTypeFaceExtras { public: - QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font); + QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont = 0); + ~QSymbianTypeFaceExtras(); QByteArray getSfntTable(uint tag) const; bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; - const unsigned char *cmap() const; + const uchar *cmap() const; CFont *fontOwner() const; private: - COpenFont *m_font; - mutable MOpenFontTrueTypeExtension *m_trueTypeExtension; - mutable const unsigned char *m_cmap; + CFont* m_cFont; mutable bool m_symbolCMap; mutable QByteArray m_cmapTable; - CFont* m_fontOwner; +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API + COpenFont *m_openFont; + mutable MOpenFontTrueTypeExtension *m_trueTypeExtension; +#endif // Q_SYMBIAN_HAS_FONTTABLE_API }; class QFontEngineS60 : public QFontEngine -- cgit v0.12