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

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

Issue 2668093002: VrShell background implemented in JS. (Closed)
Patch Set: Replaced content_quad with CONTENT filling, gradient renderer respects opacity, nits Created 3 years, 10 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 var vrShellUi = (function() { 5 var vrShellUi = (function() {
6 'use strict'; 6 'use strict';
7 7
8 let ui = new scene.Scene(); 8 let ui = new scene.Scene();
9 let uiManager; 9 let uiManager;
10 10
(...skipping 15 matching lines...) Expand all
26 } 26 }
27 27
28 class ContentQuad { 28 class ContentQuad {
29 constructor() { 29 constructor() {
30 /** @const */ this.SCREEN_HEIGHT = 1.6; 30 /** @const */ this.SCREEN_HEIGHT = 1.6;
31 /** @const */ this.SCREEN_RATIO = 16 / 9; 31 /** @const */ this.SCREEN_RATIO = 16 / 9;
32 /** @const */ this.BROWSING_SCREEN_DISTANCE = 2.0; 32 /** @const */ this.BROWSING_SCREEN_DISTANCE = 2.0;
33 /** @const */ this.FULLSCREEN_DISTANCE = 3.0; 33 /** @const */ this.FULLSCREEN_DISTANCE = 3.0;
34 34
35 let element = new api.UiElement(0, 0, 0, 0); 35 let element = new api.UiElement(0, 0, 0, 0);
36 element.setIsContentQuad(); 36 element.setFill(new api.Content());
37 element.setVisible(false); 37 element.setVisible(false);
38 element.setSize( 38 element.setSize(
39 this.SCREEN_HEIGHT * this.SCREEN_RATIO, this.SCREEN_HEIGHT); 39 this.SCREEN_HEIGHT * this.SCREEN_RATIO, this.SCREEN_HEIGHT);
40 element.setTranslation(0, 0, -this.BROWSING_SCREEN_DISTANCE); 40 element.setTranslation(0, 0, -this.BROWSING_SCREEN_DISTANCE);
41 this.elementId = ui.addElement(element); 41 this.elementId = ui.addElement(element);
42 } 42 }
43 43
44 setEnabled(enabled) { 44 setEnabled(enabled) {
45 let update = new api.UiElementUpdate(); 45 let update = new api.UiElementUpdate();
46 update.setVisible(enabled); 46 update.setVisible(enabled);
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 if (visible == this.nativeState.visible) { 446 if (visible == this.nativeState.visible) {
447 return; 447 return;
448 } 448 }
449 this.nativeState.visible = visible; 449 this.nativeState.visible = visible;
450 let update = new api.UiElementUpdate(); 450 let update = new api.UiElementUpdate();
451 update.setVisible(visible); 451 update.setVisible(visible);
452 ui.updateElement(this.domUiElement.uiElementId, update); 452 ui.updateElement(this.domUiElement.uiElementId, update);
453 ui.flush(); 453 ui.flush();
454 } 454 }
455 }; 455 };
456
457 class Background {
458 constructor() {
459 /** @const */ var GRADIENT_LIGHER_GRAY =
460 {r: 0.57, g: 0.57, b: 0.57, a:1.0};
461 /** @const */ var GRADIENT_DARKER_GRAY =
462 {r: 0.48, g: 0.48, b: 0.48, a:1.0};
463 /** @const */ var SCENE_GROUND_SIZE = 25.0;
464 /** @const */ var SCENE_HEIGHT = 4.0;
465 /** @const */ var TILE_NUMBER = 10;
466
467 // Make ground plane.
468 let groundPlane = new api.UiElementUpdate();
469 groundPlane.setVisible(true);
470 groundPlane.setSize(SCENE_GROUND_SIZE, SCENE_GROUND_SIZE);
471 groundPlane.setFill(new api.OpaqueGradient(GRADIENT_LIGHER_GRAY,
472 GRADIENT_DARKER_GRAY));
473 groundPlane.setTranslation(0, -SCENE_HEIGHT/2, 0);
474 groundPlane.setRotation(1.0, 0.0, 0.0, -Math.PI/2);
475 this.groundPlaneId = ui.addElement(groundPlane);
476
477 // Make ceiling plane.
478 let ceilingPlane = new api.UiElementUpdate();
479 ceilingPlane.setVisible(true);
480 ceilingPlane.setSize(SCENE_GROUND_SIZE, SCENE_GROUND_SIZE);
481 ceilingPlane.setFill(new api.OpaqueGradient(GRADIENT_LIGHER_GRAY,
482 GRADIENT_DARKER_GRAY));
483 ceilingPlane.setTranslation(0, SCENE_HEIGHT/2, 0);
484 ceilingPlane.setRotation(1.0, 0.0, 0.0, Math.PI/2);
485 this.ceilingPlaneId = ui.addElement(ceilingPlane);
486
487 // Ground grid.
488 let groundGrid = new api.UiElementUpdate();
489 groundGrid.setVisible(true);
490 groundGrid.setSize(SCENE_GROUND_SIZE, SCENE_GROUND_SIZE);
491 groundGrid.setFill(new api.GridGradient(GRADIENT_LIGHER_GRAY,
492 GRADIENT_LIGHER_GRAY, TILE_NUMBER));
493 groundGrid.setTranslation(0, -SCENE_HEIGHT/2 + 0.01, 0);
494 groundGrid.setRotation(1.0, 0.0, 0.0, -Math.PI/2);
495 this.groundGridId = ui.addElement(groundGrid);
496 }
497
498 setEnabled(enabled) {
499 let groundPlaneUpdate = new api.UiElementUpdate();
500 groundPlaneUpdate.setVisible(enabled);
501 ui.updateElement(this.groundPlaneId, groundPlaneUpdate);
502 let ceilingPlaneUpdate = new api.UiElementUpdate();
503 ceilingPlaneUpdate.setVisible(enabled);
504 ui.updateElement(this.ceilingPlaneId, ceilingPlaneUpdate);
505 let groundGridUpdate = new api.UiElementUpdate();
506 groundGridUpdate.setVisible(enabled);
507 ui.updateElement(this.groundGridId, groundGridUpdate);
508 }
509 };
456 510
457 class UiManager { 511 class UiManager {
458 constructor() { 512 constructor() {
459 this.mode = api.Mode.UNKNOWN; 513 this.mode = api.Mode.UNKNOWN;
460 this.menuMode = false; 514 this.menuMode = false;
461 this.fullscreen = false; 515 this.fullscreen = false;
462 516
517 this.background = new Background();
463 this.contentQuad = new ContentQuad(); 518 this.contentQuad = new ContentQuad();
464 let contentId = this.contentQuad.getElementId(); 519 let contentId = this.contentQuad.getElementId();
465 520
466 this.controls = new Controls(contentId); 521 this.controls = new Controls(contentId);
467 this.secureOriginWarnings = new SecureOriginWarnings(); 522 this.secureOriginWarnings = new SecureOriginWarnings();
468 this.urlIndicator = new UrlIndicator(); 523 this.urlIndicator = new UrlIndicator();
469 } 524 }
470 525
471 setMode(mode, menuMode, fullscreen) { 526 setMode(mode, menuMode, fullscreen) {
472 /** @const */ var URL_INDICATOR_VISIBILITY_TIMEOUT_MS = 5000; 527 /** @const */ var URL_INDICATOR_VISIBILITY_TIMEOUT_MS = 5000;
473 528
474 this.mode = mode; 529 this.mode = mode;
475 this.menuMode = menuMode; 530 this.menuMode = menuMode;
476 this.fullscreen = fullscreen; 531 this.fullscreen = fullscreen;
477 532
478 this.contentQuad.setEnabled(mode == api.Mode.STANDARD && !menuMode); 533 this.contentQuad.setEnabled(mode == api.Mode.STANDARD && !menuMode);
479 this.contentQuad.setFullscreen(fullscreen); 534 this.contentQuad.setFullscreen(fullscreen);
480 // TODO(crbug/643815): Set aspect ratio on content quad when available. 535 // TODO(crbug/643815): Set aspect ratio on content quad when available.
481 // TODO(amp): Don't show controls in fullscreen once MENU mode lands. 536 // TODO(amp): Don't show controls in fullscreen once MENU mode lands.
482 this.controls.setEnabled(mode == api.Mode.STANDARD && !menuMode); 537 this.controls.setEnabled(mode == api.Mode.STANDARD && !menuMode);
483 this.urlIndicator.setEnabled(mode == api.Mode.STANDARD && !menuMode); 538 this.urlIndicator.setEnabled(mode == api.Mode.STANDARD && !menuMode);
484 // TODO(amp): Don't show controls in CINEMA mode once MENU mode lands. 539 // TODO(amp): Don't show controls in CINEMA mode once MENU mode lands.
485 this.urlIndicator.setVisibilityTimeout( 540 this.urlIndicator.setVisibilityTimeout(
486 mode == api.Mode.STANDARD && !menuMode ? 541 mode == api.Mode.STANDARD && !menuMode ?
487 0 : 542 0 :
488 URL_INDICATOR_VISIBILITY_TIMEOUT_MS); 543 URL_INDICATOR_VISIBILITY_TIMEOUT_MS);
489 this.secureOriginWarnings.setEnabled(mode == api.Mode.WEB_VR); 544 this.secureOriginWarnings.setEnabled(mode == api.Mode.WEB_VR);
545 this.background.setEnabled(mode == api.Mode.STANDARD && !menuMode);
490 546
491 api.setUiCssSize( 547 api.setUiCssSize(
492 uiRootElement.clientWidth, uiRootElement.clientHeight, UI_DPR); 548 uiRootElement.clientWidth, uiRootElement.clientHeight, UI_DPR);
493 } 549 }
494 550
495 setSecurityLevel(level) { 551 setSecurityLevel(level) {
496 this.urlIndicator.setSecurityLevel(level); 552 this.urlIndicator.setSecurityLevel(level);
497 } 553 }
498 554
499 setWebVRSecureOrigin(secure) { 555 setWebVRSecureOrigin(secure) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 ui.flush(); 594 ui.flush();
539 } 595 }
540 596
541 return { 597 return {
542 initialize: initialize, 598 initialize: initialize,
543 command: command, 599 command: command,
544 }; 600 };
545 })(); 601 })();
546 602
547 window.addEventListener('load', vrShellUi.initialize); 603 window.addEventListener('load', vrShellUi.initialize);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698