| OLD | NEW |
| 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'); | 5 cr.exportPath('options'); |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @typedef {{ | 8 * @typedef {{ |
| 9 * availableColorProfiles: Array<{profileId: number, name: string}>, | 9 * availableColorProfiles: Array<{profileId: number, name: string}>, |
| 10 * colorProfile: number, | 10 * colorProfile: number, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 * values in ash/display/display_controller.cc. | 29 * values in ash/display/display_controller.cc. |
| 30 * @enum {number} | 30 * @enum {number} |
| 31 */ | 31 */ |
| 32 options.SecondaryDisplayLayout = { | 32 options.SecondaryDisplayLayout = { |
| 33 TOP: 0, | 33 TOP: 0, |
| 34 RIGHT: 1, | 34 RIGHT: 1, |
| 35 BOTTOM: 2, | 35 BOTTOM: 2, |
| 36 LEFT: 3 | 36 LEFT: 3 |
| 37 }; | 37 }; |
| 38 | 38 |
| 39 /** |
| 40 * Enumeration of multi display mode. The value has to be same as the |
| 41 * values in ash/display/display_manager.. |
| 42 * @enum {number} |
| 43 */ |
| 44 options.MultiDisplayMode = { |
| 45 EXTENDED: 0, |
| 46 MIRRORING: 1, |
| 47 UNIFIED: 2, |
| 48 }; |
| 49 |
| 39 cr.define('options', function() { | 50 cr.define('options', function() { |
| 40 var Page = cr.ui.pageManager.Page; | 51 var Page = cr.ui.pageManager.Page; |
| 41 var PageManager = cr.ui.pageManager.PageManager; | 52 var PageManager = cr.ui.pageManager.PageManager; |
| 42 | 53 |
| 43 // The scale ratio of the display rectangle to its original size. | 54 // The scale ratio of the display rectangle to its original size. |
| 44 /** @const */ var VISUAL_SCALE = 1 / 10; | 55 /** @const */ var VISUAL_SCALE = 1 / 10; |
| 45 | 56 |
| 46 // The number of pixels to share the edges between displays. | 57 // The number of pixels to share the edges between displays. |
| 47 /** @const */ var MIN_OFFSET_OVERLAP = 5; | 58 /** @const */ var MIN_OFFSET_OVERLAP = 5; |
| 48 | 59 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 | 120 |
| 110 DisplayOptions.prototype = { | 121 DisplayOptions.prototype = { |
| 111 __proto__: Page.prototype, | 122 __proto__: Page.prototype, |
| 112 | 123 |
| 113 /** | 124 /** |
| 114 * Whether the current output status is mirroring displays or not. | 125 * Whether the current output status is mirroring displays or not. |
| 115 * @private | 126 * @private |
| 116 */ | 127 */ |
| 117 mirroring_: false, | 128 mirroring_: false, |
| 118 | 129 |
| 130 /* |
| 131 * Whether the unified desktop is enable or not. |
| 132 * @private |
| 133 */ |
| 134 unifiedDesktopEnabled_: false, |
| 135 |
| 136 /* |
| 137 * Whether the unified desktop option should be present. |
| 138 * @private |
| 139 */ |
| 140 showUnifiedDesktopOption_: false, |
| 141 |
| 119 /** | 142 /** |
| 120 * The current secondary display layout. | 143 * The current secondary display layout. |
| 121 * @private | 144 * @private |
| 122 */ | 145 */ |
| 123 layout_: options.SecondaryDisplayLayout.RIGHT, | 146 layout_: options.SecondaryDisplayLayout.RIGHT, |
| 124 | 147 |
| 125 /** | 148 /** |
| 126 * The array of current output displays. It also contains the display | 149 * The array of current output displays. It also contains the display |
| 127 * rectangles currently rendered on screen. | 150 * rectangles currently rendered on screen. |
| 128 * @type {Array<options.DisplayInfo>} | 151 * @type {Array<options.DisplayInfo>} |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 var displayOverscan = options.DisplayOverscan.getInstance(); | 236 var displayOverscan = options.DisplayOverscan.getInstance(); |
| 214 displayOverscan.setDisplayId(this.displays_[this.focusedIndex_].id); | 237 displayOverscan.setDisplayId(this.displays_[this.focusedIndex_].id); |
| 215 PageManager.showPageByName('displayOverscan'); | 238 PageManager.showPageByName('displayOverscan'); |
| 216 chrome.send('coreOptionsUserMetricsAction', | 239 chrome.send('coreOptionsUserMetricsAction', |
| 217 ['Options_DisplaySetOverscan']); | 240 ['Options_DisplaySetOverscan']); |
| 218 }).bind(this); | 241 }).bind(this); |
| 219 | 242 |
| 220 $('display-options-done').onclick = function() { | 243 $('display-options-done').onclick = function() { |
| 221 PageManager.closeOverlay(); | 244 PageManager.closeOverlay(); |
| 222 }; | 245 }; |
| 246 |
| 247 $('display-options-toggle-unified-desktop').onclick = (function() { |
| 248 this.unifiedDesktopEnabled_ = !this.unifiedDesktopEnabled_; |
| 249 chrome.send('setUnifiedDesktopEnabled', |
| 250 [this.unifiedDesktopEnabled_]); |
| 251 }).bind(this); |
| 223 }, | 252 }, |
| 224 | 253 |
| 225 /** @override */ | 254 /** @override */ |
| 226 didShowPage: function() { | 255 didShowPage: function() { |
| 227 var optionTitles = document.getElementsByClassName( | 256 var optionTitles = document.getElementsByClassName( |
| 228 'selected-display-option-title'); | 257 'selected-display-option-title'); |
| 229 var maxSize = 0; | 258 var maxSize = 0; |
| 230 for (var i = 0; i < optionTitles.length; i++) | 259 for (var i = 0; i < optionTitles.length; i++) |
| 231 maxSize = Math.max(maxSize, optionTitles[i].clientWidth); | 260 maxSize = Math.max(maxSize, optionTitles[i].clientWidth); |
| 232 for (var i = 0; i < optionTitles.length; i++) | 261 for (var i = 0; i < optionTitles.length; i++) |
| 233 optionTitles[i].style.width = maxSize + 'px'; | 262 optionTitles[i].style.width = maxSize + 'px'; |
| 234 chrome.send('getDisplayInfo'); | 263 chrome.send('getDisplayInfo'); |
| 235 }, | 264 }, |
| 236 | 265 |
| 237 /** @override */ | 266 /** @override */ |
| 238 canShowPage: function() { | 267 canShowPage: function() { |
| 239 return this.enabled_; | 268 return this.enabled_; |
| 240 }, | 269 }, |
| 241 | 270 |
| 242 /** | 271 /** |
| 243 * Enables or disables the page. When disabled, the page will not be able to | 272 * Enables or disables the page. When disabled, the page will not be able to |
| 244 * open, and will close if currently opened. | 273 * open, and will close if currently opened. |
| 245 * @param {boolean} enabled Whether the page should be enabled. | 274 * @param {boolean} enabled Whether the page should be enabled. |
| 275 * @param {boolean} showUnifiedDesktop Whether the unified desktop option |
| 276 * should be present. |
| 246 */ | 277 */ |
| 247 setEnabled: function(enabled) { | 278 setEnabled: function(enabled, showUnifiedDesktop) { |
| 248 if (this.enabled_ == enabled) | 279 if (this.enabled_ == enabled && |
| 280 this.showUnifiedDesktopOption_ == showUnifiedDesktop) { |
| 249 return; | 281 return; |
| 282 } |
| 250 this.enabled_ = enabled; | 283 this.enabled_ = enabled; |
| 284 this.showUnifiedDesktopOption_ = showUnifiedDesktop; |
| 251 if (!enabled && this.visible) | 285 if (!enabled && this.visible) |
| 252 PageManager.closeOverlay(); | 286 PageManager.closeOverlay(); |
| 253 }, | 287 }, |
| 254 | 288 |
| 255 /** | 289 /** |
| 256 * Mouse move handler for dragging display rectangle. | 290 * Mouse move handler for dragging display rectangle. |
| 257 * @param {Event} e The mouse move event. | 291 * @param {Event} e The mouse move event. |
| 258 * @private | 292 * @private |
| 259 */ | 293 */ |
| 260 onMouseMove_: function(e) { | 294 onMouseMove_: function(e) { |
| (...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 offset.y + 'px'; | 958 offset.y + 'px'; |
| 925 break; | 959 break; |
| 926 } | 960 } |
| 927 this.secondaryDisplay_.originalPosition = { | 961 this.secondaryDisplay_.originalPosition = { |
| 928 x: secondaryDiv.offsetLeft, y: secondaryDiv.offsetTop}; | 962 x: secondaryDiv.offsetLeft, y: secondaryDiv.offsetTop}; |
| 929 } | 963 } |
| 930 }, | 964 }, |
| 931 | 965 |
| 932 /** | 966 /** |
| 933 * Called when the display arrangement has changed. | 967 * Called when the display arrangement has changed. |
| 934 * @param {boolean} mirroring Whether current mode is mirroring or not. | 968 * @param {options.MultiDisplayMode} multi display mode. |
| 935 * @param {Array<options.DisplayInfo>} displays The list of the display | 969 * @param {Array<options.DisplayInfo>} displays The list of the display |
| 936 * information. | 970 * information. |
| 937 * @param {options.SecondaryDisplayLayout} layout The layout strategy. | 971 * @param {options.SecondaryDisplayLayout} layout The layout strategy. |
| 938 * @param {number} offset The offset of the secondary display. | 972 * @param {number} offset The offset of the secondary display. |
| 939 * @private | 973 * @private |
| 940 */ | 974 */ |
| 941 onDisplayChanged_: function(mirroring, displays, layout, offset) { | 975 onDisplayChanged_: function(mode, displays, layout, offset) { |
| 942 if (!this.visible) | 976 if (!this.visible) |
| 943 return; | 977 return; |
| 944 | 978 |
| 945 var hasExternal = false; | 979 var hasExternal = false; |
| 946 for (var i = 0; i < displays.length; i++) { | 980 for (var i = 0; i < displays.length; i++) { |
| 947 if (!displays[i].isInternal) { | 981 if (!displays[i].isInternal) { |
| 948 hasExternal = true; | 982 hasExternal = true; |
| 949 break; | 983 break; |
| 950 } | 984 } |
| 951 } | 985 } |
| 952 | 986 |
| 953 this.layout_ = layout; | 987 this.layout_ = layout; |
| 954 | 988 |
| 989 var mirroring = mode == options.MultiDisplayMode.MIRRORING; |
| 990 var unifiedDesktopEnabled = mode == options.MultiDisplayMode.UNIFIED; |
| 991 |
| 955 $('display-options-toggle-mirroring').textContent = | 992 $('display-options-toggle-mirroring').textContent = |
| 956 loadTimeData.getString( | 993 loadTimeData.getString( |
| 957 mirroring ? 'stopMirroring' : 'startMirroring'); | 994 mirroring ? 'stopMirroring' : 'startMirroring'); |
| 958 | 995 |
| 959 // Focus to the first display next to the primary one when |displays| list | 996 // Focus to the first display next to the primary one when |displays| list |
| 960 // is updated. | 997 // is updated. |
| 961 if (mirroring) { | 998 if (mirroring || unifiedDesktopEnabled) { |
| 962 this.focusedIndex_ = null; | 999 this.focusedIndex_ = null; |
| 963 } else if (this.mirroring_ != mirroring || | 1000 } else if (this.mirroring_ != mirroring || |
| 1001 this.unifiedDesktopEnabled_ != unifiedDesktopEnabled || |
| 964 this.displays_.length != displays.length) { | 1002 this.displays_.length != displays.length) { |
| 965 this.focusedIndex_ = 0; | 1003 this.focusedIndex_ = 0; |
| 966 } | 1004 } |
| 967 | 1005 |
| 968 this.mirroring_ = mirroring; | 1006 this.mirroring_ = mirroring; |
| 1007 this.unifiedDesktopEnabled_ = unifiedDesktopEnabled; |
| 969 this.displays_ = displays; | 1008 this.displays_ = displays; |
| 970 | 1009 |
| 971 this.resetDisplaysView_(); | 1010 this.resetDisplaysView_(); |
| 972 if (this.mirroring_) | 1011 if (this.mirroring_) |
| 973 this.layoutMirroringDisplays_(); | 1012 this.layoutMirroringDisplays_(); |
| 974 else | 1013 else |
| 975 this.layoutDisplays_(); | 1014 this.layoutDisplays_(); |
| 976 | 1015 |
| 1016 $('display-options-unified-desktop').hidden = |
| 1017 !this.showUnifiedDesktopOption_; |
| 1018 |
| 1019 $('display-options-toggle-unified-desktop').checked = |
| 1020 this.unifiedDesktopEnabled_; |
| 1021 |
| 1022 var disableUnifiedDesktopOption = |
| 1023 (this.mirroring_ || |
| 1024 (!this.unifiedDesktopEnabled_ && |
| 1025 this.displays_.length == 1)); |
| 1026 |
| 1027 $('display-options-toggle-unified-desktop').disabled = |
| 1028 disableUnifiedDesktopOption; |
| 1029 |
| 977 this.updateSelectedDisplayDescription_(); | 1030 this.updateSelectedDisplayDescription_(); |
| 978 } | 1031 } |
| 979 }; | 1032 }; |
| 980 | 1033 |
| 981 DisplayOptions.setDisplayInfo = function( | 1034 DisplayOptions.setDisplayInfo = function( |
| 982 mirroring, displays, layout, offset) { | 1035 mode, displays, layout, offset) { |
| 983 DisplayOptions.getInstance().onDisplayChanged_( | 1036 DisplayOptions.getInstance().onDisplayChanged_( |
| 984 mirroring, displays, layout, offset); | 1037 mode, displays, layout, offset); |
| 985 }; | 1038 }; |
| 986 | 1039 |
| 987 // Export | 1040 // Export |
| 988 return { | 1041 return { |
| 989 DisplayOptions: DisplayOptions | 1042 DisplayOptions: DisplayOptions |
| 990 }; | 1043 }; |
| 991 }); | 1044 }); |
| OLD | NEW |