| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/gfx/x/x11_path.h" |
| |
| #include <memory> |
| |
| #include "third_party/skia/include/core/SkPath.h" |
| #include "third_party/skia/include/core/SkRegion.h" |
| |
| namespace x11 { |
| |
| std::unique_ptr<std::vector<Rectangle>> CreateRegionFromSkRegion( |
| const SkRegion& region) { |
| auto result = std::make_unique<std::vector<Rectangle>>(); |
| |
| for (SkRegion::Iterator i(region); !i.done(); i.next()) { |
| result->push_back({ |
| .x = static_cast<int16_t>(i.rect().x()), |
| .y = static_cast<int16_t>(i.rect().y()), |
| .width = static_cast<uint16_t>(i.rect().width()), |
| .height = static_cast<uint16_t>(i.rect().height()), |
| }); |
| } |
| |
| return result; |
| } |
| |
| std::unique_ptr<std::vector<Rectangle>> CreateRegionFromSkPath( |
| const SkPath& path) { |
| SkRegion clip{path.getBounds().roundOut()}; |
| SkRegion region; |
| region.setPath(path, clip); |
| return CreateRegionFromSkRegion(region); |
| } |
| |
| } // namespace x11 |