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

Side by Side Diff: chrome/browser/resources/options/chromeos/display_options.js

Issue 553573003: Compile chrome://settings, part 3: 167 proper errors left (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@G_options_errors_1
Patch Set: rebase Created 6 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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.exportPath('options');
6
7 /**
8 * @typedef {{
9 * availableColorProfiles: Array.<{profileId: number, name: string}>,
10 * colorProfile: number,
11 * height: number,
12 * id: string,
13 * isInternal: boolean,
14 * isPrimary: boolean,
15 * resolutions: Array.<{width: number, height: number, originalWidth: number,
16 * originalHeight: number, deviceScaleFactor: number, scale: number,
17 * refreshRate: number, isBest: boolean, selected: boolean}>,
18 * name: string,
19 * orientation: number,
20 * width: number,
21 * x: number,
22 * y: number
23 * }}
24 */
25 options.DisplayInfo;
26
27 /**
28 * Enumeration of secondary display layout. The value has to be same as the
29 * values in ash/display/display_controller.cc.
30 * @enum {number}
31 */
32 options.SecondaryDisplayLayout = {
33 TOP: 0,
34 RIGHT: 1,
35 BOTTOM: 2,
36 LEFT: 3
37 };
38
5 cr.define('options', function() { 39 cr.define('options', function() {
6 var Page = cr.ui.pageManager.Page; 40 var Page = cr.ui.pageManager.Page;
7 var PageManager = cr.ui.pageManager.PageManager; 41 var PageManager = cr.ui.pageManager.PageManager;
8 42
9 // The scale ratio of the display rectangle to its original size. 43 // The scale ratio of the display rectangle to its original size.
10 /** @const */ var VISUAL_SCALE = 1 / 10; 44 /** @const */ var VISUAL_SCALE = 1 / 10;
11 45
12 // The number of pixels to share the edges between displays. 46 // The number of pixels to share the edges between displays.
13 /** @const */ var MIN_OFFSET_OVERLAP = 5; 47 /** @const */ var MIN_OFFSET_OVERLAP = 5;
14 48
15 /** 49 /**
16 * Enumeration of secondary display layout. The value has to be same as the
17 * values in ash/display/display_controller.cc.
18 * @enum {number}
19 */
20 var SecondaryDisplayLayout = {
21 TOP: 0,
22 RIGHT: 1,
23 BOTTOM: 2,
24 LEFT: 3
25 };
26
27 /**
28 * Calculates the bounds of |element| relative to the page. 50 * Calculates the bounds of |element| relative to the page.
29 * @param {HTMLElement} element The element to be known. 51 * @param {HTMLElement} element The element to be known.
30 * @return {Object} The object for the bounds, with x, y, width, and height. 52 * @return {Object} The object for the bounds, with x, y, width, and height.
31 */ 53 */
32 function getBoundsInPage(element) { 54 function getBoundsInPage(element) {
33 var bounds = { 55 var bounds = {
34 x: element.offsetLeft, 56 x: element.offsetLeft,
35 y: element.offsetTop, 57 y: element.offsetTop,
36 width: element.offsetWidth, 58 width: element.offsetWidth,
37 height: element.offsetHeight 59 height: element.offsetHeight
38 }; 60 };
39 var parent = element.offsetParent; 61 var parent = element.offsetParent;
40 while (parent && parent != document.body) { 62 while (parent && parent != document.body) {
41 bounds.x += parent.offsetLeft; 63 bounds.x += parent.offsetLeft;
42 bounds.y += parent.offsetTop; 64 bounds.y += parent.offsetTop;
43 parent = parent.offsetParent; 65 parent = parent.offsetParent;
44 } 66 }
45 return bounds; 67 return bounds;
46 } 68 }
47 69
48 /** 70 /**
49 * Gets the position of |point| to |rect|, left, right, top, or bottom. 71 * Gets the position of |point| to |rect|, left, right, top, or bottom.
50 * @param {Object} rect The base rectangle with x, y, width, and height. 72 * @param {Object} rect The base rectangle with x, y, width, and height.
51 * @param {Object} point The point to check the position. 73 * @param {Object} point The point to check the position.
52 * @return {SecondaryDisplayLayout} The position of the calculated point. 74 * @return {options.SecondaryDisplayLayout} The position of the calculated
75 * point.
53 */ 76 */
54 function getPositionToRectangle(rect, point) { 77 function getPositionToRectangle(rect, point) {
55 // Separates the area into four (LEFT/RIGHT/TOP/BOTTOM) by the diagonals of 78 // Separates the area into four (LEFT/RIGHT/TOP/BOTTOM) by the diagonals of
56 // the rect, and decides which area the display should reside. 79 // the rect, and decides which area the display should reside.
57 var diagonalSlope = rect.height / rect.width; 80 var diagonalSlope = rect.height / rect.width;
58 var topDownIntercept = rect.y - rect.x * diagonalSlope; 81 var topDownIntercept = rect.y - rect.x * diagonalSlope;
59 var bottomUpIntercept = rect.y + rect.height + rect.x * diagonalSlope; 82 var bottomUpIntercept = rect.y + rect.height + rect.x * diagonalSlope;
60 83
61 if (point.y > topDownIntercept + point.x * diagonalSlope) { 84 if (point.y > topDownIntercept + point.x * diagonalSlope) {
62 if (point.y > bottomUpIntercept - point.x * diagonalSlope) 85 if (point.y > bottomUpIntercept - point.x * diagonalSlope)
63 return SecondaryDisplayLayout.BOTTOM; 86 return options.SecondaryDisplayLayout.BOTTOM;
64 else 87 else
65 return SecondaryDisplayLayout.LEFT; 88 return options.SecondaryDisplayLayout.LEFT;
66 } else { 89 } else {
67 if (point.y > bottomUpIntercept - point.x * diagonalSlope) 90 if (point.y > bottomUpIntercept - point.x * diagonalSlope)
68 return SecondaryDisplayLayout.RIGHT; 91 return options.SecondaryDisplayLayout.RIGHT;
69 else 92 else
70 return SecondaryDisplayLayout.TOP; 93 return options.SecondaryDisplayLayout.TOP;
71 } 94 }
72 } 95 }
73 96
74 /** 97 /**
75 * Encapsulated handling of the 'Display' page. 98 * Encapsulated handling of the 'Display' page.
76 * @constructor 99 * @constructor
77 * @extends {cr.ui.pageManager.Page} 100 * @extends {cr.ui.pageManager.Page}
78 */ 101 */
79 function DisplayOptions() { 102 function DisplayOptions() {
80 Page.call(this, 'display', 103 Page.call(this, 'display',
81 loadTimeData.getString('displayOptionsPageTabTitle'), 104 loadTimeData.getString('displayOptionsPageTabTitle'),
82 'display-options-page'); 105 'display-options-page');
83 } 106 }
84 107
85 cr.addSingletonGetter(DisplayOptions); 108 cr.addSingletonGetter(DisplayOptions);
86 109
87 DisplayOptions.prototype = { 110 DisplayOptions.prototype = {
88 __proto__: Page.prototype, 111 __proto__: Page.prototype,
89 112
90 /** 113 /**
91 * Whether the current output status is mirroring displays or not. 114 * Whether the current output status is mirroring displays or not.
92 * @private 115 * @private
93 */ 116 */
94 mirroring_: false, 117 mirroring_: false,
95 118
96 /** 119 /**
97 * The current secondary display layout. 120 * The current secondary display layout.
98 * @private 121 * @private
99 */ 122 */
100 layout_: SecondaryDisplayLayout.RIGHT, 123 layout_: options.SecondaryDisplayLayout.RIGHT,
101 124
102 /** 125 /**
103 * The array of current output displays. It also contains the display 126 * The array of current output displays. It also contains the display
104 * rectangles currently rendered on screen. 127 * rectangles currently rendered on screen.
128 * @type {Array.<options.DisplayInfo>}
105 * @private 129 * @private
106 */ 130 */
107 displays_: [], 131 displays_: [],
108 132
109 /** 133 /**
110 * The index for the currently focused display in the options UI. null if 134 * The index for the currently focused display in the options UI. null if
111 * no one has focus. 135 * no one has focus.
112 * @private 136 * @private
113 */ 137 */
114 focusedIndex_: null, 138 focusedIndex_: null,
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 297
274 /** 298 /**
275 * Collects the current data and sends it to Chrome. 299 * Collects the current data and sends it to Chrome.
276 * @private 300 * @private
277 */ 301 */
278 applyResult_: function() { 302 applyResult_: function() {
279 // Offset is calculated from top or left edge. 303 // Offset is calculated from top or left edge.
280 var primary = this.primaryDisplay_; 304 var primary = this.primaryDisplay_;
281 var secondary = this.secondaryDisplay_; 305 var secondary = this.secondaryDisplay_;
282 var offset; 306 var offset;
283 if (this.layout_ == SecondaryDisplayLayout.LEFT || 307 if (this.layout_ == options.SecondaryDisplayLayout.LEFT ||
284 this.layout_ == SecondaryDisplayLayout.RIGHT) { 308 this.layout_ == options.SecondaryDisplayLayout.RIGHT) {
285 offset = secondary.div.offsetTop - primary.div.offsetTop; 309 offset = secondary.div.offsetTop - primary.div.offsetTop;
286 } else { 310 } else {
287 offset = secondary.div.offsetLeft - primary.div.offsetLeft; 311 offset = secondary.div.offsetLeft - primary.div.offsetLeft;
288 } 312 }
289 chrome.send('setDisplayLayout', 313 chrome.send('setDisplayLayout',
290 [this.layout_, offset / this.visualScale_]); 314 [this.layout_, offset / this.visualScale_]);
291 }, 315 },
292 316
293 /** 317 /**
294 * Snaps the region [point, width] to [basePoint, baseWidth] if 318 * Snaps the region [point, width] to [basePoint, baseWidth] if
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 y: newPosition.y + draggingDiv.offsetHeight / 2 387 y: newPosition.y + draggingDiv.offsetHeight / 2
364 }; 388 };
365 389
366 var baseBounds = { 390 var baseBounds = {
367 x: baseDiv.offsetLeft, 391 x: baseDiv.offsetLeft,
368 y: baseDiv.offsetTop, 392 y: baseDiv.offsetTop,
369 width: baseDiv.offsetWidth, 393 width: baseDiv.offsetWidth,
370 height: baseDiv.offsetHeight 394 height: baseDiv.offsetHeight
371 }; 395 };
372 switch (getPositionToRectangle(baseBounds, newCenter)) { 396 switch (getPositionToRectangle(baseBounds, newCenter)) {
373 case SecondaryDisplayLayout.RIGHT: 397 case options.SecondaryDisplayLayout.RIGHT:
374 this.layout_ = this.dragging_.display.isPrimary ? 398 this.layout_ = this.dragging_.display.isPrimary ?
375 SecondaryDisplayLayout.LEFT : SecondaryDisplayLayout.RIGHT; 399 options.SecondaryDisplayLayout.LEFT :
400 options.SecondaryDisplayLayout.RIGHT;
376 break; 401 break;
377 case SecondaryDisplayLayout.LEFT: 402 case options.SecondaryDisplayLayout.LEFT:
378 this.layout_ = this.dragging_.display.isPrimary ? 403 this.layout_ = this.dragging_.display.isPrimary ?
379 SecondaryDisplayLayout.RIGHT : SecondaryDisplayLayout.LEFT; 404 options.SecondaryDisplayLayout.RIGHT :
405 options.SecondaryDisplayLayout.LEFT;
380 break; 406 break;
381 case SecondaryDisplayLayout.TOP: 407 case options.SecondaryDisplayLayout.TOP:
382 this.layout_ = this.dragging_.display.isPrimary ? 408 this.layout_ = this.dragging_.display.isPrimary ?
383 SecondaryDisplayLayout.BOTTOM : SecondaryDisplayLayout.TOP; 409 options.SecondaryDisplayLayout.BOTTOM :
410 options.SecondaryDisplayLayout.TOP;
384 break; 411 break;
385 case SecondaryDisplayLayout.BOTTOM: 412 case options.SecondaryDisplayLayout.BOTTOM:
386 this.layout_ = this.dragging_.display.isPrimary ? 413 this.layout_ = this.dragging_.display.isPrimary ?
387 SecondaryDisplayLayout.TOP : SecondaryDisplayLayout.BOTTOM; 414 options.SecondaryDisplayLayout.TOP :
415 options.SecondaryDisplayLayout.BOTTOM;
388 break; 416 break;
389 } 417 }
390 418
391 if (this.layout_ == SecondaryDisplayLayout.LEFT || 419 if (this.layout_ == options.SecondaryDisplayLayout.LEFT ||
392 this.layout_ == SecondaryDisplayLayout.RIGHT) { 420 this.layout_ == options.SecondaryDisplayLayout.RIGHT) {
393 if (newPosition.y > baseDiv.offsetTop + baseDiv.offsetHeight) 421 if (newPosition.y > baseDiv.offsetTop + baseDiv.offsetHeight)
394 this.layout_ = this.dragging_.display.isPrimary ? 422 this.layout_ = this.dragging_.display.isPrimary ?
395 SecondaryDisplayLayout.TOP : SecondaryDisplayLayout.BOTTOM; 423 options.SecondaryDisplayLayout.TOP :
424 options.SecondaryDisplayLayout.BOTTOM;
396 else if (newPosition.y + draggingDiv.offsetHeight < 425 else if (newPosition.y + draggingDiv.offsetHeight <
397 baseDiv.offsetTop) 426 baseDiv.offsetTop)
398 this.layout_ = this.dragging_.display.isPrimary ? 427 this.layout_ = this.dragging_.display.isPrimary ?
399 SecondaryDisplayLayout.BOTTOM : SecondaryDisplayLayout.TOP; 428 options.SecondaryDisplayLayout.BOTTOM :
429 options.SecondaryDisplayLayout.TOP;
400 } else { 430 } else {
401 if (newPosition.x > baseDiv.offsetLeft + baseDiv.offsetWidth) 431 if (newPosition.x > baseDiv.offsetLeft + baseDiv.offsetWidth)
402 this.layout_ = this.dragging_.display.isPrimary ? 432 this.layout_ = this.dragging_.display.isPrimary ?
403 SecondaryDisplayLayout.LEFT : SecondaryDisplayLayout.RIGHT; 433 options.SecondaryDisplayLayout.LEFT :
434 options.SecondaryDisplayLayout.RIGHT;
404 else if (newPosition.x + draggingDiv.offsetWidth < 435 else if (newPosition.x + draggingDiv.offsetWidth <
405 baseDiv.offsetLeft) 436 baseDiv.offsetLeft)
406 this.layout_ = this.dragging_.display.isPrimary ? 437 this.layout_ = this.dragging_.display.isPrimary ?
407 SecondaryDisplayLayout.RIGHT : SecondaryDisplayLayout.LEFT; 438 options.SecondaryDisplayLayout.RIGHT :
439 options.SecondaryDisplayLayout.LEFT;
408 } 440 }
409 441
410 var layoutToBase; 442 var layoutToBase;
411 if (!this.dragging_.display.isPrimary) { 443 if (!this.dragging_.display.isPrimary) {
412 layoutToBase = this.layout_; 444 layoutToBase = this.layout_;
413 } else { 445 } else {
414 switch (this.layout_) { 446 switch (this.layout_) {
415 case SecondaryDisplayLayout.RIGHT: 447 case options.SecondaryDisplayLayout.RIGHT:
416 layoutToBase = SecondaryDisplayLayout.LEFT; 448 layoutToBase = options.SecondaryDisplayLayout.LEFT;
417 break; 449 break;
418 case SecondaryDisplayLayout.LEFT: 450 case options.SecondaryDisplayLayout.LEFT:
419 layoutToBase = SecondaryDisplayLayout.RIGHT; 451 layoutToBase = options.SecondaryDisplayLayout.RIGHT;
420 break; 452 break;
421 case SecondaryDisplayLayout.TOP: 453 case options.SecondaryDisplayLayout.TOP:
422 layoutToBase = SecondaryDisplayLayout.BOTTOM; 454 layoutToBase = options.SecondaryDisplayLayout.BOTTOM;
423 break; 455 break;
424 case SecondaryDisplayLayout.BOTTOM: 456 case options.SecondaryDisplayLayout.BOTTOM:
425 layoutToBase = SecondaryDisplayLayout.TOP; 457 layoutToBase = options.SecondaryDisplayLayout.TOP;
426 break; 458 break;
427 } 459 }
428 } 460 }
429 461
430 switch (layoutToBase) { 462 switch (layoutToBase) {
431 case SecondaryDisplayLayout.RIGHT: 463 case options.SecondaryDisplayLayout.RIGHT:
432 draggingDiv.style.left = 464 draggingDiv.style.left =
433 baseDiv.offsetLeft + baseDiv.offsetWidth + 'px'; 465 baseDiv.offsetLeft + baseDiv.offsetWidth + 'px';
434 draggingDiv.style.top = newPosition.y + 'px'; 466 draggingDiv.style.top = newPosition.y + 'px';
435 break; 467 break;
436 case SecondaryDisplayLayout.LEFT: 468 case options.SecondaryDisplayLayout.LEFT:
437 draggingDiv.style.left = 469 draggingDiv.style.left =
438 baseDiv.offsetLeft - draggingDiv.offsetWidth + 'px'; 470 baseDiv.offsetLeft - draggingDiv.offsetWidth + 'px';
439 draggingDiv.style.top = newPosition.y + 'px'; 471 draggingDiv.style.top = newPosition.y + 'px';
440 break; 472 break;
441 case SecondaryDisplayLayout.TOP: 473 case options.SecondaryDisplayLayout.TOP:
442 draggingDiv.style.top = 474 draggingDiv.style.top =
443 baseDiv.offsetTop - draggingDiv.offsetHeight + 'px'; 475 baseDiv.offsetTop - draggingDiv.offsetHeight + 'px';
444 draggingDiv.style.left = newPosition.x + 'px'; 476 draggingDiv.style.left = newPosition.x + 'px';
445 break; 477 break;
446 case SecondaryDisplayLayout.BOTTOM: 478 case options.SecondaryDisplayLayout.BOTTOM:
447 draggingDiv.style.top = 479 draggingDiv.style.top =
448 baseDiv.offsetTop + baseDiv.offsetHeight + 'px'; 480 baseDiv.offsetTop + baseDiv.offsetHeight + 'px';
449 draggingDiv.style.left = newPosition.x + 'px'; 481 draggingDiv.style.left = newPosition.x + 'px';
450 break; 482 break;
451 } 483 }
452 484
453 return false; 485 return false;
454 }, 486 },
455 487
456 /** 488 /**
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 * @param {Event} e The event which triggers this. 530 * @param {Event} e The event which triggers this.
499 * @private 531 * @private
500 */ 532 */
501 endDragging_: function(e) { 533 endDragging_: function(e) {
502 this.lastTouchLocation_ = null; 534 this.lastTouchLocation_ = null;
503 if (this.dragging_) { 535 if (this.dragging_) {
504 // Make sure the dragging location is connected. 536 // Make sure the dragging location is connected.
505 var baseDiv = this.dragging_.display.isPrimary ? 537 var baseDiv = this.dragging_.display.isPrimary ?
506 this.secondaryDisplay_.div : this.primaryDisplay_.div; 538 this.secondaryDisplay_.div : this.primaryDisplay_.div;
507 var draggingDiv = this.dragging_.display.div; 539 var draggingDiv = this.dragging_.display.div;
508 if (this.layout_ == SecondaryDisplayLayout.LEFT || 540 if (this.layout_ == options.SecondaryDisplayLayout.LEFT ||
509 this.layout_ == SecondaryDisplayLayout.RIGHT) { 541 this.layout_ == options.SecondaryDisplayLayout.RIGHT) {
510 var top = Math.max(draggingDiv.offsetTop, 542 var top = Math.max(draggingDiv.offsetTop,
511 baseDiv.offsetTop - draggingDiv.offsetHeight + 543 baseDiv.offsetTop - draggingDiv.offsetHeight +
512 MIN_OFFSET_OVERLAP); 544 MIN_OFFSET_OVERLAP);
513 top = Math.min(top, 545 top = Math.min(top,
514 baseDiv.offsetTop + baseDiv.offsetHeight - 546 baseDiv.offsetTop + baseDiv.offsetHeight -
515 MIN_OFFSET_OVERLAP); 547 MIN_OFFSET_OVERLAP);
516 draggingDiv.style.top = top + 'px'; 548 draggingDiv.style.top = top + 'px';
517 } else { 549 } else {
518 var left = Math.max(draggingDiv.offsetLeft, 550 var left = Math.max(draggingDiv.offsetLeft,
519 baseDiv.offsetLeft - draggingDiv.offsetWidth + 551 baseDiv.offsetLeft - draggingDiv.offsetWidth +
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 // |displaysView_|. Otherwise its offsetHeight is yet 0. 852 // |displaysView_|. Otherwise its offsetHeight is yet 0.
821 displayNameContainer.style.marginTop = 853 displayNameContainer.style.marginTop =
822 (div.offsetHeight - displayNameContainer.offsetHeight) / 2 + 'px'; 854 (div.offsetHeight - displayNameContainer.offsetHeight) / 2 + 'px';
823 display.originalPosition = {x: div.offsetLeft, y: div.offsetTop}; 855 display.originalPosition = {x: div.offsetLeft, y: div.offsetTop};
824 } 856 }
825 }, 857 },
826 858
827 /** 859 /**
828 * Called when the display arrangement has changed. 860 * Called when the display arrangement has changed.
829 * @param {boolean} mirroring Whether current mode is mirroring or not. 861 * @param {boolean} mirroring Whether current mode is mirroring or not.
830 * @param {Array} displays The list of the display information. 862 * @param {Array.<options.DisplayInfo>} displays The list of the display
831 * @param {SecondaryDisplayLayout} layout The layout strategy. 863 * information.
864 * @param {options.SecondaryDisplayLayout} layout The layout strategy.
832 * @param {number} offset The offset of the secondary display. 865 * @param {number} offset The offset of the secondary display.
833 * @private 866 * @private
834 */ 867 */
835 onDisplayChanged_: function(mirroring, displays, layout, offset) { 868 onDisplayChanged_: function(mirroring, displays, layout, offset) {
836 if (!this.visible) 869 if (!this.visible)
837 return; 870 return;
838 871
839 var hasExternal = false; 872 var hasExternal = false;
840 for (var i = 0; i < displays.length; i++) { 873 for (var i = 0; i < displays.length; i++) {
841 if (!displays[i].isInternal) { 874 if (!displays[i].isInternal) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 mirroring, displays, layout, offset) { 909 mirroring, displays, layout, offset) {
877 DisplayOptions.getInstance().onDisplayChanged_( 910 DisplayOptions.getInstance().onDisplayChanged_(
878 mirroring, displays, layout, offset); 911 mirroring, displays, layout, offset);
879 }; 912 };
880 913
881 // Export 914 // Export
882 return { 915 return {
883 DisplayOptions: DisplayOptions 916 DisplayOptions: DisplayOptions
884 }; 917 };
885 }); 918 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698