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

Side by Side Diff: chrome/browser/resources/options/chromeos/display_options.js

Issue 1588843002: Update display_options.js to better match chrome.system.display (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_576375_display1
Patch Set: Rebase Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/webui/options/chromeos/display_options_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 * left: number,
10 * colorProfile: number, 10 * top: number,
11 * width: number,
12 * height: number
13 * }}
14 */
15 options.DisplayBounds;
16
17 /**
18 * @typedef {{
19 * width: number,
11 * height: number, 20 * height: number,
21 * originalWidth: number,
22 * originalHeight: number,
23 * deviceScaleFactor: number,
24 * scale: number,
25 * refreshRate: number,
26 * isBest: boolean,
27 * selected: boolean
28 * }}
29 */
30 options.DisplayMode;
31
32 /**
33 * @typedef {{
34 * profileId: number,
35 * name: string
36 * }}
37 */
38 options.ColorProfile;
39
40 /**
41 * @typedef {{
42 * availableColorProfiles: !Array<!options.ColorProfile>,
43 * bounds: options.DisplayBounds,
44 * colorProfileId: number,
45 * div: ?Element,
12 * id: string, 46 * id: string,
13 * isInternal: boolean, 47 * isInternal: boolean,
14 * isPrimary: boolean, 48 * isPrimary: boolean,
15 * resolutions: Array<{width: number, height: number, originalWidth: number, 49 * resolutions: !Array<!options.DisplayMode>,
16 * originalHeight: number, deviceScaleFactor: number, scale: number,
17 * refreshRate: number, isBest: boolean, selected: boolean}>,
18 * name: string, 50 * name: string,
19 * orientation: number, 51 * rotation: number,
20 * width: number, 52 * originalPosition: ?{x: number, y: number}
21 * x: number,
22 * y: number
23 * }} 53 * }}
24 */ 54 */
25 options.DisplayInfo; 55 options.DisplayInfo;
26 56
27 /** 57 /**
28 * Enumeration of secondary display layout. The value has to be same as the 58 * Enumeration of secondary display layout. The value has to be same as the
29 * values in ash/display/display_controller.cc. 59 * values in ash/display/display_controller.cc.
30 * @enum {number} 60 * @enum {number}
31 */ 61 */
32 options.SecondaryDisplayLayout = { 62 options.SecondaryDisplayLayout = {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 171
142 /** 172 /**
143 * The current secondary display layout. 173 * The current secondary display layout.
144 * @private 174 * @private
145 */ 175 */
146 layout_: options.SecondaryDisplayLayout.RIGHT, 176 layout_: options.SecondaryDisplayLayout.RIGHT,
147 177
148 /** 178 /**
149 * The array of current output displays. It also contains the display 179 * The array of current output displays. It also contains the display
150 * rectangles currently rendered on screen. 180 * rectangles currently rendered on screen.
151 * @type {Array<options.DisplayInfo>} 181 * @type {!Array<!options.DisplayInfo>}
152 * @private 182 * @private
153 */ 183 */
154 displays_: [], 184 displays_: [],
155 185
156 /** 186 /**
157 * The index for the currently focused display in the options UI. null if 187 * The index for the currently focused display in the options UI. null if
158 * no one has focus. 188 * no one has focus.
159 * @private 189 * @private
160 */ 190 */
161 focusedIndex_: null, 191 focusedIndex_: null,
162 192
163 /** 193 /**
164 * The primary display. 194 * The primary display edit info.
195 * @type {?options.DisplayInfo}
165 * @private 196 * @private
166 */ 197 */
167 primaryDisplay_: null, 198 primaryDisplay_: null,
168 199
169 /** 200 /**
170 * The secondary display. 201 * The secondary display edit info.
202 * @type {?options.DisplayInfo}
171 * @private 203 * @private
172 */ 204 */
173 secondaryDisplay_: null, 205 secondaryDisplay_: null,
174 206
175 /** 207 /**
176 * The container div element which contains all of the display rectangles. 208 * The container div element which contains all of the display rectangles.
177 * @private 209 * @private
178 */ 210 */
179 displaysView_: null, 211 displaysView_: null,
180 212
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 chrome.send('setPrimary', [this.displays_[this.focusedIndex_].id]); 251 chrome.send('setPrimary', [this.displays_[this.focusedIndex_].id]);
220 }).bind(this); 252 }).bind(this);
221 $('display-options-resolution-selection').onchange = (function(ev) { 253 $('display-options-resolution-selection').onchange = (function(ev) {
222 var display = this.displays_[this.focusedIndex_]; 254 var display = this.displays_[this.focusedIndex_];
223 var resolution = display.resolutions[ev.target.value]; 255 var resolution = display.resolutions[ev.target.value];
224 chrome.send('setDisplayMode', [display.id, resolution]); 256 chrome.send('setDisplayMode', [display.id, resolution]);
225 }).bind(this); 257 }).bind(this);
226 $('display-options-orientation-selection').onchange = (function(ev) { 258 $('display-options-orientation-selection').onchange = (function(ev) {
227 var displayIndex = 259 var displayIndex =
228 (this.focusedIndex_ === null) ? 0 : this.focusedIndex_; 260 (this.focusedIndex_ === null) ? 0 : this.focusedIndex_;
229 chrome.send('setOrientation', [this.displays_[displayIndex].id, 261 var rotation = parseInt(ev.target.value, 10);
230 ev.target.value]); 262 chrome.send('setRotation', [this.displays_[displayIndex].id, rotation]);
231 }).bind(this); 263 }).bind(this);
232 $('display-options-color-profile-selection').onchange = (function(ev) { 264 $('display-options-color-profile-selection').onchange = (function(ev) {
233 chrome.send('setColorProfile', [this.displays_[this.focusedIndex_].id, 265 chrome.send('setColorProfile', [this.displays_[this.focusedIndex_].id,
234 ev.target.value]); 266 ev.target.value]);
235 }).bind(this); 267 }).bind(this);
236 $('selected-display-start-calibrating-overscan').onclick = (function() { 268 $('selected-display-start-calibrating-overscan').onclick = (function() {
237 // Passes the target display ID. Do not specify it through URL hash, 269 // Passes the target display ID. Do not specify it through URL hash,
238 // we do not care back/forward. 270 // we do not care back/forward.
239 var displayOverscan = options.DisplayOverscan.getInstance(); 271 var displayOverscan = options.DisplayOverscan.getInstance();
240 displayOverscan.setDisplayId(this.displays_[this.focusedIndex_].id); 272 displayOverscan.setDisplayId(this.displays_[this.focusedIndex_].id);
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 */ 672 */
641 updateSelectedDisplaySectionMirroring_: function() { 673 updateSelectedDisplaySectionMirroring_: function() {
642 $('display-configuration-arrow').hidden = true; 674 $('display-configuration-arrow').hidden = true;
643 $('display-options-set-primary').disabled = true; 675 $('display-options-set-primary').disabled = true;
644 $('display-options-select-mirroring').disabled = false; 676 $('display-options-select-mirroring').disabled = false;
645 $('selected-display-start-calibrating-overscan').disabled = true; 677 $('selected-display-start-calibrating-overscan').disabled = true;
646 var display = this.displays_[0]; 678 var display = this.displays_[0];
647 var orientation = $('display-options-orientation-selection'); 679 var orientation = $('display-options-orientation-selection');
648 orientation.disabled = false; 680 orientation.disabled = false;
649 var orientationOptions = orientation.getElementsByTagName('option'); 681 var orientationOptions = orientation.getElementsByTagName('option');
650 orientationOptions[display.orientation].selected = true; 682 var orientationIndex = Math.floor(display.rotation / 90);
683 orientationOptions[orientationIndex].selected = true;
651 $('selected-display-name').textContent = 684 $('selected-display-name').textContent =
652 loadTimeData.getString('mirroringDisplay'); 685 loadTimeData.getString('mirroringDisplay');
653 var resolution = $('display-options-resolution-selection'); 686 var resolution = $('display-options-resolution-selection');
654 var option = document.createElement('option'); 687 var option = document.createElement('option');
655 option.value = 'default'; 688 option.value = 'default';
656 option.textContent = display.width + 'x' + display.height; 689 option.textContent = display.bounds.width + 'x' + display.bounds.height;
657 resolution.appendChild(option); 690 resolution.appendChild(option);
658 resolution.disabled = true; 691 resolution.disabled = true;
659 }, 692 },
660 693
661 /** 694 /**
662 * Updates the description of selected display section when no display is 695 * Updates the description of selected display section when no display is
663 * selected. 696 * selected.
664 * @private 697 * @private
665 */ 698 */
666 updateSelectedDisplaySectionNoSelected_: function() { 699 updateSelectedDisplaySectionNoSelected_: function() {
(...skipping 27 matching lines...) Expand all
694 $('display-options-set-primary').disabled = display.isPrimary; 727 $('display-options-set-primary').disabled = display.isPrimary;
695 $('display-options-select-mirroring').disabled = 728 $('display-options-select-mirroring').disabled =
696 (this.displays_.length <= 1 && !this.unifiedDesktopEnabled_); 729 (this.displays_.length <= 1 && !this.unifiedDesktopEnabled_);
697 $('selected-display-start-calibrating-overscan').disabled = 730 $('selected-display-start-calibrating-overscan').disabled =
698 display.isInternal; 731 display.isInternal;
699 732
700 var orientation = $('display-options-orientation-selection'); 733 var orientation = $('display-options-orientation-selection');
701 orientation.disabled = this.unifiedDesktopEnabled_; 734 orientation.disabled = this.unifiedDesktopEnabled_;
702 735
703 var orientationOptions = orientation.getElementsByTagName('option'); 736 var orientationOptions = orientation.getElementsByTagName('option');
704 orientationOptions[display.orientation].selected = true; 737 var orientationIndex = Math.floor(display.rotation / 90);
738 orientationOptions[orientationIndex].selected = true;
705 739
706 $('selected-display-name').textContent = display.name; 740 $('selected-display-name').textContent = display.name;
707 741
708 var resolution = $('display-options-resolution-selection'); 742 var resolution = $('display-options-resolution-selection');
709 if (display.resolutions.length <= 1) { 743 if (display.resolutions.length <= 1) {
710 var option = document.createElement('option'); 744 var option = document.createElement('option');
711 option.value = 'default'; 745 option.value = 'default';
712 option.textContent = display.width + 'x' + display.height; 746 option.textContent = display.bounds.width + 'x' + display.bounds.height;
713 option.selected = true; 747 option.selected = true;
714 resolution.appendChild(option); 748 resolution.appendChild(option);
715 resolution.disabled = true; 749 resolution.disabled = true;
716 } else { 750 } else {
717 var previousOption; 751 var previousOption;
718 for (var i = 0; i < display.resolutions.length; i++) { 752 for (var i = 0; i < display.resolutions.length; i++) {
719 var option = document.createElement('option'); 753 var option = document.createElement('option');
720 option.value = i; 754 option.value = i;
721 option.textContent = display.resolutions[i].width + 'x' + 755 option.textContent = display.resolutions[i].width + 'x' +
722 display.resolutions[i].height; 756 display.resolutions[i].height;
(...skipping 20 matching lines...) Expand all
743 $('selected-display-color-profile-row').hidden = true; 777 $('selected-display-color-profile-row').hidden = true;
744 } else { 778 } else {
745 $('selected-display-color-profile-row').hidden = false; 779 $('selected-display-color-profile-row').hidden = false;
746 var profiles = $('display-options-color-profile-selection'); 780 var profiles = $('display-options-color-profile-selection');
747 profiles.innerHTML = ''; 781 profiles.innerHTML = '';
748 for (var i = 0; i < display.availableColorProfiles.length; i++) { 782 for (var i = 0; i < display.availableColorProfiles.length; i++) {
749 var option = document.createElement('option'); 783 var option = document.createElement('option');
750 var colorProfile = display.availableColorProfiles[i]; 784 var colorProfile = display.availableColorProfiles[i];
751 option.value = colorProfile.profileId; 785 option.value = colorProfile.profileId;
752 option.textContent = colorProfile.name; 786 option.textContent = colorProfile.name;
753 option.selected = ( 787 option.selected = (display.colorProfileId == colorProfile.profileId);
754 display.colorProfile == colorProfile.profileId);
755 profiles.appendChild(option); 788 profiles.appendChild(option);
756 } 789 }
757 } 790 }
758 }, 791 },
759 792
760 /** 793 /**
761 * Updates the description of the selected display section. 794 * Updates the description of the selected display section.
762 * @private 795 * @private
763 */ 796 */
764 updateSelectedDisplayDescription_: function() { 797 updateSelectedDisplayDescription_: function() {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 // Offset pixels for secondary display rectangles. The offset includes the 833 // Offset pixels for secondary display rectangles. The offset includes the
801 // border width. 834 // border width.
802 /** @const */ var MIRRORING_OFFSET_PIXELS = 3; 835 /** @const */ var MIRRORING_OFFSET_PIXELS = 3;
803 // Always show two displays because there must be two displays when 836 // Always show two displays because there must be two displays when
804 // the display_options is enabled. Don't rely on displays_.length because 837 // the display_options is enabled. Don't rely on displays_.length because
805 // there is only one display from chrome's perspective in mirror mode. 838 // there is only one display from chrome's perspective in mirror mode.
806 /** @const */ var MIN_NUM_DISPLAYS = 2; 839 /** @const */ var MIN_NUM_DISPLAYS = 2;
807 /** @const */ var MIRRORING_VERTICAL_MARGIN = 20; 840 /** @const */ var MIRRORING_VERTICAL_MARGIN = 20;
808 841
809 // The width/height should be same as the first display: 842 // The width/height should be same as the first display:
810 var width = Math.ceil(this.displays_[0].width * this.visualScale_); 843 var width = Math.ceil(this.displays_[0].bounds.width * this.visualScale_);
811 var height = Math.ceil(this.displays_[0].height * this.visualScale_); 844 var height =
845 Math.ceil(this.displays_[0].bounds.height * this.visualScale_);
812 846
813 var numDisplays = Math.max(MIN_NUM_DISPLAYS, this.displays_.length); 847 var numDisplays = Math.max(MIN_NUM_DISPLAYS, this.displays_.length);
814 848
815 var totalWidth = width + numDisplays * MIRRORING_OFFSET_PIXELS; 849 var totalWidth = width + numDisplays * MIRRORING_OFFSET_PIXELS;
816 var totalHeight = height + numDisplays * MIRRORING_OFFSET_PIXELS; 850 var totalHeight = height + numDisplays * MIRRORING_OFFSET_PIXELS;
817 851
818 this.displaysView_.style.height = totalHeight + 'px'; 852 this.displaysView_.style.height = totalHeight + 'px';
819 853
820 // The displays should be centered. 854 // The displays should be centered.
821 var offsetX = 855 var offsetX =
822 $('display-options-displays-view').offsetWidth / 2 - totalWidth / 2; 856 $('display-options-displays-view').offsetWidth / 2 - totalWidth / 2;
823 857
824 for (var i = 0; i < numDisplays; i++) { 858 for (var i = 0; i < numDisplays; i++) {
825 var div = document.createElement('div'); 859 var div = document.createElement('div');
826 div.className = 'displays-display'; 860 div.className = 'displays-display';
827 div.style.top = i * MIRRORING_OFFSET_PIXELS + 'px'; 861 div.style.top = i * MIRRORING_OFFSET_PIXELS + 'px';
828 div.style.left = i * MIRRORING_OFFSET_PIXELS + offsetX + 'px'; 862 div.style.left = i * MIRRORING_OFFSET_PIXELS + offsetX + 'px';
829 div.style.width = width + 'px'; 863 div.style.width = width + 'px';
830 div.style.height = height + 'px'; 864 div.style.height = height + 'px';
831 div.style.zIndex = i; 865 div.style.zIndex = i;
832 // set 'display-mirrored' class for the background display rectangles. 866 // set 'display-mirrored' class for the background display rectangles.
833 if (i != numDisplays - 1) 867 if (i != numDisplays - 1)
834 div.classList.add('display-mirrored'); 868 div.classList.add('display-mirrored');
835 this.displaysView_.appendChild(div); 869 this.displaysView_.appendChild(div);
836 } 870 }
837 }, 871 },
838 872
839 /** 873 /**
840 * Creates a div element representing the specified display. 874 * Creates a div element representing the specified display.
841 * @param {Object} display The display object. 875 * @param {!options.DisplayInfo} display The display object.
842 * @param {boolean} focused True if it's focused. 876 * @param {boolean} focused True if it's focused.
843 * @private 877 * @private
844 */ 878 */
845 createDisplayRectangle_: function(display, focused) { 879 createDisplayRectangle_: function(display, focused) {
846 var div = document.createElement('div'); 880 var div = document.createElement('div');
847 display.div = div; 881 display.div = div;
848 div.className = 'displays-display'; 882 div.className = 'displays-display';
849 if (focused) 883 if (focused)
850 div.classList.add('displays-focused'); 884 div.classList.add('displays-focused');
851 885
852 // div needs to be added to the DOM tree first, otherwise offsetHeight for 886 // div needs to be added to the DOM tree first, otherwise offsetHeight for
853 // nameContainer below cannot be computed. 887 // nameContainer below cannot be computed.
854 this.displaysView_.appendChild(div); 888 this.displaysView_.appendChild(div);
855 889
856 var nameContainer = document.createElement('div'); 890 var nameContainer = document.createElement('div');
857 nameContainer.textContent = display.name; 891 nameContainer.textContent = display.name;
858 div.appendChild(nameContainer); 892 div.appendChild(nameContainer);
859 div.style.width = Math.floor(display.width * this.visualScale_) + 'px'; 893 div.style.width =
860 var newHeight = Math.floor(display.height * this.visualScale_); 894 Math.floor(display.bounds.width * this.visualScale_) + 'px';
895 var newHeight = Math.floor(display.bounds.height * this.visualScale_);
861 div.style.height = newHeight + 'px'; 896 div.style.height = newHeight + 'px';
862 nameContainer.style.marginTop = 897 nameContainer.style.marginTop =
863 (newHeight - nameContainer.offsetHeight) / 2 + 'px'; 898 (newHeight - nameContainer.offsetHeight) / 2 + 'px';
864 899
865 div.onmousedown = this.onMouseDown_.bind(this); 900 div.onmousedown = this.onMouseDown_.bind(this);
866 div.ontouchstart = this.onTouchStart_.bind(this); 901 div.ontouchstart = this.onTouchStart_.bind(this);
867 return div; 902 return div;
868 }, 903 },
869 904
870 /** 905 /**
871 * Layouts the display rectangles according to the current layout_. 906 * Layouts the display rectangles according to the current layout_.
872 * @private 907 * @private
873 */ 908 */
874 layoutDisplays_: function() { 909 layoutDisplays_: function() {
875 var maxWidth = 0; 910 var maxWidth = 0;
876 var maxHeight = 0; 911 var maxHeight = 0;
877 var boundingBox = {left: 0, right: 0, top: 0, bottom: 0}; 912 var boundingBox = {left: 0, right: 0, top: 0, bottom: 0};
878 this.primaryDisplay_ = null; 913 this.primaryDisplay_ = null;
879 this.secondaryDisplay_ = null; 914 this.secondaryDisplay_ = null;
880 var focusedDisplay = null; 915 var focusedDisplay = null;
881 for (var i = 0; i < this.displays_.length; i++) { 916 for (var i = 0; i < this.displays_.length; i++) {
882 var display = this.displays_[i]; 917 var display = this.displays_[i];
883 if (display.isPrimary) 918 if (display.isPrimary)
884 this.primaryDisplay_ = display; 919 this.primaryDisplay_ = display;
885 else 920 else
886 this.secondaryDisplay_ = display; 921 this.secondaryDisplay_ = display;
887 if (i == this.focusedIndex_) 922 if (i == this.focusedIndex_)
888 focusedDisplay = display; 923 focusedDisplay = display;
889 924
890 boundingBox.left = Math.min(boundingBox.left, display.x); 925 var bounds = display.bounds;
891 boundingBox.right = Math.max( 926 boundingBox.left = Math.min(boundingBox.left, bounds.left);
892 boundingBox.right, display.x + display.width); 927 boundingBox.right =
893 boundingBox.top = Math.min(boundingBox.top, display.y); 928 Math.max(boundingBox.right, bounds.left + bounds.width);
894 boundingBox.bottom = Math.max( 929 boundingBox.top = Math.min(boundingBox.top, bounds.top);
895 boundingBox.bottom, display.y + display.height); 930 boundingBox.bottom =
896 maxWidth = Math.max(maxWidth, display.width); 931 Math.max(boundingBox.bottom, bounds.top + bounds.height);
897 maxHeight = Math.max(maxHeight, display.height); 932 maxWidth = Math.max(maxWidth, bounds.width);
933 maxHeight = Math.max(maxHeight, bounds.height);
898 } 934 }
899 if (!this.primaryDisplay_) 935 if (!this.primaryDisplay_)
900 return; 936 return;
901 937
902 // Make the margin around the bounding box. 938 // Make the margin around the bounding box.
903 var areaWidth = boundingBox.right - boundingBox.left + maxWidth; 939 var areaWidth = boundingBox.right - boundingBox.left + maxWidth;
904 var areaHeight = boundingBox.bottom - boundingBox.top + maxHeight; 940 var areaHeight = boundingBox.bottom - boundingBox.top + maxHeight;
905 941
906 // Calculates the scale by the width since horizontal size is more strict. 942 // Calculates the scale by the width since horizontal size is more strict.
907 // TODO(mukai): Adds the check of vertical size in case. 943 // TODO(mukai): Adds the check of vertical size in case.
908 this.visualScale_ = Math.min( 944 this.visualScale_ = Math.min(
909 VISUAL_SCALE, this.displaysView_.offsetWidth / areaWidth); 945 VISUAL_SCALE, this.displaysView_.offsetWidth / areaWidth);
910 946
911 // Prepare enough area for thisplays_view by adding the maximum height. 947 // Prepare enough area for thisplays_view by adding the maximum height.
912 this.displaysView_.style.height = 948 this.displaysView_.style.height =
913 Math.ceil(areaHeight * this.visualScale_) + 'px'; 949 Math.ceil(areaHeight * this.visualScale_) + 'px';
914 950
915 // Centering the bounding box of the display rectangles. 951 // Centering the bounding box of the display rectangles.
916 var offset = { 952 var offset = {
917 x: Math.floor(this.displaysView_.offsetWidth / 2 - 953 x: Math.floor(
954 this.displaysView_.offsetWidth / 2 -
918 (boundingBox.right + boundingBox.left) * this.visualScale_ / 2), 955 (boundingBox.right + boundingBox.left) * this.visualScale_ / 2),
919 y: Math.floor(this.displaysView_.offsetHeight / 2 - 956 y: Math.floor(
957 this.displaysView_.offsetHeight / 2 -
920 (boundingBox.bottom + boundingBox.top) * this.visualScale_ / 2) 958 (boundingBox.bottom + boundingBox.top) * this.visualScale_ / 2)
921 }; 959 };
922 960
923 // Layouting the display rectangles. First layout the primaryDisplay and 961 // Layouting the display rectangles. First layout the primaryDisplay and
924 // then layout the secondary which is attaching to the primary. 962 // then layout the secondary which is attaching to the primary.
925 var primaryDiv = this.createDisplayRectangle_( 963 var primaryDiv = this.createDisplayRectangle_(
926 this.primaryDisplay_, this.primaryDisplay_ == focusedDisplay); 964 this.primaryDisplay_, this.primaryDisplay_ == focusedDisplay);
927 primaryDiv.style.left = 965 primaryDiv.style.left =
928 Math.floor(this.primaryDisplay_.x * this.visualScale_) + 966 Math.floor(this.primaryDisplay_.bounds.left * this.visualScale_) +
929 offset.x + 'px'; 967 offset.x + 'px';
930 primaryDiv.style.top = 968 primaryDiv.style.top =
931 Math.floor(this.primaryDisplay_.y * this.visualScale_) + 969 Math.floor(this.primaryDisplay_.bounds.top * this.visualScale_) +
932 offset.y + 'px'; 970 offset.y + 'px';
933 this.primaryDisplay_.originalPosition = { 971 this.primaryDisplay_.originalPosition = {
934 x: primaryDiv.offsetLeft, y: primaryDiv.offsetTop}; 972 x: primaryDiv.offsetLeft,
973 y: primaryDiv.offsetTop
974 };
935 975
936 if (this.secondaryDisplay_) { 976 if (this.secondaryDisplay_) {
937 var secondaryDiv = this.createDisplayRectangle_( 977 var secondaryDiv = this.createDisplayRectangle_(
938 this.secondaryDisplay_, this.secondaryDisplay_ == focusedDisplay); 978 this.secondaryDisplay_, this.secondaryDisplay_ == focusedDisplay);
939 // Don't trust the secondary display's x or y, because it may cause a 979 // Don't trust the secondary display's x or y, because it may cause a
940 // 1px gap due to rounding, which will create a fake update on end 980 // 1px gap due to rounding, which will create a fake update on end
941 // dragging. See crbug.com/386401 981 // dragging. See crbug.com/386401
982 var bounds = this.secondaryDisplay_.bounds;
942 switch (this.layout_) { 983 switch (this.layout_) {
943 case options.SecondaryDisplayLayout.TOP: 984 case options.SecondaryDisplayLayout.TOP:
944 secondaryDiv.style.left = 985 secondaryDiv.style.left =
945 Math.floor(this.secondaryDisplay_.x * this.visualScale_) + 986 Math.floor(bounds.left * this.visualScale_) + offset.x + 'px';
946 offset.x + 'px'; 987 secondaryDiv.style.top =
947 secondaryDiv.style.top = 988 primaryDiv.offsetTop - secondaryDiv.offsetHeight + 'px';
948 primaryDiv.offsetTop - secondaryDiv.offsetHeight + 'px'; 989 break;
949 break; 990 case options.SecondaryDisplayLayout.RIGHT:
950 case options.SecondaryDisplayLayout.RIGHT: 991 secondaryDiv.style.left =
951 secondaryDiv.style.left = 992 primaryDiv.offsetLeft + primaryDiv.offsetWidth + 'px';
952 primaryDiv.offsetLeft + primaryDiv.offsetWidth + 'px'; 993 secondaryDiv.style.top =
953 secondaryDiv.style.top = 994 Math.floor(bounds.top * this.visualScale_) + offset.y + 'px';
954 Math.floor(this.secondaryDisplay_.y * this.visualScale_) + 995 break;
955 offset.y + 'px'; 996 case options.SecondaryDisplayLayout.BOTTOM:
956 break; 997 secondaryDiv.style.left =
957 case options.SecondaryDisplayLayout.BOTTOM: 998 Math.floor(bounds.left * this.visualScale_) + offset.x + 'px';
958 secondaryDiv.style.left = 999 secondaryDiv.style.top =
959 Math.floor(this.secondaryDisplay_.x * this.visualScale_) + 1000 primaryDiv.offsetTop + primaryDiv.offsetHeight + 'px';
960 offset.x + 'px'; 1001 break;
961 secondaryDiv.style.top = 1002 case options.SecondaryDisplayLayout.LEFT:
962 primaryDiv.offsetTop + primaryDiv.offsetHeight + 'px'; 1003 secondaryDiv.style.left =
963 break; 1004 primaryDiv.offsetLeft - secondaryDiv.offsetWidth + 'px';
964 case options.SecondaryDisplayLayout.LEFT: 1005 secondaryDiv.style.top =
965 secondaryDiv.style.left = 1006 Math.floor(bounds.top * this.visualScale_) + offset.y + 'px';
966 primaryDiv.offsetLeft - secondaryDiv.offsetWidth + 'px'; 1007 break;
967 secondaryDiv.style.top =
968 Math.floor(this.secondaryDisplay_.y * this.visualScale_) +
969 offset.y + 'px';
970 break;
971 } 1008 }
972 this.secondaryDisplay_.originalPosition = { 1009 this.secondaryDisplay_.originalPosition = {
973 x: secondaryDiv.offsetLeft, y: secondaryDiv.offsetTop}; 1010 x: secondaryDiv.offsetLeft,
1011 y: secondaryDiv.offsetTop
1012 };
974 } 1013 }
975 }, 1014 },
976 1015
977 /** 1016 /**
978 * Called when the display arrangement has changed. 1017 * Called when the display arrangement has changed.
979 * @param {options.MultiDisplayMode} mode multi display mode. 1018 * @param {options.MultiDisplayMode} mode multi display mode.
980 * @param {Array<options.DisplayInfo>} displays The list of the display 1019 * @param {Array<options.DisplayInfo>} displays The list of the display
981 * information. 1020 * information.
982 * @param {options.SecondaryDisplayLayout} layout The layout strategy. 1021 * @param {options.SecondaryDisplayLayout} layout The layout strategy.
983 * @param {number} offset The offset of the secondary display. 1022 * @param {number} offset The offset of the secondary display.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 mode, displays, layout, offset) { 1084 mode, displays, layout, offset) {
1046 DisplayOptions.getInstance().onDisplayChanged_( 1085 DisplayOptions.getInstance().onDisplayChanged_(
1047 mode, displays, layout, offset); 1086 mode, displays, layout, offset);
1048 }; 1087 };
1049 1088
1050 // Export 1089 // Export
1051 return { 1090 return {
1052 DisplayOptions: DisplayOptions 1091 DisplayOptions: DisplayOptions
1053 }; 1092 };
1054 }); 1093 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/webui/options/chromeos/display_options_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698