Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2012 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 package com.android.gallery3d.ui;
     18 
     19 import android.content.Context;
     20 import android.graphics.Rect;
     21 
     22 import com.android.gallery3d.R;
     23 import com.android.gallery3d.glrenderer.FadeOutTexture;
     24 import com.android.gallery3d.glrenderer.GLCanvas;
     25 import com.android.gallery3d.glrenderer.NinePatchTexture;
     26 import com.android.gallery3d.glrenderer.ResourceTexture;
     27 import com.android.gallery3d.glrenderer.Texture;
     28 
     29 public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
     30 
     31     private final ResourceTexture mVideoOverlay;
     32     private final ResourceTexture mVideoPlayIcon;
     33     private final ResourceTexture mPanoramaIcon;
     34     private final NinePatchTexture mFramePressed;
     35     private final NinePatchTexture mFrameSelected;
     36     private FadeOutTexture mFramePressedUp;
     37 
     38     protected AbstractSlotRenderer(Context context) {
     39         mVideoOverlay = new ResourceTexture(context, R.drawable.ic_video_thumb);
     40         mVideoPlayIcon = new ResourceTexture(context, R.drawable.ic_gallery_play);
     41         mPanoramaIcon = new ResourceTexture(context, R.drawable.ic_360pano_holo_light);
     42         mFramePressed = new NinePatchTexture(context, R.drawable.grid_pressed);
     43         mFrameSelected = new NinePatchTexture(context, R.drawable.grid_selected);
     44     }
     45 
     46     protected void drawContent(GLCanvas canvas,
     47             Texture content, int width, int height, int rotation) {
     48         canvas.save(GLCanvas.SAVE_FLAG_MATRIX);
     49 
     50         // The content is always rendered in to the largest square that fits
     51         // inside the slot, aligned to the top of the slot.
     52         width = height = Math.min(width, height);
     53         if (rotation != 0) {
     54             canvas.translate(width / 2, height / 2);
     55             canvas.rotate(rotation, 0, 0, 1);
     56             canvas.translate(-width / 2, -height / 2);
     57         }
     58 
     59         // Fit the content into the box
     60         float scale = Math.min(
     61                 (float) width / content.getWidth(),
     62                 (float) height / content.getHeight());
     63         canvas.scale(scale, scale, 1);
     64         content.draw(canvas, 0, 0);
     65 
     66         canvas.restore();
     67     }
     68 
     69     protected void drawVideoOverlay(GLCanvas canvas, int width, int height) {
     70         // Scale the video overlay to the height of the thumbnail and put it
     71         // on the left side.
     72         ResourceTexture v = mVideoOverlay;
     73         float scale = (float) height / v.getHeight();
     74         int w = Math.round(scale * v.getWidth());
     75         int h = Math.round(scale * v.getHeight());
     76         v.draw(canvas, 0, 0, w, h);
     77 
     78         int s = Math.min(width, height) / 6;
     79         mVideoPlayIcon.draw(canvas, (width - s) / 2, (height - s) / 2, s, s);
     80     }
     81 
     82     protected void drawPanoramaIcon(GLCanvas canvas, int width, int height) {
     83         int iconSize = Math.min(width, height) / 6;
     84         mPanoramaIcon.draw(canvas, (width - iconSize) / 2, (height - iconSize) / 2,
     85                 iconSize, iconSize);
     86     }
     87 
     88     protected boolean isPressedUpFrameFinished() {
     89         if (mFramePressedUp != null) {
     90             if (mFramePressedUp.isAnimating()) {
     91                 return false;
     92             } else {
     93                 mFramePressedUp = null;
     94             }
     95         }
     96         return true;
     97     }
     98 
     99     protected void drawPressedUpFrame(GLCanvas canvas, int width, int height) {
    100         if (mFramePressedUp == null) {
    101             mFramePressedUp = new FadeOutTexture(mFramePressed);
    102         }
    103         drawFrame(canvas, mFramePressed.getPaddings(), mFramePressedUp, 0, 0, width, height);
    104     }
    105 
    106     protected void drawPressedFrame(GLCanvas canvas, int width, int height) {
    107         drawFrame(canvas, mFramePressed.getPaddings(), mFramePressed, 0, 0, width, height);
    108     }
    109 
    110     protected void drawSelectedFrame(GLCanvas canvas, int width, int height) {
    111         drawFrame(canvas, mFrameSelected.getPaddings(), mFrameSelected, 0, 0, width, height);
    112     }
    113 
    114     protected static void drawFrame(GLCanvas canvas, Rect padding, Texture frame,
    115             int x, int y, int width, int height) {
    116         frame.draw(canvas, x - padding.left, y - padding.top, width + padding.left + padding.right,
    117                  height + padding.top + padding.bottom);
    118     }
    119 }
    120