Rect PathCairo::GetStrokedBounds(const StrokeOptions &aStrokeOptions, const Matrix &aTransform) const { EnsureContainingContext(); double x1, y1, x2, y2; SetCairoStrokeOptions(mContainingContext, aStrokeOptions); cairo_stroke_extents(mContainingContext, &x1, &y1, &x2, &y2); Rect bounds((Float)x1, (Float)y1, (Float)(x2 - x1), (Float)(y2 - y1)); return aTransform.TransformBounds(bounds); }
bool PathCairo::StrokeContainsPoint(const StrokeOptions &aStrokeOptions, const Point &aPoint, const Matrix &aTransform) const { CairoTempMatrix(*mPathContext, mTransform); Matrix inverse = aTransform; inverse.Invert(); Point transformed = inverse * aPoint; SetCairoStrokeOptions(*mPathContext, aStrokeOptions); return cairo_in_stroke(*mPathContext, transformed.x, transformed.y); }
bool PathCairo::StrokeContainsPoint(const StrokeOptions &aStrokeOptions, const Point &aPoint, const Matrix &aTransform) const { Matrix inverse = aTransform; inverse.Invert(); Point transformed = inverse * aPoint; EnsureContainingContext(); SetCairoStrokeOptions(mContainingContext, aStrokeOptions); return cairo_in_stroke(mContainingContext, transformed.x, transformed.y); }