1c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma/*
2c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Copyright (C) 2010 The Android Open Source Project
3c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma *
4c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Licensed under the Apache License, Version 2.0 (the "License");
5c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * you may not use this file except in compliance with the License.
6c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * You may obtain a copy of the License at
7c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma *
8c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma *      http://www.apache.org/licenses/LICENSE-2.0
9c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma *
10c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * Unless required by applicable law or agreed to in writing, software
11c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * distributed under the License is distributed on an "AS IS" BASIS,
12c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * See the License for the specific language governing permissions and
14c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * limitations under the License.
15c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */
16c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
17c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumapackage com.android.ex.carousel;
18c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
19c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport com.android.ex.carousel.CarouselRS.CarouselCallback;
207cc5787b49708f63aeb818bdd06efed3d4229925Jim Shumaimport com.android.ex.carousel.CarouselView.DetailAlignment;
21c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
22c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.graphics.Bitmap;
23c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.Float4;
24c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.Mesh;
25c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.renderscript.RenderScriptGL;
26c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumaimport android.util.Log;
27c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
28c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma/**
29c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * <p>
30c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * This class represents the basic building block for using a 3D Carousel. The Carousel is
31c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * basically a scene of cards and slots.  The spacing between cards is dictated by the number
32c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * of slots and the radius. The number of visible cards dictates how far the Carousel can be moved.
33c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * If the number of cards exceeds the number of slots, then the Carousel will continue to go
34c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma * around until the last card can be seen.
35c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma */
36c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shumapublic class CarouselController {
37c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final int DEFAULT_SLOT_COUNT = 10;
38c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final float DEFAULT_RADIUS = 20.0f;
39c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final int DEFAULT_VISIBLE_DETAIL_COUNT = 3;
404fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    private final int DEFAULT_PREFETCH_CARD_COUNT = 2;
410cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    private final int DEFAULT_ROW_COUNT = 1;
429afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney    private final float DEFAULT_OVERSCROLL_SLOTS = 1.0f;
430cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    private final float DEFAULT_ROW_SPACING = 0.0f;
44c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final float DEFAULT_SWAY_SENSITIVITY = 0.0f;
45c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final float DEFAULT_FRICTION_COEFFICIENT = 10.0f;
46c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private final float DEFAULT_DRAG_FACTOR = 0.25f;
474a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney    private final int DEFAULT_DETAIL_ALIGNMENT =
484a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney            DetailAlignment.VIEW_TOP | DetailAlignment.LEFT;
49c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private CarouselRS mRenderScript;
50c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private RenderScriptGL mRS;
51c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private static final String TAG = "CarouselController";
52c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private static final boolean DBG = false;
53c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
54c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    // These shadow the state of the renderer in case the surface changes so the surface
55c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    // can be restored to its previous state.
56c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Bitmap mDefaultBitmap;
57c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Bitmap mLoadingBitmap;
58c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Bitmap mBackgroundBitmap;
59c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Bitmap mDefaultLineBitmap = Bitmap.createBitmap(
605621100edc38c6e7f7fd7ef54945ba035204fe49Jim Shuma            new int[] {0x00000000, 0xffffffff, 0x00000000}, 0, 3, 3, 1, Bitmap.Config.ARGB_4444);
61358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney    private int mDefaultGeometry;
62358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney    private int mLoadingGeometry;
6351dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney    private float[] mDefaultCardMatrix;
64c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private int mCardCount = 0;
65c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private int mVisibleSlots = 0;
66c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private int mVisibleDetails = DEFAULT_VISIBLE_DETAIL_COUNT;
674fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    private int mPrefetchCardCount = DEFAULT_PREFETCH_CARD_COUNT;
684a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney    private int mDetailTextureAlignment = DEFAULT_DETAIL_ALIGNMENT;
69fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller    private boolean mForceBlendCardsWithZ = false;
70c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private boolean mDrawRuler = true;
71c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mStartAngle;
72a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich    private float mCarouselRotationAngle;
73c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mRadius = DEFAULT_RADIUS;
74c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mCardRotation = 0.0f;
7583d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney    private boolean mCardsFaceTangent = false;
769afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney    private float mOverscrollSlots = DEFAULT_OVERSCROLL_SLOTS;
77c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mSwaySensitivity = DEFAULT_SWAY_SENSITIVITY;
78c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mFrictionCoefficient = DEFAULT_FRICTION_COEFFICIENT;
79c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mDragFactor = DEFAULT_DRAG_FACTOR;
80c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private int mSlotCount = DEFAULT_SLOT_COUNT;
810cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    private int mRowCount = DEFAULT_ROW_COUNT;
820cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    private float mRowSpacing = DEFAULT_ROW_SPACING;
83c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mEye[] = { 20.6829f, 2.77081f, 16.7314f };
84c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mAt[] = { 14.7255f, -3.40001f, -1.30184f };
85c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mUp[] = { 0.0f, 1.0f, 0.0f };
86c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Float4 mBackgroundColor = new Float4(0.0f, 0.0f, 0.0f, 1.0f);
87c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private CarouselCallback mCarouselCallback;
88c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private float mRezInCardCount = 0.0f;
89c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private long mFadeInDuration = 250L;
903adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma    private long mCardCreationFadeDuration = 0L;
91c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    private Bitmap mDetailLoadingBitmap = Bitmap.createBitmap(
92c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            new int[] {0}, 0, 1, 1, 1, Bitmap.Config.ARGB_4444);
93be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller    private int mDragModel = CarouselRS.DRAG_MODEL_SCREEN_DELTA;
9414d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma    private int mFillDirection = CarouselRS.FILL_DIRECTION_CCW;
951a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson    private boolean mFirstCardTop = false;
96ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma    private int[] mStoreConfigs;
97c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
98c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public CarouselController() {
99c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        boolean useDepthBuffer = true;
100c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
101c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
102c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setRS(RenderScriptGL rs, CarouselRS renderScript) {
103c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mRS = rs;
104c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mRenderScript = renderScript;
105c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
106c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
107c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void onSurfaceChanged() {
108c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setSlotCount(mSlotCount);
1099c019da0f3083c4b82552fb2fe5b052f90073cb9Bryan Mawhinney        setDefaultCardMatrix(mDefaultCardMatrix);
110c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        createCards(mCardCount);
111c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setVisibleSlots(mVisibleSlots);
112c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setVisibleDetails(mVisibleDetails);
1134fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        setPrefetchCardCount(mPrefetchCardCount);
1149afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney        setOverscrollSlots(mOverscrollSlots);
1150cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        setRowCount(mRowCount);
1160cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        setRowSpacing(mRowSpacing);
1171a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson        setFirstCardTop(mFirstCardTop);
1184a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        setDetailTextureAlignment(mDetailTextureAlignment);
119fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller        setForceBlendCardsWithZ(mForceBlendCardsWithZ);
120c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDrawRuler(mDrawRuler);
121c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setCallback(mCarouselCallback);
122c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDefaultBitmap(mDefaultBitmap);
123c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setLoadingBitmap(mLoadingBitmap);
124c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDefaultGeometry(mDefaultGeometry);
125c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setLoadingGeometry(mLoadingGeometry);
126c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setBackgroundColor(mBackgroundColor.x, mBackgroundColor.y, mBackgroundColor.z,
127c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma                mBackgroundColor.w);
128c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setBackgroundBitmap(mBackgroundBitmap);
129c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDetailLineBitmap(mDefaultLineBitmap);
130c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setStartAngle(mStartAngle);
131a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich        setCarouselRotationAngle(mCarouselRotationAngle);
132c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setRadius(mRadius);
133c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setCardRotation(mCardRotation);
13483d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney        setCardsFaceTangent(mCardsFaceTangent);
135c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setSwaySensitivity(mSwaySensitivity);
136c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setFrictionCoefficient(mFrictionCoefficient);
137c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDragFactor(mDragFactor);
138be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller        setDragModel(mDragModel);
13914d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma        setFillDirection(mFillDirection);
140c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setLookAt(mEye, mAt, mUp);
141c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setRezInCardCount(mRezInCardCount);
142c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setFadeInDuration(mFadeInDuration);
1433adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma        setCardCreationFadeDuration(mCardCreationFadeDuration);
144c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        setDetailLoadingBitmap(mDetailLoadingBitmap);
145ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma        setStoreConfigs(mStoreConfigs);
146c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
147c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
148c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
149c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Loads geometry from a resource id.
150c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
151c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param resId
152c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @return the loaded mesh or null if it cannot be loaded
153c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
154358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney    public Mesh loadGeometry(int resId) {
155358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney        if (mRenderScript != null) {
156358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney          return mRenderScript.loadGeometry(resId);
157c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
158358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney        return null;
159c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
160c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
161c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
162c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * Set the geometry to show for a given slot.
163c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param n The card to set the geometry for
164c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param mesh The geometry for that item
165c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @see {@link #setDefaultGeometry}
166c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
167c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setGeometryForItem(int n, Mesh mesh) {
168c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
169c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setGeometry(n, mesh);
170c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
171c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
172c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
173c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
174c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * Load A3D file from resource. If resId == 0, will clear geometry for this item.
175c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param n The card to set the geometry for
176c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param resId The resource ID for the geometry for that item
177c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @see {@link #setDefaultGeometry}
178c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     */
179c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    public void setGeometryForItem(int n, int resId) {
180c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma        if (mRenderScript != null) {
181c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma            Mesh mesh = mRenderScript.loadGeometry(resId);
182c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma            mRenderScript.setGeometry(n, mesh);
183c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma        }
184c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    }
185c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma
186c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    /**
187c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * Set the matrix for the specified card
188c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param n The card to set the matrix for
189c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @param matrix The matrix to use
190c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     * @see {@link #setDefaultGeometry}
191c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma     */
192c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    public void setMatrixForItem(int n, float[] matrix) {
193c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma        if (mRenderScript != null) {
194c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma            mRenderScript.setMatrix(n, matrix);
195c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma        }
196c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    }
197c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma
198c2baf88a763ae0e3694c8a10c13f203db9aec363Jim Shuma    /**
199c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Set the number of slots around the Carousel. Basically equivalent to the poles horses
200c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * might attach to on a real Carousel.
201c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
202c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the number of slots
203c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
204c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setSlotCount(int n) {
205c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mSlotCount = n;
206c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
207c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setSlotCount(n);
208c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
209c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
210c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
211c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
212c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets the number of visible slots around the Carousel.  This is primarily used as a cheap
213c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * form of clipping. The Carousel will never show more than this many cards.
214c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the number of visible slots
215c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
216c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setVisibleSlots(int n) {
217c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mVisibleSlots = n;
218c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
219c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setVisibleSlots(n);
220c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
221c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
222c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
223c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
224c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Set the number of detail textures that can be visible at one time.
225c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
226c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the number of slots
227c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
228c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setVisibleDetails(int n) {
229c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mVisibleDetails = n;
230c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
231c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setVisibleDetails(n);
232c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
233c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
234c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
235c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
2364fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * Set the number of cards to pre-load that are outside of the visible region, as determined by
2374fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * setVisibleSlots(). This number gets added to the number of visible slots and used to
2384fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * determine when resources for cards should be loaded. This number should be small (n <= 4)
2394fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * for systems with limited texture memory or views that show more than half dozen cards in the
2404fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * view.
2414fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     *
2424fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * @param n the number of cards; should be even, so the count is the same on each side
2434fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     */
2444fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    public void setPrefetchCardCount(int n) {
2454fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        mPrefetchCardCount = n;
2464fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        if (mRenderScript != null) {
2474fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma            mRenderScript.setPrefetchCardCount(n);
2484fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        }
2494fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    }
2504fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma
2514fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    /**
2520cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney     * Sets the number of rows of cards to show in each slot.
2530cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney     */
2540cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    public void setRowCount(int n) {
2550cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        mRowCount = n;
2560cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        if (mRenderScript != null) {
2570cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney            mRenderScript.setRowCount(n);
2580cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        }
2590cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    }
2600cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney
2610cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    /**
2620cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney     * Sets the spacing between each row of cards when rowCount > 1.
2630cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney     */
2640cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    public void setRowSpacing(float s) {
2650cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        mRowSpacing = s;
2660cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        if (mRenderScript != null) {
2670cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney            mRenderScript.setRowSpacing(s);
2680cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney        }
2690cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    }
2700cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney
2711a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson     /**
2721a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson     * Sets the position of the first card when rowCount > 1 .
2731a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson     */
2741a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson    public void setFirstCardTop(boolean f) {
2751a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson        mFirstCardTop = f;
2761a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson        if (mRenderScript != null) {
2771a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson            mRenderScript.setFirstCardTop(f);
2781a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson        }
2791a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson    }
2801a5b4d109397ea175b5cbaa7490ca18e78eb040fSimon Wilson
2810cec8afdb4f9d78adf88c9b9b41e993aef617beaBryan Mawhinney    /**
2829afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney     * Sets the amount of allowed overscroll (in slots)
2839afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney     */
2849afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney    public void setOverscrollSlots(float slots) {
2859afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney        mOverscrollSlots = slots;
2869afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney        if (mRenderScript != null) {
2879afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney            mRenderScript.setOverscrollSlots(slots);
2889afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney        }
2899afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney    }
2909afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney
2919afded4d212243e554c2695c4a2f90c13628e24bBryan Mawhinney    /**
2924a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney     * Sets how detail textures are aligned with respect to the card.
293c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
2944a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney     * @param alignment a bitmask of DetailAlignment flags.
295c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
2964a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney    public void setDetailTextureAlignment(int alignment) {
2974a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        int xBits = alignment & DetailAlignment.HORIZONTAL_ALIGNMENT_MASK;
2984a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        if (xBits == 0 || ((xBits & (xBits - 1)) != 0)) {
2994a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney            throw new IllegalArgumentException(
3004a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney                    "Must specify exactly one horizontal alignment flag");
3014a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        }
3024a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        int yBits = alignment & DetailAlignment.VERTICAL_ALIGNMENT_MASK;
3034a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        if (yBits == 0 || ((yBits & (yBits - 1)) != 0)) {
3044a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney            throw new IllegalArgumentException(
3054a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney                    "Must specify exactly one vertical alignment flag");
306c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
307c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
3084a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney        mDetailTextureAlignment = alignment;
3094fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        if (mRenderScript != null) {
3104a8736e22d7b40ab9dfa3fbd8a10de92144912b3Bryan Mawhinney            mRenderScript.setDetailTextureAlignment(alignment);
3114fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma        }
3124fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    }
3134fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma
3144fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma    /**
315fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * Set whether depth is enabled while blending. Generally, this is discouraged because
316fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * it causes bad artifacts. Careful attention to geometry and alpha transparency of
317fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * textures can mitigate much of this. Geometry for an individual item must be drawn
318fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * back-to-front, for example.
319bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma     *
320fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * @param enabled True to enable depth while blending, and false to disable it.
321bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma     */
322fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller    public void setForceBlendCardsWithZ(boolean enabled) {
323fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller        mForceBlendCardsWithZ = enabled;
324bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma        if (mRenderScript != null) {
325fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller            mRenderScript.setForceBlendCardsWithZ(enabled);
326bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma        }
327bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma    }
328bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma
329bfc5ce2da9e0d8d0ec2535c465624574d98418d7Jim Shuma    /**
330c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Set whether to draw a ruler from the card to the detail texture
331c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
332c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param drawRuler True to draw a ruler, false to draw nothing where the ruler would go.
333c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
334c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDrawRuler(boolean drawRuler) {
335c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mDrawRuler = drawRuler;
336c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
337c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDrawRuler(drawRuler);
338c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
339c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
340c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
341c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
342c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This dictates how many cards are in the deck.  If the number of cards is greater than the
343c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * number of slots, then the Carousel goes around n / slot_count times.
344c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
345c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Can be called again to increase or decrease the number of cards.
346c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
347c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the number of cards to create.
348c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
349c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void createCards(int n) {
350c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mCardCount = n;
351c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
352c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.createCards(n);
353c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
354c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
355c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
356c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public int getCardCount() {
357c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        return mCardCount;
358c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
359c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
360c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
361c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This sets the texture on card n.  It should only be called in response to
362c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * {@link CarouselCallback#onRequestTexture(int)}.  Since there's no guarantee
363c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * that a given texture is still on the screen, replacing this texture should be done
364c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * by first setting it to null and then waiting for the next
365c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * {@link CarouselCallback#onRequestTexture(int)} to swap it with the new one.
366c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
367c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the card given by {@link CarouselCallback#onRequestTexture(int)}
368c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap the bitmap image to show
369c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
370c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setTextureForItem(int n, Bitmap bitmap) {
371c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        // Also check against mRS, to handle the case where the result is being delivered by a
372c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        // background thread but the sender no longer exists.
373c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null && mRS != null) {
374c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            if (DBG) Log.v(TAG, "setTextureForItem(" + n + ")");
375c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setTexture(n, bitmap);
376c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            if (DBG) Log.v(TAG, "done");
377c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
378c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
379c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
380c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
381c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This sets the detail texture that floats above card n. It should only be called in response
382c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * to {@link CarouselCallback#onRequestDetailTexture(int)}.  Since there's no guarantee
383c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * that a given texture is still on the screen, replacing this texture should be done
384c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * by first setting it to null and then waiting for the next
385c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * {@link CarouselCallback#onRequestDetailTexture(int)} to swap it with the new one.
386c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
387c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the card to set detail texture for
388c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param offx an optional offset to apply to the texture (in pixels) from top of detail line
389c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param offy an optional offset to apply to the texture (in pixels) from top of detail line
390c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param loffx an optional offset to apply to the line (in pixels) from left edge of card
391c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param loffy an optional offset to apply to the line (in pixels) from top of screen
392c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap the bitmap to show as the detail
393c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
394c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDetailTextureForItem(int n, float offx, float offy, float loffx, float loffy,
395c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            Bitmap bitmap) {
3967ec486bf1373232a35efa96622f31ac1aff5456bBryan Mawhinney        if (mRenderScript != null && mRS != null) {
397c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            if (DBG) Log.v(TAG, "setDetailTextureForItem(" + n + ")");
398c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDetailTexture(n, offx, offy, loffx, loffy, bitmap);
399c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            if (DBG) Log.v(TAG, "done");
4006af401bca5f8854524d128e9df5700035fae1160Jim Shuma        }
4016af401bca5f8854524d128e9df5700035fae1160Jim Shuma    }
4026af401bca5f8854524d128e9df5700035fae1160Jim Shuma
4036af401bca5f8854524d128e9df5700035fae1160Jim Shuma    /**
4048441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * Sets the specified texture as invalid. If {@code eraseCurrent} is true,
4058441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * the texture will be immediately cleared from view and an invalidate
4068441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * handler will be called. If {@code eraseCurrent} is false, a replacement
4078441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * texture will be requested, and the old texture will be left in place in
4088441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * the meantime.
4098441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     *
4108441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * @param n the card to invalidate the detail texture for
4118441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     * @param eraseCurrent whether to erase the current texture
4128441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey     */
4138441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey    public void invalidateTexture(int n, boolean eraseCurrent) {
4148441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey        if (mRenderScript != null && mRS != null) {
4158441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey            if (DBG) Log.v(TAG, "invalidateTexture(" + n + ", " + eraseCurrent + ")");
4168441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey            mRenderScript.invalidateTexture(n, eraseCurrent);
4178441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey            if (DBG) Log.v(TAG, "done");
4188441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey        }
4198441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey    }
4208441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey
4218441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey    /**
4226af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * Sets the specified detail texture as invalid. If eraseCurrent is true, the texture will be
4236af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * immediately cleared from view and an invalidate handler will be called. If eraseCurrent is
4246af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * false, a replacement texture will be requested, and the old texture will be left in place
4256af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * in the meantime.
4266af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * @param n the card to invalidate the detail texture for
4276af401bca5f8854524d128e9df5700035fae1160Jim Shuma     * @param eraseCurrent whether to erase the current texture
4286af401bca5f8854524d128e9df5700035fae1160Jim Shuma     */
4296af401bca5f8854524d128e9df5700035fae1160Jim Shuma    public void invalidateDetailTexture(int n, boolean eraseCurrent) {
4306af401bca5f8854524d128e9df5700035fae1160Jim Shuma        if (mRenderScript != null && mRS != null) {
4318441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey            if (DBG) Log.v(TAG, "invalidateDetailTexture(" + n + ", " + eraseCurrent + ")");
4328441b1025afe64748f9e3483baacee92171bbfa3Jeff Sharkey            mRenderScript.invalidateDetailTexture(n, eraseCurrent);
4336af401bca5f8854524d128e9df5700035fae1160Jim Shuma            if (DBG) Log.v(TAG, "done");
434c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
435c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
436c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
437c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
438c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets the bitmap to show on a card when the card draws the very first time.
439c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Generally, this bitmap will only be seen during the first few frames of startup
440c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * or when the number of cards are changed.  It can be ignored in most cases,
441c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * as the cards will generally only be in the loading or loaded state.
442c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
443c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap
444c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
445c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDefaultBitmap(Bitmap bitmap) {
446c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mDefaultBitmap = bitmap;
447c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
448c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDefaultBitmap(bitmap);
449c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
450c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
451c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
452c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
453c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets the bitmap to show on the card while the texture is loading. It is set to this
454c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * value just before {@link CarouselCallback#onRequestTexture(int)} is called and changed
455c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * when {@link CarouselView#setTextureForItem(int, Bitmap)} is called. It is shared by all
456c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * cards.
457c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
458c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap
459c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
460c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setLoadingBitmap(Bitmap bitmap) {
461c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mLoadingBitmap = bitmap;
462c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
463c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setLoadingBitmap(bitmap);
464c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
465c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
466c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
467c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
468c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets background to specified color.  If a background texture is specified with
469c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * {@link CarouselView#setBackgroundBitmap(Bitmap)}, then this call has no effect.
470c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
471c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param red the amount of red
472c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param green the amount of green
473c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param blue the amount of blue
474c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param alpha the amount of alpha
475c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
476c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setBackgroundColor(float red, float green, float blue, float alpha) {
477c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mBackgroundColor = new Float4(red, green, blue, alpha);
478c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
479c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setBackgroundColor(mBackgroundColor);
480c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
481c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
482c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
483c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
484c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Can be used to optionally set the background to a bitmap. When set to something other than
4854fe6ea729d1fc44c8126de7a92a710c3885fb2ecJim Shuma     * null, this overrides {@link CarouselController#setBackgroundColor(Float4)}.
486c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
487c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap
488c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
489c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setBackgroundBitmap(Bitmap bitmap) {
490c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mBackgroundBitmap = bitmap;
491c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
492c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setBackgroundTexture(bitmap);
493c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
494c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
495c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
496c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
497c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Can be used to optionally set a "loading" detail bitmap. Typically, this is just a black
498c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * texture with alpha = 0 to allow details to slowly fade in.
499c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
500c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap
501c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
502c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDetailLoadingBitmap(Bitmap bitmap) {
503c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mDetailLoadingBitmap = bitmap;
504c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
505c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDetailLoadingTexture(bitmap);
506c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
507c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
508c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
509c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
510c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This texture is used to draw a line from the card alongside the texture detail. The line
511c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * will be as wide as the texture. It can be used to give the line glow effects as well as
512c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * allowing other blending effects. It is typically one dimensional, e.g. 3x1.
513c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
514c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param bitmap
515c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
516c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDetailLineBitmap(Bitmap bitmap) {
517c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mDefaultLineBitmap = bitmap;
518c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
519c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDetailLineTexture(bitmap);
520c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
521c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
522c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
523c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
524c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This geometry will be shown when no geometry has been loaded for a given slot. If not set,
525fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * a quad will be drawn in its place. It is shared for all cards. If something other than
526fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * simple planar geometry is used, consider enabling depth test with
527fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * {@link CarouselController#setForceBlendCardsWithZ(boolean)}
528c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
529c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param mesh
530c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
531358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney    public void setDefaultGeometry(int resId) {
532358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney        mDefaultGeometry = resId;
533c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
534358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney            Mesh mesh = mRenderScript.loadGeometry(resId);
535c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDefaultGeometry(mesh);
536c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
537c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
538c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
539c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
54051dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     * Sets the matrix used to transform card geometries.  By default, this
54151dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     * is the identity matrix, but you can specify a different matrix if you
54251dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     * want to scale, translate and / or rotate the card before drawing.
54351dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     *
54451dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     * @param matrix array of 9 or 16 floats representing a 3x3 or 4x4 matrix,
54551dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     * or null as a shortcut for an identity matrix.
54651dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney     */
54751dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney    public void setDefaultCardMatrix(float[] matrix) {
54851dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney        mDefaultCardMatrix = matrix;
54951dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney        if (mRenderScript != null) {
55051dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney           mRenderScript.setDefaultCardMatrix(matrix);
55151dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney        }
55251dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney    }
55351dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney
55451dd0196e4f3bd4086545f5bf30038ca9ad9ac27Bryan Mawhinney    /**
555c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This is an intermediate version of the object to show while geometry is loading. If not set,
556fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * a quad will be drawn in its place.  It is shared for all cards. If something other than
557fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * simple planar geometry is used, consider enabling depth test with
558fb179e7afd8f02be63061b478b0283e3085fc25fJim Miller     * {@link CarouselView#setForceBlendCardsWithZ(boolean)}
559c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
560358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney     * @param resId
561c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
562358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney    public void setLoadingGeometry(int resId) {
563358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney        mLoadingGeometry = resId;
564c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
565358868df5043b240c9a241c7bb75128ff94b1f34Bryan Mawhinney            Mesh mesh = mRenderScript.loadGeometry(resId);
566c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setLoadingGeometry(mesh);
567c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
568c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
569c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
570c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
571c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets the callback for receiving events from RenderScript.
572c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
573c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param callback
574c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
575c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setCallback(CarouselCallback callback)
576c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    {
577c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mCarouselCallback = callback;
578c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
579c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setCallback(callback);
580c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
581c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
582c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
583c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
584594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma     * Gets the callback for receiving events from Renderscript.
585594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma     */
586594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    public CarouselCallback getCallback() {
587594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma        return mCarouselCallback;
588594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    }
589594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma
590594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    /**
591c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Sets the startAngle for the Carousel. The start angle is the first position of the first
592c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * slot draw.  Cards will be drawn from this angle in a counter-clockwise manner around the
593c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Carousel.
594c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
595c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param angle the angle, in radians.
596c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
597c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setStartAngle(float angle)
598c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    {
599c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mStartAngle = angle;
600c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
601c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setStartAngle(angle);
602c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
603c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
604c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
605a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich    /**
606a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * Set the current carousel rotation angle, in card units.
607a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * This is measured in card positions, not in radians or degrees.
608a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     *
609a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * A value of 0.0 means that card 0 is in the home position.
610a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * A value of 1.0 means that card 1 is in the home position, and so on.
611a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * The maximum value will be somewhat less than the total number of cards.
612a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     *
613a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     * @param angle
614a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich     */
615a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich    public void setCarouselRotationAngle(float angle) {
616a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich        mCarouselRotationAngle = angle;
617a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich        if (mRenderScript != null) {
618a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich            mRenderScript.setCarouselRotationAngle(angle);
619a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich        }
620a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich    }
621a84feeb7e4dc1a75ec6d0b1f2494893987fc3ca3Jack Palevich
6228debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry    /**
6238debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * Triggers a rotation of the carousel. All angles are in card units, see:
6248debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * {@link CarouselController#setCarouselRotationAngle(float)}) for more details.
6258debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     *
6268debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * @param endAngle the card unit to which the carousel should rotate to
6278debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * @param milliseconds the length of the animation
6288debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * @param interpolationMode three modes are currently supported :
6298debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * {@link CarouselView.InterpolationMode#LINEAR}
6308debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * {@link CarouselView.InterpolationMode#DECELERATE_QUADRATIC}
6318debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * {@link CarouselView.InterpolationMode#ACCELERATE_DECELERATE_CUBIC}
6328debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * @param maxAnimatedArc the maximum angular distance over which the transition will be
6338debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * animated.
6348debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * If the current position is further away, it is set at maxAnimatedArc from endAngle.
6358debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     * This parameter is ignored when <= 0.
6368debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry     */
6378debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry    public void setCarouselRotationAngle(float endAngle, int milliseconds, int interpolationMode,
6388debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry            float maxAnimatedArc) {
6398debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry        if (mRenderScript != null) {
6408debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry            mRenderScript.setCarouselRotationAngle(endAngle, milliseconds,
6418debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry                    interpolationMode, maxAnimatedArc);
6428debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry        }
6438debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry    }
6448debeb8a0a785f0ad66bc75200cdb47c137602bcArnaud Berry
645c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setRadius(float radius) {
646c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mRadius = radius;
647c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
648c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setRadius(radius);
649c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
650c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
651c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
652be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller    /**
653be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * Sets the current model for dragging. There are currently four drag models:
654be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * {@link CarouselView#DRAG_MODEL_SCREEN_DELTA}
655be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * {@link CarouselView#DRAG_MODEL_PLANE}
656be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * {@link CarouselView#DRAG_MODEL_CYLINDER_INSIDE}
657be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * {@link CarouselView#DRAG_MODEL_CYLINDER_OUTSIDE}
658be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     *
659be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     * @param model
660be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller     */
661be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller    public void setDragModel(int model) {
662be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller        mDragModel  = model;
663be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller        if (mRenderScript != null) {
664be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller            mRenderScript.setDragModel(model);
665be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller        }
666be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller    }
667be5482f170e191aa98a3c2ecefdeaf936b7df412Jim Miller
66814d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma    /** Sets the direction to fill in cards around the carousel.
66914d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma     *
67014d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma     * @param direction Either {@link CarouselRS#FILL_DIRECTION_CCW} or
67114d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma     * {@link CarouselRS#FILL_DIRECTION_CW}.
67214d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma     */
67314d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma    public void setFillDirection(int direction) {
67414d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma        mFillDirection = direction;
67514d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma        if (mRenderScript != null) {
67614d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma            mRenderScript.setFillDirection(direction);
67714d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma        }
67814d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma    }
67914d2c1ec52bb04b5120c2bfdd1a8811a238573ceJim Shuma
680c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setCardRotation(float cardRotation) {
681c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mCardRotation = cardRotation;
682c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
683c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setCardRotation(cardRotation);
684c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
685c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
686c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
68783d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney    public void setCardsFaceTangent(boolean faceTangent) {
68883d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney        mCardsFaceTangent = faceTangent;
68983d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney        if (mRenderScript != null) {
69083d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney            mRenderScript.setCardsFaceTangent(faceTangent);
69183d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney        }
69283d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney    }
69383d7a5f03e6511372f73e3e4e03a6d403b20125dBryan Mawhinney
694c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setSwaySensitivity(float swaySensitivity) {
695c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mSwaySensitivity = swaySensitivity;
696c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
697c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setSwaySensitivity(swaySensitivity);
698c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
699c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
700c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
701c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setFrictionCoefficient(float frictionCoefficient) {
702c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mFrictionCoefficient = frictionCoefficient;
703c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
704c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setFrictionCoefficient(frictionCoefficient);
705c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
706c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
707c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
708c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setDragFactor(float dragFactor) {
709c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mDragFactor = dragFactor;
710c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
711c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setDragFactor(dragFactor);
712c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
713c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
714c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
715c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setLookAt(float[] eye, float[] at, float[] up) {
716c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mEye = eye;
717c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mAt = at;
718c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mUp = up;
719c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
720c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setLookAt(eye, at, up);
721c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
722c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
723c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
724c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
725c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This sets the number of cards in the distance that will be shown "rezzing in".
726c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * These alpha values will be faded in from the background to the foreground over
727c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * 'n' cards.  A floating point value is used to allow subtly changing the rezzing in
728c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * position.
729c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
730c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param n the number of cards to rez in.
731c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
732c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setRezInCardCount(float n) {
733c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mRezInCardCount = n;
734c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
735c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setRezInCardCount(n);
736c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
737c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
738c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
739c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
740c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * This sets the duration (in ms) that a card takes to fade in when loaded via a call
741c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * to {@link CarouselView#setTextureForItem(int, Bitmap)}. The timer starts the
742c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * moment {@link CarouselView#setTextureForItem(int, Bitmap)} is called and continues
743c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * until all of the cards have faded in.  Note: using large values will extend the
744c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * animation until all cards have faded in.
745c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     *
7463adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     * @param t The time, in milliseconds
747c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
748c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    public void setFadeInDuration(long t) {
749c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        mFadeInDuration = t;
750c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        if (mRenderScript != null) {
751c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma            mRenderScript.setFadeInDuration(t);
752c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma        }
753c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
754c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
755c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
7563adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     * This sets the duration (in ms) that a card takes to fade in when it is initially created,
7573adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     * such as when it is added or when the application starts. The timer starts at the moment
7583adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     * when the card is first created. Replacing a card's contents does not affect the timer.
7593adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     * @param t The time, in milliseconds
7603adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma     */
7613adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma    public void setCardCreationFadeDuration(long t) {
7623adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma        mCardCreationFadeDuration = t;
7633adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma        if (mRenderScript != null) {
7643adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma            mRenderScript.setCardCreationFadeDuration(t);
7653adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma        }
7663adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma    }
7673adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma
7683adf712e636f67265da7a6ff425c87e63fc20884Jim Shuma    /**
769c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Tells the carousel that a touch event has started at the designated location.
770c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param x The number of pixels from the left edge that the event occurred
771c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param y The number of pixels from the top edge that the event occurred
7721882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller     * @param t The time stamp of the event
773c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
7741882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller    public void onTouchStarted(float x, float y, long t) {
7751882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller        mRenderScript.doStart(x, y, t);
776c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
777c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
778c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
779c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Tells the carousel that a touch event has moved to the designated location.
780c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param x The number of pixels from the left edge that the event occurred
781c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param y The number of pixels from the top edge that the event occurred
7821882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller     * @param t The time stamp of the event
783c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
7841882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller    public void onTouchMoved(float x, float y, long t) {
7851882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller        mRenderScript.doMotion(x, y, t);
786c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
787c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma
788c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    /**
789594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma     * Tells the carousel that the user has long-pressed.
790594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma     */
791594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    public void onLongPress() {
792594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma        mRenderScript.doLongPress();
793594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    }
794594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma
795594ff62c170509c0d69b30f4c2a5e71d4799a9c8Jim Shuma    /**
796c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * Tells the carousel that a touch event has stopped at the designated location.
797c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param x The number of pixels from the left edge that the event occurred
798c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     * @param y The number of pixels from the top edge that the event occurred
7991882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller     * @param t The time stamp of the event
800c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma     */
8011882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller    public void onTouchStopped(float x, float y, long t) {
8021882cebdc1b7b0551189ca33fb7cb77ef10c988bJim Miller        mRenderScript.doStop(x, y, t);
803c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma    }
804f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma
805f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    /**
806f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * Whether to use alpha when drawing a primitive: on for translucent, off for opaque.
807f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     */
808f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    public static final int STORE_CONFIG_ALPHA = 1;
809f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma
810f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    /**
811f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * Whether to read from the depth buffer when rendering. Determines with glDepthFunc()
812f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * is given GL_LESS or GL_ALWAYS. On for GL_LESS, off for GL_ALWAYS.
813f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     */
814f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    public static final int STORE_CONFIG_DEPTH_READS = 2;
815f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma
816f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    /**
817f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * Whether to write to the depth buffer when rendering. Passed to glDepthMask().
818f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     */
819f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    public static final int STORE_CONFIG_DEPTH_WRITES = 4;
820f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma
821f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    /**
822f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * Set the StoreConfig parameters that will be used for each mesh primitive.
823f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     *
824f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * Each integer in the array is a bitfield composed of
825f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#STORE_CONFIG_ALPHA},
826f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#STORE_CONFIG_DEPTH_READS}, and
827f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#STORE_CONFIG_DEPTH_WRITES}.
828f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     *
829f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * These parameters MUST correspond to primitives in geometry previously set in
830f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#setDefaultGeometry(int)} or
831f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#setLoadingGeometry(int)} or
832f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * {@link CarouselController#setGeometryForItem(int,Mesh)}.
833f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     *
834f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     * @param configs An array, each element of which corresponds to an ordered mesh primitive
835f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma     */
836f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    public void setStoreConfigs(int configs[]) {
837ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma        mStoreConfigs = configs;
838ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma        if (mRenderScript != null) {
839ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma            mRenderScript.setStoreConfigs(configs);
840ac1d1fd9b14ce42aa9e04f8c472039790d736786Jim Shuma        }
841f664659f79399e92025e1dfe1ffbb682ff05613cJim Shuma    }
842c7f405d16c2c7143de7fcda9c4f77f9758b5342aJim Shuma}
843