diff --git a/jni/love/Android.mk b/jni/love/Android.mk index d4dac606..daaaf2aa 100644 --- a/jni/love/Android.mk +++ b/jni/love/Android.mk @@ -16,6 +16,7 @@ LOCAL_C_INCLUDES := \ ${LOCAL_PATH}/src/libraries/ \ ${LOCAL_PATH}/src/libraries/enet/libenet/include \ ${LOCAL_PATH}/../SDL2-2.0.1/include \ + ${LOCAL_PATH}/../SDL2-2.0.1/src \ ${LOCAL_PATH}/../devil-1.7.8/include \ ${LOCAL_PATH}/../devil-1.7.8/src-IL/include \ ${LOCAL_PATH}/../jasper-1.900.1/src/libjasper/include \ diff --git a/jni/love/src/common/android.cpp b/jni/love/src/common/android.cpp new file mode 100644 index 00000000..16ae99c5 --- /dev/null +++ b/jni/love/src/common/android.cpp @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2006-2014 LOVE Development Team + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + **/ + +#include "android.h" + +#ifdef LOVE_ANDROID + +// SDL +#include "core/android/SDL_android.h" + +namespace love +{ +namespace android +{ + +double getScreenScale() +{ + JNIEnv *env = Android_JNI_GetEnv(); + + jclass activity = env->FindClass("org/love2d/android/GameActivity"); + jmethodID getMetrics = env->GetStaticMethodID(activity, "getMetrics", "()Landroid/util/DisplayMetrics;"); + jobject metrics = env->CallStaticObjectMethod(activity, getMetrics); + jclass metricsClass = env->GetObjectClass(metrics); + + return env->GetFloatField(metrics, env->GetFieldID(metricsClass, "density", "F")); +} + +} // android +} // love + +#endif // LOVE_ANDROID diff --git a/jni/love/src/common/android.h b/jni/love/src/common/android.h new file mode 100644 index 00000000..9a81d194 --- /dev/null +++ b/jni/love/src/common/android.h @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2006-2014 LOVE Development Team + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + **/ + +#ifndef LOVE_ANDROID_H +#define LOVE_ANDROID_H + +#include "config.h" + +#ifdef LOVE_ANDROID + +namespace love +{ +namespace android +{ + +/** + * Gets the scale factor of the window's screen, e.g. on Retina displays this + * will return 2.0. + **/ +double getScreenScale(); + +} // android +} // love + +#endif // LOVE_ANDROID +#endif // LOVE_ANDROID_H diff --git a/jni/love/src/modules/window/sdl/Window.cpp b/jni/love/src/modules/window/sdl/Window.cpp index 18fffdba..8e2a642e 100644 --- a/jni/love/src/modules/window/sdl/Window.cpp +++ b/jni/love/src/modules/window/sdl/Window.cpp @@ -23,6 +23,10 @@ #include "graphics/Graphics.h" #include "Window.h" +#ifdef LOVE_ANDROID +#include "common/android.h" +#endif + // C++ #include #include @@ -671,7 +675,9 @@ double Window::getPixelScale() const { double scale = 1.0; -#if SDL_VERSION_ATLEAST(2,0,1) +#ifdef LOVE_ANDROID + scale = love::android::getScreenScale(); +#elif SDL_VERSION_ATLEAST(2,0,1) if (window) { int wheight;