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

Commit 21bcfc4f authored by Chris Craik's avatar Chris Craik
Browse files

Fix tessellation bounds computation

bug:17401066

Now correctly accounts for scale, both in hairline case (where scale
needs to be accounted for), and in standard case (where scale
shouldn't be applied, since bounds are in local space)

Change-Id: I597a20834dce42ddb741b46e4c1a4f3169a48ccc
parent 95e71085
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -162,14 +162,21 @@ public:
    }

    /**
     * Outset the bounds of point data (for line endpoints or points) to account for AA stroke
     * Outset the bounds of point data (for line endpoints or points) to account for stroke
     * geometry.
     *
     * bounds are in pre-scaled space.
     */
    void expandBoundsForStroke(Rect* bounds) const {
        float outset = halfStrokeWidth;
        if (outset == 0) outset = 0.5f;
        bounds->outset(outset * inverseScaleX + Vertex::GeometryFudgeFactor(),
                outset * inverseScaleY + Vertex::GeometryFudgeFactor());
        if (halfStrokeWidth == 0) {
            // hairline, outset by (0.5f + fudge factor) in post-scaling space
            bounds->outset(fabs(inverseScaleX) * (0.5f + Vertex::GeometryFudgeFactor()),
                    fabs(inverseScaleY) * (0.5f + Vertex::GeometryFudgeFactor()));
        } else {
            // non hairline, outset by half stroke width pre-scaled, and fudge factor post scaled
            bounds->outset(halfStrokeWidth + fabs(inverseScaleX) * Vertex::GeometryFudgeFactor(),
                    halfStrokeWidth + fabs(inverseScaleY) * Vertex::GeometryFudgeFactor());
        }
    }
};