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

Commit 89108d5c authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Add support for skew()" into honeycomb

parents 3aa959b9 807daf7d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -374,16 +374,18 @@ class GLES20Canvas extends HardwareCanvas {

    @Override
    public void translate(float dx, float dy) {
        nTranslate(mRenderer, dx, dy);
        if (dx != 0.0f || dy != 0.0f) nTranslate(mRenderer, dx, dy);
    }
    
    private native void nTranslate(int renderer, float dx, float dy);

    @Override
    public void skew(float sx, float sy) {
        throw new UnsupportedOperationException();
        nSkew(mRenderer, sx, sy);
    }

    private native void nSkew(int renderer, float sx, float sy);

    @Override
    public void rotate(float degrees) {
        nRotate(mRenderer, degrees);
+6 −0
Original line number Diff line number Diff line
@@ -213,6 +213,11 @@ static void android_view_GLES20Canvas_scale(JNIEnv* env, jobject canvas,
    renderer->scale(sx, sy);
}

static void android_view_GLES20Canvas_skew(JNIEnv* env, jobject canvas,
        OpenGLRenderer* renderer, jfloat sx, jfloat sy) {
    renderer->skew(sx, sy);
}

static void android_view_GLES20Canvas_setMatrix(JNIEnv* env, jobject canvas,
        OpenGLRenderer* renderer, SkMatrix* matrix) {
    renderer->setMatrix(matrix);
@@ -550,6 +555,7 @@ static JNINativeMethod gMethods[] = {
    { "nTranslate",         "(IFF)V",          (void*) android_view_GLES20Canvas_translate },
    { "nRotate",            "(IF)V",           (void*) android_view_GLES20Canvas_rotate },
    { "nScale",             "(IFF)V",          (void*) android_view_GLES20Canvas_scale },
    { "nSkew",              "(IFF)V",          (void*) android_view_GLES20Canvas_skew },

    { "nSetMatrix",         "(II)V",           (void*) android_view_GLES20Canvas_setMatrix },
    { "nGetMatrix",         "(I)I",            (void*) android_view_GLES20Canvas_getNativeMatrix },
+10 −0
Original line number Diff line number Diff line
@@ -268,6 +268,10 @@ void DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) {
                renderer.scale(getFloat(), getFloat());
            }
            break;
            case Skew: {
                renderer.skew(getFloat(), getFloat());
            }
            break;
            case SetMatrix: {
                renderer.setMatrix(getMatrix());
            }
@@ -508,6 +512,12 @@ void DisplayListRenderer::scale(float sx, float sy) {
    OpenGLRenderer::scale(sx, sy);
}

void DisplayListRenderer::skew(float sx, float sy) {
    addOp(DisplayList::Skew);
    addPoint(sx, sy);
    OpenGLRenderer::skew(sx, sy);
}

void DisplayListRenderer::setMatrix(SkMatrix* matrix) {
    addOp(DisplayList::SetMatrix);
    addMatrix(matrix);
+2 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ public:
        Translate,
        Rotate,
        Scale,
        Skew,
        SetMatrix,
        ConcatMatrix,
        ClipRect,
@@ -250,6 +251,7 @@ public:
    void translate(float dx, float dy);
    void rotate(float degrees);
    void scale(float sx, float sy);
    void skew(float sx, float sy);

    void setMatrix(SkMatrix* matrix);
    void concatMatrix(SkMatrix* matrix);
+18 −0
Original line number Diff line number Diff line
@@ -178,6 +178,24 @@ void Matrix4::loadScale(float sx, float sy, float sz) {
    data[kScaleZ] = sz;
}

void Matrix4::loadSkew(float sx, float sy) {
    loadIdentity();

    data[kScaleX]       = 1.0f;
    data[kSkewX]        = sx;
    data[kTranslateX]   = 0.0f;

    data[kSkewY]        = sy;
    data[kScaleY]       = 1.0f;
    data[kTranslateY]   = 0.0f;

    data[kPerspective0] = 0.0f;
    data[kPerspective1] = 0.0f;
    data[kPerspective2] = 1.0f;

    mSimpleMatrix = false;
}

void Matrix4::loadRotate(float angle, float x, float y, float z) {
    data[kPerspective0]  = 0.0f;
    data[kPerspective1]  = 0.0f;
Loading