Loading core/java/android/view/GLES20Canvas.java +13 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,19 @@ class GLES20Canvas extends HardwareCanvas { private static native void nDrawCircle(long renderer, long propCx, long propCy, long propRadius, long propPaint); @Override public void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint) { nDrawRoundRect(mRenderer, left.getNativeContainer(), top.getNativeContainer(), right.getNativeContainer(), bottom.getNativeContainer(), rx.getNativeContainer(), ry.getNativeContainer(), paint.getNativeContainer()); } private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, long propRight, long propBottom, long propRx, long propRy, long propPaint); @Override public void drawColor(int color) { drawColor(color, PorterDuff.Mode.SRC_OVER); Loading core/java/android/view/HardwareCanvas.java +5 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,11 @@ public abstract class HardwareCanvas extends Canvas { public abstract void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, CanvasProperty<Float> radius, CanvasProperty<Paint> paint); public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint); public static void setProperty(String name, String value) { GLES20Canvas.setProperty(name, value); } Loading core/jni/android_view_GLES20Canvas.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,20 @@ static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject clazz, renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint); } static void android_view_GLES20Canvas_drawRoundRectProps(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr, jlong bottomPropPtr, jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); CanvasPropertyPrimitive* leftProp = reinterpret_cast<CanvasPropertyPrimitive*>(leftPropPtr); CanvasPropertyPrimitive* topProp = reinterpret_cast<CanvasPropertyPrimitive*>(topPropPtr); CanvasPropertyPrimitive* rightProp = reinterpret_cast<CanvasPropertyPrimitive*>(rightPropPtr); CanvasPropertyPrimitive* bottomProp = reinterpret_cast<CanvasPropertyPrimitive*>(bottomPropPtr); CanvasPropertyPrimitive* rxProp = reinterpret_cast<CanvasPropertyPrimitive*>(rxPropPtr); CanvasPropertyPrimitive* ryProp = reinterpret_cast<CanvasPropertyPrimitive*>(ryPropPtr); CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr); renderer->drawRoundRect(leftProp, topProp, rightProp, bottomProp, rxProp, ryProp, paintProp); } static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject clazz, jlong rendererPtr, jfloat x, jfloat y, jfloat radius, jlong paintPtr) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); Loading Loading @@ -912,6 +926,7 @@ static JNINativeMethod gMethods[] = { { "nDrawRect", "(JFFFFJ)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(JJJ)V", (void*) android_view_GLES20Canvas_drawRegionAsRects }, { "nDrawRoundRect", "(JFFFFFFJ)V", (void*) android_view_GLES20Canvas_drawRoundRect }, { "nDrawRoundRect", "(JJJJJJJJ)V", (void*) android_view_GLES20Canvas_drawRoundRectProps }, { "nDrawCircle", "(JFFFJ)V", (void*) android_view_GLES20Canvas_drawCircle }, { "nDrawCircle", "(JJJJJ)V", (void*) android_view_GLES20Canvas_drawCircleProps }, { "nDrawOval", "(JFFFFJ)V", (void*) android_view_GLES20Canvas_drawOval }, Loading libs/hwui/DisplayListOp.h +28 −0 Original line number Diff line number Diff line Loading @@ -1105,6 +1105,34 @@ private: float mRy; }; class DrawRoundRectPropsOp : public DrawOp { public: DrawRoundRectPropsOp(float* left, float* top, float* right, float* bottom, float *rx, float *ry, const SkPaint* paint) : DrawOp(paint), mLeft(left), mTop(top), mRight(right), mBottom(bottom), mRx(rx), mRy(ry) {} virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) { return renderer.drawRoundRect(*mLeft, *mTop, *mRight, *mBottom, *mRx, *mRy, getPaint(renderer)); } virtual void output(int level, uint32_t logFlags) const { OP_LOG("Draw RoundRect Props " RECT_STRING ", rx %f, ry %f", *mLeft, *mTop, *mRight, *mBottom, *mRx, *mRy); } virtual const char* name() { return "DrawRoundRectProps"; } private: float* mLeft; float* mTop; float* mRight; float* mBottom; float* mRx; float* mRy; }; class DrawCircleOp : public DrawStrokableOp { public: DrawCircleOp(float x, float y, float radius, const SkPaint* paint) Loading libs/hwui/DisplayListRenderer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,23 @@ status_t DisplayListRenderer::drawRoundRect(float left, float top, float right, return DrawGlInfo::kStatusDone; } status_t DisplayListRenderer::drawRoundRect( CanvasPropertyPrimitive* left, CanvasPropertyPrimitive* top, CanvasPropertyPrimitive* right, CanvasPropertyPrimitive* bottom, CanvasPropertyPrimitive* rx, CanvasPropertyPrimitive* ry, CanvasPropertyPaint* paint) { mDisplayListData->refProperty(left); mDisplayListData->refProperty(top); mDisplayListData->refProperty(right); mDisplayListData->refProperty(bottom); mDisplayListData->refProperty(rx); mDisplayListData->refProperty(ry); mDisplayListData->refProperty(paint); addDrawOp(new (alloc()) DrawRoundRectPropsOp(&left->value, &top->value, &right->value, &bottom->value, &rx->value, &ry->value, &paint->value)); return DrawGlInfo::kStatusDone; } status_t DisplayListRenderer::drawCircle(float x, float y, float radius, const SkPaint* paint) { paint = refPaint(paint); addDrawOp(new (alloc()) DrawCircleOp(x, y, radius, paint)); Loading Loading
core/java/android/view/GLES20Canvas.java +13 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,19 @@ class GLES20Canvas extends HardwareCanvas { private static native void nDrawCircle(long renderer, long propCx, long propCy, long propRadius, long propPaint); @Override public void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint) { nDrawRoundRect(mRenderer, left.getNativeContainer(), top.getNativeContainer(), right.getNativeContainer(), bottom.getNativeContainer(), rx.getNativeContainer(), ry.getNativeContainer(), paint.getNativeContainer()); } private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, long propRight, long propBottom, long propRx, long propRy, long propPaint); @Override public void drawColor(int color) { drawColor(color, PorterDuff.Mode.SRC_OVER); Loading
core/java/android/view/HardwareCanvas.java +5 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,11 @@ public abstract class HardwareCanvas extends Canvas { public abstract void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, CanvasProperty<Float> radius, CanvasProperty<Paint> paint); public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint); public static void setProperty(String name, String value) { GLES20Canvas.setProperty(name, value); } Loading
core/jni/android_view_GLES20Canvas.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,20 @@ static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject clazz, renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint); } static void android_view_GLES20Canvas_drawRoundRectProps(JNIEnv* env, jobject clazz, jlong rendererPtr, jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr, jlong bottomPropPtr, jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); CanvasPropertyPrimitive* leftProp = reinterpret_cast<CanvasPropertyPrimitive*>(leftPropPtr); CanvasPropertyPrimitive* topProp = reinterpret_cast<CanvasPropertyPrimitive*>(topPropPtr); CanvasPropertyPrimitive* rightProp = reinterpret_cast<CanvasPropertyPrimitive*>(rightPropPtr); CanvasPropertyPrimitive* bottomProp = reinterpret_cast<CanvasPropertyPrimitive*>(bottomPropPtr); CanvasPropertyPrimitive* rxProp = reinterpret_cast<CanvasPropertyPrimitive*>(rxPropPtr); CanvasPropertyPrimitive* ryProp = reinterpret_cast<CanvasPropertyPrimitive*>(ryPropPtr); CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr); renderer->drawRoundRect(leftProp, topProp, rightProp, bottomProp, rxProp, ryProp, paintProp); } static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject clazz, jlong rendererPtr, jfloat x, jfloat y, jfloat radius, jlong paintPtr) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); Loading Loading @@ -912,6 +926,7 @@ static JNINativeMethod gMethods[] = { { "nDrawRect", "(JFFFFJ)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(JJJ)V", (void*) android_view_GLES20Canvas_drawRegionAsRects }, { "nDrawRoundRect", "(JFFFFFFJ)V", (void*) android_view_GLES20Canvas_drawRoundRect }, { "nDrawRoundRect", "(JJJJJJJJ)V", (void*) android_view_GLES20Canvas_drawRoundRectProps }, { "nDrawCircle", "(JFFFJ)V", (void*) android_view_GLES20Canvas_drawCircle }, { "nDrawCircle", "(JJJJJ)V", (void*) android_view_GLES20Canvas_drawCircleProps }, { "nDrawOval", "(JFFFFJ)V", (void*) android_view_GLES20Canvas_drawOval }, Loading
libs/hwui/DisplayListOp.h +28 −0 Original line number Diff line number Diff line Loading @@ -1105,6 +1105,34 @@ private: float mRy; }; class DrawRoundRectPropsOp : public DrawOp { public: DrawRoundRectPropsOp(float* left, float* top, float* right, float* bottom, float *rx, float *ry, const SkPaint* paint) : DrawOp(paint), mLeft(left), mTop(top), mRight(right), mBottom(bottom), mRx(rx), mRy(ry) {} virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) { return renderer.drawRoundRect(*mLeft, *mTop, *mRight, *mBottom, *mRx, *mRy, getPaint(renderer)); } virtual void output(int level, uint32_t logFlags) const { OP_LOG("Draw RoundRect Props " RECT_STRING ", rx %f, ry %f", *mLeft, *mTop, *mRight, *mBottom, *mRx, *mRy); } virtual const char* name() { return "DrawRoundRectProps"; } private: float* mLeft; float* mTop; float* mRight; float* mBottom; float* mRx; float* mRy; }; class DrawCircleOp : public DrawStrokableOp { public: DrawCircleOp(float x, float y, float radius, const SkPaint* paint) Loading
libs/hwui/DisplayListRenderer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,23 @@ status_t DisplayListRenderer::drawRoundRect(float left, float top, float right, return DrawGlInfo::kStatusDone; } status_t DisplayListRenderer::drawRoundRect( CanvasPropertyPrimitive* left, CanvasPropertyPrimitive* top, CanvasPropertyPrimitive* right, CanvasPropertyPrimitive* bottom, CanvasPropertyPrimitive* rx, CanvasPropertyPrimitive* ry, CanvasPropertyPaint* paint) { mDisplayListData->refProperty(left); mDisplayListData->refProperty(top); mDisplayListData->refProperty(right); mDisplayListData->refProperty(bottom); mDisplayListData->refProperty(rx); mDisplayListData->refProperty(ry); mDisplayListData->refProperty(paint); addDrawOp(new (alloc()) DrawRoundRectPropsOp(&left->value, &top->value, &right->value, &bottom->value, &rx->value, &ry->value, &paint->value)); return DrawGlInfo::kStatusDone; } status_t DisplayListRenderer::drawCircle(float x, float y, float radius, const SkPaint* paint) { paint = refPaint(paint); addDrawOp(new (alloc()) DrawCircleOp(x, y, radius, paint)); Loading