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

Commit e5e6f483 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Change setMatrix behavior to only affect canvas-local matrix"

parents c725313a 6daa13c5
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -85,10 +85,6 @@ public:
    virtual void getMatrix(SkMatrix* outMatrix) const = 0;
    virtual void setMatrix(const SkMatrix& matrix) = 0;

    /// Like setMatrix(), but to be translated into local / view-relative coordinates
    /// rather than executed in global / device coordinates at rendering time.
    virtual void setLocalMatrix(const SkMatrix& matrix) = 0;

    virtual void concat(const SkMatrix& matrix) = 0;
    virtual void rotate(float degrees) = 0;
    virtual void scale(float sx, float sy) = 0;
+0 −5
Original line number Diff line number Diff line
@@ -168,11 +168,6 @@ void DisplayListCanvas::setMatrix(const SkMatrix& matrix) {
    mState.setMatrix(matrix);
}

void DisplayListCanvas::setLocalMatrix(const SkMatrix& matrix) {
    addStateOp(new (alloc()) SetLocalMatrixOp(matrix));
    mState.setMatrix(matrix);
}

void DisplayListCanvas::concat(const SkMatrix& matrix) {
    addStateOp(new (alloc()) ConcatMatrixOp(matrix));
    mState.concatMatrix(matrix);
+0 −1
Original line number Diff line number Diff line
@@ -143,7 +143,6 @@ public:
    // Matrix
    virtual void getMatrix(SkMatrix* outMatrix) const override { mState.getMatrix(outMatrix); }
    virtual void setMatrix(const SkMatrix& matrix) override;
    virtual void setLocalMatrix(const SkMatrix& matrix) override;

    virtual void concat(const SkMatrix& matrix) override;
    virtual void rotate(float degrees) override;
+3 −20
Original line number Diff line number Diff line
@@ -472,7 +472,9 @@ public:
            : mMatrix(matrix) {}

    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const override {
        renderer.setMatrix(mMatrix);
        // Setting a matrix on a Canvas isn't equivalent to setting a total matrix on the scene.
        // Set a canvas-relative matrix on the renderer instead.
        renderer.setLocalMatrix(mMatrix);
    }

    virtual void output(int level, uint32_t logFlags) const override {
@@ -489,25 +491,6 @@ private:
    const SkMatrix mMatrix;
};

class SetLocalMatrixOp : public StateOp {
public:
    SetLocalMatrixOp(const SkMatrix& matrix)
            : mMatrix(matrix) {}

    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const override {
        renderer.setLocalMatrix(mMatrix);
    }

    virtual void output(int level, uint32_t logFlags) const override {
        OP_LOG("SetLocalMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(&mMatrix));
    }

    virtual const char* name() override { return "SetLocalMatrix"; }

private:
    const SkMatrix mMatrix;
};

class ConcatMatrixOp : public StateOp {
public:
    ConcatMatrixOp(const SkMatrix& matrix)
+4 −3
Original line number Diff line number Diff line
@@ -1151,7 +1151,7 @@ bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDef
}

void OpenGLRenderer::restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore) {
    setMatrix(state.mMatrix);
    setGlobalMatrix(state.mMatrix);
    writableSnapshot()->alpha = state.mAlpha;
    writableSnapshot()->roundRectClipState = state.mRoundRectClipState;
    writableSnapshot()->projectionPathMask = state.mProjectionPathMask;
@@ -2098,8 +2098,9 @@ void OpenGLRenderer::skew(float sx, float sy) {
    mState.skew(sx, sy);
}

void OpenGLRenderer::setMatrix(const Matrix4& matrix) {
    mState.setMatrix(matrix);
void OpenGLRenderer::setLocalMatrix(const Matrix4& matrix) {
    mState.setMatrix(mBaseTransform);
    mState.concatMatrix(matrix);
}

void OpenGLRenderer::setLocalMatrix(const SkMatrix& matrix) {
Loading