diff options
Diffstat (limited to 'chromium/ui/gfx/x/x11_path.cc')
-rw-r--r-- | chromium/ui/gfx/x/x11_path.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/chromium/ui/gfx/x/x11_path.cc b/chromium/ui/gfx/x/x11_path.cc index 4a171dbc564..937e206007e 100644 --- a/chromium/ui/gfx/x/x11_path.cc +++ b/chromium/ui/gfx/x/x11_path.cc @@ -12,8 +12,9 @@ namespace gfx { -Region CreateRegionFromSkRegion(const SkRegion& region) { - Region result = XCreateRegion(); +std::unique_ptr<std::vector<x11::Rectangle>> CreateRegionFromSkRegion( + const SkRegion& region) { + auto result = std::make_unique<std::vector<x11::Rectangle>>(); for (SkRegion::Iterator i(region); !i.done(); i.next()) { XRectangle rect; @@ -21,23 +22,23 @@ Region CreateRegionFromSkRegion(const SkRegion& region) { rect.y = i.rect().y(); rect.width = i.rect().width(); rect.height = i.rect().height(); - XUnionRectWithRegion(&rect, result, result); + result->push_back({ + .x = i.rect().x(), + .y = i.rect().y(), + .width = i.rect().width(), + .height = i.rect().height(), + }); } return result; } -Region CreateRegionFromSkPath(const SkPath& path) { - int point_count = path.getPoints(nullptr, 0); - std::unique_ptr<SkPoint[]> points(new SkPoint[point_count]); - path.getPoints(points.get(), point_count); - std::unique_ptr<XPoint[]> x11_points(new XPoint[point_count]); - for (int i = 0; i < point_count; ++i) { - x11_points[i].x = SkScalarRoundToInt(points[i].fX); - x11_points[i].y = SkScalarRoundToInt(points[i].fY); - } - - return XPolygonRegion(x11_points.get(), point_count, EvenOddRule); +std::unique_ptr<std::vector<x11::Rectangle>> CreateRegionFromSkPath( + const SkPath& path) { + SkRegion clip{path.getBounds().roundOut()}; + SkRegion region; + region.setPath(path, clip); + return CreateRegionFromSkRegion(region); } } // namespace gfx |