Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1cd9ba3 authored by Romain Guy's avatar Romain Guy
Browse files

Add support for ovals and stroked rectangles.

Change-Id: I1292e241386763c82e6622c8f7ed90b0f5b7bd4f
parent f6834478
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -525,7 +525,7 @@ class GLES20Canvas extends HardwareCanvas {
    @Override
    public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,
            Paint paint) {
        throw new UnsupportedOperationException();
        // TODO: Implement
    }

    @Override
@@ -705,9 +705,14 @@ class GLES20Canvas extends HardwareCanvas {

    @Override
    public void drawOval(RectF oval, Paint paint) {
        throw new UnsupportedOperationException();
        boolean hasModifier = setupModifiers(paint);
        nDrawOval(mRenderer, oval.left, oval.top, oval.right, oval.bottom, paint.mNativePaint);
        if (hasModifier) nResetModifiers(mRenderer); 
    }

    private native void nDrawOval(int renderer, float left, float top, float right, float bottom,
            int paint);

    @Override
    public void drawPaint(Paint paint) {
        final Rect r = mClipBounds;
@@ -765,12 +770,12 @@ class GLES20Canvas extends HardwareCanvas {

    @Override
    public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {
        throw new UnsupportedOperationException();
        // TODO: Implement
    }

    @Override
    public void drawPosText(String text, float[] pos, Paint paint) {
        throw new UnsupportedOperationException();
        // TODO: Implement
    }

    @Override
@@ -879,12 +884,12 @@ class GLES20Canvas extends HardwareCanvas {
    @Override
    public void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset,
            float vOffset, Paint paint) {
        throw new UnsupportedOperationException();
        // TODO: Implement
    }

    @Override
    public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {
        throw new UnsupportedOperationException();
        // TODO: Implement
    }

    @Override
+7 −0
Original line number Diff line number Diff line
@@ -326,6 +326,12 @@ static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject canvas,
    renderer->drawCircle(x, y, radius, paint);
}

static void android_view_GLES20Canvas_drawOval(JNIEnv* env, jobject canvas,
        OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom,
        SkPaint* paint) {
    renderer->drawOval(left, top, right, bottom, paint);
}

static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas,
        OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) {
    SkRegion::Iterator it(*region);
@@ -602,6 +608,7 @@ static JNINativeMethod gMethods[] = {
    { "nDrawRects",         "(III)V",          (void*) android_view_GLES20Canvas_drawRects },
    { "nDrawRoundRect",     "(IFFFFFFI)V",     (void*) android_view_GLES20Canvas_drawRoundRect },
    { "nDrawCircle",        "(IFFFI)V",        (void*) android_view_GLES20Canvas_drawCircle },
    { "nDrawOval",          "(IFFFFI)V",       (void*) android_view_GLES20Canvas_drawOval },
    { "nDrawPath",          "(III)V",          (void*) android_view_GLES20Canvas_drawPath },
    { "nDrawLines",         "(I[FIII)V",       (void*) android_view_GLES20Canvas_drawLines },

+2 −0
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@ public:
    PathCache pathCache;
    RoundRectShapeCache roundRectShapeCache;
    CircleShapeCache circleShapeCache;
    OvalShapeCache ovalShapeCache;
    RectShapeCache rectShapeCache;
    PatchCache patchCache;
    TextDropShadowCache dropShadowCache;
    FboCache fboCache;
+12 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ const char* DisplayList::OP_NAMES[] = {
    "DrawRect",
    "DrawRoundRect",
    "DrawCircle",
    "DrawOval",
    "DrawPath",
    "DrawLines",
    "DrawText",
@@ -358,6 +359,10 @@ void DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) {
                renderer.drawCircle(getFloat(), getFloat(), getFloat(), getPaint());
            }
            break;
            case DrawOval: {
                renderer.drawOval(getFloat(), getFloat(), getFloat(), getFloat(), getPaint());
            }
            break;
            case DrawPath: {
                renderer.drawPath(getPath(), getPaint());
            }
@@ -663,6 +668,13 @@ void DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* pa
    addPaint(paint);
}

void DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
        SkPaint* paint) {
    addOp(DisplayList::DrawOval);
    addBounds(left, top, right, bottom);
    addPaint(paint);
}

void DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
    addOp(DisplayList::DrawPath);
    addPath(path);
+2 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ public:
        DrawRect,
        DrawRoundRect,
        DrawCircle,
        DrawOval,
        DrawPath,
        DrawLines,
        DrawText,
@@ -279,6 +280,7 @@ public:
    void drawRoundRect(float left, float top, float right, float bottom,
            float rx, float ry, SkPaint* paint);
    void drawCircle(float x, float y, float radius, SkPaint* paint);
    void drawOval(float left, float top, float right, float bottom, SkPaint* paint);
    void drawPath(SkPath* path, SkPaint* paint);
    void drawLines(float* points, int count, SkPaint* paint);
    void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint);
Loading