15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/path.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkRegion.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkRegion* Path::CreateNativeRegion() const {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a clip region that contains |this| path.
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const SkRect bounds = getBounds();
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkIRect ibounds;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bounds.round(&ibounds);
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkRegion clip_region;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  clip_region.setRect(ibounds);
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkRegion* region = new SkRegion;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  region->setPath(*this, clip_region);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return region;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeRegion Path::IntersectRegions(NativeRegion r1, NativeRegion r2) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkRegion* new_region = new SkRegion;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_region->op(*r1, *r2, SkRegion::kIntersect_Op);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new_region;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeRegion Path::CombineRegions(NativeRegion r1, NativeRegion r2) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkRegion* new_region = new SkRegion;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_region->op(*r1, *r2, SkRegion::kUnion_Op);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new_region;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeRegion Path::SubtractRegion(NativeRegion r1, NativeRegion r2) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkRegion* new_region = new SkRegion;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_region->op(*r1, *r2, SkRegion::kDifference_Op);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new_region;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
47