/* * Copyright (C) 2009 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.cooliris.media; import java.util.HashMap; import javax.microedition.khronos.opengles.GL11; import com.cooliris.app.App; import com.cooliris.app.Res; public final class GridDrawables { // The display primitives. public static GridQuad sGrid; public static GridQuadFrame sFrame; public static GridQuad sTextGrid; public static GridQuad sSelectedGrid; public static GridQuad sVideoGrid; public static GridQuad sLocationGrid; public static GridQuad sSourceIconGrid; public static final GridQuad[] sFullscreenGrid = new GridQuad[3]; // All the resource Textures. private static final int TEXTURE_FRAME = Res.drawable.stack_frame; private static final int TEXTURE_GRID_FRAME = Res.drawable.grid_frame; private static final int TEXTURE_FRAME_FOCUS = Res.drawable.stack_frame_focus; private static final int TEXTURE_FRAME_PRESSED = Res.drawable.stack_frame_gold; private static final int TEXTURE_LOCATION = Res.drawable.btn_location_filter_unscaled; private static final int TEXTURE_VIDEO = Res.drawable.videooverlay; private static final int TEXTURE_CHECKMARK_ON = Res.drawable.grid_check_on; private static final int TEXTURE_CHECKMARK_OFF = Res.drawable.grid_check_off; private static final int TEXTURE_CAMERA_SMALL = Res.drawable.icon_camera_small_unscaled; private static final int TEXTURE_PICASA_SMALL = Res.drawable.icon_picasa_small_unscaled; public static final int[] TEXTURE_SPINNER = new int[8]; private static final int TEXTURE_TRANSPARENT = Res.drawable.transparent; private static final int TEXTURE_PLACEHOLDER = Res.drawable.grid_placeholder; public Texture mTextureFrame; public Texture mTextureGridFrame; public Texture mTextureFrameFocus; public Texture mTextureFramePressed; public Texture mTextureLocation; public Texture mTextureVideo; public Texture mTextureCheckmarkOn; public Texture mTextureCheckmarkOff; public Texture mTextureCameraSmall; public Texture mTexturePicasaSmall; public Texture[] mTextureSpinner = new Texture[8]; public Texture mTextureTransparent; public Texture mTexturePlaceholder; // The textures generated from strings. public static final HashMap<String, StringTexture> sStringTextureTable = new HashMap<String, StringTexture>(128); static { // We first populate the spinner textures. final int[] textureSpinner = TEXTURE_SPINNER; textureSpinner[0] = Res.drawable.ic_spinner1; textureSpinner[1] = Res.drawable.ic_spinner2; textureSpinner[2] = Res.drawable.ic_spinner3; textureSpinner[3] = Res.drawable.ic_spinner4; textureSpinner[4] = Res.drawable.ic_spinner5; textureSpinner[5] = Res.drawable.ic_spinner6; textureSpinner[6] = Res.drawable.ic_spinner7; textureSpinner[7] = Res.drawable.ic_spinner8; } public GridDrawables(final int itemWidth, final int itemHeight) { if (sGrid == null) { final float height = 1.0f; final float width = (float) (height * itemWidth) / (float) itemHeight; final float aspectRatio = (float) itemWidth / (float) itemHeight; final float oneByAspect = 1.0f / aspectRatio; // We create the grid quad. sGrid = GridQuad.createGridQuad(width, height, 0, 0, 1.0f, oneByAspect, true); // We create the quads used in fullscreen. sFullscreenGrid[0] = GridQuad.createGridQuad(width, height, 0, 0, 1.0f, oneByAspect, false); sFullscreenGrid[0].setDynamic(true); sFullscreenGrid[1] = GridQuad.createGridQuad(width, height, 0, 0, 1.0f, oneByAspect, false); sFullscreenGrid[1].setDynamic(true); sFullscreenGrid[2] = GridQuad.createGridQuad(width, height, 0, 0, 1.0f, oneByAspect, false); sFullscreenGrid[2].setDynamic(true); // We create supplementary quads for the checkmarks, video overlay // and location button float sizeOfSelectedIcon = 32 * App.PIXEL_DENSITY; // In pixels. sizeOfSelectedIcon /= itemHeight; float sizeOfLocationIcon = 52 * App.PIXEL_DENSITY; // In pixels. sizeOfLocationIcon /= itemHeight; float sizeOfSourceIcon = 76 * App.PIXEL_DENSITY; // In pixels. sizeOfSourceIcon /= itemHeight; sSelectedGrid = GridQuad.createGridQuad(sizeOfSelectedIcon, sizeOfSelectedIcon, -0.5f, 0.25f, 1.0f, 1.0f, false); sVideoGrid = GridQuad.createGridQuad(sizeOfSelectedIcon, sizeOfSelectedIcon, -0.08f, -0.09f, 1.0f, 1.0f, false); sLocationGrid = GridQuad.createGridQuad(sizeOfLocationIcon, sizeOfLocationIcon, 0, 0, 1.0f, 1.0f, false); sSourceIconGrid = GridQuad.createGridQuad(sizeOfSourceIcon, sizeOfSourceIcon, 0, 0, 1.0f, 1.0f, false); // We create the quad for the text label. float seedTextWidth = (App.PIXEL_DENSITY < 1.5f) ? 128.0f : 256.0f; float textWidth = (seedTextWidth / (float) itemWidth) * width; float textHeightPow2 = (App.PIXEL_DENSITY < 1.5f) ? 32.0f : 64.0f; float textHeight = (textHeightPow2 / (float) itemHeight) * height; float textOffsetY = 0.0f; sTextGrid = GridQuad.createGridQuad(textWidth, textHeight, 0, textOffsetY, 1.0f, 1.0f, false); // We finally create the frame around every grid item sFrame = GridQuadFrame.createFrame(width, height, itemWidth, itemHeight); } } public void onSurfaceCreated(RenderView view, GL11 gl) { // The grid quad. sGrid.freeHardwareBuffers(gl); sGrid.generateHardwareBuffers(gl); // The fullscreen quads. sFullscreenGrid[0].freeHardwareBuffers(gl); sFullscreenGrid[1].freeHardwareBuffers(gl); sFullscreenGrid[2].freeHardwareBuffers(gl); sFullscreenGrid[0].generateHardwareBuffers(gl); sFullscreenGrid[1].generateHardwareBuffers(gl); sFullscreenGrid[2].generateHardwareBuffers(gl); // Supplementary quads. sSelectedGrid.freeHardwareBuffers(gl); sVideoGrid.freeHardwareBuffers(gl); sLocationGrid.freeHardwareBuffers(gl); sSourceIconGrid.freeHardwareBuffers(gl); sSelectedGrid.generateHardwareBuffers(gl); sVideoGrid.generateHardwareBuffers(gl); sLocationGrid.generateHardwareBuffers(gl); sSourceIconGrid.generateHardwareBuffers(gl); // Text quads. sTextGrid.freeHardwareBuffers(gl); sTextGrid.generateHardwareBuffers(gl); // Frame mesh. sFrame.freeHardwareBuffers(gl); sFrame.generateHardwareBuffers(gl); // Clear the string table. sStringTextureTable.clear(); // Regenerate all the textures. mTextureFrame = view.getResource(TEXTURE_FRAME, false); mTextureGridFrame = view.getResource(TEXTURE_GRID_FRAME, false); mTextureFrameFocus = view.getResource(TEXTURE_FRAME_FOCUS, false); mTextureFramePressed = view.getResource(TEXTURE_FRAME_PRESSED, false); mTextureLocation = view.getResource(TEXTURE_LOCATION, false); mTextureVideo = view.getResource(TEXTURE_VIDEO, false); mTextureCheckmarkOn = view.getResource(TEXTURE_CHECKMARK_ON, false); mTextureCheckmarkOff = view.getResource(TEXTURE_CHECKMARK_OFF, false); mTextureCameraSmall = view.getResource(TEXTURE_CAMERA_SMALL, false); mTexturePicasaSmall = view.getResource(TEXTURE_PICASA_SMALL, false); mTextureTransparent = view.getResource(TEXTURE_TRANSPARENT, false); mTexturePlaceholder = view.getResource(TEXTURE_PLACEHOLDER, false); view.loadTexture(mTextureFrame); view.loadTexture(mTextureGridFrame); view.loadTexture(mTextureFrameFocus); view.loadTexture(mTextureFramePressed); mTextureSpinner[0] = view.getResource(Res.drawable.ic_spinner1); mTextureSpinner[1] = view.getResource(Res.drawable.ic_spinner2); mTextureSpinner[2] = view.getResource(Res.drawable.ic_spinner3); mTextureSpinner[3] = view.getResource(Res.drawable.ic_spinner4); mTextureSpinner[4] = view.getResource(Res.drawable.ic_spinner5); mTextureSpinner[5] = view.getResource(Res.drawable.ic_spinner6); mTextureSpinner[6] = view.getResource(Res.drawable.ic_spinner7); mTextureSpinner[7] = view.getResource(Res.drawable.ic_spinner8); } public int getIconForSet(MediaSet set, boolean scaled) { // We return the scaled version for HUD rendering and the unscaled // version for 3D rendering. if (scaled) { if (set == null) { return Res.drawable.icon_folder_small; } if (set.mPicasaAlbumId != Shared.INVALID) { return Res.drawable.icon_picasa_small; } else if (set.mId == LocalDataSource.CAMERA_BUCKET_ID) { return Res.drawable.icon_camera_small; } else { return Res.drawable.icon_folder_small; } } else { if (set == null) { return Res.drawable.icon_folder_small_unscaled; } if (set.mPicasaAlbumId != Shared.INVALID) { return Res.drawable.icon_picasa_small_unscaled; } else if (set.mId == LocalDataSource.CAMERA_BUCKET_ID) { return Res.drawable.icon_camera_small_unscaled; } else { return Res.drawable.icon_folder_small_unscaled; } } } }