Chromium Code Reviews| Index: Source/devtools/front_end/View.js |
| diff --git a/Source/devtools/front_end/View.js b/Source/devtools/front_end/View.js |
| index 8a88e5bd7292ccf2123863be45506261732a9125..1ba56df6f7838b867bfe2bae9e421d68856fbf3b 100644 |
| --- a/Source/devtools/front_end/View.js |
| +++ b/Source/devtools/front_end/View.js |
| @@ -276,6 +276,9 @@ WebInspector.View.prototype = { |
| this._processWasShown(); |
| this._cacheSize(); |
| } |
| + |
| + if (this._parentView) |
| + this._parentView.invalidateMinimumSize(); |
| }, |
| /** |
| @@ -297,6 +300,8 @@ WebInspector.View.prototype = { |
| this._visible = false; |
| if (this._parentIsShowing()) |
| this._processWasHidden(); |
| + if (this._parentView) |
| + this._parentView.invalidateMinimumSize(); |
| return; |
| } |
| @@ -313,7 +318,9 @@ WebInspector.View.prototype = { |
| var childIndex = this._parentView._children.indexOf(this); |
| WebInspector.View._assert(childIndex >= 0, "Attempt to remove non-child view"); |
| this._parentView._children.splice(childIndex, 1); |
| + var parent = this._parentView; |
| this._parentView = null; |
| + parent.invalidateMinimumSize(); |
| } else |
| WebInspector.View._assert(this._isRoot, "Removing non-root view from DOM"); |
| }, |
| @@ -500,6 +507,58 @@ WebInspector.View.prototype = { |
| return result; |
| }, |
| + /** |
| + * @return {!Size} |
| + */ |
| + calculateMinimumSize: function() |
| + { |
| + return new Size(0, 0); |
| + }, |
| + |
| + /** |
| + * @return {!Size} |
| + */ |
| + minimumSize: function() |
| + { |
| + if (typeof this._minimumSize !== "undefined") |
| + return this._minimumSize; |
| + if (typeof this._cachedMinimumSize === "undefined") |
| + this._cachedMinimumSize = this.calculateMinimumSize(); |
| + return this._cachedMinimumSize; |
| + }, |
| + |
| + /** |
| + * @param {!Size} size |
| + */ |
| + setMinimumSize: function(size) |
| + { |
| + this._minimumSize = size; |
| + this.invalidateMinimumSize(); |
| + }, |
| + |
| + invalidateMinimumSize: function() |
| + { |
| + if (!this._isShowing) { |
|
pfeldman
2014/03/14 06:23:10
Are you sure it needs caching? Not caching would m
|
| + delete this._cachedMinimumSize; |
| + if (this._parentView && !this._parentView._isShowing) |
| + this._parentView.invalidateMinimumSize(); |
| + return; |
| + } |
| + |
| + var cached = this._cachedMinimumSize; |
| + delete this._cachedMinimumSize; |
| + var actual = this.minimumSize(); |
| + if (actual && cached && actual.isEqual(cached)) { |
| + this.doResize(); |
| + return; |
| + } |
| + |
| + if (this._parentView) |
| + this._parentView.invalidateMinimumSize(); |
| + else |
| + this.doResize(); |
| + }, |
| + |
| __proto__: WebInspector.Object.prototype |
| } |
| @@ -551,6 +610,33 @@ WebInspector.VBox = function() |
| }; |
| WebInspector.VBox.prototype = { |
| + /** |
| + * @return {!Size} |
| + */ |
| + calculateMinimumSize: function() |
| + { |
| + var width = 0; |
| + var height = 0; |
| + |
| + /** |
| + * @param {!WebInspector.View} child |
| + */ |
| + function updateForChild(child) |
| + { |
| + var size = child.minimumSize(); |
| + width = Math.max(width, size.width); |
| + height += size.height; |
| + } |
| + |
| + var childViews = this._children.slice(); |
| + for (var i = 0; i < childViews.length; ++i) { |
| + if (childViews[i]._parentView === this && childViews[i]._visible) |
|
pfeldman
2014/03/14 06:23:10
there is a _callOnVisibleChildren that you could u
dgozman
2014/03/14 15:55:15
Done.
|
| + updateForChild(childViews[i]); |
| + } |
| + |
| + return new Size(width, height); |
| + }, |
| + |
| __proto__: WebInspector.View.prototype |
| }; |
| @@ -565,6 +651,33 @@ WebInspector.HBox = function() |
| }; |
| WebInspector.HBox.prototype = { |
| + /** |
| + * @return {!Size} |
| + */ |
| + calculateMinimumSize: function() |
| + { |
| + var width = 0; |
| + var height = 0; |
| + |
| + /** |
| + * @param {!WebInspector.View} child |
| + */ |
| + function updateForChild(child) |
| + { |
| + var size = child.minimumSize(); |
| + width += size.width; |
| + height = Math.max(height, size.height); |
| + } |
| + |
| + var childViews = this._children.slice(); |
| + for (var i = 0; i < childViews.length; ++i) { |
| + if (childViews[i]._parentView === this && childViews[i]._visible) |
| + updateForChild(childViews[i]); |
| + } |
| + |
| + return new Size(width, height); |
| + }, |
| + |
| __proto__: WebInspector.View.prototype |
| }; |