Index: ui/android/java/src/org/chromium/ui/resources/sprites/CrushedSpriteResource.java |
diff --git a/ui/android/java/src/org/chromium/ui/resources/sprites/CrushedSpriteResource.java b/ui/android/java/src/org/chromium/ui/resources/sprites/CrushedSpriteResource.java |
deleted file mode 100644 |
index 493a899a0cd4f31a1a495989bb416bb006af2e3c..0000000000000000000000000000000000000000 |
--- a/ui/android/java/src/org/chromium/ui/resources/sprites/CrushedSpriteResource.java |
+++ /dev/null |
@@ -1,292 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.ui.resources.sprites; |
- |
-import android.content.res.Resources; |
-import android.graphics.Bitmap; |
-import android.graphics.BitmapFactory; |
-import android.graphics.Rect; |
-import android.util.JsonReader; |
- |
-import org.chromium.base.TraceEvent; |
-import org.chromium.base.VisibleForTesting; |
-import org.chromium.ui.resources.Resource; |
-import org.chromium.ui.resources.statics.NinePatchData; |
- |
-import java.io.IOException; |
-import java.io.InputStream; |
-import java.io.InputStreamReader; |
-import java.util.ArrayList; |
- |
-/** |
- * A {@link Resource} that provides an unscaled {@link Bitmap} and corresponding metadata for a |
- * crushed sprite. A crushed sprite animation is run by drawing rectangles from a bitmap to a |
- * canvas. Each frame in the animation draws its rectangles on top of the previous frame. |
- */ |
-public class CrushedSpriteResource implements Resource { |
- private static final Rect EMPTY_RECT = new Rect(); |
- |
- private Bitmap mBitmap; |
- private final Rect mBitmapSize = new Rect(); |
- private float mScaledSpriteWidth; |
- private float mScaledSpriteHeight; |
- private int mUnscaledSpriteWidth; |
- private int mUnscaledSpriteHeight; |
- private int[][] mRectangles; |
- |
- /** |
- * @param bitmapResId The id of the bitmap resource. |
- * @param metadataResId The id of the raw resource containing JSON metadata. |
- * @param resources A {@link Resources} instance to load assets from. |
- */ |
- public CrushedSpriteResource(int bitmapResId, int metadataResId, Resources resources) { |
- mBitmap = loadBitmap(bitmapResId, resources); |
- |
- if (mBitmap != null) { |
- mBitmapSize.set(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); |
- try { |
- TraceEvent.begin("CrushedSpriteResource.parseMetadata"); |
- parseMetadata(metadataResId, mBitmap.getDensity(), resources); |
- TraceEvent.end("CrushedSpriteResource.parseMetadata"); |
- } catch (IOException e) { |
- e.printStackTrace(); |
- } |
- } |
- } |
- |
- /** |
- * Convenience method for use in reloading an unscaled {@link Bitmap} without recreating the |
- * entire resource. |
- * @param bitmapResId The id of the bitmap resource for this crushed sprite. |
- * @param resources A {@link Resources} instance to load assets from. |
- */ |
- public static Bitmap loadBitmap(int bitmapResId, Resources resources) { |
- TraceEvent.begin("CrushedSpriteResource.loadBitmap"); |
- BitmapFactory.Options opts = new BitmapFactory.Options(); |
- opts.inScaled = false; |
- Bitmap bitmap = BitmapFactory.decodeResource(resources, bitmapResId, opts); |
- TraceEvent.end("CrushedSpriteResource.loadBitmap"); |
- return bitmap; |
- } |
- |
- @Override |
- public Bitmap getBitmap() { |
- return mBitmap; |
- } |
- |
- @Override |
- public Rect getBitmapSize() { |
- return mBitmapSize; |
- } |
- |
- @Override |
- public long createNativeResource() { |
- // TODO(khushalsagar): See if it makes sense to have the native CrushedSpriteResource |
- // inherit from Resource and create that here. |
- return 0; |
- } |
- |
- @Override |
- public NinePatchData getNinePatchData() { |
- return null; |
- } |
- |
- /** |
- * @return The scaled width of an individual sprite in px. |
- */ |
- public float getScaledSpriteWidth() { |
- return mScaledSpriteWidth; |
- } |
- |
- /** |
- * @return The scaled height of an individual sprite in px. |
- */ |
- public float getScaledSpriteHeight() { |
- return mScaledSpriteHeight; |
- } |
- |
- /** |
- * @return The unscaled width of an individual sprite in px. |
- */ |
- public int getUnscaledSpriteWidth() { |
- return mUnscaledSpriteWidth; |
- } |
- |
- /** |
- * @return The unscaled height of an individual sprite in px. |
- */ |
- public int getUnscaledSpriteHeight() { |
- return mUnscaledSpriteHeight; |
- } |
- |
- /** |
- * Each sprite frame is represented by a set of rectangles. Most frames consist of small |
- * rectangles representing the change from the previous frame. Each rectangle is represented |
- * using six consecutive values that specify the values to be used when creating the destination |
- * and source rectangles that get painted: |
- * 0: destination x 1: destination y 2: source x 3: source y 4: width 5: height |
- * |
- * @return The unscaled rectangles that need to be painted for each sprite frame in px. |
- */ |
- public int[][] getFrameRectangles() { |
- return mRectangles.clone(); |
- } |
- |
- /** |
- * Parses the raw JSON resource specified by {@code metadataResId}. The JSON is expected to be |
- * in this format: |
- * { |
- * "apiVersion": <version number (string)>, |
- * "scaledSpriteWidthDp": <scaled sprite width in dp (int)>, |
- * "scaledSpriteHeightDp": <scaled sprite width in dp (int)>, |
- * "densities": |
- * [ |
- * { |
- * "density": <density (int)>, |
- * "width": <unscaled sprite width in px (int)>, |
- * "height": <unscaled sprite height in px (int)>, |
- * "rectangles": [ |
- * [<list of ints for frame 0>], |
- * [<list of ints for frame 1>], |
- * ...... |
- * ] |
- * }, |
- * { |
- * "density": <density (int)>, |
- * "width": <unscaled sprite width in px (int)>, |
- * "height": <unscaled sprite height in px (int)>, |
- * "rectangles": [ |
- * [<list of ints for frame 0>], |
- * [<list of ints for frame 1>], |
- * ...... |
- * ] |
- * }, |
- * ...... |
- * ] |
- * } |
- * |
- * @param metadataResId The id of the raw resource containing JSON to parse. |
- * @param bitmapDensity The density of the unscaled {@link Bitmap} that was loaded. |
- * @param resources A {@link Resources} instance to load assets from. |
- * @throws IOException |
- */ |
- @VisibleForTesting |
- void parseMetadata(int metadataResId, int bitmapDensity, Resources resources) |
- throws IOException { |
- InputStream inputStream = resources.openRawResource(metadataResId); |
- JsonReader reader = new JsonReader(new InputStreamReader(inputStream)); |
- try { |
- reader.beginObject(); // Start reading top-level object. |
- |
- // Check apiVersion. |
- String name = reader.nextName(); |
- assert name.equals("apiVersion"); |
- String version = reader.nextString(); |
- assert version.equals("1.0"); |
- |
- // Get scaled sprite dimensions. |
- float dpToPx = resources.getDisplayMetrics().density; |
- name = reader.nextName(); |
- assert name.equals("scaledSpriteWidthDp"); |
- mScaledSpriteWidth = reader.nextInt() * dpToPx; |
- name = reader.nextName(); |
- assert name.equals("scaledSpriteHeightDp"); |
- mScaledSpriteHeight = reader.nextInt() * dpToPx; |
- |
- // Parse array of densities. |
- name = reader.nextName(); |
- assert name.equals("densities"); |
- reader.beginArray(); // Start reading array of densities. |
- while (reader.hasNext()) { |
- reader.beginObject(); // Start reading object for this density. |
- boolean foundDensity = parseMetadataForDensity(reader, bitmapDensity); |
- reader.endObject(); // Stop reading object for this density. |
- |
- if (foundDensity) break; |
- } |
- } finally { |
- reader.close(); |
- inputStream.close(); |
- } |
- } |
- |
- /** |
- * Reads a JSON object for a specific density and populates variables if the density matches |
- * {@code bitmapDensity}. |
- * |
- * @param reader The JsonReader reading the JSON metadata. |
- * @param bitmapDensity The density of the unscaled {@link Bitmap} that was loaded. |
- * @return True if the JSON object being parsed corresponds to bitmapDensity. |
- * @throws IOException |
- */ |
- private boolean parseMetadataForDensity(JsonReader reader, int bitmapDensity) |
- throws IOException { |
- String name = reader.nextName(); |
- assert name.equals("density"); |
- int density = reader.nextInt(); |
- |
- // If this is metadata for a density other than bitmapDensity, skip parsing the rest of the |
- // object. |
- if (density != bitmapDensity) { |
- reader.skipValue(); // Skip width name. |
- reader.skipValue(); // Skip width value. |
- reader.skipValue(); // Skip height name. |
- reader.skipValue(); // Skip height value. |
- reader.skipValue(); // Skip rectangles name. |
- reader.skipValue(); // Skip rectangles array. |
- return false; |
- } |
- |
- name = reader.nextName(); |
- assert name.equals("width"); |
- mUnscaledSpriteWidth = reader.nextInt(); |
- |
- name = reader.nextName(); |
- assert name.equals("height"); |
- mUnscaledSpriteHeight = reader.nextInt(); |
- |
- name = reader.nextName(); |
- assert name.equals("rectangles"); |
- |
- parseFrameRectangles(reader); |
- |
- return true; |
- } |
- |
- |
- /** |
- * Parses the 2D JSONArray of frame rectangles and populates {@code mRectangles}. |
- * @param reader The JsonReader reading the JSON metadata. |
- * @throws IOException |
- */ |
- private void parseFrameRectangles(JsonReader reader) throws IOException { |
- ArrayList<ArrayList<Integer>> allFrameRectangles = new ArrayList<ArrayList<Integer>>(); |
- int frameCount = 0; |
- |
- reader.beginArray(); // Start reading 2D rectangles array. |
- while (reader.hasNext()) { |
- ArrayList<Integer> frameRectangles = new ArrayList<Integer>(); |
- reader.beginArray(); // Start reading frame array. |
- while (reader.hasNext()) { |
- frameRectangles.add(reader.nextInt()); |
- } |
- reader.endArray(); // Stop reading frame array. |
- allFrameRectangles.add(frameRectangles); |
- frameCount++; |
- } |
- reader.endArray(); // Stop reading 2D rectangles array. |
- |
- // Convert 2D ArrayList to int[][]. |
- mRectangles = new int[frameCount][]; |
- for (int i = 0; i < frameCount; i++) { |
- ArrayList<Integer> frameRectangles = allFrameRectangles.get(i); |
- int[] frameRectanglesArray = new int[frameRectangles.size()]; |
- for (int j = 0; j < frameRectangles.size(); j++) { |
- frameRectanglesArray[j] = frameRectangles.get(j); |
- } |
- mRectangles[i] = frameRectanglesArray; |
- } |
- } |
-} |