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

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: saved main size 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..a3e33bd0059b5a0913e6100bcbaa3e31499d71a7 100644
--- a/Source/devtools/front_end/SplitView.js
+++ b/Source/devtools/front_end/SplitView.js
@@ -386,13 +386,14 @@ WebInspector.SplitView.prototype = {
/**
* @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 minSidebarSize = this.isVertical() ? size.width : size.height;
+ if (!minSidebarSize)
+ minSidebarSize = WebInspector.SplitView.MinPadding;
+
+ var preferredSidebarSize = this.isVertical() ? size.preferredWidth : size.preferredHeight;
+ 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);
size = this._mainView.minimumSize();
var minMainSize = this.isVertical() ? size.width : size.height;
if (!minMainSize)
minMainSize = WebInspector.SplitView.MinPadding;
- var to = totalSize - minMainSize;
- if (from <= to)
- return Number.constrain(sidebarSize, from, to);
+ var preferredMainSize = this.isVertical() ? size.preferredWidth : size.preferredHeight;
+ 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 (totalPreferred > 0 && minMainSize + minSidebarSize <= totalSize) {
vsevik 2014/03/28 16:13:26 How can totalPreferred > 0 be wrong?
dgozman 2014/03/28 18:05:02 Done.
+ 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()
@@ -575,10 +602,15 @@ WebInspector.SplitView.prototype = {
var mainSize = this._mainView.minimumSize();
var sidebarSize = this._sidebarView.minimumSize();
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) {
+ mainSize = mainSize.widthToMax(new Size(min, 0));
+ sidebarSize = sidebarSize.widthToMax(new Size(min, 0));
+ return mainSize.addWidth(sidebarSize).heightToMax(sidebarSize);
+ } else {
+ mainSize = mainSize.heightToMax(new Size(0, min));
+ sidebarSize = sidebarSize.heightToMax(new Size(0, min));
+ return mainSize.widthToMax(sidebarSize).addHeight(sidebarSize);
+ }
},
/**
@@ -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