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

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

Issue 739413002: Fixes a minor rearrangement of rectangles for display settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 6 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/options/chromeos/display_options.js
diff --git a/chrome/browser/resources/options/chromeos/display_options.js b/chrome/browser/resources/options/chromeos/display_options.js
index 756e564534b323f096db58965e6c7ced0be66fd1..2bd934ec1bdba1862f831f03291efcca3b6496c5 100644
--- a/chrome/browser/resources/options/chromeos/display_options.js
+++ b/chrome/browser/resources/options/chromeos/display_options.js
@@ -766,6 +766,37 @@ cr.define('options', function() {
},
/**
+ * Creates a div element representing the specified display.
+ * @param {Object} display The display object.
+ * @param {boolean} focused True if it's focused.
+ * @private
+ */
+ createDisplayRectangle_: function(display, focused) {
+ var div = document.createElement('div');
+ display.div = div;
+ div.className = 'displays-display';
+ if (focused)
+ div.classList.add('displays-focused');
+
+ // div needs to be added to the DOM tree first, otherwise offsetHeight for
+ // nameContainer below cannot be computed.
+ this.displaysView_.appendChild(div);
+
+ var nameContainer = document.createElement('div');
+ nameContainer.textContent = display.name;
+ div.appendChild(nameContainer);
+ div.style.width = Math.floor(display.width * this.visualScale_) + 'px';
+ var newHeight = Math.floor(display.height * this.visualScale_);
+ div.style.height = newHeight + 'px';
+ nameContainer.style.marginTop =
+ (newHeight - nameContainer.offsetHeight) / 2 + 'px';
+
+ div.onmousedown = this.onMouseDown_.bind(this);
+ div.ontouchstart = this.onTouchStart_.bind(this);
+ return div;
+ },
+
+ /**
* Layouts the display rectangles according to the current layout_.
* @private
*/
@@ -773,8 +804,18 @@ cr.define('options', function() {
var maxWidth = 0;
var maxHeight = 0;
var boundingBox = {left: 0, right: 0, top: 0, bottom: 0};
+ this.primaryDisplay_ = null;
+ this.secondaryDisplay_ = null;
+ var focusedDisplay = null;
for (var i = 0; i < this.displays_.length; i++) {
var display = this.displays_[i];
+ if (display.isPrimary)
+ this.primaryDisplay_ = display;
+ else
+ this.secondaryDisplay_ = display;
+ if (i == this.focusedIndex_)
+ focusedDisplay = display;
+
boundingBox.left = Math.min(boundingBox.left, display.x);
boundingBox.right = Math.max(
boundingBox.right, display.x + display.width);
@@ -784,6 +825,8 @@ cr.define('options', function() {
maxWidth = Math.max(maxWidth, display.width);
maxHeight = Math.max(maxHeight, display.height);
}
+ if (!this.primaryDisplay_)
+ return;
// Make the margin around the bounding box.
var areaWidth = boundingBox.right - boundingBox.left + maxWidth;
@@ -798,13 +841,6 @@ cr.define('options', function() {
this.displaysView_.style.height =
Math.ceil(areaHeight * this.visualScale_) + 'px';
- var boundingCenter = {
- x: Math.floor((boundingBox.right + boundingBox.left) *
- this.visualScale_ / 2),
- y: Math.floor((boundingBox.bottom + boundingBox.top) *
- this.visualScale_ / 2)
- };
-
// Centering the bounding box of the display rectangles.
var offset = {
x: Math.floor(this.displaysView_.offsetWidth / 2 -
@@ -813,46 +849,57 @@ cr.define('options', function() {
(boundingBox.bottom + boundingBox.top) * this.visualScale_ / 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');
-
- if (display.isPrimary) {
- this.primaryDisplay_ = display;
- } else {
- this.secondaryDisplay_ = display;
+ // Layouting the display rectangles. First layout the primaryDisplay and
+ // then layout the secondary which is attaching to the primary.
+ var primaryDiv = this.createDisplayRectangle_(
+ this.primaryDisplay_, this.primaryDisplay_ == focusedDisplay);
+ primaryDiv.style.left =
+ Math.floor(this.primaryDisplay_.x * this.visualScale_) +
+ offset.x + 'px';
+ primaryDiv.style.top =
+ Math.floor(this.primaryDisplay_.y * this.visualScale_) +
+ offset.y + 'px';
+ this.primaryDisplay_.originalPosition = {
+ x: primaryDiv.offsetLeft, y: primaryDiv.offsetTop};
+
+ if (this.secondaryDisplay_) {
+ var secondaryDiv = this.createDisplayRectangle_(
+ this.secondaryDisplay_, this.secondaryDisplay_ == focusedDisplay);
+ // Don't trust the secondary display's x or y, because it may cause a
+ // 1px gap due to rounding, which will create a fake update on end
+ // dragging. See crbug.com/386401
+ switch (this.layout_) {
+ case options.SecondaryDisplayLayout.TOP:
+ secondaryDiv.style.left =
+ Math.floor(this.secondaryDisplay_.x * this.visualScale_) +
+ offset.x + 'px';
+ secondaryDiv.style.top =
+ primaryDiv.offsetTop - secondaryDiv.offsetHeight + 'px';
+ break;
+ case options.SecondaryDisplayLayout.RIGHT:
+ secondaryDiv.style.left =
+ primaryDiv.offsetLeft + primaryDiv.offsetWidth + 'px';
+ secondaryDiv.style.top =
+ Math.floor(this.secondaryDisplay_.y * this.visualScale_) +
+ offset.y + 'px';
+ break;
+ case options.SecondaryDisplayLayout.BOTTOM:
+ secondaryDiv.style.left =
+ Math.floor(this.secondaryDisplay_.x * this.visualScale_) +
+ offset.x + 'px';
+ secondaryDiv.style.top =
+ primaryDiv.offsetTop + primaryDiv.offsetHeight + 'px';
+ break;
+ case options.SecondaryDisplayLayout.LEFT:
+ secondaryDiv.style.left =
+ primaryDiv.offsetLeft - secondaryDiv.offsetWidth + 'px';
+ secondaryDiv.style.top =
+ Math.floor(this.secondaryDisplay_.y * this.visualScale_) +
+ offset.y + 'px';
+ break;
}
- var displayNameContainer = document.createElement('div');
- displayNameContainer.textContent = display.name;
- div.appendChild(displayNameContainer);
- display.nameContainer = displayNameContainer;
- display.div.style.width =
- Math.floor(display.width * this.visualScale_) + 'px';
- var newHeight = Math.floor(display.height * this.visualScale_);
- display.div.style.height = newHeight + 'px';
- div.style.left =
- Math.floor(display.x * this.visualScale_) + offset.x + 'px';
- div.style.top =
- Math.floor(display.y * this.visualScale_) + offset.y + 'px';
- display.nameContainer.style.marginTop =
- (newHeight - display.nameContainer.offsetHeight) / 2 + 'px';
-
- div.onmousedown = this.onMouseDown_.bind(this);
- div.ontouchstart = this.onTouchStart_.bind(this);
-
- this.displaysView_.appendChild(div);
-
- // Set the margin top to place the display name at the middle of the
- // rectangle. Note that this has to be done after it's added into the
- // |displaysView_|. Otherwise its offsetHeight is yet 0.
- displayNameContainer.style.marginTop =
- (div.offsetHeight - displayNameContainer.offsetHeight) / 2 + 'px';
- display.originalPosition = {x: div.offsetLeft, y: div.offsetTop};
+ this.secondaryDisplay_.originalPosition = {
+ x: secondaryDiv.offsetLeft, y: secondaryDiv.offsetTop};
}
},
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698