/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.replica.replicaisland; /** * This class manages drawable objects that have short lifetimes (one or two frames). It provides * type-specific allocator functions and a type-insensitive release function. This class manages * pools of objects so no actual allocations occur after bootstrap. */ public class DrawableFactory extends BaseObject { private final static int BITMAP_POOL_SIZE = 768; private DrawableBitmapPool mBitmapPool; private ScrollableBitmapPool mScrollableBitmapPool; private TiledBackgroundVertexGridPool mTiledBackgroundVertexGridPool; // This class wraps several object pools and provides a type-sensitive release function. public DrawableFactory() { super(); mBitmapPool = new DrawableBitmapPool(BITMAP_POOL_SIZE); mTiledBackgroundVertexGridPool = new TiledBackgroundVertexGridPool(); mScrollableBitmapPool = new ScrollableBitmapPool(); } @Override public void reset() { } public DrawableBitmap allocateDrawableBitmap() { return mBitmapPool.allocate(); } public TiledBackgroundVertexGrid allocateTiledBackgroundVertexGrid() { return mTiledBackgroundVertexGridPool.allocate(); } public ScrollableBitmap allocateScrollableBitmap() { return mScrollableBitmapPool.allocate(); } public void release(DrawableObject object) { ObjectPool pool = object.getParentPool(); if (pool != null) { pool.release(object); } // Objects with no pool weren't created by this factory. Ignore them. } private class DrawableBitmapPool extends TObjectPool { public DrawableBitmapPool(int size) { super(size); } @Override public void reset() { } @Override protected void fill() { int size = getSize(); for (int x = 0; x < size; x++) { DrawableBitmap entry = new DrawableBitmap(null, 0, 0); entry.setParentPool(this); getAvailable().add(entry); } } @Override public void release(Object entry) { ((DrawableBitmap)entry).reset(); super.release(entry); } @Override public DrawableBitmap allocate() { DrawableBitmap result = super.allocate(); ContextParameters params = sSystemRegistry.contextParameters; if (result != null && params != null) { result.setViewSize(params.gameWidth, params.gameHeight); } return result; } } private class ScrollableBitmapPool extends TObjectPool { public ScrollableBitmapPool() { super(); } @Override public void reset() { } @Override protected void fill() { int size = getSize(); for (int x = 0; x < size; x++) { ScrollableBitmap entry = new ScrollableBitmap(null, 0, 0); entry.setParentPool(this); getAvailable().add(entry); } } @Override public void release(Object entry) { ((ScrollableBitmap)entry).reset(); super.release(entry); } } private class TiledBackgroundVertexGridPool extends TObjectPool { public TiledBackgroundVertexGridPool() { super(); } @Override public void reset() { } @Override protected void fill() { int size = getSize(); for (int x = 0; x < size; x++) { TiledBackgroundVertexGrid entry = new TiledBackgroundVertexGrid(); entry.setParentPool(this); getAvailable().add(entry); } } @Override public void release(Object entry) { TiledBackgroundVertexGrid bg = (TiledBackgroundVertexGrid)entry; bg.reset(); super.release(entry); } } }