1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/* 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2010 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License. 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License. 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage android.graphics; 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.LayoutLog; 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.Bridge; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.DelegateManager; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.Parcel; 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.awt.Rectangle; 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.awt.Shape; 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.awt.geom.AffineTransform; 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.awt.geom.Area; 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.awt.geom.Rectangle2D; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/** 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Delegate implementing the native methods of android.graphics.Region 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Through the layoutlib_create tool, the original native methods of Region have been replaced 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * by calls to methods of the same name in this delegate class. 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * This class behaves like the original native implementation, but in Java, keeping previously 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * native data into its own objects and mapping them to int that are sent back and forth between 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * it and the original Region class. 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * This also serve as a base class for all Region delegate classes. 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @see DelegateManager 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class Region_Delegate { 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- delegate manager ---- 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski protected static final DelegateManager<Region_Delegate> sManager = 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski new DelegateManager<Region_Delegate>(Region_Delegate.class); 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- delegate helper data ---- 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- delegate data ---- 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private Area mArea = new Area(); 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- Public Helper methods ---- 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 6088a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath public static Region_Delegate getDelegate(long nativeShader) { 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return sManager.getDelegate(nativeShader); 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Area getJavaArea() { 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mArea; 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Combines two {@link Shape} into another one (actually an {@link Area}), according 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * to the given {@link Region.Op}. 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * If the Op is not one that combines two shapes, then this return null 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param shape1 the firt shape to combine which can be null if there's no original clip. 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param shape2 the 2nd shape to combine 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param regionOp the operande for the combine 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @return a new area or null. 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public static Area combineShapes(Shape shape1, Shape shape2, int regionOp) { 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionOp == Region.Op.DIFFERENCE.nativeInt) { 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if shape1 is null (empty), then the result is null. 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (shape1 == null) { 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // result is always a new area. 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Area result = new Area(shape1); 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result.subtract(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (regionOp == Region.Op.INTERSECT.nativeInt) { 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if shape1 is null, then the result is simply shape2. 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (shape1 == null) { 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new Area(shape2); 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // result is always a new area. 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Area result = new Area(shape1); 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result.intersect(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (regionOp == Region.Op.UNION.nativeInt) { 103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if shape1 is null, then the result is simply shape2. 104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (shape1 == null) { 105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new Area(shape2); 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // result is always a new area. 109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Area result = new Area(shape1); 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result.add(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (regionOp == Region.Op.XOR.nativeInt) { 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if shape1 is null, then the result is simply shape2 115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (shape1 == null) { 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new Area(shape2); 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // result is always a new area. 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Area result = new Area(shape1); 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result.exclusiveOr(shape2 instanceof Area ? (Area) shape2 : new Area(shape2)); 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (regionOp == Region.Op.REVERSE_DIFFERENCE.nativeInt) { 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // result is always a new area. 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Area result = new Area(shape2); 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (shape1 != null) { 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski result.subtract(shape1 instanceof Area ? (Area) shape1 : new Area(shape1)); 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return result; 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- native methods ---- 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean isEmpty(Region thisRegion) { 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isEmpty(); 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean isRect(Region thisRegion) { 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isRectangular(); 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean isComplex(Region thisRegion) { 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isSingular() == false; 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean contains(Region thisRegion, int x, int y) { 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.contains(x, y); 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean quickContains(Region thisRegion, 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int left, int top, int right, int bottom) { 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isRectangular() && 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski regionDelegate.mArea.contains(left, top, right - left, bottom - top); 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean quickReject(Region thisRegion, 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int left, int top, int right, int bottom) { 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isEmpty() || 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski regionDelegate.mArea.intersects(left, top, right - left, bottom - top) == false; 202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static boolean quickReject(Region thisRegion, Region rgn) { 206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate targetRegionDelegate = sManager.getDelegate(rgn.mNativeRegion); 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (targetRegionDelegate == null) { 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return regionDelegate.mArea.isEmpty() || 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski regionDelegate.mArea.getBounds().intersects( 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea.getBounds()) == false; 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static void translate(Region thisRegion, int dx, int dy, Region dst) { 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (targetRegionDelegate == null) { 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate.mArea.isEmpty()) { 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea = new Area(); 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski AffineTransform mtx = new AffineTransform(); 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mtx.translate(dx, dy); 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea.transform(mtx); 241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /*package*/ static void scale(Region thisRegion, float scale, Region dst) { 246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); 247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate == null) { 248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (targetRegionDelegate == null) { 253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (regionDelegate.mArea.isEmpty()) { 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea = new Area(); 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea = new Area(regionDelegate.mArea); 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski AffineTransform mtx = new AffineTransform(); 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mtx.scale(scale, scale); 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski targetRegionDelegate.mArea.transform(mtx); 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 26788a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static long nativeConstructor() { 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate newDelegate = new Region_Delegate(); 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return sManager.addNewDelegate(newDelegate); 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 27388a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static void nativeDestructor(long native_region) { 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sManager.removeJavaReferenceFor(native_region); 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 2789be03c4e980d3058aeb3fd730da5f7d4a4a4f8a8Deepanshu Gupta /*package*/ static void nativeSetRegion(long native_dst, long native_src) { 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate dstRegion = sManager.getDelegate(native_dst); 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (dstRegion == null) { 2819be03c4e980d3058aeb3fd730da5f7d4a4a4f8a8Deepanshu Gupta return; 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate srcRegion = sManager.getDelegate(native_src); 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (srcRegion == null) { 2869be03c4e980d3058aeb3fd730da5f7d4a4a4f8a8Deepanshu Gupta return; 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea.reset(); 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea.add(srcRegion.mArea); 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 29588a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeSetRect(long native_dst, 296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int left, int top, int right, int bottom) { 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate dstRegion = sManager.getDelegate(native_dst); 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (dstRegion == null) { 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea = new Area(new Rectangle2D.Float(left, top, right - left, bottom - top)); 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return dstRegion.mArea.getBounds().isEmpty() == false; 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 30788a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeSetPath(long native_dst, long native_path, long native_clip) { 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate dstRegion = sManager.getDelegate(native_dst); 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (dstRegion == null) { 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Path_Delegate path = Path_Delegate.getDelegate(native_path); 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (path == null) { 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea = new Area(path.getJavaShape()); 319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate clip = sManager.getDelegate(native_clip); 321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (clip != null) { 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea.subtract(clip.getJavaArea()); 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return dstRegion.mArea.getBounds().isEmpty() == false; 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 32988a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeGetBounds(long native_region, Rect rect) { 330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region = sManager.getDelegate(native_region); 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region == null) { 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Rectangle bounds = region.mArea.getBounds(); 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (bounds.isEmpty()) { 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski rect.left = rect.top = rect.right = rect.bottom = 0; 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski rect.left = bounds.x; 342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski rect.top = bounds.y; 343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski rect.right = bounds.x + bounds.width; 344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski rect.bottom = bounds.y + bounds.height; 345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 34988a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeGetBoundaryPath(long native_region, long native_path) { 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region = sManager.getDelegate(native_region); 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region == null) { 352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Path_Delegate path = Path_Delegate.getDelegate(native_path); 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (path == null) { 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region.mArea.isEmpty()) { 361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski path.reset(); 362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski path.setPathIterator(region.mArea.getPathIterator(new AffineTransform())); 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 37088a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeOp(long native_dst, 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int left, int top, int right, int bottom, int op) { 372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region = sManager.getDelegate(native_dst); 373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region == null) { 374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski region.mArea = combineShapes(region.mArea, 378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski new Rectangle2D.Float(left, top, right - left, bottom - top), op); 379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assert region.mArea != null; 381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region.mArea != null) { 382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski region.mArea = new Area(); 383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return region.mArea.getBounds().isEmpty() == false; 386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 38988a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeOp(long native_dst, Rect rect, long native_region, int op) { 390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region = sManager.getDelegate(native_dst); 391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region == null) { 392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski region.mArea = combineShapes(region.mArea, 396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski new Rectangle2D.Float(rect.left, rect.top, rect.width(), rect.height()), op); 397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assert region.mArea != null; 399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region.mArea != null) { 400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski region.mArea = new Area(); 401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return region.mArea.getBounds().isEmpty() == false; 404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 40788a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeOp(long native_dst, 40888a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath long native_region1, long native_region2, int op) { 409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate dstRegion = sManager.getDelegate(native_dst); 410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (dstRegion == null) { 411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region1 = sManager.getDelegate(native_region1); 415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region1 == null) { 416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region2 = sManager.getDelegate(native_region2); 420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region2 == null) { 421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea = combineShapes(region1.mArea, region2.mArea, op); 425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assert dstRegion.mArea != null; 427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (dstRegion.mArea != null) { 428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski dstRegion.mArea = new Area(); 429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return dstRegion.mArea.getBounds().isEmpty() == false; 432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 43688a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static long nativeCreateFromParcel(Parcel p) { 437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // This is only called by Region.CREATOR (Parcelable.Creator<Region>), which is only 438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // used during aidl call so really this should not be called. 439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "AIDL is not suppored, and therefore Regions cannot be created from parcels.", 441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski null /*data*/); 442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 44688a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeWriteToParcel(long native_region, 447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Parcel p) { 448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // This is only called when sending a region through aidl, so really this should not 449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // be called. 450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, 451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "AIDL is not suppored, and therefore Regions cannot be written to parcels.", 452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski null /*data*/); 453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 45788a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static boolean nativeEquals(long native_r1, long native_r2) { 458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region1 = sManager.getDelegate(native_r1); 459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region1 == null) { 460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region2 = sManager.getDelegate(native_r2); 464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region2 == null) { 465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return region1.mArea.equals(region2.mArea); 469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @LayoutlibDelegate 47288a8364c386c694f7ad56662ef89713dbf7c9d63Narayan Kamath /*package*/ static String nativeToString(long native_region) { 473282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Region_Delegate region = sManager.getDelegate(native_region); 474282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (region == null) { 475282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return "not found"; 476282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 477282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 478282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return region.mArea.toString(); 479282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 480282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 481282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ---- Private delegate/helper methods ---- 482282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 483282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 484