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

Side by Side Diff: Source/devtools/front_end/View.js

Issue 214663005: [DevTools] Add preferred size to WebInspector.View. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Two methods Created 6 years, 8 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 | « Source/devtools/front_end/TabbedPane.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2011 Google Inc. All Rights Reserved. 3 * Copyright (C) 2011 Google Inc. All Rights Reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 WebInspector.View._originalInsertBefore.call(parentElement, this .element, insertBefore); 274 WebInspector.View._originalInsertBefore.call(parentElement, this .element, insertBefore);
275 else 275 else
276 WebInspector.View._originalAppendChild.call(parentElement, this. element); 276 WebInspector.View._originalAppendChild.call(parentElement, this. element);
277 } 277 }
278 278
279 if (this._parentIsShowing()) { 279 if (this._parentIsShowing()) {
280 this._processWasShown(); 280 this._processWasShown();
281 this._cacheSize(); 281 this._cacheSize();
282 } 282 }
283 283
284 if (this._parentView && this._hasNonZeroMinimumSize()) 284 if (this._parentView && this._hasNonZeroConstraints())
285 this._parentView.invalidateMinimumSize(); 285 this._parentView.invalidateConstraints();
286 }, 286 },
287 287
288 /** 288 /**
289 * @param {boolean=} overrideHideOnDetach 289 * @param {boolean=} overrideHideOnDetach
290 */ 290 */
291 detach: function(overrideHideOnDetach) 291 detach: function(overrideHideOnDetach)
292 { 292 {
293 var parentElement = this.element.parentElement; 293 var parentElement = this.element.parentElement;
294 if (!parentElement) 294 if (!parentElement)
295 return; 295 return;
296 296
297 if (this._parentIsShowing()) { 297 if (this._parentIsShowing()) {
298 this._processDiscardCachedSize(); 298 this._processDiscardCachedSize();
299 this._processWillHide(); 299 this._processWillHide();
300 } 300 }
301 301
302 if (this._hideOnDetach && !overrideHideOnDetach) { 302 if (this._hideOnDetach && !overrideHideOnDetach) {
303 this.element.classList.remove("visible"); 303 this.element.classList.remove("visible");
304 this._visible = false; 304 this._visible = false;
305 if (this._parentIsShowing()) 305 if (this._parentIsShowing())
306 this._processWasHidden(); 306 this._processWasHidden();
307 if (this._parentView && this._hasNonZeroMinimumSize()) 307 if (this._parentView && this._hasNonZeroConstraints())
308 this._parentView.invalidateMinimumSize(); 308 this._parentView.invalidateConstraints();
309 return; 309 return;
310 } 310 }
311 311
312 // Force legal removal 312 // Force legal removal
313 WebInspector.View._decrementViewCounter(parentElement, this.element); 313 WebInspector.View._decrementViewCounter(parentElement, this.element);
314 WebInspector.View._originalRemoveChild.call(parentElement, this.element) ; 314 WebInspector.View._originalRemoveChild.call(parentElement, this.element) ;
315 315
316 this._visible = false; 316 this._visible = false;
317 if (this._parentIsShowing()) 317 if (this._parentIsShowing())
318 this._processWasHidden(); 318 this._processWasHidden();
319 319
320 // Update view hierarchy 320 // Update view hierarchy
321 if (this._parentView) { 321 if (this._parentView) {
322 var childIndex = this._parentView._children.indexOf(this); 322 var childIndex = this._parentView._children.indexOf(this);
323 WebInspector.View._assert(childIndex >= 0, "Attempt to remove non-ch ild view"); 323 WebInspector.View._assert(childIndex >= 0, "Attempt to remove non-ch ild view");
324 this._parentView._children.splice(childIndex, 1); 324 this._parentView._children.splice(childIndex, 1);
325 var parent = this._parentView; 325 var parent = this._parentView;
326 this._parentView = null; 326 this._parentView = null;
327 if (this._hasNonZeroMinimumSize()) 327 if (this._hasNonZeroConstraints())
328 parent.invalidateMinimumSize(); 328 parent.invalidateConstraints();
329 } else 329 } else
330 WebInspector.View._assert(this._isRoot, "Removing non-root view from DOM"); 330 WebInspector.View._assert(this._isRoot, "Removing non-root view from DOM");
331 }, 331 },
332 332
333 detachChildViews: function() 333 detachChildViews: function()
334 { 334 {
335 var children = this._children.slice(); 335 var children = this._children.slice();
336 for (var i = 0; i < children.length; ++i) 336 for (var i = 0; i < children.length; ++i)
337 children[i].detach(); 337 children[i].detach();
338 }, 338 },
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 WebInspector.View._originalAppendChild.call(document.body, this.element) ; 498 WebInspector.View._originalAppendChild.call(document.body, this.element) ;
499 this.element.positionAt(0, 0); 499 this.element.positionAt(0, 0);
500 var result = new Size(this.element.offsetWidth, this.element.offsetHeigh t); 500 var result = new Size(this.element.offsetWidth, this.element.offsetHeigh t);
501 this.element.positionAt(undefined, undefined); 501 this.element.positionAt(undefined, undefined);
502 WebInspector.View._originalRemoveChild.call(document.body, this.element) ; 502 WebInspector.View._originalRemoveChild.call(document.body, this.element) ;
503 this._disableCSSIfNeeded(); 503 this._disableCSSIfNeeded();
504 return result; 504 return result;
505 }, 505 },
506 506
507 /** 507 /**
508 * @return {!Size} 508 * @return {!Constraints}
509 */ 509 */
510 calculateMinimumSize: function() 510 calculateConstraints: function()
511 { 511 {
512 return new Size(0, 0); 512 return new Constraints(new Size(0, 0));
513 }, 513 },
514 514
515 /** 515 /**
516 * @return {!Size} 516 * @return {!Constraints}
517 */ 517 */
518 minimumSize: function() 518 constraints: function()
519 { 519 {
520 if (typeof this._minimumSize !== "undefined") 520 if (typeof this._constraints !== "undefined")
521 return this._minimumSize; 521 return this._constraints;
522 if (typeof this._cachedMinimumSize === "undefined") 522 if (typeof this._cachedConstraints === "undefined")
523 this._cachedMinimumSize = this.calculateMinimumSize(); 523 this._cachedConstraints = this.calculateConstraints();
524 return this._cachedMinimumSize; 524 return this._cachedConstraints;
525 }, 525 },
526 526
527 /** 527 /**
528 * @param {number} width
529 * @param {number} height
530 * @param {number} preferredWidth
531 * @param {number} preferredHeight
532 */
533 setMinimumAndPreferredSizes: function(width, height, preferredWidth, preferr edHeight)
534 {
535 this._constraints = new Constraints(new Size(width, height), new Size(pr eferredWidth, preferredHeight));
536 this.invalidateConstraints();
537 },
538
539 /**
528 * @param {number} width 540 * @param {number} width
529 * @param {number} height 541 * @param {number} height
530 */ 542 */
531 setMinimumSize: function(width, height) 543 setMinimumSize: function(width, height)
532 { 544 {
533 this._minimumSize = new Size(width, height); 545 this._constraints = new Constraints(new Size(width, height));
534 this.invalidateMinimumSize(); 546 this.invalidateConstraints();
535 }, 547 },
536 548
537 /** 549 /**
538 * @return {boolean} 550 * @return {boolean}
539 */ 551 */
540 _hasNonZeroMinimumSize: function() 552 _hasNonZeroConstraints: function()
541 { 553 {
542 var size = this.minimumSize(); 554 var constraints = this.constraints();
543 return size.width || size.height; 555 return !!(constraints.minimum.width || constraints.minimum.height || con straints.preferred.width || constraints.preferred.height);
544 }, 556 },
545 557
546 invalidateMinimumSize: function() 558 invalidateConstraints: function()
547 { 559 {
548 var cached = this._cachedMinimumSize; 560 var cached = this._cachedConstraints;
549 delete this._cachedMinimumSize; 561 delete this._cachedConstraints;
550 var actual = this.minimumSize(); 562 var actual = this.constraints();
551 if (!actual.isEqual(cached) && this._parentView) 563 if (!actual.isEqual(cached) && this._parentView)
552 this._parentView.invalidateMinimumSize(); 564 this._parentView.invalidateConstraints();
553 else 565 else
554 this.doLayout(); 566 this.doLayout();
555 }, 567 },
556 568
557 __proto__: WebInspector.Object.prototype 569 __proto__: WebInspector.Object.prototype
558 } 570 }
559 571
560 WebInspector.View._originalAppendChild = Element.prototype.appendChild; 572 WebInspector.View._originalAppendChild = Element.prototype.appendChild;
561 WebInspector.View._originalInsertBefore = Element.prototype.insertBefore; 573 WebInspector.View._originalInsertBefore = Element.prototype.insertBefore;
562 WebInspector.View._originalRemoveChild = Element.prototype.removeChild; 574 WebInspector.View._originalRemoveChild = Element.prototype.removeChild;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 * @extends {WebInspector.View} 611 * @extends {WebInspector.View}
600 */ 612 */
601 WebInspector.VBox = function() 613 WebInspector.VBox = function()
602 { 614 {
603 WebInspector.View.call(this); 615 WebInspector.View.call(this);
604 this.element.classList.add("vbox"); 616 this.element.classList.add("vbox");
605 }; 617 };
606 618
607 WebInspector.VBox.prototype = { 619 WebInspector.VBox.prototype = {
608 /** 620 /**
609 * @return {!Size} 621 * @return {!Constraints}
610 */ 622 */
611 calculateMinimumSize: function() 623 calculateConstraints: function()
612 { 624 {
613 var width = 0; 625 var constraints = new Constraints(new Size(0, 0));
614 var height = 0;
615 626
616 /** 627 /**
617 * @this {!WebInspector.View} 628 * @this {!WebInspector.View}
618 * @suppressReceiverCheck 629 * @suppressReceiverCheck
619 */ 630 */
620 function updateForChild() 631 function updateForChild()
621 { 632 {
622 var size = this.minimumSize(); 633 var child = this.constraints();
623 width = Math.max(width, size.width); 634 constraints = constraints.widthToMax(child);
624 height += size.height; 635 constraints = constraints.addHeight(child);
625 } 636 }
626 637
627 this._callOnVisibleChildren(updateForChild); 638 this._callOnVisibleChildren(updateForChild);
628 return new Size(width, height); 639 return constraints;
629 }, 640 },
630 641
631 __proto__: WebInspector.View.prototype 642 __proto__: WebInspector.View.prototype
632 }; 643 };
633 644
634 /** 645 /**
635 * @constructor 646 * @constructor
636 * @extends {WebInspector.View} 647 * @extends {WebInspector.View}
637 */ 648 */
638 WebInspector.HBox = function() 649 WebInspector.HBox = function()
639 { 650 {
640 WebInspector.View.call(this); 651 WebInspector.View.call(this);
641 this.element.classList.add("hbox"); 652 this.element.classList.add("hbox");
642 }; 653 };
643 654
644 WebInspector.HBox.prototype = { 655 WebInspector.HBox.prototype = {
645 /** 656 /**
646 * @return {!Size} 657 * @return {!Constraints}
647 */ 658 */
648 calculateMinimumSize: function() 659 calculateConstraints: function()
649 { 660 {
650 var width = 0; 661 var constraints = new Constraints(new Size(0, 0));
651 var height = 0;
652 662
653 /** 663 /**
654 * @this {!WebInspector.View} 664 * @this {!WebInspector.View}
655 * @suppressReceiverCheck 665 * @suppressReceiverCheck
656 */ 666 */
657 function updateForChild() 667 function updateForChild()
658 { 668 {
659 var size = this.minimumSize(); 669 var child = this.constraints();
660 width += size.width; 670 constraints = constraints.addWidth(child);
661 height = Math.max(height, size.height); 671 constraints = constraints.heightToMax(child);
662 } 672 }
663 673
664 this._callOnVisibleChildren(updateForChild); 674 this._callOnVisibleChildren(updateForChild);
665 return new Size(width, height); 675 return constraints;
666 }, 676 },
667 677
668 __proto__: WebInspector.View.prototype 678 __proto__: WebInspector.View.prototype
669 }; 679 };
670 680
671 /** 681 /**
672 * @constructor 682 * @constructor
673 * @extends {WebInspector.VBox} 683 * @extends {WebInspector.VBox}
674 * @param {function()} resizeCallback 684 * @param {function()} resizeCallback
675 */ 685 */
(...skipping 29 matching lines...) Expand all
705 { 715 {
706 WebInspector.View._assert(!child.__viewCounter && !child.__view, "Attempt to remove element containing view via regular DOM operation"); 716 WebInspector.View._assert(!child.__viewCounter && !child.__view, "Attempt to remove element containing view via regular DOM operation");
707 return WebInspector.View._originalRemoveChild.call(this, child); 717 return WebInspector.View._originalRemoveChild.call(this, child);
708 } 718 }
709 719
710 Element.prototype.removeChildren = function() 720 Element.prototype.removeChildren = function()
711 { 721 {
712 WebInspector.View._assert(!this.__viewCounter, "Attempt to remove element co ntaining view via regular DOM operation"); 722 WebInspector.View._assert(!this.__viewCounter, "Attempt to remove element co ntaining view via regular DOM operation");
713 WebInspector.View._originalRemoveChildren.call(this); 723 WebInspector.View._originalRemoveChildren.call(this);
714 } 724 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/TabbedPane.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698