diff options
author | Alex Sakhartchouk <alexst@google.com> | 2010-10-05 11:33:27 -0700 |
---|---|---|
committer | Alex Sakhartchouk <alexst@google.com> | 2010-10-05 11:33:27 -0700 |
commit | 09c67356bbeee0a97a20a06c95b66756838cb541 (patch) | |
tree | 7b51147cb9aee9ca5040c16db6255a1ea7cef4ac /rsScriptC_LibGL.cpp | |
parent | c9fa30536fb41f0166153561388b7c42f7cb85a0 (diff) | |
download | rs-09c67356bbeee0a97a20a06c95b66756838cb541.tar.gz |
Adding text metrics to renderscript.
Change-Id: Ica460525243d714a278e4ad5e436af43e1008e0c
Diffstat (limited to 'rsScriptC_LibGL.cpp')
-rw-r--r-- | rsScriptC_LibGL.cpp | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/rsScriptC_LibGL.cpp b/rsScriptC_LibGL.cpp index 88db761e..b991cab7 100644 --- a/rsScriptC_LibGL.cpp +++ b/rsScriptC_LibGL.cpp @@ -351,13 +351,59 @@ static void SC_DrawTextAlloc(RsAllocation va, int x, int y) CHECK_OBJ(va); GET_TLS(); Allocation *alloc = static_cast<Allocation *>(va); - rsc->mStateFont.renderText(alloc, x, y); + const char *text = (const char *)alloc->getPtr(); + size_t allocSize = alloc->getType()->getSizeBytes(); + rsc->mStateFont.renderText(text, allocSize, x, y); } static void SC_DrawText(const char *text, int x, int y) { GET_TLS(); - rsc->mStateFont.renderText(text, x, y); + size_t textLen = strlen(text); + rsc->mStateFont.renderText(text, textLen, x, y); +} + +static void SC_setMetrics(Font::Rect *metrics, + int32_t *left, int32_t *right, + int32_t *top, int32_t *bottom) +{ + if(left) { + *left = metrics->left; + } + if(right) { + *right = metrics->right; + } + if(top) { + *top = metrics->top; + } + if(bottom) { + *bottom = metrics->bottom; + } +} + +static void SC_MeasureTextAlloc(RsAllocation va, + int32_t *left, int32_t *right, + int32_t *top, int32_t *bottom) +{ + CHECK_OBJ(va); + GET_TLS(); + Allocation *alloc = static_cast<Allocation *>(va); + const char *text = (const char *)alloc->getPtr(); + size_t textLen = alloc->getType()->getSizeBytes(); + Font::Rect metrics; + rsc->mStateFont.measureText(text, textLen, &metrics); + SC_setMetrics(&metrics, left, right, top, bottom); +} + +static void SC_MeasureText(const char *text, + int32_t *left, int32_t *right, + int32_t *top, int32_t *bottom) +{ + GET_TLS(); + size_t textLen = strlen(text); + Font::Rect metrics; + rsc->mStateFont.measureText(text, textLen, &metrics); + SC_setMetrics(&metrics, left, right, top, bottom); } static void SC_BindFont(RsFont font) @@ -432,6 +478,8 @@ static ScriptCState::SymbolTable_t gSyms[] = { { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText }, { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc }, + { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText }, + { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc }, { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont }, { "_Z12rsgFontColorffff", (void *)&SC_FontColor }, |