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

Unified Diff: Source/devtools/front_end/SplitView.js

Issue 214663005: [DevTools] Add preferred size to WebInspector.View. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Constraints Created 6 years, 9 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: Source/devtools/front_end/SplitView.js
diff --git a/Source/devtools/front_end/SplitView.js b/Source/devtools/front_end/SplitView.js
index 7e55d929a2e03eb55d84fc232b737a7789b913b2..b5a7193c24c673496b28ac8e812274973a4a37c2 100644
--- a/Source/devtools/front_end/SplitView.js
+++ b/Source/devtools/front_end/SplitView.js
@@ -134,7 +134,7 @@ WebInspector.SplitView.prototype = {
this._restoreAndApplyShowModeFromSettings();
this._updateShowHideSidebarButton();
this._updateResizersClass();
- this.invalidateMinimumSize();
+ this.invalidateConstraints();
},
/**
@@ -380,19 +380,20 @@ WebInspector.SplitView.prototype = {
this._saveShowModeToSettings();
this._updateShowHideSidebarButton();
this.dispatchEventToListeners(WebInspector.SplitView.Events.ShowModeChanged, showMode);
- this.invalidateMinimumSize();
+ this.invalidateConstraints();
},
/**
* @param {number} size
* @param {boolean} animate
+ * @param {boolean=} userAction
*/
- _innerSetSidebarSize: function(size, animate)
+ _innerSetSidebarSize: function(size, animate, userAction)
{
if (this._showMode !== WebInspector.SplitView.ShowMode.Both || !this.isShowing())
return;
- size = this._applyConstraints(size);
+ size = this._applyConstraints(size, userAction);
if (this._sidebarSize === size)
return;
@@ -517,28 +518,54 @@ WebInspector.SplitView.prototype = {
/**
* @param {number} sidebarSize
+ * @param {boolean=} userAction
* @return {number}
*/
- _applyConstraints: function(sidebarSize)
+ _applyConstraints: function(sidebarSize, userAction)
{
var totalSize = this.totalSize();
- var size = this._sidebarView.minimumSize();
- var from = this.isVertical() ? size.width : size.height;
- if (!from)
- from = WebInspector.SplitView.MinPadding;
+ var constraints = this._sidebarView.constraints();
pfeldman 2014/03/31 12:10:39 This logic definitely needs a test.
dgozman 2014/03/31 13:23:57 Done.
+ var minSidebarSize = this.isVertical() ? constraints.minimum.width : constraints.minimum.height;
+ if (!minSidebarSize)
+ minSidebarSize = WebInspector.SplitView.MinPadding;
- size = this._mainView.minimumSize();
- var minMainSize = this.isVertical() ? size.width : size.height;
+ var preferredSidebarSize = this.isVertical() ? constraints.preferred.width : constraints.preferred.height;
+ if (!preferredSidebarSize)
+ preferredSidebarSize = WebInspector.SplitView.MinPadding;
+ // Allow sidebar to be less than preferred by explicit user action.
+ if (sidebarSize < preferredSidebarSize)
+ preferredSidebarSize = Math.max(sidebarSize, minSidebarSize);
+
+ constraints = this._mainView.constraints();
+ var minMainSize = this.isVertical() ? constraints.minimum.width : constraints.minimum.height;
if (!minMainSize)
minMainSize = WebInspector.SplitView.MinPadding;
- var to = totalSize - minMainSize;
- if (from <= to)
- return Number.constrain(sidebarSize, from, to);
+ var preferredMainSize = this.isVertical() ? constraints.preferred.width : constraints.preferred.height;
+ if (!preferredMainSize)
+ preferredMainSize = WebInspector.SplitView.MinPadding;
+ var savedMainSize = this.isVertical() ? this._savedVerticalMainSize : this._savedHorizontalMainSize;
+ if (typeof savedMainSize !== "undefined")
+ preferredMainSize = Math.min(preferredMainSize, savedMainSize);
+ if (userAction)
+ preferredMainSize = minMainSize;
+
+ // Enough space for preferred.
+ var totalPreferred = preferredMainSize + preferredSidebarSize;
+ if (totalPreferred <= totalSize)
+ return Number.constrain(sidebarSize, preferredSidebarSize, totalSize - preferredMainSize);
+
+ // Enough space for minimum.
+ if (minMainSize + minSidebarSize <= totalSize) {
+ var delta = totalPreferred - totalSize;
+ var sidebarDelta = delta * preferredSidebarSize / totalPreferred;
+ sidebarSize = preferredSidebarSize - sidebarDelta;
+ return Number.constrain(sidebarSize, minSidebarSize, totalSize - minMainSize);
+ }
- // If we don't have enough space (which is a very rare case), prioritize main view.
- return Math.max(0, to);
+ // Not enough space even for minimum sizes.
+ return Math.max(0, totalSize - minMainSize);
},
wasShown: function()
@@ -563,22 +590,27 @@ WebInspector.SplitView.prototype = {
},
/**
- * @return {!Size}
+ * @return {!Constraints}
*/
- calculateMinimumSize: function()
+ calculateConstraints: function()
{
if (this._showMode === WebInspector.SplitView.ShowMode.OnlyMain)
- return this._mainView.minimumSize();
+ return this._mainView.constraints();
if (this._showMode === WebInspector.SplitView.ShowMode.OnlySidebar)
- return this._sidebarView.minimumSize();
+ return this._sidebarView.constraints();
- var mainSize = this._mainView.minimumSize();
- var sidebarSize = this._sidebarView.minimumSize();
+ var mainConstraints = this._mainView.constraints();
+ var sidebarConstraints = this._sidebarView.constraints();
var min = WebInspector.SplitView.MinPadding;
- if (this._isVertical)
- return new Size((mainSize.width || min) + (sidebarSize.width || min), Math.max(mainSize.height, sidebarSize.height));
- else
- return new Size(Math.max(mainSize.width, sidebarSize.width), (mainSize.height || min) + (sidebarSize.height || min));
+ if (this._isVertical) {
+ mainConstraints = mainConstraints.widthToMax(new Constraints(new Size(min, 0)));
pfeldman 2014/03/31 12:10:39 Creating Constraints and Size seems like an overki
dgozman 2014/03/31 13:23:57 Done.
+ sidebarConstraints = sidebarConstraints.widthToMax(new Constraints(new Size(min, 0)));
+ return mainConstraints.addWidth(sidebarConstraints).heightToMax(sidebarConstraints);
+ } else {
+ mainConstraints = mainConstraints.heightToMax(new Constraints(new Size(0, min)));
+ sidebarConstraints = sidebarConstraints.heightToMax(new Constraints(new Size(0, min)));
+ return mainConstraints.widthToMax(sidebarConstraints).addHeight(sidebarConstraints);
+ }
},
/**
@@ -603,10 +635,14 @@ WebInspector.SplitView.prototype = {
var dipEventPosition = (this._isVertical ? event.pageX : event.pageY) * WebInspector.zoomManager.zoomFactor();
var newOffset = dipEventPosition + this._dragOffset;
var newSize = (this._secondIsSidebar ? this.totalSize() - newOffset : newOffset);
- var constrainedSize = this._applyConstraints(newSize);
+ var constrainedSize = this._applyConstraints(newSize, true);
this._savedSidebarSize = constrainedSize;
this._saveSetting();
- this._innerSetSidebarSize(constrainedSize, false);
+ this._innerSetSidebarSize(constrainedSize, false, true);
+ if (this.isVertical())
+ this._savedVerticalMainSize = this.totalSize() - this._sidebarSize;
+ else
+ this._savedHorizontalMainSize = this.totalSize() - this._sidebarSize;
event.preventDefault();
},

Powered by Google App Engine
This is Rietveld 408576698