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

Commit c71bfcaa authored by Chris Craik's avatar Chris Craik
Browse files

Fix layer shadow transform crash

bug:17180252

Change-Id: Ia648b8c98a217a3a4973917bf255d1397802cbbe
parent 3acf66f5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ void DamageAccumulator::dirty(float left, float top, float right, float bottom)
    mHead->pendingDirty.join(left, top, right, bottom);
}

void DamageAccumulator::peekAtDirty(SkRect* dest) {
void DamageAccumulator::peekAtDirty(SkRect* dest) const {
    *dest = mHead->pendingDirty;
}

+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ public:
    void dirty(float left, float top, float right, float bottom);

    // Returns the current dirty area, *NOT* transformed by pushed transforms
    void peekAtDirty(SkRect* dest);
    void peekAtDirty(SkRect* dest) const;

    void computeCurrentTransform(Matrix4* outMatrix) const;

+6 −7
Original line number Diff line number Diff line
@@ -179,13 +179,6 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {
        transformUpdateNeeded = true;
    }

    if (transformUpdateNeeded) {
        // update the transform in window of the layer to reset its origin wrt light source position
        Matrix4 windowTransform;
        info.damageAccumulator->computeCurrentTransform(&windowTransform);
        mLayer->setWindowTransform(windowTransform);
    }

    SkRect dirty;
    info.damageAccumulator->peekAtDirty(&dirty);

@@ -198,6 +191,12 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {
        return;
    }

    if (transformUpdateNeeded) {
        // update the transform in window of the layer to reset its origin wrt light source position
        Matrix4 windowTransform;
        info.damageAccumulator->computeCurrentTransform(&windowTransform);
        mLayer->setWindowTransform(windowTransform);
    }

    if (dirty.intersect(0, 0, getWidth(), getHeight())) {
        dirty.roundOut();