From db919295a059e1c9748b5628a6aa1e090fbe1294 Mon Sep 17 00:00:00 2001 From: badlogicgames Date: Mon, 15 Nov 2010 01:11:14 +0000 Subject: [PATCH] [added] Graphics.getPpiX()/getPpiY()/getPpcX()/getPpcY(). Returns pixels per inch/centimeters for each axis. [fixed] Group.toChildCoordinates() had a sever bug in one of the branches. Thanks Jason! [added] PixelsPerInch test. --- .../gdx/backends/android/AndroidGraphics.java | 70 ++++++++++++++++++---- .../badlogic/gdx/backends/jogl/JoglGraphics.java | 26 ++++++-- .../badlogic/gdx/backends/lwjgl/LwjglGraphics.java | 21 +++++++ gdx/src/com/badlogic/gdx/Graphics.java | 20 +++++++ gdx/src/com/badlogic/gdx/scenes/scene2d/Group.java | 2 +- .../com/badlogic/gdx/tests/PixelsPerInchTest.java | 45 ++++++++++++++ .../src/com/badlogic/gdx/tests/utils/GdxTests.java | 2 + 7 files changed, 169 insertions(+), 17 deletions(-) create mode 100644 tests/gdx-tests/src/com/badlogic/gdx/tests/PixelsPerInchTest.java diff --git a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java index 821cda69c..2379183d9 100644 --- a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java +++ b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java @@ -13,32 +13,42 @@ package com.badlogic.gdx.backends.android; +import java.io.InputStream; + +import javax.microedition.khronos.egl.EGL10; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLContext; +import javax.microedition.khronos.egl.EGLDisplay; + import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLSurfaceView.Renderer; +import android.util.DisplayMetrics; import android.view.Display; import android.view.View; + import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Graphics; import com.badlogic.gdx.backends.android.surfaceview.GLSurfaceView20; import com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake; import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.graphics.*; +import com.badlogic.gdx.graphics.GL10; +import com.badlogic.gdx.graphics.GL11; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.GLCommon; +import com.badlogic.gdx.graphics.Mesh; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap.Format; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.Texture.TextureWrap; +import com.badlogic.gdx.graphics.TextureData; import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.math.WindowedMean; import com.badlogic.gdx.utils.GdxRuntimeException; -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import java.io.InputStream; - /** * An implementation of {@link Graphics} for Android. * @@ -65,11 +75,16 @@ public final class AndroidGraphics implements Graphics, Renderer { boolean running = false; boolean pause = false; boolean resume = false; - boolean destroy = false; + boolean destroy = false; + + private float ppiX = 0; + private float ppiY = 0; + private float ppcX = 0; + private float ppcY = 0; public AndroidGraphics (AndroidApplication activity, boolean useGL2IfAvailable) { view = createGLSurfaceView(activity, useGL2IfAvailable); - this.app = activity; + this.app = activity; } private View createGLSurfaceView (Activity activity, boolean useGL2) { @@ -91,6 +106,16 @@ public final class AndroidGraphics implements Graphics, Renderer { } + private void updatePpi() { + DisplayMetrics metrics = new DisplayMetrics(); + app.getWindowManager().getDefaultDisplay().getMetrics(metrics); + + ppiX = metrics.xdpi; + ppiY = metrics.ydpi; + ppcX = metrics.xdpi / 2.54f; + ppcY = metrics.ydpi / 2.54f; + } + private boolean checkGL20 () { EGL10 egl = (EGL10)EGLContext.getEGL(); EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); @@ -228,12 +253,15 @@ public final class AndroidGraphics implements Graphics, Renderer { @Override public void onSurfaceChanged (javax.microedition.khronos.opengles.GL10 gl, int width, int height) { this.width = width; this.height = height; - app.listener.resize(width, height); + updatePpi(); + app.listener.resize(width, height); } @Override public void onSurfaceCreated (javax.microedition.khronos.opengles.GL10 gl, EGLConfig config) { setupGL(gl); - + + updatePpi(); + Mesh.invalidateAllMeshes(); AndroidTexture.invalidateAllTextures(); ShaderProgram.invalidateAllShaderPrograms(); @@ -398,4 +426,24 @@ public final class AndroidGraphics implements Graphics, Renderer { @Override public GLCommon getGLCommon () { return gl; } + + @Override + public float getPpiX() { + return ppiX; + } + + @Override + public float getPpiY() { + return ppiY; + } + + @Override + public float getPpcX() { + return ppcX; + } + + @Override + public float getPpcY() { + return ppcY; + } } diff --git a/backends/gdx-backend-jogl/src/com/badlogic/gdx/backends/jogl/JoglGraphics.java b/backends/gdx-backend-jogl/src/com/badlogic/gdx/backends/jogl/JoglGraphics.java index ad4765f97..cf2b287ec 100644 --- a/backends/gdx-backend-jogl/src/com/badlogic/gdx/backends/jogl/JoglGraphics.java +++ b/backends/gdx-backend-jogl/src/com/badlogic/gdx/backends/jogl/JoglGraphics.java @@ -1,6 +1,6 @@ package com.badlogic.gdx.backends.jogl; -import java.nio.ByteBuffer; +import java.awt.Toolkit; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; @@ -8,10 +8,6 @@ import javax.media.opengl.GLEventListener; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Graphics; -import com.badlogic.gdx.graphics.Pixmap.Format; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.Texture.TextureFilter; -import com.badlogic.gdx.graphics.Texture.TextureWrap; import com.badlogic.gdx.utils.GdxRuntimeException; /** @@ -87,4 +83,24 @@ public class JoglGraphics extends JoglGraphicsBase implements GLEventListener { canvas.getContext().makeCurrent(); listener.dispose(); } + + @Override + public float getPpiX() { + return Toolkit.getDefaultToolkit().getScreenResolution(); + } + + @Override + public float getPpiY() { + return Toolkit.getDefaultToolkit().getScreenResolution(); + } + + @Override + public float getPpcX() { + return (Toolkit.getDefaultToolkit().getScreenResolution() / 2.54f); + } + + @Override + public float getPpcY() { + return (Toolkit.getDefaultToolkit().getScreenResolution() / 2.54f); + } } diff --git a/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java b/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java index d511db781..2495ae1ac 100644 --- a/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java +++ b/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java @@ -14,6 +14,7 @@ package com.badlogic.gdx.backends.lwjgl; import java.awt.Canvas; +import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.InputStream; import java.nio.ByteBuffer; @@ -242,4 +243,24 @@ final class LwjglGraphics implements Graphics { Gdx.gl11 = gl11; Gdx.gl20 = gl20; } + + @Override + public float getPpiX() { + return Toolkit.getDefaultToolkit().getScreenResolution(); + } + + @Override + public float getPpiY() { + return Toolkit.getDefaultToolkit().getScreenResolution(); + } + + @Override + public float getPpcX() { + return (Toolkit.getDefaultToolkit().getScreenResolution() / 2.54f); + } + + @Override + public float getPpcY() { + return (Toolkit.getDefaultToolkit().getScreenResolution() / 2.54f); + } } diff --git a/gdx/src/com/badlogic/gdx/Graphics.java b/gdx/src/com/badlogic/gdx/Graphics.java index acfe58386..d737e7766 100644 --- a/gdx/src/com/badlogic/gdx/Graphics.java +++ b/gdx/src/com/badlogic/gdx/Graphics.java @@ -307,4 +307,24 @@ public interface Graphics { * @return the {@link GraphicsType} of this Graphics instance */ public GraphicsType getType (); + + /** + * @return the pixels per inch on the x-axis + */ + public float getPpiX(); + + /** + * @return the pixels per inch on the y-axis + */ + public float getPpiY(); + + /** + * @return the pixels per centimeter on the x-axis + */ + public float getPpcX(); + + /** + * @return the pixels per centimeter on the y-axis. + */ + public float getPpcY(); } diff --git a/gdx/src/com/badlogic/gdx/scenes/scene2d/Group.java b/gdx/src/com/badlogic/gdx/scenes/scene2d/Group.java index e6e412064..807c97704 100644 --- a/gdx/src/com/badlogic/gdx/scenes/scene2d/Group.java +++ b/gdx/src/com/badlogic/gdx/scenes/scene2d/Group.java @@ -145,7 +145,7 @@ public class Group extends Actor { out.y = (y - child.y) / child.scaleY; } else { out.x = x / child.scaleX - (child.x - child.originX); - out.x = x / child.scaleX - (child.x - child.originX); + out.y = x / child.scaleY - (child.y - child.originY); } } } else { diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/PixelsPerInchTest.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/PixelsPerInchTest.java new file mode 100644 index 000000000..dcd9dae7f --- /dev/null +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/PixelsPerInchTest.java @@ -0,0 +1,45 @@ +package com.badlogic.gdx.tests; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Files.FileType; +import com.badlogic.gdx.graphics.BitmapFont; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL10; +import com.badlogic.gdx.graphics.SpriteBatch; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.Texture.TextureFilter; +import com.badlogic.gdx.graphics.Texture.TextureWrap; +import com.badlogic.gdx.tests.utils.GdxTest; + +public class PixelsPerInchTest extends GdxTest { + + BitmapFont font; + SpriteBatch batch; + Texture texture; + + @Override + public void create() { + font = new BitmapFont(); + batch = new SpriteBatch(); + texture = Gdx.graphics.newTexture(Gdx.files.getFileHandle("data/ui.png", FileType.Internal), + TextureFilter.Linear, TextureFilter.Linear, + TextureWrap.ClampToEdge, TextureWrap.ClampToEdge); + } + + public void render() { + Gdx.gl10.glClear(GL10.GL_COLOR_BUFFER_BIT); + + batch.begin(); + float width = (int)(Gdx.graphics.getPpcX() * 2); + float height = (int)(Gdx.graphics.getPpcY() * 1); + batch.draw(texture, 10, 100, width, height, 0, 0, 64, 32, Color.WHITE, false, false ); + font.draw(batch, "button is 2x1 cm (" + width + "x" + height + "px), ppi: (" + Gdx.graphics.getPpiX() + "," + Gdx.graphics.getPpiY() +"), ppc: (" + Gdx.graphics.getPpcX() + "," + Gdx.graphics.getPpcY()+ ")", 10, 50, Color.WHITE); + batch.end(); + } + + @Override + public boolean needsGL20() { + return false; + } + +} diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java index 97972dcde..1427a536a 100644 --- a/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java @@ -28,6 +28,7 @@ import com.badlogic.gdx.tests.Mpg123Test; import com.badlogic.gdx.tests.MultitouchTest; import com.badlogic.gdx.tests.ObjTest; import com.badlogic.gdx.tests.ParticleEmitterTest; +import com.badlogic.gdx.tests.PixelsPerInchTest; import com.badlogic.gdx.tests.Pong; import com.badlogic.gdx.tests.SimpleTest; import com.badlogic.gdx.tests.SoundTest; @@ -82,6 +83,7 @@ public class GdxTests MultitouchTest.class, ObjTest.class, ParticleEmitterTest.class, + PixelsPerInchTest.class, Pong.class, SimpleTest.class, SoundTest.class, -- 2.11.0