Region_Delegate.java revision 9be03c4e980d3058aeb3fd730da5f7d4a4a4f8a8
1c3aae25116e66c177579b0b79182b09340b19753Chris Lattner/* 2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * Copyright (C) 2010 The Android Open Source Project 36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell * 46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell * Licensed under the Apache License, Version 2.0 (the "License"); 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner * you may not use this file except in compliance with the License. 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner * You may obtain a copy of the License at 7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * 86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell * http://www.apache.org/licenses/LICENSE-2.0 9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * 10c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * Unless required by applicable law or agreed to in writing, software 11c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * distributed under the License is distributed on an "AS IS" BASIS, 12ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner * See the License for the specific language governing permissions and 14cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner * limitations under the License. 15cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner */ 16cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 17cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerpackage android.graphics; 18583bd47f777fe3eb8305872fa0eadab31e833dffJim Laskey 194b84086e89d86fb16f562166d9fea8df37db6be7Dan Gohmanimport com.android.ide.common.rendering.api.LayoutLog; 2043d1fd449f1a0ac9d9dafa0b9569bb6b2e976198Anton Korobeynikovimport com.android.layoutlib.bridge.Bridge; 21583bd47f777fe3eb8305872fa0eadab31e833dffJim Laskeyimport com.android.layoutlib.bridge.impl.DelegateManager; 22b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattnerimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 23109654fae9c5b8b96bd3a829824cdbceb27ced06Chris Lattner 245892d47a625638a90afeb31dd4f6f80a2f9bacdeChris Lattnerimport android.os.Parcel; 25322812e603705e1c2037313633e72f689524b163Evan Cheng 26eb19e40efbd3cae80c908a30cdf4d33450733c45Chris Lattnerimport java.awt.Rectangle; 27d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeimport java.awt.Shape; 28d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeimport java.awt.geom.AffineTransform; 29c7c3f110eda0ff8040e4bd99e38d3112b910810fJim Laskeyimport java.awt.geom.Area; 30c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerimport java.awt.geom.Rectangle2D; 31c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 3244c3b9fdd416c79f4b67cde1aecfced5921efd81Jim Laskey/** 33c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * Delegate implementing the native methods of android.graphics.Region 34d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng * 35ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner * Through the layoutlib_create tool, the original native methods of Region have been replaced 36c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * by calls to methods of the same name in this delegate class. 37c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * 38c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * This class behaves like the original native implementation, but in Java, keeping previously 39c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * native data into its own objects and mapping them to int that are sent back and forth between 40c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * it and the original Region class. 41c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * 42c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * This also serve as a base class for all Region delegate classes. 43c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * 44c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * @see DelegateManager 45c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * 46c3aae25116e66c177579b0b79182b09340b19753Chris Lattner */ 47cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerpublic class Region_Delegate { 48cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 49063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner // ---- delegate manager ---- 50c3aae25116e66c177579b0b79182b09340b19753Chris Lattner protected static final DelegateManager<Region_Delegate> sManager = 51ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner new DelegateManager<Region_Delegate>(Region_Delegate.class); 5244c3b9fdd416c79f4b67cde1aecfced5921efd81Jim Laskey 53cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner // ---- delegate helper data ---- 54213a16c637926bfc38ba373d3aba6778e181e3ecChris Lattner 55c3aae25116e66c177579b0b79182b09340b19753Chris Lattner // ---- delegate data ---- 56cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner private Area mArea = new Area(); 57213a16c637926bfc38ba373d3aba6778e181e3ecChris Lattner 58b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner // ---- Public Helper methods ---- 59691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth 60213a16c637926bfc38ba373d3aba6778e181e3ecChris Lattner public static Region_Delegate getDelegate(long nativeShader) { 61213a16c637926bfc38ba373d3aba6778e181e3ecChris Lattner return sManager.getDelegate(nativeShader); 62583bd47f777fe3eb8305872fa0eadab31e833dffJim Laskey } 63213a16c637926bfc38ba373d3aba6778e181e3ecChris Lattner 64cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner public Area getJavaArea() { 65ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner return mArea; 66ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner } 67ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner 68c3aae25116e66c177579b0b79182b09340b19753Chris Lattner /** 69c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * Combines two {@link Shape} into another one (actually an {@link Area}), according 70cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner * to the given {@link Region.Op}. 71cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner * 72c3aae25116e66c177579b0b79182b09340b19753Chris Lattner * If the Op is not one that combines two shapes, then this return null 73063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner * 74063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner * @param shape1 the firt shape to combine which can be null if there's no original clip. 75ead0d88ad7659dabd66cc3149af97d98256fca84Chris Lattner * @param shape2 the 2nd shape to combine 7644c3b9fdd416c79f4b67cde1aecfced5921efd81Jim Laskey * @param regionOp the operande for the combine 77cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner * @return a new area or null. 78ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey */ 791080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner public static Area combineShapes(Shape shape1, Shape shape2, int regionOp) { 801080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner if (regionOp == Region.Op.DIFFERENCE.nativeInt) { 81ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey // if shape1 is null (empty), then the result is null. 82ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey if (shape1 == null) { 83ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey return null; 84ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey } 851080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner 86ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey // result is always a new area. 87ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey Area result = new Area(shape1); 88ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey result.subtract(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 89ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey return result; 90ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey 91ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey } else if (regionOp == Region.Op.INTERSECT.nativeInt) { 92ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey // if shape1 is null, then the result is simply shape2. 93ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey if (shape1 == null) { 94ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey return new Area(shape2); 95ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey } 96ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey 97ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey // result is always a new area. 98ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey Area result = new Area(shape1); 99ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey result.intersect(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 100ec20402c90b605afeedbcf0e3aabe6f8054f23ddJim Laskey return result; 1011080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner 102b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner } else if (regionOp == Region.Op.UNION.nativeInt) { 103b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner // if shape1 is null, then the result is simply shape2. 104b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner if (shape1 == null) { 105b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner return new Area(shape2); 106b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner } 107b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner 108be20a88f534325f736830c94fc084c55b4aefdfdDan Gohman // result is always a new area. 109b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner Area result = new Area(shape1); 110c3aae25116e66c177579b0b79182b09340b19753Chris Lattner result.add(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 111cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner return result; 112c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 113cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } else if (regionOp == Region.Op.XOR.nativeInt) { 114c3aae25116e66c177579b0b79182b09340b19753Chris Lattner // if shape1 is null, then the result is simply shape2 115c3aae25116e66c177579b0b79182b09340b19753Chris Lattner if (shape1 == null) { 116c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return new Area(shape2); 117cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } 118c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 119cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner // result is always a new area. 120c3aae25116e66c177579b0b79182b09340b19753Chris Lattner Area result = new Area(shape1); 121cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner result.exclusiveOr(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 1221d4d41411190dd9e62764e56713753d4155764ddNate Begeman return result; 1231d4d41411190dd9e62764e56713753d4155764ddNate Begeman 1241d4d41411190dd9e62764e56713753d4155764ddNate Begeman } else if (regionOp == Region.Op.REVERSE_DIFFERENCE.nativeInt) { 1251d4d41411190dd9e62764e56713753d4155764ddNate Begeman // result is always a new area. 126c7c3f110eda0ff8040e4bd99e38d3112b910810fJim Laskey Area result = new Area(shape2); 1271d4d41411190dd9e62764e56713753d4155764ddNate Begeman 12801d029b82cb08367d81aa10cdc94d05360466649Chris Lattner if (shape1 != null) { 12901d029b82cb08367d81aa10cdc94d05360466649Chris Lattner result.subtract(shape1 instanceof Area ? (Area) shape1 : new Area(shape1)); 13001d029b82cb08367d81aa10cdc94d05360466649Chris Lattner } 13101d029b82cb08367d81aa10cdc94d05360466649Chris Lattner 13201d029b82cb08367d81aa10cdc94d05360466649Chris Lattner return result; 13301d029b82cb08367d81aa10cdc94d05360466649Chris Lattner } 13401d029b82cb08367d81aa10cdc94d05360466649Chris Lattner 135c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return null; 136c3aae25116e66c177579b0b79182b09340b19753Chris Lattner } 137c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 138cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner // ---- native methods ---- 139c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 140c3aae25116e66c177579b0b79182b09340b19753Chris Lattner @LayoutlibDelegate 141063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner /*package*/ static boolean isEmpty(Region thisRegion) { 142c3aae25116e66c177579b0b79182b09340b19753Chris Lattner Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 143d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner if (regionDelegate == null) { 144190a418bf6b49a4ef1c1980229a2f0d516e8a2cdChris Lattner return true; 145190a418bf6b49a4ef1c1980229a2f0d516e8a2cdChris Lattner } 146130a6471b90f66e99b1f9f42877fdf611c330ac6Evan Cheng 147130a6471b90f66e99b1f9f42877fdf611c330ac6Evan Cheng return regionDelegate.mArea.isEmpty(); 148130a6471b90f66e99b1f9f42877fdf611c330ac6Evan Cheng } 149130a6471b90f66e99b1f9f42877fdf611c330ac6Evan Cheng 150130a6471b90f66e99b1f9f42877fdf611c330ac6Evan Cheng @LayoutlibDelegate 15170046e920fa37989a041af663ada2b2b646e258fChris Lattner /*package*/ static boolean isRect(Region thisRegion) { 15270046e920fa37989a041af663ada2b2b646e258fChris Lattner Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 15383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (regionDelegate == null) { 15483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return true; 15583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 15683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 15770046e920fa37989a041af663ada2b2b646e258fChris Lattner return regionDelegate.mArea.isRectangular(); 15870046e920fa37989a041af663ada2b2b646e258fChris Lattner } 15983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 16070046e920fa37989a041af663ada2b2b646e258fChris Lattner @LayoutlibDelegate 16170046e920fa37989a041af663ada2b2b646e258fChris Lattner /*package*/ static boolean isComplex(Region thisRegion) { 16283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 16370046e920fa37989a041af663ada2b2b646e258fChris Lattner if (regionDelegate == null) { 16470046e920fa37989a041af663ada2b2b646e258fChris Lattner return true; 16583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 16670046e920fa37989a041af663ada2b2b646e258fChris Lattner 16770046e920fa37989a041af663ada2b2b646e258fChris Lattner return regionDelegate.mArea.isSingular() == false; 16883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 16913d57320bd212483463d4f8992d5787b29eda5dfBill Wendling 17070046e920fa37989a041af663ada2b2b646e258fChris Lattner @LayoutlibDelegate 17170046e920fa37989a041af663ada2b2b646e258fChris Lattner /*package*/ static boolean contains(Region thisRegion, int x, int y) { 17270046e920fa37989a041af663ada2b2b646e258fChris Lattner Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1731b1a49714ef26225a42199cf2930529f31868322Chris Lattner if (regionDelegate == null) { 17470046e920fa37989a041af663ada2b2b646e258fChris Lattner return false; 17570046e920fa37989a041af663ada2b2b646e258fChris Lattner } 17683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 17783ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return regionDelegate.mArea.contains(x, y); 1780bd4893a0726889b942405262e53d06cf3fe3be8Chris Lattner } 17983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 180cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner @LayoutlibDelegate 181cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner /*package*/ static boolean quickContains(Region thisRegion, 18283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands int left, int top, int right, int bottom) { 1836394b099e836f56a937cdcc7332c9487b504ca68Dan Gohman Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1846394b099e836f56a937cdcc7332c9487b504ca68Dan Gohman if (regionDelegate == null) { 18583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return false; 18683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 18783ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 188c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner return regionDelegate.mArea.isRectangular() && 189c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner regionDelegate.mArea.contains(left, top, right - left, bottom - top); 19083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 191f04afdbb48568ef09f11fd10ac03426101f2dbf8Dale Johannesen 192f04afdbb48568ef09f11fd10ac03426101f2dbf8Dale Johannesen @LayoutlibDelegate 19383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands /*package*/ static boolean quickReject(Region thisRegion, 194cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner int left, int top, int right, int bottom) { 19583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 196cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner if (regionDelegate == null) { 197cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner return false; 198cbea3045ce0bdd061c494a831d0ce2d5834211ccChris Lattner } 19983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 20083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return regionDelegate.mArea.isEmpty() || 201c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner regionDelegate.mArea.intersects(left, top, right - left, bottom - top) == false; 202c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner } 20383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 20483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands @LayoutlibDelegate 205c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner /*package*/ static boolean quickReject(Region thisRegion, Region rgn) { 206c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 20783ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (regionDelegate == null) { 208c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner return false; 20983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 210c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner 211c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner Region_Delegate targetRegionDelegate = sManager.getDelegate(rgn.mNativeRegion); 212c9f8f416800784ca6453222b307bc44ad24739b0Chris Lattner if (targetRegionDelegate == null) { 21383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return false; 214d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng } 215d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng 21683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return regionDelegate.mArea.isEmpty() || 217d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng regionDelegate.mArea.getBounds().intersects( 218d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng targetRegionDelegate.mArea.getBounds()) == false; 219d6594ae54cfde4db4d30272192645c0a45fb9902Evan Cheng 220c3aae25116e66c177579b0b79182b09340b19753Chris Lattner } 22183ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 22283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands @LayoutlibDelegate 223276dcbdc8db6614cfd5004dc7dc35e437ddf9c58Duncan Sands /*package*/ static void translate(Region thisRegion, int dx, int dy, Region dst) { 22483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 22583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (regionDelegate == null) { 2267f460203b0c5350e9b2c592f438e40f7a7de6e45Dan Gohman return; 2277f460203b0c5350e9b2c592f438e40f7a7de6e45Dan Gohman } 2284406604047423576e36657c7ede266ca42e79642Dan Gohman 229c3aae25116e66c177579b0b79182b09340b19753Chris Lattner Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 230d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner if (targetRegionDelegate == null) { 231d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner return; 232d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner } 233cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 234cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if (regionDelegate.mArea.isEmpty()) { 235e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner targetRegionDelegate.mArea = new Area(); 236e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner } else { 237e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 238e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner AffineTransform mtx = new AffineTransform(); 239e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner mtx.translate(dx, dy); 24083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands targetRegionDelegate.mArea.transform(mtx); 241bd564bfc63163e31f320c3da9749db70992dc35eChris Lattner } 2422fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner } 243e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner 24466a48bbc3565b40ea0e6f2d58cf5e3a8e64802efEvan Cheng @LayoutlibDelegate 24566a48bbc3565b40ea0e6f2d58cf5e3a8e64802efEvan Cheng /*package*/ static void scale(Region thisRegion, float scale, Region dst) { 24666a48bbc3565b40ea0e6f2d58cf5e3a8e64802efEvan Cheng Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 24766a48bbc3565b40ea0e6f2d58cf5e3a8e64802efEvan Cheng if (regionDelegate == null) { 24883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return; 249bd564bfc63163e31f320c3da9749db70992dc35eChris Lattner } 2502fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner 25166a48bbc3565b40ea0e6f2d58cf5e3a8e64802efEvan Cheng Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 252e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner if (targetRegionDelegate == null) { 25383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return; 25483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 255f06f35e30b4c4d7db304f717a3d4dc6595fbd078Chris Lattner 2562fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner if (regionDelegate.mArea.isEmpty()) { 25718c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner targetRegionDelegate.mArea = new Area(); 258e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner } else { 259e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 260e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner AffineTransform mtx = new AffineTransform(); 261e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner mtx.scale(scale, scale); 26283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands targetRegionDelegate.mArea.transform(mtx); 263e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner } 26483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 265f06f35e30b4c4d7db304f717a3d4dc6595fbd078Chris Lattner 2662fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner @LayoutlibDelegate 267e3f1026683c38f6605ccaf698b7082f1b0a0f8c8Chris Lattner /*package*/ static long nativeConstructor() { 26818c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner Region_Delegate newDelegate = new Region_Delegate(); 2697cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner return sManager.addNewDelegate(newDelegate); 270cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } 2711ccae666f596d5aeca5c9942995763600b622062Chris Lattner 2721ccae666f596d5aeca5c9942995763600b622062Chris Lattner @LayoutlibDelegate 27383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands /*package*/ static void nativeDestructor(long native_region) { 2746a5b6d7633c96c72ca7d5f8ba0c855e4690ada04Chris Lattner sManager.removeJavaReferenceFor(native_region); 2756a5b6d7633c96c72ca7d5f8ba0c855e4690ada04Chris Lattner } 2766a5b6d7633c96c72ca7d5f8ba0c855e4690ada04Chris Lattner 2776a5b6d7633c96c72ca7d5f8ba0c855e4690ada04Chris Lattner @LayoutlibDelegate 27883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands /*package*/ static void nativeSetRegion(long native_dst, long native_src) { 279f06f35e30b4c4d7db304f717a3d4dc6595fbd078Chris Lattner Region_Delegate dstRegion = sManager.getDelegate(native_dst); 2802fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner if (dstRegion == null) { 2816a5b6d7633c96c72ca7d5f8ba0c855e4690ada04Chris Lattner return; 2821ccae666f596d5aeca5c9942995763600b622062Chris Lattner } 2830f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling 2840f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling Region_Delegate srcRegion = sManager.getDelegate(native_src); 2850f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling if (srcRegion == null) { 2860f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling return; 2870f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling } 2880f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling 2890f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling dstRegion.mArea.reset(); 2900f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling dstRegion.mArea.add(srcRegion.mArea); 2910f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling 2920f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling } 2930f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling 29434cd4a484e532cc463fd5a4bf59b88d13c5467c1Evan Cheng @LayoutlibDelegate 2950f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling /*package*/ static boolean nativeSetRect(long native_dst, 2960f8d9c04d9feef86cee35cf5fecfb348a6b3de50Bill Wendling int left, int top, int right, int bottom) { 297c3aae25116e66c177579b0b79182b09340b19753Chris Lattner Region_Delegate dstRegion = sManager.getDelegate(native_dst); 298cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if (dstRegion == null) { 29983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return true; 30083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 30183ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 30283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands dstRegion.mArea = new Area(new Rectangle2D.Float(left, top, right - left, bottom - top)); 303c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return dstRegion.mArea.getBounds().isEmpty() == false; 30483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 3052d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth 30683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands @LayoutlibDelegate 307f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner /*package*/ static boolean nativeSetPath(long native_dst, long native_path, long native_clip) { 308f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner Region_Delegate dstRegion = sManager.getDelegate(native_dst); 3096d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman if (dstRegion == null) { 3106d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman return true; 3116d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman } 3126d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman 31383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands Path_Delegate path = Path_Delegate.getDelegate(native_path); 3146d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman if (path == null) { 31583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return true; 3166d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman } 31708ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman 31808ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman dstRegion.mArea = new Area(path.getJavaShape()); 31983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 32008ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman Region_Delegate clip = sManager.getDelegate(native_clip); 32108ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman if (clip != null) { 32208ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman dstRegion.mArea.subtract(clip.getJavaArea()); 32308ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman } 32408ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman 32508ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman return dstRegion.mArea.getBounds().isEmpty() == false; 32608ce9769718354e6767d3815e4c255e7c9fc0a46Dan Gohman } 32767bb42aa5957bb24c0604cc08243cde9fe938e94Chris Lattner 3286d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman @LayoutlibDelegate 3295c0d6ed325417baa5d119af9c2b6790231d8565fRafael Espindola /*package*/ static boolean nativeGetBounds(long native_region, Rect rect) { 330707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman Region_Delegate region = sManager.getDelegate(native_region); 331707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman if (region == null) { 332707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman return true; 3331f13c686df75ddbbe15b208606ece4846d7479a8Dan Gohman } 3341f13c686df75ddbbe15b208606ece4846d7479a8Dan Gohman 3355c0d6ed325417baa5d119af9c2b6790231d8565fRafael Espindola Rectangle bounds = region.mArea.getBounds(); 336707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman if (bounds.isEmpty()) { 33755888274f21fc1a760679a51591a209758db8cbfDan Gohman rect.left = rect.top = rect.right = rect.bottom = 0; 3381f13c686df75ddbbe15b208606ece4846d7479a8Dan Gohman return false; 3391f13c686df75ddbbe15b208606ece4846d7479a8Dan Gohman } 3405c0d6ed325417baa5d119af9c2b6790231d8565fRafael Espindola 341707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman rect.left = bounds.x; 342707e0184233f27e0e9f9aee0309f2daab8cfe7f8Dan Gohman rect.top = bounds.y; 3431f13c686df75ddbbe15b208606ece4846d7479a8Dan Gohman rect.right = bounds.x + bounds.width; 3445c0d6ed325417baa5d119af9c2b6790231d8565fRafael Espindola rect.bottom = bounds.y + bounds.height; 3457cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner return true; 3467cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner } 3477cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner 34883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands @LayoutlibDelegate 3497cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner /*package*/ static boolean nativeGetBoundaryPath(long native_region, long native_path) { 3507cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner Region_Delegate region = sManager.getDelegate(native_region); 351b43e9c196542acc80c9e4643809661065710848fNate Begeman if (region == null) { 352b43e9c196542acc80c9e4643809661065710848fNate Begeman return false; 353b43e9c196542acc80c9e4643809661065710848fNate Begeman } 354b43e9c196542acc80c9e4643809661065710848fNate Begeman 355b43e9c196542acc80c9e4643809661065710848fNate Begeman Path_Delegate path = Path_Delegate.getDelegate(native_path); 35683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (path == null) { 357b43e9c196542acc80c9e4643809661065710848fNate Begeman return false; 358b43e9c196542acc80c9e4643809661065710848fNate Begeman } 3597cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner 3609373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman if (region.mArea.isEmpty()) { 3619373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman path.reset(); 3629373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman return false; 3639373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman } 3649373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman 3659373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman path.setPathIterator(region.mArea.getPathIterator(new AffineTransform())); 3662fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner return true; 3672fa6d3b1fcadbde90eaee0e8e89aebd81630b662Chris Lattner } 3689373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman 3697cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner @LayoutlibDelegate 370acc398c195a697795bff3245943d104eb19192b9Nate Begeman /*package*/ static boolean nativeOp(long native_dst, 371acc398c195a697795bff3245943d104eb19192b9Nate Begeman int left, int top, int right, int bottom, int op) { 37283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands Region_Delegate region = sManager.getDelegate(native_dst); 373acc398c195a697795bff3245943d104eb19192b9Nate Begeman if (region == null) { 3747cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return false; 375ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth } 37628873106309db515d58889a4c4fa3e0a92d1b60eMon P Wang 377ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth region.mArea = combineShapes(region.mArea, 378fd4418fc9b4725c44210c169c4d6500be468ca70Dan Gohman new Rectangle2D.Float(left, top, right - left, bottom - top), op); 37928873106309db515d58889a4c4fa3e0a92d1b60eMon P Wang 380ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth assert region.mArea != null; 381ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth if (region.mArea != null) { 38228873106309db515d58889a4c4fa3e0a92d1b60eMon P Wang region.mArea = new Area(); 383ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth } 384fd4418fc9b4725c44210c169c4d6500be468ca70Dan Gohman 38528873106309db515d58889a4c4fa3e0a92d1b60eMon P Wang return region.mArea.getBounds().isEmpty() == false; 386ab0b949e0e9de452f3b052b11634ab761e008b23Andrew Lenharth } 3874bdcb61af33399d4e01fdf3c47ca1f1f5356e370Duncan Sands 3884bdcb61af33399d4e01fdf3c47ca1f1f5356e370Duncan Sands @LayoutlibDelegate 3896d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman /*package*/ static boolean nativeOp(long native_dst, Rect rect, long native_region, int op) { 3904bdcb61af33399d4e01fdf3c47ca1f1f5356e370Duncan Sands Region_Delegate region = sManager.getDelegate(native_dst); 3914bdcb61af33399d4e01fdf3c47ca1f1f5356e370Duncan Sands if (region == null) { 392f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands return false; 393f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands } 3944bdcb61af33399d4e01fdf3c47ca1f1f5356e370Duncan Sands 3956d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman region.mArea = combineShapes(region.mArea, 396f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands new Rectangle2D.Float(rect.left, rect.top, rect.width(), rect.height()), op); 397f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands 398f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands assert region.mArea != null; 399f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands if (region.mArea != null) { 400f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands region.mArea = new Area(); 401f9516208e57364ab1e7d8748af1f59a2ea5fb572Duncan Sands } 402c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 403c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return region.mArea.getBounds().isEmpty() == false; 404cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } 40583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 40695c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb @LayoutlibDelegate 40795c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb /*package*/ static boolean nativeOp(long native_dst, 40883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands long native_region1, long native_region2, int op) { 40924446e253a17720f6462288255ab5ebd13b8491fEvan Cheng Region_Delegate dstRegion = sManager.getDelegate(native_dst); 41083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (dstRegion == null) { 41195c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb return true; 4128862ef148100070b7bf28beead3951464250c926Evan Cheng } 413144d8f09e139f691cafadbc17873943ba4c465f3Evan Cheng 414e10efce22502d1a1855d25baf1458660f4ba6f33Duncan Sands Region_Delegate region1 = sManager.getDelegate(native_region1); 41583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (region1 == null) { 416e10efce22502d1a1855d25baf1458660f4ba6f33Duncan Sands return false; 41783ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 418e10efce22502d1a1855d25baf1458660f4ba6f33Duncan Sands 4192d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth Region_Delegate region2 = sManager.getDelegate(native_region2); 420ad071e1cd1a4b880019f1b2e827ee81867815f82Evan Cheng if (region2 == null) { 421ad071e1cd1a4b880019f1b2e827ee81867815f82Evan Cheng return false; 422d41b30def3181bce4bf87e8bde664d15663165d0Jeff Cohen } 42395c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb 42495c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb dstRegion.mArea = combineShapes(region1.mArea, region2.mArea, op); 425d41b30def3181bce4bf87e8bde664d15663165d0Jeff Cohen 42683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands assert dstRegion.mArea != null; 42795c218a83ecf77590b9dc40c636720772d2b5cd7Christopher Lamb if (dstRegion.mArea != null) { 4289109fb1eb7d3341727353777c2a4282aa1a0c39aEvan Cheng dstRegion.mArea = new Area(); 429144d8f09e139f691cafadbc17873943ba4c465f3Evan Cheng } 430ad071e1cd1a4b880019f1b2e827ee81867815f82Evan Cheng 43169de1932b350d7cdfc0ed1f4198d6f78c7822a02Dan Gohman return dstRegion.mArea.getBounds().isEmpty() == false; 43269de1932b350d7cdfc0ed1f4198d6f78c7822a02Dan Gohman 43369de1932b350d7cdfc0ed1f4198d6f78c7822a02Dan Gohman } 43469de1932b350d7cdfc0ed1f4198d6f78c7822a02Dan Gohman 43569de1932b350d7cdfc0ed1f4198d6f78c7822a02Dan Gohman @LayoutlibDelegate 43636b5c1338a03453ba1c110b120269ca972fb65a3Dan Gohman /*package*/ static long nativeCreateFromParcel(Parcel p) { 437cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner // This is only called by Region.CREATOR (Parcelable.Creator<Region>), which is only 438b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner // used during aidl call so really this should not be called. 439b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 440b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner "AIDL is not suppored, and therefore Regions cannot be created from parcels.", 441b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner null /*data*/); 442b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner return 0; 443b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner } 444b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner 445b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner @LayoutlibDelegate 446b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner /*package*/ static boolean nativeWriteToParcel(long native_region, 447b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner Parcel p) { 448b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner // This is only called when sending a region through aidl, so really this should not 449b9aff659e82e4ec1a507e6e7fe7969379a431613Chris Lattner // be called. 4509b88361befd2a94202dc60ccfb3e31756916a9caChris Lattner Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 4519b88361befd2a94202dc60ccfb3e31756916a9caChris Lattner "AIDL is not suppored, and therefore Regions cannot be written to parcels.", 4526d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman null /*data*/); 4536d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman return false; 4541b95095857b78e12138c22e76c7936611c51355bChris Lattner } 4551b95095857b78e12138c22e76c7936611c51355bChris Lattner 4561b95095857b78e12138c22e76c7936611c51355bChris Lattner @LayoutlibDelegate 4571b95095857b78e12138c22e76c7936611c51355bChris Lattner /*package*/ static boolean nativeEquals(long native_r1, long native_r2) { 458eb19e40efbd3cae80c908a30cdf4d33450733c45Chris Lattner Region_Delegate region1 = sManager.getDelegate(native_r1); 459eb19e40efbd3cae80c908a30cdf4d33450733c45Chris Lattner if (region1 == null) { 46083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return false; 46183ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 46283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 46395514bae7309ffacfc0a79b267159dcfde2b7720Evan Cheng Region_Delegate region2 = sManager.getDelegate(native_r2); 46483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands if (region2 == null) { 46595514bae7309ffacfc0a79b267159dcfde2b7720Evan Cheng return false; 46683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 4676d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman 468cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman return region1.mArea.equals(region2.mArea); 469cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman } 4706d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman 471cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman @LayoutlibDelegate 4726d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman /*package*/ static String nativeToString(long native_region) { 473cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman Region_Delegate region = sManager.getDelegate(native_region); 474cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman if (region == null) { 47583ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return "not found"; 47683ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands } 47783ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands 47883ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands return region.mArea.toString(); 479cd920d9ecfcefff13c3619a32b58399cac2e3630Dan Gohman } 4806d9cdd56173fb915a9e3a8f0f6b5a8ed9bed1098Dan Gohman 481694481ee01bfe507c6e37de0dc1c64cff455eefdEvan Cheng // ---- Private delegate/helper methods ---- 482753c8f20e45f6e4198c7cf4096ecc8948a029e9cChris Lattner 4836ae46c4c8757237bca2b78b589c96c37015bc356Evan Cheng} 4846ae46c4c8757237bca2b78b589c96c37015bc356Evan Cheng