| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| cr.define('options', function() { |
| var OptionsPage = options.OptionsPage; |
| |
| /** |
| * Encapsulated handling of the 'DisplayOverscan' page. |
| * @constructor |
| */ |
| function DisplayOverscan() { |
| OptionsPage.call(this, 'displayOverscan', |
| loadTimeData.getString('displayOverscanPageTabTitle'), |
| 'display-overscan-page'); |
| } |
| |
| cr.addSingletonGetter(DisplayOverscan); |
| |
| DisplayOverscan.prototype = { |
| __proto__: OptionsPage.prototype, |
| |
| /** |
| * The ID of the target display. |
| * @private |
| */ |
| id_: null, |
| |
| /** |
| * The keyboard event handler function. |
| * @private |
| */ |
| keyHandler_: null, |
| |
| /** |
| * Initialize the page. |
| */ |
| initializePage: function() { |
| OptionsPage.prototype.initializePage.call(this); |
| |
| this.keyHandler_ = this.handleKeyevent_.bind(this); |
| $('display-overscan-operation-reset').onclick = function() { |
| chrome.send('reset'); |
| }; |
| $('display-overscan-operation-ok').onclick = function() { |
| chrome.send('commit'); |
| OptionsPage.closeOverlay(); |
| }; |
| $('display-overscan-operation-cancel').onclick = function() { |
| OptionsPage.cancelOverlay(); |
| }; |
| }, |
| |
| /** @override */ |
| handleCancel: function() { |
| // signals the cancel event. |
| chrome.send('cancel'); |
| OptionsPage.closeOverlay(); |
| }, |
| |
| /** @override */ |
| didShowPage: function() { |
| if (this.id_ == null) { |
| OptionsPage.cancelOverlay(); |
| return; |
| } |
| |
| window.addEventListener('keydown', this.keyHandler_); |
| // Sets up the size of the overscan dialog based on DisplayOptions dialog. |
| var displayOptionsPage = $('display-options-page'); |
| var displayOverscanPage = $('display-overscan-page'); |
| displayOverscanPage.style.width = |
| displayOptionsPage.offsetWidth - 20 + 'px'; |
| displayOverscanPage.style.minWidth = displayOverscanPage.style.width; |
| displayOverscanPage.style.height = |
| displayOptionsPage.offsetHeight - 50 + 'px'; |
| |
| // Moves the table to describe operation at the middle of the contents |
| // vertically. |
| var operationsTable = $('display-overscan-operations-table'); |
| var buttonsContainer = $('display-overscan-button-strip'); |
| operationsTable.style.top = buttonsContainer.offsetTop / 2 - |
| operationsTable.offsetHeight / 2 + 'px'; |
| |
| $('display-overscan-operation-cancel').focus(); |
| chrome.send('start', [this.id_]); |
| }, |
| |
| /** @override */ |
| didClosePage: function() { |
| window.removeEventListener('keydown', this.keyHandler_); |
| }, |
| |
| /** |
| * Called when the overscan calibration is canceled at the system level, |
| * such like the display is disconnected. |
| * @private |
| */ |
| onOverscanCanceled_: function() { |
| OptionsPage.cancelOverlay(); |
| }, |
| |
| /** |
| * Sets the target display id. This method has to be called before |
| * navigating to this page. |
| * @param {string} id The target display id. |
| */ |
| setDisplayId: function(id) { |
| this.id_ = id; |
| }, |
| |
| /** |
| * Key event handler to make the effect of display rectangle. |
| * @param {Event} event The keyboard event. |
| * @private |
| */ |
| handleKeyevent_: function(event) { |
| switch (event.keyCode) { |
| case 37: // left arrow |
| if (event.shiftKey) |
| chrome.send('move', ['horizontal', -1]); |
| else |
| chrome.send('resize', ['horizontal', -1]); |
| event.preventDefault(); |
| break; |
| case 38: // up arrow |
| if (event.shiftKey) |
| chrome.send('move', ['vertical', -1]); |
| else |
| chrome.send('resize', ['vertical', -1]); |
| event.preventDefault(); |
| break; |
| case 39: // right arrow |
| if (event.shiftKey) |
| chrome.send('move', ['horizontal', 1]); |
| else |
| chrome.send('resize', ['horizontal', 1]); |
| event.preventDefault(); |
| break; |
| case 40: // bottom arrow |
| if (event.shiftKey) |
| chrome.send('move', ['vertical', 1]); |
| else |
| chrome.send('resize', ['vertical', 1]); |
| event.preventDefault(); |
| break; |
| } |
| } |
| }; |
| |
| DisplayOverscan.onOverscanCanceled = function() { |
| DisplayOverscan.getInstance().onOverscanCanceled_(); |
| }; |
| |
| // Export |
| return { |
| DisplayOverscan: DisplayOverscan |
| }; |
| }); |