diff --git a/gfx/thebes/gfxContext.cpp b/gfx/thebes/gfxContext.cpp index 97a4ef0817f6..4d33c2f99fd0 100644 --- a/gfx/thebes/gfxContext.cpp +++ b/gfx/thebes/gfxContext.cpp @@ -1769,6 +1769,9 @@ gfxContext::GetUserPathExtent() cairo_path_extents(mCairo, &xmin, &ymin, &xmax, &ymax); return gfxRect(xmin, ymin, xmax - xmin, ymax - ymin); } else { + if (mPathIsRect) { + return ThebesRect(mTransform.TransformBounds(mRect)); + } EnsurePath(); return ThebesRect(mPath->GetBounds()); } @@ -1782,6 +1785,9 @@ gfxContext::GetUserFillExtent() cairo_fill_extents(mCairo, &xmin, &ymin, &xmax, &ymax); return gfxRect(xmin, ymin, xmax - xmin, ymax - ymin); } else { + if (mPathIsRect) { + return ThebesRect(mTransform.TransformBounds(mRect)); + } EnsurePath(); return ThebesRect(mPath->GetBounds()); } @@ -1795,6 +1801,11 @@ gfxContext::GetUserStrokeExtent() cairo_stroke_extents(mCairo, &xmin, &ymin, &xmax, &ymax); return gfxRect(xmin, ymin, xmax - xmin, ymax - ymin); } else { + if (mPathIsRect) { + Rect rect = mRect; + rect.Inflate(CurrentState().strokeOptions.mLineWidth / 2); + return ThebesRect(mTransform.TransformBounds(rect)); + } EnsurePath(); return ThebesRect(mPath->GetStrokedBounds(CurrentState().strokeOptions, mTransform)); }