Chromium Code Reviews| 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.define('options', function() { | 5 cr.define('options', function() { |
| 6 var OptionsPage = options.OptionsPage; | 6 var OptionsPage = options.OptionsPage; |
| 7 | 7 |
| 8 // The scale ratio of the display rectangle to its original size. | 8 // The scale ratio of the display rectangle to its original size. |
| 9 /** @const */ var VISUAL_SCALE = 1 / 10; | 9 /** @const */ var VISUAL_SCALE = 1 / 10; |
| 10 // The margin pixels to calculate the arrow position from left. This happens | |
|
James Hawkins
2012/08/03 18:08:23
You use the word 'left' here: does this work in RT
Jun Mukai
2012/08/06 08:07:32
Removed this constant. According to kuscher's com
| |
| 11 // due to the 'padding' value of $('display-options-displays-view-host'). | |
| 12 /** @const */ var ARROW_POSITION_MARGIN = 20; | |
| 10 | 13 |
| 11 /** | 14 /** |
| 12 * Enumeration of secondary display layout. The value has to be same as the | 15 * Enumeration of secondary display layout. The value has to be same as the |
| 13 * values in ash/monitor/monitor_controller.cc. | 16 * values in ash/monitor/monitor_controller.cc. |
| 14 * @enum {number} | 17 * @enum {number} |
| 15 */ | 18 */ |
| 16 var SecondaryDisplayLayout = { | 19 var SecondaryDisplayLayout = { |
| 17 TOP: 0, | 20 TOP: 0, |
| 18 RIGHT: 1, | 21 RIGHT: 1, |
| 19 BOTTOM: 2, | 22 BOTTOM: 2, |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 37 | 40 |
| 38 DisplayOptions.prototype = { | 41 DisplayOptions.prototype = { |
| 39 __proto__: OptionsPage.prototype, | 42 __proto__: OptionsPage.prototype, |
| 40 | 43 |
| 41 /** | 44 /** |
| 42 * Initialize the page. | 45 * Initialize the page. |
| 43 */ | 46 */ |
| 44 initializePage: function() { | 47 initializePage: function() { |
| 45 OptionsPage.prototype.initializePage.call(this); | 48 OptionsPage.prototype.initializePage.call(this); |
| 46 | 49 |
| 47 $('display-options-confirm').onclick = function() { | |
| 48 OptionsPage.closeOverlay(); | |
| 49 }; | |
| 50 | |
| 51 $('display-options-toggle-mirroring').onclick = (function() { | 50 $('display-options-toggle-mirroring').onclick = (function() { |
| 52 this.mirroring_ = !this.mirroring_; | 51 this.mirroring_ = !this.mirroring_; |
| 53 chrome.send('setMirroring', [this.mirroring_]); | 52 chrome.send('setMirroring', [this.mirroring_]); |
| 54 }).bind(this); | 53 }).bind(this); |
| 55 | 54 |
| 55 $('display-options-apply-button').onclick = (function() { | |
| 56 chrome.send('setDisplayLayout', [this.layout_]); | |
| 57 }).bind(this); | |
| 56 chrome.send('getDisplayInfo'); | 58 chrome.send('getDisplayInfo'); |
| 57 }, | 59 }, |
| 58 | 60 |
| 59 /** | 61 /** |
| 60 * Mouse move handler for dragging display rectangle. | 62 * Mouse move handler for dragging display rectangle. |
| 61 * @private | 63 * @private |
| 62 * @param {Event} e The mouse move event. | 64 * @param {Event} e The mouse move event. |
| 63 */ | 65 */ |
| 64 onMouseMove_: function(e) { | 66 onMouseMove_: function(e) { |
| 65 if (!this.dragging_) | 67 if (!this.dragging_) |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 * @private | 161 * @private |
| 160 * @param {Event} e The mouse down event. | 162 * @param {Event} e The mouse down event. |
| 161 */ | 163 */ |
| 162 onMouseDown_: function(e) { | 164 onMouseDown_: function(e) { |
| 163 if (this.mirroring_) | 165 if (this.mirroring_) |
| 164 return true; | 166 return true; |
| 165 | 167 |
| 166 if (e.button != 0) | 168 if (e.button != 0) |
| 167 return true; | 169 return true; |
| 168 | 170 |
| 169 if (e.target == this.displays_view_) | 171 this.focused_index_ = null; |
| 170 return true; | 172 for (var i = 0; i < this.displays_.length; i++) { |
| 173 var display = this.displays_[i]; | |
| 174 if (this.displays_[i].div == e.target) { | |
| 175 this.focused_index_ = i; | |
| 176 break; | |
| 177 } else if (i == 0 && $('display-launcher') == e.target) { | |
| 178 this.focused_index_ = i; | |
|
James Hawkins
2012/08/03 18:08:23
This is the same functionality as the block above:
Jun Mukai
2012/08/06 08:07:32
Done.
| |
| 179 break; | |
| 180 } | |
| 181 } | |
| 171 | 182 |
| 172 for (var i = 0; i < this.displays_.length; i++) { | 183 for (var i = 0; i < this.displays_.length; i++) { |
| 173 var display = this.displays_[i]; | 184 var display = this.displays_[i]; |
| 174 if (display.div == e.target) { | 185 display.div.className = 'displays-display'; |
| 175 // Do not drag the primary monitor. | 186 if (i != this.focused_index_) |
| 176 if (i == 0) | 187 continue; |
| 177 return true; | |
| 178 | 188 |
| 179 this.focused_index_ = i; | 189 display.div.className += ' displays-focused'; |
| 180 this.dragging_ = { | 190 // Do not drag the primary monitor. |
| 191 if (i == 0) | |
| 192 continue; | |
| 193 | |
| 194 this.dragging_ = { | |
| 181 display: display, | 195 display: display, |
| 182 click_location: {x: e.offsetX, y: e.offsetY}, | 196 click_location: {x: e.offsetX, y: e.offsetY}, |
| 183 offset: {x: e.pageX - e.offsetX - display.div.offsetLeft, | 197 offset: {x: e.pageX - e.offsetX - display.div.offsetLeft, |
| 184 y: e.pageY - e.offsetY - display.div.offsetTop} | 198 y: e.pageY - e.offsetY - display.div.offsetTop} |
| 185 }; | 199 }; |
| 186 if (display.div.className.indexOf('displays-focused') == -1) | |
| 187 display.div.className += ' displays-focused'; | |
| 188 } else if (display.div.className.indexOf('displays-focused') >= 0) { | |
| 189 // We can assume that '-primary' monitor doesn't have '-focused'. | |
| 190 this.displays_[i].div.className = 'displays-display'; | |
| 191 } | |
| 192 } | 200 } |
| 201 this.updateSelectedDisplayDescription_(); | |
| 193 return false; | 202 return false; |
| 194 }, | 203 }, |
| 195 | 204 |
| 196 /** | 205 /** |
| 197 * Mouse up handler for dragging display rectangle. | 206 * Mouse up handler for dragging display rectangle. |
| 198 * @private | 207 * @private |
| 199 * @param {Event} e The mouse up event. | 208 * @param {Event} e The mouse up event. |
| 200 */ | 209 */ |
| 201 onMouseUp_: function(e) { | 210 onMouseUp_: function(e) { |
| 202 if (this.dragging_) { | 211 if (this.dragging_) |
| 203 this.dragging_ = null; | 212 this.dragging_ = null; |
| 204 chrome.send('setDisplayLayout', [this.layout_]); | 213 this.updateSelectedDisplayDescription_(); |
| 214 return false; | |
| 215 }, | |
| 216 | |
| 217 /** | |
| 218 * Update the description of the selected display section. | |
|
James Hawkins
2012/08/03 18:08:23
s/Update/Updates.
Jun Mukai
2012/08/06 08:07:32
Done.
| |
| 219 * @private | |
| 220 */ | |
| 221 updateSelectedDisplayDescription_: function() { | |
| 222 if (this.focused_index_ == null) { | |
| 223 $('selected-display-data-container').hidden = true; | |
| 224 $('display-configuration-arrow').hidden = true; | |
| 225 return; | |
| 205 } | 226 } |
| 206 return false; | 227 |
| 228 $('selected-display-data-container').hidden = false; | |
| 229 var display = this.displays_[this.focused_index_]; | |
| 230 var name_element = $('selected-display-name'); | |
|
James Hawkins
2012/08/03 18:08:23
s/name_element/nameElement/
javaScript case here
Jun Mukai
2012/08/06 08:07:32
Sorry breaking such a basic rule. I reviewed the
| |
| 231 while (name_element.childNodes.length > 0) | |
| 232 name_element.removeChild(name_element.firstChild); | |
| 233 name_element.appendChild(document.createTextNode(display.name)); | |
| 234 | |
| 235 var resolution_data = display.width + 'x' + display.height; | |
| 236 var resolution_element = $('selected-display-resolution'); | |
| 237 while (resolution_element.childNodes.length > 0) | |
| 238 resolution_element.removeChild(resolution_element.firstChild); | |
| 239 resolution_element.appendChild(document.createTextNode(resolution_data)); | |
| 240 | |
| 241 var arrow = $('display-configuration-arrow'); | |
| 242 arrow.hidden = false; | |
| 243 arrow.style.top = | |
| 244 $('display-configurations').offsetTop - arrow.offsetHeight / 2 + 'px'; | |
| 245 arrow.style.left = display.div.offsetLeft + display.div.offsetWidth / 2 + | |
|
James Hawkins
2012/08/03 18:08:23
RTL
Jun Mukai
2012/08/06 08:07:32
Removed ARROW_POSITION_MARGIN and working fine now
| |
| 246 ARROW_POSITION_MARGIN - arrow.offsetWidth / 2 + 'px'; | |
| 207 }, | 247 }, |
| 208 | 248 |
| 209 /** | 249 /** |
| 210 * Clears the drawing area for display rectangles. | 250 * Clears the drawing area for display rectangles. |
| 211 * @private | 251 * @private |
| 212 */ | 252 */ |
| 213 resetDisplaysView_: function() { | 253 resetDisplaysView_: function() { |
| 214 var displays_view_host = $('display-options-displays-view-host'); | 254 var displays_view_host = $('display-options-displays-view-host'); |
| 215 displays_view_host.removeChild(displays_view_host.firstChild); | 255 displays_view_host.removeChild(displays_view_host.firstChild); |
| 216 this.displays_view_ = document.createElement('div'); | 256 this.displays_view_ = document.createElement('div'); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 243 height + num_displays * MIRRORING_OFFSET_PIXELS + 'px'; | 283 height + num_displays * MIRRORING_OFFSET_PIXELS + 'px'; |
| 244 | 284 |
| 245 for (var i = 0; i < num_displays; i++) { | 285 for (var i = 0; i < num_displays; i++) { |
| 246 var div = document.createElement('div'); | 286 var div = document.createElement('div'); |
| 247 div.className = 'displays-display'; | 287 div.className = 'displays-display'; |
| 248 div.style.top = i * MIRRORING_OFFSET_PIXELS + 'px'; | 288 div.style.top = i * MIRRORING_OFFSET_PIXELS + 'px'; |
| 249 div.style.left = i * MIRRORING_OFFSET_PIXELS + 'px'; | 289 div.style.left = i * MIRRORING_OFFSET_PIXELS + 'px'; |
| 250 div.style.width = width + 'px'; | 290 div.style.width = width + 'px'; |
| 251 div.style.height = height + 'px'; | 291 div.style.height = height + 'px'; |
| 252 div.style.zIndex = i; | 292 div.style.zIndex = i; |
| 253 if (i == num_displays - 1) | 293 // set 'display-mirrored' class for the background display rectangles. |
| 254 div.className += ' displays-primary'; | 294 if (i != num_displays - 1) |
| 295 div.className += ' display-mirrored'; | |
| 255 this.displays_view_.appendChild(div); | 296 this.displays_view_.appendChild(div); |
| 256 } | 297 } |
| 257 }, | 298 }, |
| 258 | 299 |
| 259 /** | 300 /** |
| 260 * Layouts the display rectangles according to the current layout_. | 301 * Layouts the display rectangles according to the current layout_. |
| 261 * @private | 302 * @private |
| 262 */ | 303 */ |
| 263 layoutDisplays_: function() { | 304 layoutDisplays_: function() { |
| 264 var total_size = {width: 0, height: 0}; | 305 var total_size = {width: 0, height: 0}; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 275 base_point.x = total_size.width; | 316 base_point.x = total_size.width; |
| 276 else if (this.layout_ == SecondaryDisplayLayout.TOP) | 317 else if (this.layout_ == SecondaryDisplayLayout.TOP) |
| 277 base_point.y = total_size.height; | 318 base_point.y = total_size.height; |
| 278 | 319 |
| 279 for (var i = 0; i < this.displays_.length; i++) { | 320 for (var i = 0; i < this.displays_.length; i++) { |
| 280 var display = this.displays_[i]; | 321 var display = this.displays_[i]; |
| 281 var div = document.createElement('div'); | 322 var div = document.createElement('div'); |
| 282 display.div = div; | 323 display.div = div; |
| 283 | 324 |
| 284 div.className = 'displays-display'; | 325 div.className = 'displays-display'; |
| 285 if (i == 0) | 326 if (i == this.focused_index_) |
| 286 div.className += ' displays-primary'; | |
| 287 else if (i == this.focused_index_) | |
| 288 div.className += ' displays-focused'; | 327 div.className += ' displays-focused'; |
| 289 div.style.width = display.width * VISUAL_SCALE + 'px'; | 328 div.style.width = display.width * VISUAL_SCALE + 'px'; |
| 290 div.style.height = display.height * VISUAL_SCALE + 'px'; | 329 div.style.height = display.height * VISUAL_SCALE + 'px'; |
| 291 div.style.lineHeight = div.style.height; | 330 div.style.lineHeight = div.style.height; |
| 331 if (i == 0) { | |
| 332 // We assume that first display is primary and put a grey rectangle to | |
|
James Hawkins
2012/08/03 18:08:23
nit: Don't use pronouns (we) in comments; pronouns
Jun Mukai
2012/08/06 08:07:32
Done.
| |
| 333 // denote launcher below. | |
| 334 var launcher = document.createElement('div'); | |
| 335 launcher.id = 'display-launcher'; | |
| 336 launcher.style.width = display.div.style.width; | |
| 337 div.appendChild(launcher); | |
| 338 } | |
| 292 switch (this.layout_) { | 339 switch (this.layout_) { |
| 293 case SecondaryDisplayLayout.RIGHT: | 340 case SecondaryDisplayLayout.RIGHT: |
| 294 display.div.style.top = '0'; | 341 display.div.style.top = '0'; |
| 295 display.div.style.left = base_point.x + 'px'; | 342 display.div.style.left = base_point.x + 'px'; |
| 296 base_point.x += display.width * VISUAL_SCALE; | 343 base_point.x += display.width * VISUAL_SCALE; |
| 297 break; | 344 break; |
| 298 case SecondaryDisplayLayout.LEFT: | 345 case SecondaryDisplayLayout.LEFT: |
| 299 display.div.style.top = '0'; | 346 display.div.style.top = '0'; |
| 300 base_point.x -= display.width * VISUAL_SCALE; | 347 base_point.x -= display.width * VISUAL_SCALE; |
| 301 display.div.style.left = base_point.x + 'px'; | 348 display.div.style.left = base_point.x + 'px'; |
| 302 break; | 349 break; |
| 303 case SecondaryDisplayLayout.TOP: | 350 case SecondaryDisplayLayout.TOP: |
| 304 display.div.style.left = '0'; | 351 display.div.style.left = '0'; |
| 305 base_point.y -= display.height * VISUAL_SCALE; | 352 base_point.y -= display.height * VISUAL_SCALE; |
| 306 display.div.style.top = base_point.y + 'px'; | 353 display.div.style.top = base_point.y + 'px'; |
| 307 break; | 354 break; |
| 308 case SecondaryDisplayLayout.BOTTOM: | 355 case SecondaryDisplayLayout.BOTTOM: |
| 309 display.div.style.left = '0'; | 356 display.div.style.left = '0'; |
| 310 display.div.style.top = base_point.y + 'px'; | 357 display.div.style.top = base_point.y + 'px'; |
| 311 base_point.y += display.height * VISUAL_SCALE; | 358 base_point.y += display.height * VISUAL_SCALE; |
| 312 break; | 359 break; |
| 313 } | 360 } |
| 314 | 361 |
| 362 div.appendChild(document.createTextNode(display.name)); | |
| 363 | |
| 315 this.displays_view_.appendChild(div); | 364 this.displays_view_.appendChild(div); |
| 316 } | 365 } |
| 317 }, | 366 }, |
| 318 | 367 |
| 319 /** | 368 /** |
| 320 * Called when the display arrangement has changed. | 369 * Called when the display arrangement has changed. |
| 321 * @private | 370 * @private |
| 322 * @param {boolean} mirroring Whether current mode is mirroring or not. | 371 * @param {boolean} mirroring Whether current mode is mirroring or not. |
| 323 * @param {Array} displays The list of the display information. | 372 * @param {Array} displays The list of the display information. |
| 324 * @param {SecondaryDisplayLayout} layout The layout strategy. | 373 * @param {SecondaryDisplayLayout} layout The layout strategy. |
| 325 */ | 374 */ |
| 326 onDisplayChanged_: function(mirroring, displays, layout) { | 375 onDisplayChanged_: function(mirroring, displays, layout) { |
| 327 this.mirroring_ = mirroring; | 376 this.mirroring_ = mirroring; |
| 328 this.layout_ = layout; | 377 this.layout_ = layout; |
| 329 | 378 |
| 330 $('display-options-toggle-mirroring').textContent = | 379 $('display-options-toggle-mirroring').textContent = |
| 331 loadTimeData.getString( | 380 loadTimeData.getString( |
| 332 this.mirroring_ ? 'stopMirroring' : 'startMirroring'); | 381 this.mirroring_ ? 'stopMirroring' : 'startMirroring'); |
| 333 | 382 |
| 334 // Focus to the first display next to the primary one when |displays| list | 383 // Focus to the first display next to the primary one when |displays| list |
| 335 // is updated. | 384 // is updated. |
| 336 if (this.displays_.length != displays.length) | 385 if (this.mirroring_) |
| 386 this.focused_index_ = null; | |
| 387 else if (this.displays_.length != displays.length) | |
| 337 this.focused_index_ = 1; | 388 this.focused_index_ = 1; |
| 338 | 389 |
| 339 this.displays_ = displays; | 390 this.displays_ = displays; |
| 340 | 391 |
| 341 this.resetDisplaysView_(); | 392 this.resetDisplaysView_(); |
| 342 if (this.mirroring_) | 393 if (this.mirroring_) |
| 343 this.layoutMirroringDisplays_(); | 394 this.layoutMirroringDisplays_(); |
| 344 else | 395 else |
| 345 this.layoutDisplays_(); | 396 this.layoutDisplays_(); |
| 397 this.updateSelectedDisplayDescription_(); | |
| 346 }, | 398 }, |
| 347 }; | 399 }; |
| 348 | 400 |
| 349 DisplayOptions.setDisplayInfo = function(mirroring, displays, layout) { | 401 DisplayOptions.setDisplayInfo = function(mirroring, displays, layout) { |
| 350 DisplayOptions.getInstance().onDisplayChanged_(mirroring, displays, layout); | 402 DisplayOptions.getInstance().onDisplayChanged_(mirroring, displays, layout); |
| 351 }; | 403 }; |
| 352 | 404 |
| 353 // Export | 405 // Export |
| 354 return { | 406 return { |
| 355 DisplayOptions: DisplayOptions | 407 DisplayOptions: DisplayOptions |
| 356 }; | 408 }; |
| 357 }); | 409 }); |
| OLD | NEW |