| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.chromoting.cardboard; | |
| 6 | |
| 7 import android.content.Context; | |
| 8 import android.graphics.PointF; | |
| 9 import android.graphics.RectF; | |
| 10 import android.opengl.Matrix; | |
| 11 | |
| 12 import org.chromium.chromoting.R; | |
| 13 | |
| 14 /** | |
| 15 * Cardboard activity menu bar that contains multiple menu items. | |
| 16 */ | |
| 17 public class MenuBar { | |
| 18 public enum MenuItemType { | |
| 19 BACK(R.drawable.ic_backspace), | |
| 20 VOICE_INPUT(R.drawable.ic_voice_input), | |
| 21 ZOOM_IN(R.drawable.ic_zoom_in), | |
| 22 ZOOM_OUT(R.drawable.ic_zoom_out); | |
| 23 | |
| 24 private final int mResourceId; | |
| 25 | |
| 26 MenuItemType(int resourceId) { | |
| 27 mResourceId = resourceId; | |
| 28 } | |
| 29 | |
| 30 public int resourceId() { | |
| 31 return mResourceId; | |
| 32 } | |
| 33 } | |
| 34 | |
| 35 public static final float MENU_ITEM_SIZE = 0.1f; | |
| 36 | |
| 37 private final RectF mMenuBarRect; | |
| 38 | |
| 39 private final MenuItem[] mItems; | |
| 40 | |
| 41 private float[] mModelMatrix; | |
| 42 private float[] mCombinedMatrix; | |
| 43 | |
| 44 public MenuBar(Context context) { | |
| 45 MenuItemType[] menuItemTypes = MenuItemType.values(); | |
| 46 final int numItem = menuItemTypes.length; | |
| 47 mCombinedMatrix = new float[16]; | |
| 48 mModelMatrix = new float[16]; | |
| 49 | |
| 50 final float halfMenuWidth = numItem * MENU_ITEM_SIZE / 2; | |
| 51 final float halfMenuHeight = MENU_ITEM_SIZE / 2; | |
| 52 mMenuBarRect = new RectF(-halfMenuWidth, -halfMenuHeight, halfMenuWidth,
halfMenuHeight); | |
| 53 | |
| 54 RectF currentRect = new RectF(-halfMenuWidth, -halfMenuHeight, | |
| 55 -halfMenuWidth + MENU_ITEM_SIZE, halfMenuHeight); | |
| 56 mItems = new MenuItem[numItem]; | |
| 57 for (int i = 0; i < numItem; i++) { | |
| 58 mItems[i] = new MenuItem(context, menuItemTypes[i], currentRect); | |
| 59 currentRect.offset(MENU_ITEM_SIZE, 0); | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 /** | |
| 64 * Get menu item that user is looking at. | |
| 65 * Return the CardboardActivity menu item that contains the passed in coordi
nates or | |
| 66 * null if none of menu items contains the passed in coordinates. | |
| 67 */ | |
| 68 public MenuItem getLookingItem(PointF lookingPosition) { | |
| 69 for (MenuItem item : mItems) { | |
| 70 if (item.contains(lookingPosition)) { | |
| 71 return item; | |
| 72 } | |
| 73 } | |
| 74 | |
| 75 return null; | |
| 76 } | |
| 77 | |
| 78 public void draw(float[] viewMatrix, float[] projectionMatrix, PointF eyeMen
uBarPosition, | |
| 79 float centerX, float centerY, float centerZ) { | |
| 80 for (MenuItem item : mItems) { | |
| 81 Matrix.setIdentityM(mModelMatrix, 0); | |
| 82 Matrix.translateM(mModelMatrix, 0, item.getPosition().x + centerX, | |
| 83 item.getPosition().y + centerY, centerZ); | |
| 84 Matrix.multiplyMM(mCombinedMatrix, 0, viewMatrix, 0, mModelMatrix, 0
); | |
| 85 Matrix.multiplyMM(mCombinedMatrix, 0, projectionMatrix, 0, mCombined
Matrix, 0); | |
| 86 item.draw(mCombinedMatrix, item.contains(eyeMenuBarPosition)); | |
| 87 } | |
| 88 } | |
| 89 | |
| 90 /** | |
| 91 * Return true if the passed in point is inside the menu bar. | |
| 92 * @param x x coordinate user is looking at. | |
| 93 * @param y y coordinate user is looking at. | |
| 94 */ | |
| 95 public boolean contains(PointF lookingPosition) { | |
| 96 return mMenuBarRect.contains(lookingPosition.x, lookingPosition.y); | |
| 97 } | |
| 98 | |
| 99 /** | |
| 100 * Clean up opengl data. | |
| 101 */ | |
| 102 public void cleanup() { | |
| 103 for (MenuItem item : mItems) { | |
| 104 item.clean(); | |
| 105 } | |
| 106 } | |
| 107 } | |
| OLD | NEW |