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