love.window.getPixelScale now works properly on Android.

This commit is contained in:
Jairo Luiz
2014-01-30 15:08:15 -03:00
parent b86319c0f4
commit 007b0fc3f0
4 changed files with 99 additions and 1 deletions
+1
View File
@@ -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 \
+48
View File
@@ -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
+43
View File
@@ -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
+7 -1
View File
@@ -23,6 +23,10 @@
#include "graphics/Graphics.h"
#include "Window.h"
#ifdef LOVE_ANDROID
#include "common/android.h"
#endif
// C++
#include <iostream>
#include <vector>
@@ -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;