| OLD | NEW |
| 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 var vrShellUi = (function() { | 5 var 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 Loading... |
| 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 Controls { |
| 65 constructor() { |
| 66 this.buttons = []; |
| 67 var descriptors = [ |
| 68 ['#back', function() { |
| 69 api.doAction(api.Action.HISTORY_BACK); |
| 70 }], |
| 71 ['#reload', function() { |
| 72 api.doAction(api.Action.RELOAD); |
| 73 }], |
| 74 ['#forward', function() { |
| 75 api.doAction(api.Action.HISTORY_FORWARD); |
| 76 }], |
| 77 ]; |
| 78 |
| 79 var spacing = 0.3; |
| 80 var startPosition = -spacing * (descriptors.length / 2.0 - 0.5); |
| 81 |
| 82 for (var i = 0; i < descriptors.length; i++) { |
| 83 // Use an invisible parent to simplify Z-axis movement on hover. |
| 84 var position = new api.UiElement(0, 0, 0, 0); |
| 85 position.setParentId(api.getContentElementId()); |
| 86 position.setVisible(false); |
| 87 position.setAnchoring(api.XAnchoring.XNONE, api.YAnchoring.YBOTTOM); |
| 88 position.setTranslation( |
| 89 startPosition + i * spacing, -0.3, 0.3); |
| 90 var id = scene.addElement(position); |
| 91 |
| 92 var domId = descriptors[i][0]; |
| 93 var callback = descriptors[i][1]; |
| 94 var element = new RoundButton(domId, callback); |
| 95 this.buttons.push(element); |
| 96 |
| 97 var update = new api.UiElementUpdate(); |
| 98 update.setParentId(id); |
| 99 update.setVisible(false); |
| 100 update.setScale(2.2, 2.2, 1); |
| 101 scene.updateElement(element.uiElementId, update); |
| 102 } |
| 103 } |
| 104 |
| 105 show(visible) { |
| 106 for (var i = 0; i < this.buttons.length; i++) { |
| 107 var update = new api.UiElementUpdate(); |
| 108 update.setVisible(visible); |
| 109 scene.updateElement(this.buttons[i].uiElementId, update); |
| 110 } |
| 111 } |
| 112 }; |
| 113 |
| 114 class UiState { |
| 115 constructor() { |
| 116 this.mode = api.Mode.UNKNOWN; |
| 117 this.controls = new Controls(); |
| 118 scene.flush(); |
| 119 } |
| 120 |
| 121 setMode(mode) { |
| 122 this.controls.show(mode == api.Mode.STANDARD); |
| 123 scene.flush(); |
| 124 } |
| 125 }; |
| 126 |
| 64 function initialize() { | 127 function initialize() { |
| 65 | 128 |
| 66 domLoaded(); | |
| 67 | |
| 68 // Change the body background so that the transparency applies. | 129 // Change the body background so that the transparency applies. |
| 69 window.setTimeout(function() { | 130 window.setTimeout(function() { |
| 70 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)'; | 131 document.body.parentNode.style.backgroundColor = 'rgba(255,255,255,0)'; |
| 71 }, 100); | 132 }, 100); |
| 72 | 133 |
| 73 addControlButtons(); | 134 state = new UiState(); |
| 74 } | |
| 75 | 135 |
| 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(); | 136 api.domLoaded(); |
| 113 } | 137 } |
| 114 | 138 |
| 115 function command(dict) { | 139 function command(dict) { |
| 140 if ('mode' in dict) { |
| 141 state.setMode(dict['mode']); |
| 142 } |
| 116 } | 143 } |
| 117 | 144 |
| 118 return { | 145 return { |
| 119 initialize: initialize, | 146 initialize: initialize, |
| 120 command: command, | 147 command: command, |
| 121 }; | 148 }; |
| 122 })(); | 149 })(); |
| 123 | 150 |
| 124 document.addEventListener('DOMContentLoaded', vrShellUi.initialize); | 151 document.addEventListener('DOMContentLoaded', vrShellUi.initialize); |
| OLD | NEW |