1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 package com.replica.replicaisland; 19 20 /** 21 * This class manages drawable objects that have short lifetimes (one or two frames). It provides 22 * type-specific allocator functions and a type-insensitive release function. This class manages 23 * pools of objects so no actual allocations occur after bootstrap. 24 */ 25 public class DrawableFactory extends BaseObject { 26 private final static int BITMAP_POOL_SIZE = 768; 27 28 private DrawableBitmapPool mBitmapPool; 29 private ScrollableBitmapPool mScrollableBitmapPool; 30 private TiledBackgroundVertexGridPool mTiledBackgroundVertexGridPool; 31 32 // This class wraps several object pools and provides a type-sensitive release function. 33 public DrawableFactory() { 34 super(); 35 mBitmapPool = new DrawableBitmapPool(BITMAP_POOL_SIZE); 36 mTiledBackgroundVertexGridPool = new TiledBackgroundVertexGridPool(); 37 mScrollableBitmapPool = new ScrollableBitmapPool(); 38 } 39 40 @Override 41 public void reset() { 42 } 43 44 public DrawableBitmap allocateDrawableBitmap() { 45 return mBitmapPool.allocate(); 46 } 47 48 public TiledBackgroundVertexGrid allocateTiledBackgroundVertexGrid() { 49 return mTiledBackgroundVertexGridPool.allocate(); 50 } 51 52 public ScrollableBitmap allocateScrollableBitmap() { 53 return mScrollableBitmapPool.allocate(); 54 } 55 56 public void release(DrawableObject object) { 57 ObjectPool pool = object.getParentPool(); 58 if (pool != null) { 59 pool.release(object); 60 } 61 // Objects with no pool weren't created by this factory. Ignore them. 62 } 63 64 private class DrawableBitmapPool extends TObjectPool<DrawableBitmap> { 65 66 public DrawableBitmapPool(int size) { 67 super(size); 68 } 69 70 @Override 71 public void reset() { 72 } 73 74 @Override 75 protected void fill() { 76 int size = getSize(); 77 for (int x = 0; x < size; x++) { 78 DrawableBitmap entry = new DrawableBitmap(null, 0, 0); 79 entry.setParentPool(this); 80 getAvailable().add(entry); 81 } 82 } 83 84 @Override 85 public void release(Object entry) { 86 ((DrawableBitmap)entry).reset(); 87 super.release(entry); 88 } 89 90 @Override 91 public DrawableBitmap allocate() { 92 DrawableBitmap result = super.allocate(); 93 ContextParameters params = sSystemRegistry.contextParameters; 94 if (result != null && params != null) { 95 result.setViewSize(params.gameWidth, params.gameHeight); 96 } 97 return result; 98 } 99 } 100 101 private class ScrollableBitmapPool extends TObjectPool<ScrollableBitmap> { 102 103 public ScrollableBitmapPool() { 104 super(); 105 } 106 107 @Override 108 public void reset() { 109 } 110 111 @Override 112 protected void fill() { 113 int size = getSize(); 114 for (int x = 0; x < size; x++) { 115 ScrollableBitmap entry = new ScrollableBitmap(null, 0, 0); 116 entry.setParentPool(this); 117 getAvailable().add(entry); 118 } 119 } 120 121 @Override 122 public void release(Object entry) { 123 ((ScrollableBitmap)entry).reset(); 124 super.release(entry); 125 } 126 127 128 } 129 130 private class TiledBackgroundVertexGridPool extends TObjectPool<TiledBackgroundVertexGrid> { 131 132 public TiledBackgroundVertexGridPool() { 133 super(); 134 } 135 136 @Override 137 public void reset() { 138 } 139 140 @Override 141 protected void fill() { 142 int size = getSize(); 143 for (int x = 0; x < size; x++) { 144 TiledBackgroundVertexGrid entry = new TiledBackgroundVertexGrid(); 145 entry.setParentPool(this); 146 getAvailable().add(entry); 147 } 148 } 149 150 @Override 151 public void release(Object entry) { 152 TiledBackgroundVertexGrid bg = (TiledBackgroundVertexGrid)entry; 153 bg.reset(); 154 super.release(entry); 155 } 156 157 } 158 } 159