summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android
diff options
context:
space:
mode:
authorSergio Ahumada <sergio.ahumada@digia.com>2013-04-10 15:41:47 +0200
committerSergio Ahumada <sergio.ahumada@digia.com>2013-04-10 15:42:22 +0200
commit90297a64f203959f90041887ea31f4bd04bc059a (patch)
tree86f8ad6a5af26fd618cdb2e20601e6df89ac94d6 /src/plugins/platforms/android
parent537a4bc4011d32de193dc31caf09a44c1810ab33 (diff)
parentf273d6fbc02055ff3999adc0df76360ca0670435 (diff)
Merge branch 'stable' into dev
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r--src/plugins/platforms/android/src/androidjnimain.cpp11
-rw-r--r--src/plugins/platforms/android/src/androidjnimain.h1
-rw-r--r--src/plugins/platforms/android/src/androidjnimenu.cpp29
-rw-r--r--src/plugins/platforms/android/src/opengl/qeglfshooks_android.cpp7
-rw-r--r--src/plugins/platforms/android/src/raster/qandroidplatformscreen.cpp6
-rw-r--r--src/plugins/platforms/android/src/raster/qandroidplatformscreen.h1
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();