Merge "Simple implementation of drawPosText"
This commit is contained in:
@@ -853,31 +853,7 @@ class GLES20Canvas extends HardwareCanvas {
|
||||
private static native void nDrawPoints(long renderer, float[] points,
|
||||
int offset, int count, long paint);
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {
|
||||
if (index < 0 || index + count > text.length || count * 2 > pos.length) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
|
||||
nDrawPosText(mRenderer, text, index, count, pos, paint.mNativePaint);
|
||||
}
|
||||
|
||||
private static native void nDrawPosText(long renderer, char[] text, int index, int count,
|
||||
float[] pos, long paint);
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void drawPosText(String text, float[] pos, Paint paint) {
|
||||
if (text.length() * 2 > pos.length) {
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
}
|
||||
|
||||
nDrawPosText(mRenderer, text, 0, text.length(), pos, paint.mNativePaint);
|
||||
}
|
||||
|
||||
private static native void nDrawPosText(long renderer, String text, int start, int end,
|
||||
float[] pos, long paint);
|
||||
// Note: drawPosText just uses implementation in Canvas
|
||||
|
||||
@Override
|
||||
public void drawRect(float left, float top, float right, float bottom, Paint paint) {
|
||||
|
||||
@@ -1320,10 +1320,6 @@ static JNINativeMethod gCanvasMethods[] = {
|
||||
(void*) SkCanvasGlue::drawTextRun___CIIIIFFZPaintTypeface},
|
||||
{"native_drawTextRun","(JLjava/lang/String;IIIIFFZJJ)V",
|
||||
(void*) SkCanvasGlue::drawTextRun__StringIIIIFFZPaintTypeface},
|
||||
{"native_drawPosText","(J[CII[FJ)V",
|
||||
(void*) SkCanvasGlue::drawPosText___CII_FPaint},
|
||||
{"native_drawPosText","(JLjava/lang/String;[FJ)V",
|
||||
(void*) SkCanvasGlue::drawPosText__String_FPaint},
|
||||
{"native_drawTextOnPath","(J[CIIJFFIJJ)V",
|
||||
(void*) SkCanvasGlue::drawTextOnPath___CIIPathFFPaint},
|
||||
{"native_drawTextOnPath","(JLjava/lang/String;JFFIJJ)V",
|
||||
|
||||
@@ -840,49 +840,6 @@ static void android_view_GLES20Canvas_drawTextRun(JNIEnv* env, jobject clazz,
|
||||
env->ReleaseStringChars(text, textArray);
|
||||
}
|
||||
|
||||
static void renderPosText(OpenGLRenderer* renderer, const jchar* text, int count,
|
||||
const jfloat* positions, jint bidiFlags, SkPaint* paint) {
|
||||
sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
|
||||
text, 0, count, count, bidiFlags);
|
||||
if (value == NULL) {
|
||||
return;
|
||||
}
|
||||
const jchar* glyphs = value->getGlyphs();
|
||||
size_t glyphsCount = value->getGlyphsCount();
|
||||
if (count < int(glyphsCount)) glyphsCount = count;
|
||||
int bytesCount = glyphsCount * sizeof(jchar);
|
||||
|
||||
renderer->drawPosText((const char*) glyphs, bytesCount, glyphsCount, positions, paint);
|
||||
}
|
||||
|
||||
static void android_view_GLES20Canvas_drawPosTextArray(JNIEnv* env, jobject clazz,
|
||||
jlong rendererPtr, jcharArray text, jint index, jint count,
|
||||
jfloatArray pos, jlong paintPtr) {
|
||||
OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
|
||||
jchar* textArray = env->GetCharArrayElements(text, NULL);
|
||||
jfloat* positions = env->GetFloatArrayElements(pos, NULL);
|
||||
SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
|
||||
|
||||
renderPosText(renderer, textArray + index, count, positions, kBidi_LTR, paint);
|
||||
|
||||
env->ReleaseFloatArrayElements(pos, positions, JNI_ABORT);
|
||||
env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
|
||||
}
|
||||
|
||||
static void android_view_GLES20Canvas_drawPosText(JNIEnv* env, jobject clazz,
|
||||
jlong rendererPtr, jstring text, jint start, jint end,
|
||||
jfloatArray pos, jlong paintPtr) {
|
||||
OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
|
||||
const jchar* textArray = env->GetStringChars(text, NULL);
|
||||
jfloat* positions = env->GetFloatArrayElements(pos, NULL);
|
||||
SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
|
||||
|
||||
renderPosText(renderer, textArray + start, end - start, positions, kBidi_LTR, paint);
|
||||
|
||||
env->ReleaseFloatArrayElements(pos, positions, JNI_ABORT);
|
||||
env->ReleaseStringChars(text, textArray);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Display lists
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -1039,10 +996,6 @@ static JNINativeMethod gMethods[] = {
|
||||
{ "nDrawTextRun", "(JLjava/lang/String;IIIIFFZJJ)V",
|
||||
(void*) android_view_GLES20Canvas_drawTextRun },
|
||||
|
||||
{ "nDrawPosText", "(J[CII[FJ)V", (void*) android_view_GLES20Canvas_drawPosTextArray },
|
||||
{ "nDrawPosText", "(JLjava/lang/String;II[FJ)V",
|
||||
(void*) android_view_GLES20Canvas_drawPosText },
|
||||
|
||||
{ "nGetClipBounds", "(JLandroid/graphics/Rect;)Z",
|
||||
(void*) android_view_GLES20Canvas_getClipBounds },
|
||||
|
||||
|
||||
@@ -1712,7 +1712,8 @@ public class Canvas {
|
||||
* the pos array.
|
||||
*
|
||||
* This method does not support glyph composition and decomposition and
|
||||
* should therefore not be used to render complex scripts.
|
||||
* should therefore not be used to render complex scripts. It also doesn't
|
||||
* handle supplementary characters (eg emoji).
|
||||
*
|
||||
* @param text The text to be drawn
|
||||
* @param index The index of the first character to draw
|
||||
@@ -1727,8 +1728,9 @@ public class Canvas {
|
||||
if (index < 0 || index + count > text.length || count*2 > pos.length) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
native_drawPosText(mNativeCanvasWrapper, text, index, count, pos,
|
||||
paint.mNativePaint);
|
||||
for (int i = 0; i < count; i++) {
|
||||
drawText(text, index + i, 1, pos[i * 2], pos[i * 2 + 1], paint);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1736,7 +1738,8 @@ public class Canvas {
|
||||
* the pos array.
|
||||
*
|
||||
* This method does not support glyph composition and decomposition and
|
||||
* should therefore not be used to render complex scripts.
|
||||
* should therefore not be used to render complex scripts. It also doesn't
|
||||
* handle supplementary characters (eg emoji).
|
||||
*
|
||||
* @param text The text to be drawn
|
||||
* @param pos Array of [x,y] positions, used to position each character
|
||||
@@ -1744,10 +1747,7 @@ public class Canvas {
|
||||
*/
|
||||
@Deprecated
|
||||
public void drawPosText(@NonNull String text, @NonNull float[] pos, @NonNull Paint paint) {
|
||||
if (text.length()*2 > pos.length) {
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
}
|
||||
native_drawPosText(mNativeCanvasWrapper, text, pos, paint.mNativePaint);
|
||||
drawPosText(text.toCharArray(), 0, text.length(), pos, paint);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2009,13 +2009,6 @@ public class Canvas {
|
||||
int start, int count, int contextStart, int contextCount,
|
||||
float x, float y, boolean isRtl, long nativePaint, long nativeTypeface);
|
||||
|
||||
private static native void native_drawPosText(long nativeCanvas,
|
||||
char[] text, int index,
|
||||
int count, float[] pos,
|
||||
long nativePaint);
|
||||
private static native void native_drawPosText(long nativeCanvas,
|
||||
String text, float[] pos,
|
||||
long nativePaint);
|
||||
private static native void native_drawTextOnPath(long nativeCanvas,
|
||||
char[] text, int index,
|
||||
int count, long nativePath,
|
||||
|
||||
Reference in New Issue
Block a user