Region.cpp revision 0926f50664c739eaee60341f8e8c694dc9a4f3eb
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define LOG_TAG "Region" 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdio.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Atomic.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Debug.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/String8.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region() 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region(const Region& rhs) 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : mRegion(rhs.mRegion) 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region(const SkRegion& rhs) 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : mRegion(rhs) 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::~Region() 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region(const Rect& rhs) 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project set(rhs); 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region(const Parcel& parcel) 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project read(parcel); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::Region(const void* buffer) 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project read(buffer); 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::operator = (const Region& rhs) 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion = rhs.mRegion; 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst SkRegion& Region::toSkRegion() const 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return mRegion; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRect Region::bounds() const 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const SkIRect& b(mRegion.getBounds()); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return Rect(b.fLeft, b.fTop, b.fRight, b.fBottom); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Region::clear() 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.setEmpty(); 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Region::set(const Rect& r) 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkIRect ir; 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ir.set(r.left, r.top, r.right, r.bottom); 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.setRect(ir); 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 910926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianvoid Region::set(uint32_t w, uint32_t h) 920926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian{ 930926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian SkIRect ir; 940926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian ir.set(0, 0, w, h); 950926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian mRegion.setRect(ir); 960926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian} 970926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::orSelf(const Rect& r) 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkIRect ir; 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ir.set(r.left, r.top, r.right, r.bottom); 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(ir, SkRegion::kUnion_Op); 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::andSelf(const Rect& r) 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkIRect ir; 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ir.set(r.left, r.top, r.right, r.bottom); 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(ir, SkRegion::kIntersect_Op); 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::orSelf(const Region& rhs) { 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(rhs.mRegion, SkRegion::kUnion_Op); 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::andSelf(const Region& rhs) { 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(rhs.mRegion, SkRegion::kIntersect_Op); 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::subtractSelf(const Region& rhs) { 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(rhs.mRegion, SkRegion::kDifference_Op); 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::translateSelf(int x, int y) { 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (x|y) mRegion.translate(x, y); 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::merge(const Region& rhs) const { 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, rhs.mRegion, SkRegion::kUnion_Op); 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::intersect(const Region& rhs) const { 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, rhs.mRegion, SkRegion::kIntersect_Op); 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::subtract(const Region& rhs) const { 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, rhs.mRegion, SkRegion::kDifference_Op); 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::translate(int x, int y) const { 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.translate(x, y, &result.mRegion); 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::orSelf(const Region& rhs, int dx, int dy) { 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(r, SkRegion::kUnion_Op); 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::andSelf(const Region& rhs, int dx, int dy) { 172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(r, SkRegion::kIntersect_Op); 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::subtractSelf(const Region& rhs, int dx, int dy) { 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.op(r, SkRegion::kDifference_Op); 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::merge(const Region& rhs, int dx, int dy) const { 186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, r, SkRegion::kUnion_Op); 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::intersect(const Region& rhs, int dx, int dy) const { 194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, r, SkRegion::kIntersect_Op); 198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion Region::subtract(const Region& rhs, int dx, int dy) const { 202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Region result; 203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion r(rhs.mRegion); 204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r.translate(dx, dy); 205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project result.mRegion.op(mRegion, r, SkRegion::kDifference_Op); 206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return result; 207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion::iterator::iterator(const Region& r) 212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : mIt(r.mRegion) 213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectint Region::iterator::iterate(Rect* rect) 217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (mIt.done()) 219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return 0; 220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const SkIRect& r(mIt.rect()); 221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rect->left = r.fLeft; 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rect->top = r.fTop; 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rect->right = r.fRight; 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rect->bottom= r.fBottom; 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mIt.next(); 226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return 1; 227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 228edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 229edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 230edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 231edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// we write a 4byte size ahead of the actual region, so we know how much we'll need for reading 232edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 233edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t Region::write(Parcel& parcel) const 234edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t size = mRegion.flatten(NULL); 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project parcel.writeInt32(size); 237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.flatten(parcel.writeInplace(size)); 238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return NO_ERROR; 239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t Region::read(const Parcel& parcel) 242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t size = parcel.readInt32(); 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mRegion.unflatten(parcel.readInplace(size)); 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return NO_ERROR; 246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Region::write(void* buffer, size_t size) const 249edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 250edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t sizeNeeded = mRegion.flatten(NULL); 251edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (sizeNeeded > size) return NO_MEMORY; 252edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return mRegion.flatten(buffer); 253edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 254edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 255edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Region::read(const void* buffer) 256edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 257edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return mRegion.unflatten(buffer); 258edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 259edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 260edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t Region::writeEmpty(void* buffer, size_t size) 261edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 262edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (size < 4) return NO_MEMORY; 263edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // this needs to stay in sync with SkRegion 264edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *static_cast<int32_t*>(buffer) = -1; 265edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return 4; 266edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 267edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 268edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool Region::isEmpty(void* buffer) 269edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // this needs to stay in sync with SkRegion 271edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *static_cast<int32_t*>(buffer) == -1; 272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectsize_t Region::rects(Vector<Rect>& rectList) const 275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 276edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rectList.clear(); 277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (!isEmpty()) { 278edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project SkRegion::Iterator iterator(mRegion); 279edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project while( !iterator.done() ) { 280edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const SkIRect& ir(iterator.rect()); 281edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rectList.push(Rect(ir.fLeft, ir.fTop, ir.fRight, ir.fBottom)); 282edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project iterator.next(); 283edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 284edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 285edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return rectList.size(); 286edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 287edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 288edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Region::dump(String8& out, const char* what, uint32_t flags) const 289edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 290edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project (void)flags; 291edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Vector<Rect> r; 292edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rects(r); 293edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 294edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t SIZE = 256; 295edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project char buffer[SIZE]; 296edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 297edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project snprintf(buffer, SIZE, " Region %s (this=%p, count=%d)\n", what, this, r.size()); 298edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project out.append(buffer); 299edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project for (size_t i=0 ; i<r.size() ; i++) { 300edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project snprintf(buffer, SIZE, " [%3d, %3d, %3d, %3d]\n", 301edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r[i].left, r[i].top,r[i].right,r[i].bottom); 302edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project out.append(buffer); 303edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 304edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 305edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 306edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Region::dump(const char* what, uint32_t flags) const 307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 308edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project (void)flags; 309edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Vector<Rect> r; 310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project rects(r); 311edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LOGD(" Region %s (this=%p, count=%d)\n", what, this, r.size()); 312edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project for (size_t i=0 ; i<r.size() ; i++) { 313edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LOGD(" [%3d, %3d, %3d, %3d]\n", 314edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project r[i].left, r[i].top,r[i].right,r[i].bottom); 315edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 316edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 317edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 318edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 319edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 320edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 321