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

Side by Side Diff: Source/devtools/front_end/ui/ViewportControl.js

Issue 462083002: DevTools: do not scroll console to bottom on resize (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: @vsevik comments Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 this.element.addEventListener("scroll", this._onScroll.bind(this), false); 48 this.element.addEventListener("scroll", this._onScroll.bind(this), false);
49 this.element.addEventListener("copy", this._onCopy.bind(this), false); 49 this.element.addEventListener("copy", this._onCopy.bind(this), false);
50 this.element.addEventListener("dragstart", this._onDragStart.bind(this), fal se); 50 this.element.addEventListener("dragstart", this._onDragStart.bind(this), fal se);
51 51
52 this._firstVisibleIndex = 0; 52 this._firstVisibleIndex = 0;
53 this._lastVisibleIndex = -1; 53 this._lastVisibleIndex = -1;
54 this._renderedItems = []; 54 this._renderedItems = [];
55 this._anchorSelection = null; 55 this._anchorSelection = null;
56 this._headSelection = null; 56 this._headSelection = null;
57 this._stickToBottom = false; 57 this._stickToBottom = false;
58 this._scrolledToBottom = true;
58 } 59 }
59 60
60 /** 61 /**
61 * @interface 62 * @interface
62 */ 63 */
63 WebInspector.ViewportControl.Provider = function() 64 WebInspector.ViewportControl.Provider = function()
64 { 65 {
65 } 66 }
66 67
67 WebInspector.ViewportControl.Provider.prototype = { 68 WebInspector.ViewportControl.Provider.prototype = {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 * @return {!Element} 127 * @return {!Element}
127 */ 128 */
128 element: function() 129 element: function()
129 { 130 {
130 return this._element; 131 return this._element;
131 }, 132 },
132 } 133 }
133 134
134 WebInspector.ViewportControl.prototype = { 135 WebInspector.ViewportControl.prototype = {
135 /** 136 /**
137 * @return {boolean}
138 */
139 scrolledToBottom: function()
140 {
141 return this._scrolledToBottom;
142 },
143
144 /**
136 * @param {boolean} value 145 * @param {boolean} value
137 */ 146 */
138 setStickToBottom: function(value) 147 setStickToBottom: function(value)
139 { 148 {
140 this._stickToBottom = value; 149 this._stickToBottom = value;
141 }, 150 },
142 151
143 /** 152 /**
144 * @param {!Event} event 153 * @param {!Event} event
145 */ 154 */
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 this._firstVisibleIndex = -1; 375 this._firstVisibleIndex = -1;
367 this._lastVisibleIndex = -1; 376 this._lastVisibleIndex = -1;
368 return; 377 return;
369 } 378 }
370 379
371 var selection = window.getSelection(); 380 var selection = window.getSelection();
372 var shouldRestoreSelection = this._updateSelectionModel(selection); 381 var shouldRestoreSelection = this._updateSelectionModel(selection);
373 382
374 var visibleFrom = this.element.scrollTop; 383 var visibleFrom = this.element.scrollTop;
375 var visibleHeight = this._visibleHeight(); 384 var visibleHeight = this._visibleHeight();
376 var shouldStickToBottom = this._stickToBottom && this.element.isScrolled ToBottom(); 385 this._scrolledToBottom = this.element.isScrolledToBottom();
377 var isInvalidating = !this._cumulativeHeights; 386 var isInvalidating = !this._cumulativeHeights;
378 387
379 if (this._cumulativeHeights && itemCount !== this._cumulativeHeights.len gth) 388 if (this._cumulativeHeights && itemCount !== this._cumulativeHeights.len gth)
380 delete this._cumulativeHeights; 389 delete this._cumulativeHeights;
381 for (var i = 0; i < this._renderedItems.length; ++i) { 390 for (var i = 0; i < this._renderedItems.length; ++i) {
382 this._renderedItems[i].cacheFastHeight(); 391 this._renderedItems[i].cacheFastHeight();
383 // Tolerate 1-pixel error due to double-to-integer rounding errors. 392 // Tolerate 1-pixel error due to double-to-integer rounding errors.
384 if (this._cumulativeHeights && Math.abs(this._cachedItemHeight(this. _firstVisibleIndex + i) - this._provider.fastHeight(i + this._firstVisibleIndex) ) > 1) 393 if (this._cumulativeHeights && Math.abs(this._cachedItemHeight(this. _firstVisibleIndex + i) - this._provider.fastHeight(i + this._firstVisibleIndex) ) > 1)
385 delete this._cumulativeHeights; 394 delete this._cumulativeHeights;
386 } 395 }
387 this._rebuildCumulativeHeightsIfNeeded(); 396 this._rebuildCumulativeHeightsIfNeeded();
388 var oldFirstVisibleIndex = this._firstVisibleIndex; 397 var oldFirstVisibleIndex = this._firstVisibleIndex;
389 var oldLastVisibleIndex = this._lastVisibleIndex; 398 var oldLastVisibleIndex = this._lastVisibleIndex;
399
400 var shouldStickToBottom = this._stickToBottom && this._scrolledToBottom;
390 if (shouldStickToBottom) { 401 if (shouldStickToBottom) {
391 this._lastVisibleIndex = itemCount - 1; 402 this._lastVisibleIndex = itemCount - 1;
392 this._firstVisibleIndex = Math.max(itemCount - Math.ceil(visibleHeig ht / this._provider.minimumRowHeight()), 0); 403 this._firstVisibleIndex = Math.max(itemCount - Math.ceil(visibleHeig ht / this._provider.minimumRowHeight()), 0);
393 } else { 404 } else {
394 this._firstVisibleIndex = Math.max(Array.prototype.lowerBound.call(t his._cumulativeHeights, visibleFrom + 1), 0); 405 this._firstVisibleIndex = Math.max(Array.prototype.lowerBound.call(t his._cumulativeHeights, visibleFrom + 1), 0);
395 // Proactively render more rows in case some of them will be collaps ed without triggering refresh. @see crbug.com/390169 406 // Proactively render more rows in case some of them will be collaps ed without triggering refresh. @see crbug.com/390169
396 this._lastVisibleIndex = this._firstVisibleIndex + Math.ceil(visible Height / this._provider.minimumRowHeight()) - 1; 407 this._lastVisibleIndex = this._firstVisibleIndex + Math.ceil(visible Height / this._provider.minimumRowHeight()) - 1;
397 this._lastVisibleIndex = Math.min(this._lastVisibleIndex, itemCount - 1); 408 this._lastVisibleIndex = Math.min(this._lastVisibleIndex, itemCount - 1);
398 } 409 }
399 var topGapHeight = this._cumulativeHeights[this._firstVisibleIndex - 1] || 0; 410 var topGapHeight = this._cumulativeHeights[this._firstVisibleIndex - 1] || 0;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 601
591 /** 602 /**
592 * @return {number} 603 * @return {number}
593 */ 604 */
594 _visibleHeight: function() 605 _visibleHeight: function()
595 { 606 {
596 // Use offsetHeight instead of clientHeight to avoid being affected by h orizontal scroll. 607 // Use offsetHeight instead of clientHeight to avoid being affected by h orizontal scroll.
597 return this.element.offsetHeight; 608 return this.element.offsetHeight;
598 } 609 }
599 } 610 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698