mirror of https://github.com/axmolengine/axmol.git
issue #1712: Adding getting dpi support for iOS and Android.
This commit is contained in:
parent
a170f3b0d8
commit
ac17f67686
|
@ -80,6 +80,7 @@ platform/CCThread.cpp \
|
|||
platform/CCFileUtils.cpp \
|
||||
platform/platform.cpp \
|
||||
platform/CCEGLViewProtocol.cpp \
|
||||
platform/android/CCDevice.cpp \
|
||||
platform/android/CCEGLView.cpp \
|
||||
platform/android/CCAccelerometer.cpp \
|
||||
platform/android/CCApplication.cpp \
|
||||
|
@ -93,6 +94,7 @@ platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxAccelerometer.cpp \
|
|||
platform/android/jni/JniHelper.cpp \
|
||||
platform/android/jni/IMEJni.cpp \
|
||||
platform/android/jni/TouchesJni.cpp \
|
||||
platform/android/jni/DPIJni.cpp \
|
||||
script_support/CCScriptSupport.cpp \
|
||||
shaders/ccShaders.cpp \
|
||||
shaders/CCGLProgram.cpp \
|
||||
|
|
|
@ -123,7 +123,7 @@ THE SOFTWARE.
|
|||
#include "particle_nodes/CCParticleSystemQuad.h"
|
||||
|
||||
// platform
|
||||
|
||||
#include "platform/CCDevice.h"
|
||||
#include "platform/CCCommon.h"
|
||||
#include "platform/CCFileUtils.h"
|
||||
#include "platform/CCImage.h"
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef __CCDEVICE_H__
|
||||
#define __CCDEVICE_H__
|
||||
|
||||
#include "CCPlatformMacros.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class CCDevice
|
||||
{
|
||||
private:
|
||||
CCDevice();
|
||||
public:
|
||||
static float getDPI();
|
||||
};
|
||||
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif /* __CCDEVICE_H__ */
|
|
@ -0,0 +1,11 @@
|
|||
#include "platform/CCDevice.h"
|
||||
#include "jni/DPIJni.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
float CCDevice::getDPI()
|
||||
{
|
||||
return getDPIJNI();
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -29,7 +29,10 @@ import android.app.Activity;
|
|||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Display;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener {
|
||||
|
@ -106,6 +109,25 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe
|
|||
this.mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
public static float getDPI()
|
||||
{
|
||||
if (sContext != null)
|
||||
{
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager wm = ((Activity)sContext).getWindowManager();
|
||||
if (wm != null)
|
||||
{
|
||||
Display d = wm.getDefaultDisplay();
|
||||
if (d != null)
|
||||
{
|
||||
d.getMetrics(metrics);
|
||||
return (int)(metrics.density*160.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runOnGLThread(final Runnable pRunnable) {
|
||||
this.mGLSurfaceView.queueEvent(pRunnable);
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
#include "DPIJni.h"
|
||||
#include "jni/JniHelper.h"
|
||||
|
||||
USING_NS_CC;
|
||||
|
||||
extern "C" {
|
||||
|
||||
float getDPIJNI()
|
||||
{
|
||||
JniMethodInfo t;
|
||||
jfloat ret = 0.0f;
|
||||
if (JniHelper::getStaticMethodInfo(t, "org/cocos2dx/lib/Cocos2dxActivity", "getDPI", "()F")) {
|
||||
ret = t.env->CallStaticFloatMethod(t.classID, t.methodID);
|
||||
t.env->DeleteLocalRef(t.classID);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // extern "C"
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef __DPIJNI_H__
|
||||
#define __DPIJNI_H__
|
||||
|
||||
extern "C" {
|
||||
|
||||
float getDPIJNI();
|
||||
|
||||
} // extern "C"
|
||||
|
||||
#endif /* __DPIJNI_H__ */
|
|
@ -0,0 +1,25 @@
|
|||
#include "CCDevice.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
float CCDevice::getDPI()
|
||||
{
|
||||
float scale = 1.0f;
|
||||
float dpi = 0.0f;
|
||||
|
||||
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
|
||||
scale = [[UIScreen mainScreen] scale];
|
||||
}
|
||||
|
||||
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
||||
dpi = 132 * scale;
|
||||
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
|
||||
dpi = 163 * scale;
|
||||
} else {
|
||||
dpi = 160 * scale;
|
||||
}
|
||||
return dpi;
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -1 +1 @@
|
|||
81abe6adef9de3477eb86bdb9c31bd542aa0eef8
|
||||
faa02223cf3b80808988ca41838ac143d3001427
|
|
@ -24,16 +24,6 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "CCScrollView.h"
|
||||
#include "actions/CCActionInterval.h"
|
||||
#include "actions/CCActionTween.h"
|
||||
#include "actions/CCActionInstant.h"
|
||||
#include "support/CCPointExtension.h"
|
||||
#include "touch_dispatcher/CCTouchDispatcher.h"
|
||||
#include "effects/CCGrid.h"
|
||||
#include "CCDirector.h"
|
||||
#include "kazmath/GL/matrix.h"
|
||||
#include "touch_dispatcher/CCTouch.h"
|
||||
#include "CCEGLView.h"
|
||||
|
||||
NS_CC_EXT_BEGIN
|
||||
|
||||
|
@ -41,6 +31,13 @@ NS_CC_EXT_BEGIN
|
|||
#define SCROLL_DEACCEL_DIST 1.0f
|
||||
#define BOUNCE_DURATION 0.15f
|
||||
#define INSET_RATIO 0.2f
|
||||
#define MOVE_INCH 7.0f/160.0f
|
||||
|
||||
static float convertDistanceFromPointToInch(float pointDis)
|
||||
{
|
||||
float factor = ( CCEGLView::sharedOpenGLView()->getScaleX() + CCEGLView::sharedOpenGLView()->getScaleY() ) / 2;
|
||||
return pointDis * factor / CCDevice::getDPI();
|
||||
}
|
||||
|
||||
|
||||
CCScrollView::CCScrollView()
|
||||
|
@ -629,12 +626,38 @@ void CCScrollView::ccTouchMoved(CCTouch* touch, CCEvent* event)
|
|||
CCRect frame;
|
||||
float newX, newY;
|
||||
|
||||
m_bTouchMoved = true;
|
||||
frame = getViewRect();
|
||||
|
||||
newPoint = this->convertTouchToNodeSpace((CCTouch*)m_pTouches->objectAtIndex(0));
|
||||
moveDistance = ccpSub(newPoint, m_tTouchPoint);
|
||||
m_tTouchPoint = newPoint;
|
||||
|
||||
float dis = 0.0f;
|
||||
if (m_eDirection == kCCScrollViewDirectionVertical)
|
||||
{
|
||||
dis = moveDistance.y;
|
||||
}
|
||||
else if (m_eDirection == kCCScrollViewDirectionHorizontal)
|
||||
{
|
||||
dis = moveDistance.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
dis = sqrtf(moveDistance.x*moveDistance.x + moveDistance.y*moveDistance.y);
|
||||
}
|
||||
float disInch = 0.0f;
|
||||
if (!m_bTouchMoved && ( disInch = fabs(convertDistanceFromPointToInch(dis))) < MOVE_INCH)
|
||||
{
|
||||
CCLOG("Invalid movement, distance = [%f, %f], disInch = %f", moveDistance.x, moveDistance.y, disInch);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_bTouchMoved)
|
||||
{
|
||||
moveDistance = CCPointZero;
|
||||
}
|
||||
|
||||
m_tTouchPoint = newPoint;
|
||||
m_bTouchMoved = true;
|
||||
|
||||
if (frame.containsPoint(this->convertToWorldSpace(newPoint)))
|
||||
{
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#ifndef __CCSCROLLVIEW_H__
|
||||
#define __CCSCROLLVIEW_H__
|
||||
|
||||
#include "layers_scenes_transitions_nodes/CCLayer.h"
|
||||
#include "cocos2d.h"
|
||||
#include "ExtensionMacros.h"
|
||||
|
||||
NS_CC_EXT_BEGIN
|
||||
|
|
Loading…
Reference in New Issue