1b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet/* 2b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project 3b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 4b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 5b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * you may not use this file except in compliance with the License. 6b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * You may obtain a copy of the License at 7b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 8b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 9b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 10b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 11b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 12b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * See the License for the specific language governing permissions and 14b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * limitations under the License. 15b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet */ 16b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 17b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetpackage android.graphics; 18b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 19918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohetimport com.android.ide.common.rendering.api.LayoutLog; 20b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport com.android.layoutlib.bridge.Bridge; 21b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport com.android.layoutlib.bridge.impl.DelegateManager; 229a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 23b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 24b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport android.os.Parcel; 25b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 26b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Rectangle; 27b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Shape; 28b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.geom.AffineTransform; 29b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.geom.Area; 30b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.geom.Rectangle2D; 31b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 32b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet/** 33b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Region 34b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 35b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Region have been replaced 36b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * by calls to methods of the same name in this delegate class. 37b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 38b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 39b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 40b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * it and the original Region class. 41b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 42b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * This also serve as a base class for all Region delegate classes. 43b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 44b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * @see DelegateManager 45b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 46b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet */ 47b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetpublic class Region_Delegate { 48b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 49b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- delegate manager ---- 50b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet protected static final DelegateManager<Region_Delegate> sManager = 51f0a53435f14d23d9555fc46014352ee6a7baa647Xavier Ducrohet new DelegateManager<Region_Delegate>(Region_Delegate.class); 52b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 53b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- delegate helper data ---- 54b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 55b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- delegate data ---- 56b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet private Area mArea = new Area(); 57b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 58b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- Public Helper methods ---- 59b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 60b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public static Region_Delegate getDelegate(int nativeShader) { 61b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return sManager.getDelegate(nativeShader); 62b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 63b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 64b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public Area getJavaArea() { 65b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return mArea; 66b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 67b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 68b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /** 69b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * Combines two {@link Shape} into another one (actually an {@link Area}), according 70b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * to the given {@link Region.Op}. 71b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 72b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * If the Op is not one that combines two shapes, then this return null 73b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * 74a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet * @param shape1 the firt shape to combine which can be null if there's no original clip. 75b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * @param shape2 the 2nd shape to combine 76b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * @param regionOp the operande for the combine 77b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet * @return a new area or null. 78b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet */ 79b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public static Area combineShapes(Shape shape1, Shape shape2, int regionOp) { 80b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (regionOp == Region.Op.DIFFERENCE.nativeInt) { 81a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet // if shape1 is null (empty), then the result is null. 82a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet if (shape1 == null) { 83a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet return null; 84a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet } 85a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 86b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // result is always a new area. 87b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Area result = new Area(shape1); 88b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet result.subtract(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 89b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return result; 90b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 91b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else if (regionOp == Region.Op.INTERSECT.nativeInt) { 92a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet // if shape1 is null, then the result is simply shape2. 93a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet if (shape1 == null) { 94a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet return new Area(shape2); 95a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet } 96a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 97b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // result is always a new area. 98b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Area result = new Area(shape1); 99b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet result.intersect(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 100b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return result; 101b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 102b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else if (regionOp == Region.Op.UNION.nativeInt) { 103a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet // if shape1 is null, then the result is simply shape2. 104a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet if (shape1 == null) { 105a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet return new Area(shape2); 106a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet } 107a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 108b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // result is always a new area. 109b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Area result = new Area(shape1); 110b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet result.add(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 111b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return result; 112b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 113b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else if (regionOp == Region.Op.XOR.nativeInt) { 114a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet // if shape1 is null, then the result is simply shape2 115a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet if (shape1 == null) { 116a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet return new Area(shape2); 117a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet } 118a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 119b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // result is always a new area. 120b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Area result = new Area(shape1); 121b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet result.exclusiveOr(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 122a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet return result; 123b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 124b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else if (regionOp == Region.Op.REVERSE_DIFFERENCE.nativeInt) { 125b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // result is always a new area. 126b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Area result = new Area(shape2); 127a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 128a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet if (shape1 != null) { 129a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet result.subtract(shape1 instanceof Area ? (Area) shape1 : new Area(shape1)); 130a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet } 131a7cac5e0542779cadf0f5ccf71584e4b4425f7a6Xavier Ducrohet 132b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return result; 133b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 134b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 135b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return null; 136b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 137b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 138b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- native methods ---- 139b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 1409a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1410de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean isEmpty(Region thisRegion) { 1420de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1430de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1440de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return true; 1450de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1460de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1470de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isEmpty(); 1480de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1490de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1509a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1510de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean isRect(Region thisRegion) { 1520de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1530de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1540de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return true; 1550de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1560de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1570de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isRectangular(); 1580de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1590de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1609a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1610de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean isComplex(Region thisRegion) { 1620de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1630de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1640de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return true; 1650de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1660de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1670de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isSingular() == false; 1680de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1690de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1709a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1710de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean contains(Region thisRegion, int x, int y) { 1720de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1730de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1740de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return false; 1750de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1760de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1770de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.contains(x, y); 1780de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1790de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1809a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1810de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean quickContains(Region thisRegion, 1820de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int left, int top, int right, int bottom) { 1830de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1840de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1850de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return false; 1860de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1870de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1880de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isRectangular() && 1890de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet regionDelegate.mArea.contains(left, top, right - left, bottom - top); 1900de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1910de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 1929a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1930de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean quickReject(Region thisRegion, 1940de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int left, int top, int right, int bottom) { 1950de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 1960de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 1970de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return false; 1980de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 1990de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2000de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isEmpty() || 2010de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet regionDelegate.mArea.intersects(left, top, right - left, bottom - top) == false; 2020de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2030de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2049a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2050de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static boolean quickReject(Region thisRegion, Region rgn) { 2060de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 2070de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 2080de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return false; 2090de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2100de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2110de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate targetRegionDelegate = sManager.getDelegate(rgn.mNativeRegion); 2120de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (targetRegionDelegate == null) { 2130de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return false; 2140de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2150de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2160de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return regionDelegate.mArea.isEmpty() || 2170de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet regionDelegate.mArea.getBounds().intersects( 2180de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea.getBounds()) == false; 2190de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2200de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2210de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2229a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2230de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static void translate(Region thisRegion, int dx, int dy, Region dst) { 2240de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 2250de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 2260de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return; 2270de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2280de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2290de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 2300de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (targetRegionDelegate == null) { 2310de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return; 2320de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2330de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2340de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate.mArea.isEmpty()) { 2350de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea = new Area(); 2360de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } else { 2370de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 2380de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet AffineTransform mtx = new AffineTransform(); 2390de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet mtx.translate(dx, dy); 2400de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea.transform(mtx); 2410de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2420de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2430de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2449a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2450de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static void scale(Region thisRegion, float scale, Region dst) { 2460de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 2470de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate == null) { 2480de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return; 2490de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2500de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2510de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 2520de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (targetRegionDelegate == null) { 2530de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return; 2540de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2550de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2560de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (regionDelegate.mArea.isEmpty()) { 2570de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea = new Area(); 2580de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } else { 2590de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 2600de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet AffineTransform mtx = new AffineTransform(); 2610de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet mtx.scale(scale, scale); 2620de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet targetRegionDelegate.mArea.transform(mtx); 2630de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2640de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 2650de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 2669a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 267b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static int nativeConstructor() { 268b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate newDelegate = new Region_Delegate(); 269cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 270b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 271b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 2729a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 273b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static void nativeDestructor(int native_region) { 274cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet sManager.removeJavaReferenceFor(native_region); 275b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 276b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 2779a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 278b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeSetRegion(int native_dst, int native_src) { 279b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate dstRegion = sManager.getDelegate(native_dst); 280b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstRegion == null) { 281b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 282b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 283b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 284b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate srcRegion = sManager.getDelegate(native_src); 285b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (srcRegion == null) { 286b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 287b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 288b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 289b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea.reset(); 290b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea.add(srcRegion.mArea); 291b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 292b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 293b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 294b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 2959a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 296b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeSetRect(int native_dst, 297b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet int left, int top, int right, int bottom) { 298b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate dstRegion = sManager.getDelegate(native_dst); 299b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstRegion == null) { 300b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 301b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 302b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 303b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea = new Area(new Rectangle2D.Float(left, top, right - left, bottom - top)); 304b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return dstRegion.mArea.getBounds().isEmpty() == false; 305b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 306b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 3079a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 308b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeSetPath(int native_dst, int native_path, int native_clip) { 309b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate dstRegion = sManager.getDelegate(native_dst); 310b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstRegion == null) { 311b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 312b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 313b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 314b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate path = Path_Delegate.getDelegate(native_path); 315b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (path == null) { 316b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 317b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 318b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 319b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea = new Area(path.getJavaShape()); 320b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 321b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate clip = sManager.getDelegate(native_clip); 322b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (clip != null) { 323b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea.subtract(clip.getJavaArea()); 324b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 325b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 326b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return dstRegion.mArea.getBounds().isEmpty() == false; 327b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 328b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 3299a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 330b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeGetBounds(int native_region, Rect rect) { 331b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region = sManager.getDelegate(native_region); 332b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region == null) { 333b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 334b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 335b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 336b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Rectangle bounds = region.mArea.getBounds(); 337b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (bounds.isEmpty()) { 338b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet rect.left = rect.top = rect.right = rect.bottom = 0; 339b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 340b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 341b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 342b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet rect.left = bounds.x; 343b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet rect.top = bounds.y; 344b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet rect.right = bounds.x + bounds.width; 345b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet rect.bottom = bounds.y + bounds.height; 346b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 347b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 348b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 3499a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 350b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeGetBoundaryPath(int native_region, int native_path) { 351b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region = sManager.getDelegate(native_region); 352b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region == null) { 353b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 354b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 355b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 356b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate path = Path_Delegate.getDelegate(native_path); 357b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (path == null) { 358b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 359b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 360b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 361b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region.mArea.isEmpty()) { 362b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet path.reset(); 363b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 364b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 365b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 366b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet path.setPathIterator(region.mArea.getPathIterator(new AffineTransform())); 367b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 368b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 369b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 3709a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 371b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeOp(int native_dst, 372b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet int left, int top, int right, int bottom, int op) { 373b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region = sManager.getDelegate(native_dst); 374b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region == null) { 375b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 376b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 377b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 378b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet region.mArea = combineShapes(region.mArea, 379b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet new Rectangle2D.Float(left, top, right - left, bottom - top), op); 380b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 381b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert region.mArea != null; 382b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region.mArea != null) { 383b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet region.mArea = new Area(); 384b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 385b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 386b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return region.mArea.getBounds().isEmpty() == false; 387b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 388b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 3899a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 390b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeOp(int native_dst, Rect rect, int native_region, int op) { 391b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region = sManager.getDelegate(native_dst); 392b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region == null) { 393b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 394b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 395b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 396b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet region.mArea = combineShapes(region.mArea, 397b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet new Rectangle2D.Float(rect.left, rect.top, rect.width(), rect.height()), op); 398b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 399b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert region.mArea != null; 400b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region.mArea != null) { 401b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet region.mArea = new Area(); 402b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 403b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 404b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return region.mArea.getBounds().isEmpty() == false; 405b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 406b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 4079a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 408b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeOp(int native_dst, 409b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet int native_region1, int native_region2, int op) { 410b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate dstRegion = sManager.getDelegate(native_dst); 411b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstRegion == null) { 412b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 413b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 414b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 415b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region1 = sManager.getDelegate(native_region1); 416b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region1 == null) { 417b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 418b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 419b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 420b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region2 = sManager.getDelegate(native_region2); 421b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region2 == null) { 422b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 423b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 424b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 425b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea = combineShapes(region1.mArea, region2.mArea, op); 426b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 427b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert dstRegion.mArea != null; 428b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstRegion.mArea != null) { 429b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstRegion.mArea = new Area(); 430b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 431b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 432b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return dstRegion.mArea.getBounds().isEmpty() == false; 433b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 434b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 435b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 4369a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 437b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static int nativeCreateFromParcel(Parcel p) { 438b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // This is only called by Region.CREATOR (Parcelable.Creator<Region>), which is only 439b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // used during aidl call so really this should not be called. 440918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 44151a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet "AIDL is not suppored, and therefore Regions cannot be created from parcels.", 44251a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet null /*data*/); 443b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return 0; 444b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 445b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 4469a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 447b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeWriteToParcel(int native_region, 448b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Parcel p) { 449b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // This is only called when sending a region through aidl, so really this should not 450b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // be called. 451918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 45251a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet "AIDL is not suppored, and therefore Regions cannot be written to parcels.", 45351a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet null /*data*/); 454b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 455b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 456b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 4579a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 458b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet /*package*/ static boolean nativeEquals(int native_r1, int native_r2) { 459b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region1 = sManager.getDelegate(native_r1); 460b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region1 == null) { 461b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 462b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 463b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 464b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Region_Delegate region2 = sManager.getDelegate(native_r2); 465b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (region2 == null) { 466b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 467b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 468b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 469b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return region1.mArea.equals(region2.mArea); 470b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 471b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 4729a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4737d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet /*package*/ static String nativeToString(int native_region) { 4747d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet Region_Delegate region = sManager.getDelegate(native_region); 4757d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet if (region == null) { 4767d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet return "not found"; 4777d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet } 4787d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet 4797d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet return region.mArea.toString(); 4807d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet } 4817d7016e72431ad7ee595d857a19231c69efeb6deXavier Ducrohet 482b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // ---- Private delegate/helper methods ---- 483b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 484b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet} 485