1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/gfx/path_x11.h" 6 7 #include <X11/Xutil.h> 8 9 #include "base/memory/scoped_ptr.h" 10 #include "third_party/skia/include/core/SkRegion.h" 11 #include "ui/gfx/path.h" 12 13 namespace gfx { 14 CreateRegionFromSkRegion(const SkRegion & region)15Region CreateRegionFromSkRegion(const SkRegion& region) { 16 Region result = XCreateRegion(); 17 18 for (SkRegion::Iterator i(region); !i.done(); i.next()) { 19 XRectangle rect; 20 rect.x = i.rect().x(); 21 rect.y = i.rect().y(); 22 rect.width = i.rect().width(); 23 rect.height = i.rect().height(); 24 XUnionRectWithRegion(&rect, result, result); 25 } 26 27 return result; 28 } 29 CreateRegionFromSkPath(const SkPath & path)30Region CreateRegionFromSkPath(const SkPath& path) { 31 int point_count = path.getPoints(NULL, 0); 32 scoped_ptr<SkPoint[]> points(new SkPoint[point_count]); 33 path.getPoints(points.get(), point_count); 34 scoped_ptr<XPoint[]> x11_points(new XPoint[point_count]); 35 for (int i = 0; i < point_count; ++i) { 36 x11_points[i].x = SkScalarRound(points[i].fX); 37 x11_points[i].y = SkScalarRound(points[i].fY); 38 } 39 40 return XPolygonRegion(x11_points.get(), point_count, EvenOddRule); 41 } 42 43 } // namespace gfx 44