diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-04-10 15:41:47 +0200 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-04-10 15:42:22 +0200 |
commit | 90297a64f203959f90041887ea31f4bd04bc059a (patch) | |
tree | 86f8ad6a5af26fd618cdb2e20601e6df89ac94d6 /src/plugins/platforms/android | |
parent | 537a4bc4011d32de193dc31caf09a44c1810ab33 (diff) | |
parent | f273d6fbc02055ff3999adc0df76360ca0670435 (diff) |
Merge branch 'stable' into dev
Change-Id: Icff019d74ae04c628a80f66aa478e4db40fae464
Diffstat (limited to 'src/plugins/platforms/android')
6 files changed, 47 insertions, 8 deletions
diff --git a/src/plugins/platforms/android/src/androidjnimain.cpp b/src/plugins/platforms/android/src/androidjnimain.cpp index ae94e75e34..36d95b0816 100644 --- a/src/plugins/platforms/android/src/androidjnimain.cpp +++ b/src/plugins/platforms/android/src/androidjnimain.cpp @@ -123,6 +123,7 @@ static QAndroidPlatformIntegration *m_androidPlatformIntegration = 0; static int m_desktopWidthPixels = 0; static int m_desktopHeightPixels = 0; +static double m_scaledDensity = 0; static volatile bool m_pauseApplication; @@ -287,6 +288,11 @@ namespace QtAndroid return m_desktopHeightPixels; } + double scaledDensity() + { + return m_scaledDensity; + } + JavaVM *javaVM() { return m_javaVM; @@ -623,10 +629,11 @@ static void destroySurface(JNIEnv *env, jobject /*thiz*/) static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, jint /*widthPixels*/, jint /*heightPixels*/, jint desktopWidthPixels, jint desktopHeightPixels, - jdouble xdpi, jdouble ydpi) + jdouble xdpi, jdouble ydpi, jdouble scaledDensity) { m_desktopWidthPixels = desktopWidthPixels; m_desktopHeightPixels = desktopHeightPixels; + m_scaledDensity = scaledDensity; if (!m_androidPlatformIntegration) { QAndroidPlatformIntegration::setDefaultDisplayMetrics(desktopWidthPixels,desktopHeightPixels, @@ -687,7 +694,7 @@ static JNINativeMethod methods[] = { {"resumeQtApp", "()V", (void *)resumeQtApp}, {"quitQtAndroidPlugin", "()V", (void *)quitQtAndroidPlugin}, {"terminateQt", "()V", (void *)terminateQt}, - {"setDisplayMetrics", "(IIIIDD)V", (void *)setDisplayMetrics}, + {"setDisplayMetrics", "(IIIIDDD)V", (void *)setDisplayMetrics}, {"setSurface", "(Ljava/lang/Object;)V", (void *)setSurface}, {"destroySurface", "()V", (void *)destroySurface}, {"lockSurface", "()V", (void *)lockSurface}, diff --git a/src/plugins/platforms/android/src/androidjnimain.h b/src/plugins/platforms/android/src/androidjnimain.h index 618bd87cdb..f75df55e02 100644 --- a/src/plugins/platforms/android/src/androidjnimain.h +++ b/src/plugins/platforms/android/src/androidjnimain.h @@ -81,6 +81,7 @@ namespace QtAndroid QWindow *topLevelWindowAt(const QPoint &globalPos); int desktopWidthPixels(); int desktopHeightPixels(); + double scaledDensity(); JavaVM *javaVM(); jclass findClass(const QString &className, JNIEnv *env); AAssetManager *assetManager(); diff --git a/src/plugins/platforms/android/src/androidjnimenu.cpp b/src/plugins/platforms/android/src/androidjnimenu.cpp index e49af0fdac..bb180347c1 100644 --- a/src/plugins/platforms/android/src/androidjnimenu.cpp +++ b/src/plugins/platforms/android/src/androidjnimenu.cpp @@ -177,6 +177,20 @@ namespace QtAndroidMenu resetMenuBar(); } + static QString removeAmpersandEscapes(QString s) + { + int i = 0; + while (i < s.size()) { + ++i; + if (s.at(i-1) != QLatin1Char('&')) + continue; + if (i < s.size() && s.at(i) == QLatin1Char('&')) + ++i; + s.remove(i-1,1); + } + return s.trimmed(); + } + static void fillMenuItem(JNIEnv *env, jobject menuItem, bool checkable, bool checked, bool enabled, bool visible, const QIcon &icon=QIcon()) { env->CallObjectMethod(menuItem, setCheckableMenuItemMethodID, checkable); @@ -204,8 +218,9 @@ namespace QtAndroidMenu foreach (QAndroidPlatformMenuItem *item, platformMenu->menuItems()) { if (item->isSeparator()) continue; - jstring jtext = env->NewString(reinterpret_cast<const jchar *>(item->text().data()), - item->text().length()); + QString itemText = removeAmpersandEscapes(item->text()); + jstring jtext = env->NewString(reinterpret_cast<const jchar *>(itemText.data()), + itemText.length()); jobject menuItem = env->CallObjectMethod(menu, addMenuItemMethodID, menuNoneValue, @@ -239,8 +254,9 @@ namespace QtAndroidMenu order = addAllMenuItemsToMenu(env, menu, static_cast<QAndroidPlatformMenu *>(menus.front())); } else { foreach (QAndroidPlatformMenu *item, menus) { - jstring jtext = env->NewString(reinterpret_cast<const jchar *>(item->text().data()), - item->text().length()); + QString itemText = removeAmpersandEscapes(item->text()); + jstring jtext = env->NewString(reinterpret_cast<const jchar *>(itemText.data()), + itemText.length()); jobject menuItem = env->CallObjectMethod(menu, addMenuItemMethodID, menuNoneValue, @@ -299,8 +315,9 @@ namespace QtAndroidMenu if (!visibleMenu) return; - jstring jtext = env->NewString(reinterpret_cast<const jchar*>(visibleMenu->text().data()), - visibleMenu->text().length()); + QString menuText = removeAmpersandEscapes(visibleMenu->text()); + jstring jtext = env->NewString(reinterpret_cast<const jchar*>(menuText.data()), + menuText.length()); env->CallObjectMethod(menu, setHeaderTitleContextMenuMethodID, jtext); env->DeleteLocalRef(jtext); addAllMenuItemsToMenu(env, menu, visibleMenu); diff --git a/src/plugins/platforms/android/src/opengl/qeglfshooks_android.cpp b/src/plugins/platforms/android/src/opengl/qeglfshooks_android.cpp index cd415843a7..4734d47eb3 100644 --- a/src/plugins/platforms/android/src/opengl/qeglfshooks_android.cpp +++ b/src/plugins/platforms/android/src/opengl/qeglfshooks_android.cpp @@ -56,6 +56,7 @@ public: EGLNativeDisplayType platformDisplay() const; QSize screenSize() const; QSizeF physicalScreenSize() const; + QDpi logicalDpi() const; int screenDepth() const; QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const; EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format); @@ -86,6 +87,12 @@ QSizeF QEglFSAndroidHooks::physicalScreenSize() const return QSizeF(QAndroidPlatformIntegration::m_defaultPhysicalSizeWidth, QAndroidPlatformIntegration::m_defaultPhysicalSizeHeight); } +QDpi QEglFSAndroidHooks::logicalDpi() const +{ + qreal lDpi = QtAndroid::scaledDensity() * 100; + return QDpi(lDpi, lDpi); +} + EGLNativeWindowType QEglFSAndroidHooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format) { diff --git a/src/plugins/platforms/android/src/raster/qandroidplatformscreen.cpp b/src/plugins/platforms/android/src/raster/qandroidplatformscreen.cpp index 2779d7cffd..409c833db3 100644 --- a/src/plugins/platforms/android/src/raster/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/src/raster/qandroidplatformscreen.cpp @@ -69,3 +69,9 @@ QRegion QAndroidPlatformScreen::doRedraw() QtAndroid::flushImage(mGeometry.topLeft(), *mScreenImage, touched.boundingRect()); return touched; } + +QDpi QAndroidPlatformScreen::logicalDpi() const +{ + qreal lDpi = QtAndroid::scaledDensity() * 100; + return QDpi(lDpi, lDpi); +} diff --git a/src/plugins/platforms/android/src/raster/qandroidplatformscreen.h b/src/plugins/platforms/android/src/raster/qandroidplatformscreen.h index df08e43af4..cfd503d611 100644 --- a/src/plugins/platforms/android/src/raster/qandroidplatformscreen.h +++ b/src/plugins/platforms/android/src/raster/qandroidplatformscreen.h @@ -50,6 +50,7 @@ class QAndroidPlatformScreen: public QFbScreen public: QAndroidPlatformScreen(); void topWindowChanged(QWindow *w); + QDpi logicalDpi() const; public slots: QRegion doRedraw(); |