Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: chrome/browser/resources/vr_shell/vr_shell_ui.js

Issue 2437823002: Control visibility of 2D VR menu buttons using native state. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('chrome.vrShellUi', function() { 5 cr.define('chrome.vrShellUi', function() {
6 'use strict'; 6 'use strict';
7 7
8 var scene = new ui.Scene(); 8 var scene = new ui.Scene();
9 var uiElements = []; 9 var state;
10 10
11 class DomUiElement { 11 class DomUiElement {
12 constructor(domId) { 12 constructor(domId) {
13 var domElement = document.querySelector(domId); 13 var domElement = document.querySelector(domId);
14 var style = window.getComputedStyle(domElement); 14 var style = window.getComputedStyle(domElement);
15 15
16 // Pull copy rectangle from DOM element properties. 16 // Pull copy rectangle from DOM element properties.
17 var pixelX = domElement.offsetLeft; 17 var pixelX = domElement.offsetLeft;
18 var pixelY = domElement.offsetTop; 18 var pixelY = domElement.offsetTop;
19 var pixelWidth = parseInt(style.getPropertyValue('width')); 19 var pixelWidth = parseInt(style.getPropertyValue('width'));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 onMouseEnter() { 55 onMouseEnter() {
56 this.configure(1, 1, 0.015); 56 this.configure(1, 1, 0.015);
57 } 57 }
58 58
59 onMouseLeave() { 59 onMouseLeave() {
60 this.configure(0.8, 0, 0); 60 this.configure(0.8, 0, 0);
61 } 61 }
62 }; 62 };
63 63
64 class UiState {
65 constructor() {
66 this.mode = -1;
67 this.createMenuButtons();
68 scene.flush();
69 }
70
71 createMenuButtons() {
mthiesse 2016/10/19 18:53:50 Not to be super picky about this (I'm being super
cjgrant 2016/10/19 19:37:39 Picky is good. :) I was minimizing the code chan
cjgrant 2016/10/20 20:27:30 Done.
72 this.menuButtons = [];
73 var buttons = [
74 ['#back', function() {
75 api.doAction(api.Action.HISTORY_BACK);
76 }],
77 ['#reload', function() {
78 api.doAction(api.Action.RELOAD);
79 }],
80 ['#forward', function() {
81 api.doAction(api.Action.HISTORY_FORWARD);
82 }],
83 ];
84
85 var buttonSpacing = 0.3;
86 var buttonStartPosition = -buttonSpacing * (buttons.length / 2.0 - 0.5);
87
88 for (var i = 0; i < buttons.length; i++) {
89 // Use an invisible parent to simplify Z-axis movement on hover.
90 var position = new api.UiElement(0, 0, 0, 0);
91 position.setParentId(api.getContentElementId());
92 position.setVisible(false);
93 position.setAnchoring(api.XAnchoring.XNONE, api.YAnchoring.YBOTTOM);
94 position.setTranslation(
95 buttonStartPosition + i * buttonSpacing, -0.3, 0.3);
96 var id = scene.addElement(position);
97
98 var domId = buttons[i][0];
99 var callback = buttons[i][1];
100 var element = new RoundButton(domId, callback);
101 this.menuButtons.push(element);
102
103 var update = new api.UiElementUpdate();
104 update.setParentId(id);
105 update.setVisible(false);
106 update.setScale(2.2, 2.2, 1);
107 scene.updateElement(element.uiElementId, update);
108 }
109 }
110
111 showMenuButtons(visible) {
112 for (var i = 0; i < this.menuButtons.length; i++) {
113 var update = new api.UiElementUpdate();
114 update.setVisible(visible);
115 scene.updateElement(this.menuButtons[i].uiElementId, update);
116 }
117 scene.flush();
118 }
119
120 setMode(mode) {
121 this.showMenuButtons(mode == api.Mode.STANDARD);
122 }
123 };
124
64 function initialize() { 125 function initialize() {
65 126
66 domLoaded();
67
68 // Change the body background so that the transparency applies. 127 // Change the body background so that the transparency applies.
69 window.setTimeout(function() { 128 window.setTimeout(function() {
70 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)'; 129 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)';
71 }, 100); 130 }, 100);
72 131
73 addControlButtons(); 132 state = new UiState();
74 }
75 133
76 // Build a row of control buttons.
77 function addControlButtons() {
78 var buttons = [
79 ['#back', function() { api.doAction(api.Action.HISTORY_BACK); }],
80 ['#reload', function() { api.doAction(api.Action.RELOAD); }],
81 ['#forward', function() { api.doAction(api.Action.HISTORY_FORWARD); }],
82 ];
83
84 var buttonSpacing = 0.3;
85 var buttonStartPosition = -buttonSpacing * (buttons.length / 2.0 - 0.5);
86
87 for (var i = 0; i < buttons.length; i++) {
88 // Use an invisible parent to simplify Z-axis movement on hover.
89 var position = new api.UiElement(0, 0, 0, 0);
90 position.setParentId(api.getContentElementId());
91 position.setVisible(false);
92 position.setAnchoring(api.XAnchoring.XNONE, api.YAnchoring.YBOTTOM);
93 position.setTranslation(
94 buttonStartPosition + i * buttonSpacing, -0.3, 0.3);
95 var id = scene.addElement(position);
96
97 var domId = buttons[i][0];
98 var callback = buttons[i][1];
99 var element = new RoundButton(domId, callback);
100 uiElements.push(element);
101
102 var update = new api.UiElementUpdate();
103 update.setParentId(id);
104 update.setScale(2.2, 2.2, 1);
105 scene.updateElement(element.uiElementId, update);
106 }
107
108 scene.flush();
109 }
110
111 function domLoaded() {
112 api.domLoaded(); 134 api.domLoaded();
113 } 135 }
114 136
115 function command(dict) { 137 function command(dict) {
138 if ('mode' in dict) {
139 state.setMode(dict['mode']);
140 }
116 } 141 }
117 142
118 return { 143 return {
119 initialize: initialize, 144 initialize: initialize,
120 command: command, 145 command: command,
121 }; 146 };
122 }); 147 });
123 148
124 document.addEventListener('DOMContentLoaded', chrome.vrShellUi.initialize); 149 document.addEventListener('DOMContentLoaded', chrome.vrShellUi.initialize);
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell.cc ('k') | chrome/browser/resources/vr_shell/vr_shell_ui_api.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698