From 10825a07ae3a7520110a5fb642a6c8745d7b3956 Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Tue, 5 Oct 2010 11:33:27 -0700 Subject: Adding text metrics to renderscript. Change-Id: Ica460525243d714a278e4ad5e436af43e1008e0c --- .../src/com/android/samples/RsRenderStatesRS.java | 6 +-- .../src/com/android/samples/rsrenderstates.rs | 46 +++++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) (limited to 'libs/rs/java/Samples') diff --git a/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesRS.java b/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesRS.java index a15c4a1..0990da3 100644 --- a/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesRS.java +++ b/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesRS.java @@ -84,8 +84,6 @@ public class RsRenderStatesRS { private Allocation mTexTransparent; private Allocation mTexChecker; - private Allocation mAllocPV; - private Mesh mMbyNMesh; private Mesh mTorus; @@ -95,7 +93,6 @@ public class RsRenderStatesRS { Font mFontSerifItalic; Font mFontSerifBoldItalic; Font mFontMono; - private Allocation mTextAlloc; private ScriptC_rsrenderstates mScript; @@ -267,12 +264,15 @@ public class RsRenderStatesRS { mFontSerifBoldItalic = Font.createFromFamily(mRS, mRes, "serif", Font.Style.BOLD_ITALIC, 8); mFontMono = Font.createFromFamily(mRS, mRes, "mono", Font.Style.NORMAL, 8); + mTextAlloc = Allocation.createFromString(mRS, "String from allocation"); + mScript.set_gFontSans(mFontSans); mScript.set_gFontSerif(mFontSerif); mScript.set_gFontSerifBold(mFontSerifBold); mScript.set_gFontSerifItalic(mFontSerifItalic); mScript.set_gFontSerifBoldItalic(mFontSerifBoldItalic); mScript.set_gFontMono(mFontMono); + mScript.set_gTextAlloc(mTextAlloc); } private void initMesh() { diff --git a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs index b471504..77384ef 100644 --- a/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs +++ b/libs/rs/java/Samples/src/com/android/samples/rsrenderstates.rs @@ -42,6 +42,7 @@ rs_font gFontSerifBold; rs_font gFontSerifItalic; rs_font gFontSerifBoldItalic; rs_font gFontMono; +rs_allocation gTextAlloc; int gDisplayMode; @@ -70,7 +71,7 @@ rs_program_fragment gProgFragmentMultitex; #pragma rs export_var(gProgStoreBlendNoneDepth, gProgStoreBlendNone, gProgStoreBlendAlpha, gProgStoreBlendAdd) #pragma rs export_var(gTexOpaque, gTexTorus, gTexTransparent, gTexChecker) #pragma rs export_var(gMbyNMesh, gTorusMesh) -#pragma rs export_var(gFontSans, gFontSerif, gFontSerifBold, gFontSerifItalic, gFontSerifBoldItalic, gFontMono) +#pragma rs export_var(gFontSans, gFontSerif, gFontSerifBold, gFontSerifItalic, gFontSerifBoldItalic, gFontMono, gTextAlloc) #pragma rs export_var(gLinearClamp, gLinearWrap, gMipLinearWrap, gMipLinearAniso8, gMipLinearAniso15, gNearestClamp) #pragma rs export_var(gCullBack, gCullFront, gCullNone) #pragma rs export_var(gVSConstants, gFSConstants, gVSInputs, gProgVertexCustom, gProgFragmentCustom, gProgFragmentMultitex) @@ -85,7 +86,7 @@ void init() { void displayFontSamples() { rsgFontColor(1.0f, 1.0f, 1.0f, 1.0f); - int yPos = 30; + int yPos = 100; rsgBindFont(gFontSans); rsgDrawText("Sans font sample", 30, yPos); yPos += 30; @@ -107,6 +108,47 @@ void displayFontSamples() { yPos += 30; rsgBindFont(gFontMono); rsgDrawText("Monospace font sample", 30, yPos); + yPos += 50; + + // Now use text metrics to center the text + uint width = rsgGetWidth(); + uint height = rsgGetHeight(); + int left = 0, right = 0, top = 0, bottom = 0; + + rsgFontColor(0.9f, 0.9f, 0.95f, 1.0f); + rsgBindFont(gFontSerifBoldItalic); + + rsgMeasureText(gTextAlloc, &left, &right, &top, &bottom); + int centeredPos = width / 2 - (right - left) / 2; + rsgDrawText(gTextAlloc, centeredPos, yPos); + yPos += 30; + + const char* text = "Centered Text Sample"; + rsgMeasureText(text, &left, &right, &top, &bottom); + centeredPos = width / 2 - (right - left) / 2; + rsgDrawText(text, centeredPos, yPos); + yPos += 30; + + rsgBindFont(gFontSans); + text = "More Centered Text Samples"; + rsgMeasureText(text, &left, &right, &top, &bottom); + centeredPos = width / 2 - (right - left) / 2; + rsgDrawText(text, centeredPos, yPos); + yPos += 30; + + // Now draw bottom and top right aligned text + text = "Top-right aligned text"; + rsgMeasureText(text, &left, &right, &top, &bottom); + rsgDrawText(text, width - right, top); + + text = "Top-left"; + rsgMeasureText(text, &left, &right, &top, &bottom); + rsgDrawText(text, -left, top); + + text = "Bottom-right aligned text"; + rsgMeasureText(text, &left, &right, &top, &bottom); + rsgDrawText(text, width - right, height + bottom); + } void bindProgramVertexOrtho() { -- cgit v1.1