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

Unified Diff: chrome/browser/resources/options2/chromeos/display_options.js

Issue 10809005: Options: Rename chrome/browser/resources/options2 -> chrome/browser/resources/options. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options2/chromeos/display_options.js
diff --git a/chrome/browser/resources/options2/chromeos/display_options.js b/chrome/browser/resources/options2/chromeos/display_options.js
deleted file mode 100644
index b663d94209e89f1b1d5cbf079c0fe916913fd3ae..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/options2/chromeos/display_options.js
+++ /dev/null
@@ -1,454 +0,0 @@
-// Copyright (c) 2012 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;
-
- // The scale ratio of the display rectangle to its original size.
- /** @const */ var VISUAL_SCALE = 1 / 10;
-
- // The number of pixels to share the edges between displays.
- /** @const */ var MIN_OFFSET_OVERLAP = 5;
-
- /**
- * Enumeration of secondary display layout. The value has to be same as the
- * values in ash/monitor/monitor_controller.cc.
- * @enum {number}
- */
- var SecondaryDisplayLayout = {
- TOP: 0,
- RIGHT: 1,
- BOTTOM: 2,
- LEFT: 3
- };
-
- /**
- * Encapsulated handling of the 'Display' page.
- * @constructor
- */
- function DisplayOptions() {
- OptionsPage.call(this, 'display',
- loadTimeData.getString('displayOptionsPageTabTitle'),
- 'display-options');
- this.mirroring_ = false;
- this.focusedIndex_ = null;
- this.displays_ = [];
- }
-
- cr.addSingletonGetter(DisplayOptions);
-
- DisplayOptions.prototype = {
- __proto__: OptionsPage.prototype,
-
- /**
- * Initialize the page.
- */
- initializePage: function() {
- OptionsPage.prototype.initializePage.call(this);
-
- $('display-options-toggle-mirroring').onclick = (function() {
- this.mirroring_ = !this.mirroring_;
- chrome.send('setMirroring', [this.mirroring_]);
- }).bind(this);
-
- $('display-options-apply').onclick = this.applyResult_.bind(this);
- chrome.send('getDisplayInfo');
- },
-
- /** @override */
- onVisibilityChanged_: function() {
- OptionsPage.prototype.onVisibilityChanged_(this);
- if (this.visible)
- chrome.send('getDisplayInfo');
- },
-
- /**
- * Collects the current data and sends it to Chrome.
- * @private
- */
- applyResult_: function() {
- // Offset is calculated from top or left edge.
- var primary = this.displays_[0];
- var secondary = this.displays_[1];
- var offset;
- if (this.layout_ == SecondaryDisplayLayout.LEFT ||
- this.layout_ == SecondaryDisplayLayout.RIGHT) {
- offset = secondary.div.offsetTop - primary.div.offsetTop;
- } else {
- offset = secondary.div.offsetLeft - primary.div.offsetLeft;
- }
- chrome.send('setDisplayLayout', [this.layout_, offset / VISUAL_SCALE]);
- },
-
- /**
- * Mouse move handler for dragging display rectangle.
- * @private
- * @param {Event} e The mouse move event.
- */
- onMouseMove_: function(e) {
- if (!this.dragging_)
- return true;
-
- var index = -1;
- for (var i = 0; i < this.displays_.length; i++) {
- if (this.displays_[i] == this.dragging_.display) {
- index = i;
- break;
- }
- }
- if (index < 0)
- return true;
-
- // Note that current code of moving display-rectangles doesn't work
- // if there are >=3 displays. This is our assumption for M21.
- // TODO(mukai): Fix the code to allow >=3 displays.
- var mousePosition = {
- x: e.pageX - this.dragging_.offset.x,
- y: e.pageY - this.dragging_.offset.y
- };
- var newPosition = {
- x: mousePosition.x - this.dragging_.clickLocation.x,
- y: mousePosition.y - this.dragging_.clickLocation.y
- };
-
- var primaryDiv = this.displays_[0].div;
- var display = this.dragging_.display;
-
- // Separate the area into four (LEFT/RIGHT/TOP/BOTTOM) by the diagonals of
- // the primary display, and decide which area the display should reside.
- var diagonalSlope = primaryDiv.offsetHeight / primaryDiv.offsetWidth;
- var topDownIntercept =
- primaryDiv.offsetTop - primaryDiv.offsetLeft * diagonalSlope;
- var bottomUpIntercept = primaryDiv.offsetTop +
- primaryDiv.offsetHeight + primaryDiv.offsetLeft * diagonalSlope;
-
- if (mousePosition.y >
- topDownIntercept + mousePosition.x * diagonalSlope) {
- if (mousePosition.y >
- bottomUpIntercept - mousePosition.x * diagonalSlope)
- this.layout_ = SecondaryDisplayLayout.BOTTOM;
- else
- this.layout_ = SecondaryDisplayLayout.LEFT;
- } else {
- if (mousePosition.y >
- bottomUpIntercept - mousePosition.x * diagonalSlope)
- this.layout_ = SecondaryDisplayLayout.RIGHT;
- else
- this.layout_ = SecondaryDisplayLayout.TOP;
- }
-
- if (this.layout_ == SecondaryDisplayLayout.LEFT ||
- this.layout_ == SecondaryDisplayLayout.RIGHT) {
- if (newPosition.y > primaryDiv.offsetTop + primaryDiv.offsetHeight)
- this.layout_ = SecondaryDisplayLayout.BOTTOM;
- else if (newPosition.y + display.div.offsetHeight <
- primaryDiv.offsetTop)
- this.layout_ = SecondaryDisplayLayout.TOP;
- } else {
- if (newPosition.y > primaryDiv.offsetLeft + primaryDiv.offsetWidth)
- this.layout_ = SecondaryDisplayLayout.RIGHT;
- else if (newPosition.y + display.div.offsetWidth <
- primaryDiv.offstLeft)
- this.layout_ = SecondaryDisplayLayout.LEFT;
- }
-
- switch (this.layout_) {
- case SecondaryDisplayLayout.RIGHT:
- display.div.style.left =
- primaryDiv.offsetLeft + primaryDiv.offsetWidth + 'px';
- display.div.style.top = newPosition.y + 'px';
- break;
- case SecondaryDisplayLayout.LEFT:
- display.div.style.left =
- primaryDiv.offsetLeft - display.div.offsetWidth + 'px';
- display.div.style.top = newPosition.y + 'px';
- break;
- case SecondaryDisplayLayout.TOP:
- display.div.style.top =
- primaryDiv.offsetTop - display.div.offsetHeight + 'px';
- display.div.style.left = newPosition.x + 'px';
- break;
- case SecondaryDisplayLayout.BOTTOM:
- display.div.style.top =
- primaryDiv.offsetTop + primaryDiv.offsetHeight + 'px';
- display.div.style.left = newPosition.x + 'px';
- break;
- }
-
- return false;
- },
-
- /**
- * Mouse down handler for dragging display rectangle.
- * @private
- * @param {Event} e The mouse down event.
- */
- onMouseDown_: function(e) {
- if (this.mirroring_)
- return true;
-
- if (e.button != 0)
- return true;
-
- this.focusedIndex_ = null;
- for (var i = 0; i < this.displays_.length; i++) {
- var display = this.displays_[i];
- if (this.displays_[i].div == e.target ||
- (i == 0 && $('display-launcher') == e.target)) {
- this.focusedIndex_ = i;
- break;
- }
- }
-
- for (var i = 0; i < this.displays_.length; i++) {
- var display = this.displays_[i];
- display.div.className = 'displays-display';
- if (i != this.focusedIndex_)
- continue;
-
- display.div.classList.add('displays-focused');
- // Do not drag the primary monitor.
- if (i == 0)
- continue;
-
- this.dragging_ = {
- display: display,
- clickLocation: {x: e.offsetX, y: e.offsetY},
- offset: {x: e.pageX - e.offsetX - display.div.offsetLeft,
- y: e.pageY - e.offsetY - display.div.offsetTop}
- };
- }
- this.updateSelectedDisplayDescription_();
- return false;
- },
-
- /**
- * Mouse up handler for dragging display rectangle.
- * @private
- * @param {Event} e The mouse up event.
- */
- onMouseUp_: function(e) {
- if (this.dragging_) {
- // Make sure the dragging location is connected.
- var primaryDiv = this.displays_[0].div;
- var draggingDiv = this.dragging_.display.div;
- if (this.layout_ == SecondaryDisplayLayout.LEFT ||
- this.layout_ == SecondaryDisplayLayout.RIGHT) {
- var top = Math.max(draggingDiv.offsetTop,
- primaryDiv.offsetTop - draggingDiv.offsetHeight +
- MIN_OFFSET_OVERLAP);
- top = Math.min(top,
- primaryDiv.offsetTop + primaryDiv.offsetHeight -
- MIN_OFFSET_OVERLAP);
- draggingDiv.style.top = top + 'px';
- } else {
- var left = Math.max(draggingDiv.offsetLeft,
- primaryDiv.offsetLeft - draggingDiv.offsetWidth +
- MIN_OFFSET_OVERLAP);
- left = Math.min(left,
- primaryDiv.offsetLeft + primaryDiv.offsetWidth -
- MIN_OFFSET_OVERLAP);
- draggingDiv.style.left = left + 'px';
- }
- this.dragging_ = null;
- }
- this.updateSelectedDisplayDescription_();
- return false;
- },
-
- /**
- * Updates the description of the selected display section.
- * @private
- */
- updateSelectedDisplayDescription_: function() {
- if (this.focusedIndex_ == null ||
- this.displays_[this.focusedIndex_] == null) {
- $('selected-display-data-container').hidden = true;
- $('display-configuration-arrow').hidden = true;
- return;
- }
-
- $('selected-display-data-container').hidden = false;
- var display = this.displays_[this.focusedIndex_];
- var nameElement = $('selected-display-name');
- while (nameElement.childNodes.length > 0)
- nameElement.removeChild(nameElement.firstChild);
- nameElement.appendChild(document.createTextNode(display.name));
-
- var resolutionData = display.width + 'x' + display.height;
- var resolutionElement = $('selected-display-resolution');
- while (resolutionElement.childNodes.length > 0)
- resolutionElement.removeChild(resolutionElement.firstChild);
- resolutionElement.appendChild(document.createTextNode(resolutionData));
-
- var arrow = $('display-configuration-arrow');
- arrow.hidden = false;
- arrow.style.top =
- $('display-configurations').offsetTop - arrow.offsetHeight / 2 + 'px';
- arrow.style.left = display.div.offsetLeft + display.div.offsetWidth / 2 -
- arrow.offsetWidth / 2 + 'px';
- },
-
- /**
- * Clears the drawing area for display rectangles.
- * @private
- */
- resetDisplaysView_: function() {
- var displaysViewHost = $('display-options-displays-view-host');
- displaysViewHost.removeChild(displaysViewHost.firstChild);
- this.displaysView_ = document.createElement('div');
- this.displaysView_.id = 'display-options-displays-view';
- this.displaysView_.onmousemove = this.onMouseMove_.bind(this);
- this.displaysView_.onmousedown = this.onMouseDown_.bind(this);
- this.displaysView_.onmouseup = this.onMouseUp_.bind(this);
- displaysViewHost.appendChild(this.displaysView_);
- },
-
- /**
- * Lays out the display rectangles for mirroring.
- * @private
- */
- layoutMirroringDisplays_: function() {
- // Offset pixels for secondary display rectangles.
- /** @const */ var MIRRORING_OFFSET_PIXELS = 2;
- // Always show two displays because there must be two displays when
- // the display_options is enabled. Don't rely on displays_.length because
- // there is only one display from chrome's perspective in mirror mode.
- /** @const */ var MIN_NUM_DISPLAYS = 2;
- /** @const */ var MIRRORING_VERTICAL_MARGIN = 20;
-
- // The width/height should be same as the primary display:
- var width = this.displays_[0].width * VISUAL_SCALE;
- var height = this.displays_[0].height * VISUAL_SCALE;
-
- var numDisplays = Math.max(MIN_NUM_DISPLAYS, this.displays_.length);
-
- var totalWidth = width + numDisplays * MIRRORING_OFFSET_PIXELS;
- var totalHeight = height + numDisplays * MIRRORING_OFFSET_PIXELS;
-
- this.displaysView_.style.height = totalHeight + 'px';
- this.displaysView_.classList.add(
- 'display-options-displays-view-mirroring');
-
- // The displays should be centered.
- var offsetX =
- $('display-options-displays-view').offsetWidth / 2 - totalWidth / 2;
-
- for (var i = 0; i < numDisplays; i++) {
- var div = document.createElement('div');
- div.className = 'displays-display';
- div.style.top = i * MIRRORING_OFFSET_PIXELS + 'px';
- div.style.left = i * MIRRORING_OFFSET_PIXELS + offsetX + 'px';
- div.style.width = width + 'px';
- div.style.height = height + 'px';
- div.style.zIndex = i;
- // set 'display-mirrored' class for the background display rectangles.
- if (i != numDisplays - 1)
- div.classList.add('display-mirrored');
- this.displaysView_.appendChild(div);
- }
- },
-
- /**
- * Layouts the display rectangles according to the current layout_.
- * @private
- */
- layoutDisplays_: function() {
- var totalHeight = 0;
- var boundingBox = {left: 0, right: 0, top: 0, bottom: 0};
- for (var i = 0; i < this.displays_.length; i++) {
- var display = this.displays_[i];
- totalHeight += display.height * VISUAL_SCALE;
- boundingBox.left = Math.min(boundingBox.left, display.x * VISUAL_SCALE);
- boundingBox.right = Math.max(
- boundingBox.right, (display.x + display.width) * VISUAL_SCALE);
- boundingBox.top = Math.min(boundingBox.top, display.y * VISUAL_SCALE);
- boundingBox.bottom = Math.max(
- boundingBox.bottom, (display.y + display.height) * VISUAL_SCALE);
- }
-
- // Prepare enough area for thisplays_view by adding the maximum height.
- this.displaysView_.style.height = totalHeight + 'px';
-
- // Centering the bounding box of the display rectangles.
- var offset = {x: $('display-options-displays-view').offsetWidth / 2 -
- (boundingBox.left + boundingBox.right) / 2,
- y: totalHeight / 2 -
- (boundingBox.top + boundingBox.bottom) / 2};
-
-
- for (var i = 0; i < this.displays_.length; i++) {
- var display = this.displays_[i];
- var div = document.createElement('div');
- display.div = div;
-
- div.className = 'displays-display';
- if (i == this.focusedIndex_)
- div.classList.add('displays-focused');
- div.style.width = display.width * VISUAL_SCALE + 'px';
- div.style.height = display.height * VISUAL_SCALE + 'px';
- div.style.lineHeight = div.style.height;
- if (i == 0) {
- // Assumes that first display is primary and put a grey rectangle to
- // denote launcher below.
- var launcher = document.createElement('div');
- launcher.id = 'display-launcher';
- launcher.style.width = display.div.style.width;
- div.appendChild(launcher);
- }
- div.style.left = display.x * VISUAL_SCALE + offset.x + 'px';
- div.style.top = display.y * VISUAL_SCALE + offset.y + 'px';
-
- div.appendChild(document.createTextNode(display.name));
-
- this.displaysView_.appendChild(div);
- }
- },
-
- /**
- * Called when the display arrangement has changed.
- * @private
- * @param {boolean} mirroring Whether current mode is mirroring or not.
- * @param {Array} displays The list of the display information.
- * @param {SecondaryDisplayLayout} layout The layout strategy.
- * @param {number} offset The offset of the secondary display.
- */
- onDisplayChanged_: function(mirroring, displays, layout, offset) {
- this.mirroring_ = mirroring;
- this.layout_ = layout;
- this.offset_ = offset;
-
- $('display-options-toggle-mirroring').textContent =
- loadTimeData.getString(
- this.mirroring_ ? 'stopMirroring' : 'startMirroring');
-
- // Focus to the first display next to the primary one when |displays| list
- // is updated.
- if (this.mirroring_)
- this.focusedIndex_ = null;
- else if (this.displays_.length != displays.length)
- this.focusedIndex_ = 1;
-
- this.displays_ = displays;
-
- this.resetDisplaysView_();
- if (this.mirroring_)
- this.layoutMirroringDisplays_();
- else
- this.layoutDisplays_();
- this.updateSelectedDisplayDescription_();
- },
- };
-
- DisplayOptions.setDisplayInfo = function(
- mirroring, displays, layout, offset) {
- DisplayOptions.getInstance().onDisplayChanged_(
- mirroring, displays, layout, offset);
- };
-
- // Export
- return {
- DisplayOptions: DisplayOptions
- };
-});

Powered by Google App Engine
This is Rietveld 408576698