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

Side by Side Diff: ui/file_manager/gallery/js/mosaic_mode.js

Issue 470983002: Gallery: Load gallery items by chunk on startup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed. 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
« no previous file with comments | « ui/file_manager/gallery/js/gallery.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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @param {Element} container Content container. 8 * @param {Element} container Content container.
9 * @param {cr.ui.ArrayDataModel} dataModel Data model. 9 * @param {cr.ui.ArrayDataModel} dataModel Data model.
10 * @param {cr.ui.ListSelectionModel} selectionModel Selection model. 10 * @param {cr.ui.ListSelectionModel} selectionModel Selection model.
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 this.scheduleLayout(Mosaic.LAYOUT_DELAY); 430 this.scheduleLayout(Mosaic.LAYOUT_DELAY);
431 } 431 }
432 432
433 if (event.added.length) { 433 if (event.added.length) {
434 var newTiles = []; 434 var newTiles = [];
435 for (var t = 0; t !== event.added.length; t++) 435 for (var t = 0; t !== event.added.length; t++)
436 newTiles.push(new Mosaic.Tile(this, this.dataModel_.item(index + t))); 436 newTiles.push(new Mosaic.Tile(this, this.dataModel_.item(index + t)));
437 437
438 this.tiles_.splice.apply(this.tiles_, [index, 0].concat(newTiles)); 438 this.tiles_.splice.apply(this.tiles_, [index, 0].concat(newTiles));
439 this.initTiles_(newTiles); 439 this.initTiles_(newTiles);
440 this.scheduleLayout(Mosaic.LAYOUT_DELAY);
440 } 441 }
441 442
442 if (this.tiles_.length !== this.dataModel_.length) 443 if (this.tiles_.length !== this.dataModel_.length)
443 console.error('Mosaic is out of sync'); 444 console.error('Mosaic is out of sync');
444 }; 445 };
445 446
446 /** 447 /**
447 * Content change handler. 448 * Content change handler.
448 * 449 *
449 * @param {Event} event Event. 450 * @param {Event} event Event.
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 Mosaic.Layout.prototype.getHeight = function() { 770 Mosaic.Layout.prototype.getHeight = function() {
770 var firstColumn = this.columns_[0]; 771 var firstColumn = this.columns_[0];
771 return firstColumn ? firstColumn.getHeight() : 0; 772 return firstColumn ? firstColumn.getHeight() : 0;
772 }; 773 };
773 774
774 /** 775 /**
775 * @return {Array.<Mosaic.Tile>} All tiles in the layout. 776 * @return {Array.<Mosaic.Tile>} All tiles in the layout.
776 */ 777 */
777 Mosaic.Layout.prototype.getTiles = function() { 778 Mosaic.Layout.prototype.getTiles = function() {
778 return Array.prototype.concat.apply([], 779 return Array.prototype.concat.apply([],
779 this.columns_.map(function(c) { return c.getTiles() })); 780 this.columns_.map(function(c) { return c.getTiles(); }));
780 }; 781 };
781 782
782 /** 783 /**
783 * @return {number} Total number of tiles added to the layout. 784 * @return {number} Total number of tiles added to the layout.
784 */ 785 */
785 Mosaic.Layout.prototype.getTileCount = function() { 786 Mosaic.Layout.prototype.getTileCount = function() {
786 return this.getLaidOutTileCount() + 787 return this.getLaidOutTileCount() +
787 (this.newColumn_ ? this.newColumn_.getTileCount() : 0); 788 (this.newColumn_ ? this.newColumn_.getTileCount() : 0);
788 }; 789 };
789 790
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 846
846 if (this.newColumn_.isSuboptimal()) { 847 if (this.newColumn_.isSuboptimal()) {
847 layoutQueue = this.newColumn_.getTiles().concat(layoutQueue); 848 layoutQueue = this.newColumn_.getTiles().concat(layoutQueue);
848 this.newColumn_.retryWithLowerDensity(); 849 this.newColumn_.retryWithLowerDensity();
849 continue; 850 continue;
850 } 851 }
851 852
852 this.columns_.push(this.newColumn_); 853 this.columns_.push(this.newColumn_);
853 this.newColumn_ = null; 854 this.newColumn_ = null;
854 855
855 if (this.mode_ === Mosaic.Layout.MODE_FINAL) { 856 if (this.mode_ === Mosaic.Layout.MODE_FINAL && isFinalColumn) {
856 this.getLastColumn_().layout(); 857 this.commit_();
857 continue; 858 continue;
858 } 859 }
859 860
860 if (this.getWidth() > this.viewportWidth_) { 861 if (this.getWidth() > this.viewportWidth_) {
861 // Viewport completely filled. 862 // Viewport completely filled.
862 if (this.density_.equals(this.maxDensity_)) { 863 if (this.density_.equals(this.maxDensity_)) {
863 // Max density reached, commit if tentative, just continue if dry run. 864 // Max density reached, commit if tentative, just continue if dry run.
864 if (this.mode_ === Mosaic.Layout.MODE_TENTATIVE) 865 if (this.mode_ === Mosaic.Layout.MODE_TENTATIVE)
865 this.commit_(); 866 this.commit_();
866 continue; 867 continue;
(...skipping 19 matching lines...) Expand all
886 }; 887 };
887 888
888 /** 889 /**
889 * Commits the tentative layout. 890 * Commits the tentative layout.
890 * 891 *
891 * @param {number=} opt_offsetX Horizontal offset. 892 * @param {number=} opt_offsetX Horizontal offset.
892 * @param {number=} opt_offsetY Vertical offset. 893 * @param {number=} opt_offsetY Vertical offset.
893 * @private 894 * @private
894 */ 895 */
895 Mosaic.Layout.prototype.commit_ = function(opt_offsetX, opt_offsetY) { 896 Mosaic.Layout.prototype.commit_ = function(opt_offsetX, opt_offsetY) {
896 console.assert(this.mode_ !== Mosaic.Layout.MODE_FINAL,
897 'Did not expect final layout');
898 for (var i = 0; i !== this.columns_.length; i++) { 897 for (var i = 0; i !== this.columns_.length; i++) {
899 this.columns_[i].layout(opt_offsetX, opt_offsetY); 898 this.columns_[i].layout(opt_offsetX, opt_offsetY);
900 } 899 }
901 this.mode_ = Mosaic.Layout.MODE_FINAL; 900 this.mode_ = Mosaic.Layout.MODE_FINAL;
902 }; 901 };
903 902
904 /** 903 /**
905 * Finds the most horizontally stretched layout built from the same tiles. 904 * Finds the most horizontally stretched layout built from the same tiles.
906 * 905 *
907 * The main layout algorithm fills the entire available viewport height. 906 * The main layout algorithm fills the entire available viewport height.
(...skipping 10 matching lines...) Expand all
918 // If the layout aspect ratio is not dramatically different from 917 // If the layout aspect ratio is not dramatically different from
919 // the viewport aspect ratio then there is no need to optimize. 918 // the viewport aspect ratio then there is no need to optimize.
920 if (this.getWidth() / this.getHeight() > 919 if (this.getWidth() / this.getHeight() >
921 this.viewportWidth_ / this.viewportHeight_ * 0.9) 920 this.viewportWidth_ / this.viewportHeight_ * 0.9)
922 return null; 921 return null;
923 922
924 var tiles = this.getTiles(); 923 var tiles = this.getTiles();
925 if (tiles.length === 1) 924 if (tiles.length === 1)
926 return null; // Single tile layout is always the same. 925 return null; // Single tile layout is always the same.
927 926
928 var tileHeights = tiles.map(function(t) { return t.getMaxContentHeight() }); 927 var tileHeights = tiles.map(function(t) { return t.getMaxContentHeight(); });
929 var minTileHeight = Math.min.apply(null, tileHeights); 928 var minTileHeight = Math.min.apply(null, tileHeights);
930 929
931 for (var h = minTileHeight; h < this.viewportHeight_; h += minTileHeight) { 930 for (var h = minTileHeight; h < this.viewportHeight_; h += minTileHeight) {
932 var layout = new Mosaic.Layout( 931 var layout = new Mosaic.Layout(
933 Mosaic.Layout.MODE_DRY_RUN, this.density_.clone()); 932 Mosaic.Layout.MODE_DRY_RUN, this.density_.clone());
934 layout.setViewportSize(this.viewportWidth_, h); 933 layout.setViewportSize(this.viewportWidth_, h);
935 for (var t = 0; t !== tiles.length; t++) 934 for (var t = 0; t !== tiles.length; t++)
936 layout.add(tiles[t], t + 1 === tiles.length); 935 layout.add(tiles[t], t + 1 === tiles.length);
937 936
938 if (layout.getWidth() <= this.viewportWidth_) 937 if (layout.getWidth() <= this.viewportWidth_)
(...skipping 1040 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 return new Rect(this.left_ - this.container_.scrollLeft, this.top_, 1978 return new Rect(this.left_ - this.container_.scrollLeft, this.top_,
1980 this.width_, this.height_).inflate(-margin, -margin); 1979 this.width_, this.height_).inflate(-margin, -margin);
1981 }; 1980 };
1982 1981
1983 /** 1982 /**
1984 * @return {number} X coordinate of the tile center. 1983 * @return {number} X coordinate of the tile center.
1985 */ 1984 */
1986 Mosaic.Tile.prototype.getCenterX = function() { 1985 Mosaic.Tile.prototype.getCenterX = function() {
1987 return this.left_ + Math.round(this.width_ / 2); 1986 return this.left_ + Math.round(this.width_ / 2);
1988 }; 1987 };
OLDNEW
« no previous file with comments | « ui/file_manager/gallery/js/gallery.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698