1c3683b552f592d8039a466c663f7de8c8286e975Chris Craik/* 2c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Copyright (C) 2012 The Android Open Source Project 3c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * 4c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 5c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * you may not use this file except in compliance with the License. 6c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * You may obtain a copy of the License at 7c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * 8c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 9c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * 10c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Unless required by applicable law or agreed to in writing, software 11c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 12c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * See the License for the specific language governing permissions and 14c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * limitations under the License. 15c3683b552f592d8039a466c663f7de8c8286e975Chris Craik */ 16c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 17c3683b552f592d8039a466c663f7de8c8286e975Chris Craikpackage com.android.test.hwuicompare; 18c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 19c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport java.util.LinkedHashMap; 20c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport java.util.Map.Entry; 21c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 22c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Canvas; 23c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Paint; 24c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.RectF; 25c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.util.Log; 26c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 27c3683b552f592d8039a466c663f7de8c8286e975Chris Craikpublic abstract class DisplayModifier { 28c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 29c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // automated tests ignore any combination of operations that don't together return TOTAL_MASK 30c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int TOTAL_MASK = 0x1F; 31c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 32c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // if we're filling, ensure we're not also sweeping over stroke parameters 33c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int SWEEP_STROKE_WIDTH_BIT = 0x1 << 0; 34c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int SWEEP_STROKE_CAP_BIT = 0x1 << 1; 35c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int SWEEP_STROKE_JOIN_BIT = 0x1 << 2; 36c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 37c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int SWEEP_SHADER_BIT = 0x1 << 3; // only allow non-simple shaders to use rectangle drawing 38c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected final static int SWEEP_TRANSFORM_BIT = 0x1 << 4; // only sweep over specified transforms 39c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 40c3683b552f592d8039a466c663f7de8c8286e975Chris Craik abstract public void modifyDrawing(Paint paint, Canvas canvas); 41c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return 0x0; }; 42c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 43c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static final RectF gRect = new RectF(0, 0, 200, 175); 44c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static final float[] gPts = new float[] { 45c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 0, 100, 100, 0, 100, 200, 200, 100 46c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }; 47c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 4862a42c13a6e86255a0118688a60c9248030c95a9Chris Craik private static final int NUM_PARALLEL_LINES = 24; 4962a42c13a6e86255a0118688a60c9248030c95a9Chris Craik private static final float[] gTriPts = new float[] { 5062a42c13a6e86255a0118688a60c9248030c95a9Chris Craik 75, 0, 130, 130, 130, 130, 0, 130, 0, 130, 75, 0 5162a42c13a6e86255a0118688a60c9248030c95a9Chris Craik }; 5262a42c13a6e86255a0118688a60c9248030c95a9Chris Craik private static final float[] gLinePts = new float[NUM_PARALLEL_LINES * 8 + gTriPts.length]; 5362a42c13a6e86255a0118688a60c9248030c95a9Chris Craik static { 5462a42c13a6e86255a0118688a60c9248030c95a9Chris Craik int index; 5562a42c13a6e86255a0118688a60c9248030c95a9Chris Craik for (index = 0; index < gTriPts.length; index++) { 5662a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index] = gTriPts[index]; 5762a42c13a6e86255a0118688a60c9248030c95a9Chris Craik } 5862a42c13a6e86255a0118688a60c9248030c95a9Chris Craik float val = 0; 5962a42c13a6e86255a0118688a60c9248030c95a9Chris Craik for (int i = 0; i < NUM_PARALLEL_LINES; i++) { 6062a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 0] = 150; 6162a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 1] = val; 6262a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 2] = 300; 6362a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 3] = val; 6462a42c13a6e86255a0118688a60c9248030c95a9Chris Craik index += 4; 6562a42c13a6e86255a0118688a60c9248030c95a9Chris Craik val += 8 + (2.0f/NUM_PARALLEL_LINES); 6662a42c13a6e86255a0118688a60c9248030c95a9Chris Craik } 6762a42c13a6e86255a0118688a60c9248030c95a9Chris Craik val = 0; 6862a42c13a6e86255a0118688a60c9248030c95a9Chris Craik for (int i = 0; i < NUM_PARALLEL_LINES; i++) { 6962a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 0] = val; 7062a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 1] = 150; 7162a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 2] = val; 7262a42c13a6e86255a0118688a60c9248030c95a9Chris Craik gLinePts[index + 3] = 300; 7362a42c13a6e86255a0118688a60c9248030c95a9Chris Craik index += 4; 7462a42c13a6e86255a0118688a60c9248030c95a9Chris Craik val += 8 + (2.0f/NUM_PARALLEL_LINES); 7562a42c13a6e86255a0118688a60c9248030c95a9Chris Craik } 7662a42c13a6e86255a0118688a60c9248030c95a9Chris Craik }; 7762a42c13a6e86255a0118688a60c9248030c95a9Chris Craik 78c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @SuppressWarnings("serial") 79c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static final LinkedHashMap<String, LinkedHashMap<String, DisplayModifier>> gMaps = new LinkedHashMap<String, LinkedHashMap<String, DisplayModifier>>() { 80c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 81c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("aa", new LinkedHashMap<String, DisplayModifier>() { 82c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 83c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("true", new DisplayModifier() { 84c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 85c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 86c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setAntiAlias(true); 87c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 88c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 89c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("false", new DisplayModifier() { 90c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 91c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 92c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setAntiAlias(false); 93c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 94c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 95c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 96c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 97c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("style", new LinkedHashMap<String, DisplayModifier>() { 98c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 99c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("fill", new DisplayModifier() { 100c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 101c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 102c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStyle(Paint.Style.FILL); 103c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 104c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 105c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("stroke", new DisplayModifier() { 106c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 107c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 108c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStyle(Paint.Style.STROKE); 109c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 110c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 111c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_WIDTH_BIT; } 112c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 113c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("fillAndStroke", new DisplayModifier() { 114c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 115c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 116c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStyle(Paint.Style.FILL_AND_STROKE); 117c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 118c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 119c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 120c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_WIDTH_BIT; } 121c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 122c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 123c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 124c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("strokeWidth", new LinkedHashMap<String, DisplayModifier>() { 125c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 126c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("hair", new DisplayModifier() { 127c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 128c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 129c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeWidth(0); 130c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 131c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 132c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_WIDTH_BIT; } 133c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 134c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("0.3", new DisplayModifier() { 135c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 136c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 137c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeWidth(0.3f); 138c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 139c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 140c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("1", new DisplayModifier() { 141c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 142c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 143c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeWidth(1); 144c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 145c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 146c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("5", new DisplayModifier() { 147c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 148c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 149c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeWidth(5); 150c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 151c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 15265cd612face362d054a85d0f7e5881c59cd523beChris Craik put("30", new DisplayModifier() { 15365cd612face362d054a85d0f7e5881c59cd523beChris Craik @Override 15465cd612face362d054a85d0f7e5881c59cd523beChris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 15565cd612face362d054a85d0f7e5881c59cd523beChris Craik paint.setStrokeWidth(30); 15665cd612face362d054a85d0f7e5881c59cd523beChris Craik } 15765cd612face362d054a85d0f7e5881c59cd523beChris Craik }); 158c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 159c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 160c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("strokeCap", new LinkedHashMap<String, DisplayModifier>() { 161c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 162c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("butt", new DisplayModifier() { 163c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 164c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 165c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeCap(Paint.Cap.BUTT); 166c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 167c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 168c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_CAP_BIT; } 169c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 170c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("round", new DisplayModifier() { 171c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 172c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 173c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeCap(Paint.Cap.ROUND); 174c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 175c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 176c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("square", new DisplayModifier() { 177c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 178c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 179c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeCap(Paint.Cap.SQUARE); 180c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 181c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 182c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 183c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 184c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("strokeJoin", new LinkedHashMap<String, DisplayModifier>() { 185c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 186c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("bevel", new DisplayModifier() { 187c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 188c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 189c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeJoin(Paint.Join.BEVEL); 190c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 191c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 192c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_JOIN_BIT; } 193c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 194c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("round", new DisplayModifier() { 195c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 196c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 197c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeJoin(Paint.Join.ROUND); 198c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 199c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 200c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("miter", new DisplayModifier() { 201c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 202c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 203c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setStrokeJoin(Paint.Join.MITER); 204c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 205c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 206c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // TODO: add miter0, miter1 etc to test miter distances 207c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 208c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 209c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 210c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("transform", new LinkedHashMap<String, DisplayModifier>() { 211c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 212c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("noTransform", new DisplayModifier() { 213c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 214c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) {} 215c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 216c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_TRANSFORM_BIT; }; 217c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 218c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("rotate5", new DisplayModifier() { 219c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 220c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 221c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.rotate(5); 222c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 223c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 224c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("rotate45", new DisplayModifier() { 225c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 226c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 227c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.rotate(5); 228c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 229c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 230c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("rotate90", new DisplayModifier() { 231c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 232c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 233c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.rotate(90); 234c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.translate(0, -200); 235c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 236c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 237c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("scale2x2", new DisplayModifier() { 238c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 239c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 240c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.scale(2, 2); 241c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 242c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 243c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_TRANSFORM_BIT; }; 244c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 245c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("rot20scl1x4", new DisplayModifier() { 246c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 247c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 248c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.rotate(20); 249c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.scale(1, 4); 250c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 251c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 252c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_TRANSFORM_BIT; }; 253c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 254c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 255c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 256c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 257c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("shader", new LinkedHashMap<String, DisplayModifier>() { 258c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 259c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("noShader", new DisplayModifier() { 260c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 261c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) {} 262c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 263c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_SHADER_BIT; }; 264c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 265c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("repeatShader", new DisplayModifier() { 266c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 267c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 268c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mRepeatShader); 269c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 270c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 271c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_SHADER_BIT; }; 272c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 273c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("translatedShader", new DisplayModifier() { 274c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 275c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 276c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mTranslatedShader); 277c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 278c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 279c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("scaledShader", new DisplayModifier() { 280c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 281c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 282c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mScaledShader); 283c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 284c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 285c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("horGradient", new DisplayModifier() { 286c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 287c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 288c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mHorGradient); 289c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 290c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 291c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("diagGradient", new DisplayModifier() { 292c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 293c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 294c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mDiagGradient); 295c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 296c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 297c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_SHADER_BIT; }; 298c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 299c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("vertGradient", new DisplayModifier() { 300c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 301c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 302c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShader(ResourceModifiers.instance().mVertGradient); 303c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 304c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 305c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 306c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 307c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 308c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // FINAL MAP: DOES ACTUAL DRAWING 309c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("drawing", new LinkedHashMap<String, DisplayModifier>() { 310c3683b552f592d8039a466c663f7de8c8286e975Chris Craik { 311c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("roundRect", new DisplayModifier() { 312c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 313c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 314c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawRoundRect(gRect, 20, 20, paint); 315c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 316c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 317c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("rect", new DisplayModifier() { 318c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 319c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 320c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawRect(gRect, paint); 321c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 322c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 323c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_SHADER_BIT | SWEEP_STROKE_CAP_BIT; }; 324c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 325c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("circle", new DisplayModifier() { 326c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 327c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 328c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawCircle(100, 100, 75, paint); 329c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 330c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 331c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("oval", new DisplayModifier() { 332c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 333c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 334c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawOval(gRect, paint); 335c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 336c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 33762a42c13a6e86255a0118688a60c9248030c95a9Chris Craik put("lines", new DisplayModifier() { 338c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 339c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 340c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawLines(gLinePts, paint); 341c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 342c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 343c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_CAP_BIT; }; 344c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 345c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("plusPoints", new DisplayModifier() { 346c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 347c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 348c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawPoints(gPts, paint); 349c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 350c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 351c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("text", new DisplayModifier() { 352c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 353c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 354c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setTextSize(36); 355c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawText("TEXTTEST", 0, 50, paint); 356c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 357c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 358c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("shadowtext", new DisplayModifier() { 359c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 360c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 361c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setTextSize(36); 362c3683b552f592d8039a466c663f7de8c8286e975Chris Craik paint.setShadowLayer(3.0f, 0.0f, 3.0f, 0xffff00ff); 363c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawText("TEXTTEST", 0, 50, paint); 364c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 365c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 366c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("bitmapMesh", new DisplayModifier() { 367c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 368c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 369c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawBitmapMesh(ResourceModifiers.instance().mBitmap, 3, 3, 370c3683b552f592d8039a466c663f7de8c8286e975Chris Craik ResourceModifiers.instance().mBitmapVertices, 0, null, 0, null); 371c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 372c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 373c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("arc", new DisplayModifier() { 374c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 375c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 376c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawArc(gRect, 260, 285, false, paint); 377c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 378c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 379c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_CAP_BIT; }; 380c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 381c3683b552f592d8039a466c663f7de8c8286e975Chris Craik put("arcFromCenter", new DisplayModifier() { 382c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 383c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public void modifyDrawing(Paint paint, Canvas canvas) { 384c3683b552f592d8039a466c663f7de8c8286e975Chris Craik canvas.drawArc(gRect, 260, 285, true, paint); 385c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 386c3683b552f592d8039a466c663f7de8c8286e975Chris Craik @Override 387c3683b552f592d8039a466c663f7de8c8286e975Chris Craik protected int mask() { return SWEEP_STROKE_JOIN_BIT; }; 388c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 389c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 390c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }); 391c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // WARNING: DON'T PUT MORE MAPS BELOW THIS 392c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 393c3683b552f592d8039a466c663f7de8c8286e975Chris Craik }; 394c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 395c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static LinkedHashMap<String, DisplayModifier> getMapAtIndex(int index) { 396c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (LinkedHashMap<String, DisplayModifier> map : gMaps.values()) { 397c3683b552f592d8039a466c663f7de8c8286e975Chris Craik if (index == 0) { 398c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return map; 399c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 400c3683b552f592d8039a466c663f7de8c8286e975Chris Craik index--; 401c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 402c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return null; 403c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 404c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 405c3683b552f592d8039a466c663f7de8c8286e975Chris Craik // indices instead of iterators for easier bidirectional traversal 406c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static final int mIndices[] = new int[gMaps.size()]; 407c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static final String[] mLastAppliedModifications = new String[gMaps.size()]; 408c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 409c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static boolean stepInternal(boolean forward) { 410c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int modifierMapIndex = gMaps.size() - 1; 411c3683b552f592d8039a466c663f7de8c8286e975Chris Craik while (modifierMapIndex >= 0) { 412c3683b552f592d8039a466c663f7de8c8286e975Chris Craik LinkedHashMap<String, DisplayModifier> map = getMapAtIndex(modifierMapIndex); 413c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mIndices[modifierMapIndex] += (forward ? 1 : -1); 414c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 415c3683b552f592d8039a466c663f7de8c8286e975Chris Craik if (mIndices[modifierMapIndex] >= 0 && mIndices[modifierMapIndex] < map.size()) { 416c3683b552f592d8039a466c663f7de8c8286e975Chris Craik break; 417c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 418c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 419c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mIndices[modifierMapIndex] = (forward ? 0 : map.size() - 1); 420c3683b552f592d8039a466c663f7de8c8286e975Chris Craik modifierMapIndex--; 421c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 422c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return modifierMapIndex < 0; // true if resetting 423c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 424c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 425c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static boolean step() { 426c3683b552f592d8039a466c663f7de8c8286e975Chris Craik boolean ret = false; 427c3683b552f592d8039a466c663f7de8c8286e975Chris Craik do { 428c3683b552f592d8039a466c663f7de8c8286e975Chris Craik ret |= stepInternal(true); 429c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } while (!checkModificationStateMask()); 430c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return ret; 431c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 432c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 433c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static boolean stepBack() { 434c3683b552f592d8039a466c663f7de8c8286e975Chris Craik boolean ret = false; 435c3683b552f592d8039a466c663f7de8c8286e975Chris Craik do { 436c3683b552f592d8039a466c663f7de8c8286e975Chris Craik ret |= stepInternal(false); 437c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } while (!checkModificationStateMask()); 438c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return ret; 439c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 440c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 441c3683b552f592d8039a466c663f7de8c8286e975Chris Craik private static boolean checkModificationStateMask() { 442c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int operatorMask = 0x0; 443c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int mapIndex = 0; 444c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (LinkedHashMap<String, DisplayModifier> map : gMaps.values()) { 445c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int displayModifierIndex = mIndices[mapIndex]; 446c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (Entry<String, DisplayModifier> modifierEntry : map.entrySet()) { 447c3683b552f592d8039a466c663f7de8c8286e975Chris Craik if (displayModifierIndex == 0) { 448c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mLastAppliedModifications[mapIndex] = modifierEntry.getKey(); 449c3683b552f592d8039a466c663f7de8c8286e975Chris Craik operatorMask |= modifierEntry.getValue().mask(); 450c3683b552f592d8039a466c663f7de8c8286e975Chris Craik break; 451c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 452c3683b552f592d8039a466c663f7de8c8286e975Chris Craik displayModifierIndex--; 453c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 454c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mapIndex++; 455c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 456c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return operatorMask == TOTAL_MASK; 457c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 458c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 459c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static void apply(Paint paint, Canvas canvas) { 460c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int mapIndex = 0; 461c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (LinkedHashMap<String, DisplayModifier> map : gMaps.values()) { 462c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int displayModifierIndex = mIndices[mapIndex]; 463c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (Entry<String, DisplayModifier> modifierEntry : map.entrySet()) { 464c3683b552f592d8039a466c663f7de8c8286e975Chris Craik if (displayModifierIndex == 0) { 465c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mLastAppliedModifications[mapIndex] = modifierEntry.getKey(); 466c3683b552f592d8039a466c663f7de8c8286e975Chris Craik modifierEntry.getValue().modifyDrawing(paint, canvas); 467c3683b552f592d8039a466c663f7de8c8286e975Chris Craik break; 468c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 469c3683b552f592d8039a466c663f7de8c8286e975Chris Craik displayModifierIndex--; 470c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 471c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mapIndex++; 472c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 473c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 474c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 475c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static String[] getLastAppliedModifications() { 476c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return mLastAppliedModifications.clone(); 477c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 478c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 479c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static String[][] getStrings() { 480c3683b552f592d8039a466c663f7de8c8286e975Chris Craik String[][] keys = new String[gMaps.size()][]; 481c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 482c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int i = 0; 483c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (LinkedHashMap<String, DisplayModifier> map : gMaps.values()) { 484c3683b552f592d8039a466c663f7de8c8286e975Chris Craik keys[i] = new String[map.size()]; 485c3683b552f592d8039a466c663f7de8c8286e975Chris Craik int j = 0; 486c3683b552f592d8039a466c663f7de8c8286e975Chris Craik for (String key : map.keySet()) { 487c3683b552f592d8039a466c663f7de8c8286e975Chris Craik keys[i][j++] = key; 488c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 489c3683b552f592d8039a466c663f7de8c8286e975Chris Craik i++; 490c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 491c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 492c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return keys; 493c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 494c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 495c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static void setIndex(int mapIndex, int newIndexValue) { 496c3683b552f592d8039a466c663f7de8c8286e975Chris Craik mIndices[mapIndex] = newIndexValue; 497c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 498c3683b552f592d8039a466c663f7de8c8286e975Chris Craik 499c3683b552f592d8039a466c663f7de8c8286e975Chris Craik public static int[] getIndices() { 500c3683b552f592d8039a466c663f7de8c8286e975Chris Craik return mIndices; 501c3683b552f592d8039a466c663f7de8c8286e975Chris Craik } 502c3683b552f592d8039a466c663f7de8c8286e975Chris Craik} 503