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

Side by Side Diff: chrome/browser/resources/file_manager/foreground/js/photo/mosaic_mode.js

Issue 130383003: Migrate from fullPath to Entry in the mosaic view. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | « chrome/browser/resources/file_manager/foreground/js/photo/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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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.
11 * @param {MetadataCache} metadataCache Metadata cache. 11 * @param {MetadataCache} metadataCache Metadata cache.
12 * @param {VolumeManagerWrapper} volumeManager Volume manager.
12 * @param {function} toggleMode Function to switch to the Slide mode. 13 * @param {function} toggleMode Function to switch to the Slide mode.
13 * @constructor 14 * @constructor
14 */ 15 */
15 function MosaicMode( 16 function MosaicMode(
16 container, dataModel, selectionModel, metadataCache, toggleMode) { 17 container, dataModel, selectionModel, metadataCache, volumeManager,
18 toggleMode) {
17 this.mosaic_ = new Mosaic( 19 this.mosaic_ = new Mosaic(
18 container.ownerDocument, dataModel, selectionModel, metadataCache); 20 container.ownerDocument, dataModel, selectionModel, metadataCache,
21 volumeManager);
19 container.appendChild(this.mosaic_); 22 container.appendChild(this.mosaic_);
20 23
21 this.toggleMode_ = toggleMode; 24 this.toggleMode_ = toggleMode;
22 this.mosaic_.addEventListener('dblclick', this.toggleMode_); 25 this.mosaic_.addEventListener('dblclick', this.toggleMode_);
23 this.showingTimeoutID_ = null; 26 this.showingTimeoutID_ = null;
24 } 27 }
25 28
26 /** 29 /**
27 * @return {Mosaic} The mosaic control. 30 * @return {Mosaic} The mosaic control.
28 */ 31 */
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 69
67 //////////////////////////////////////////////////////////////////////////////// 70 ////////////////////////////////////////////////////////////////////////////////
68 71
69 /** 72 /**
70 * Mosaic control. 73 * Mosaic control.
71 * 74 *
72 * @param {Document} document Document. 75 * @param {Document} document Document.
73 * @param {cr.ui.ArrayDataModel} dataModel Data model. 76 * @param {cr.ui.ArrayDataModel} dataModel Data model.
74 * @param {cr.ui.ListSelectionModel} selectionModel Selection model. 77 * @param {cr.ui.ListSelectionModel} selectionModel Selection model.
75 * @param {MetadataCache} metadataCache Metadata cache. 78 * @param {MetadataCache} metadataCache Metadata cache.
79 * @param {VolumeManagerWrapper} volumeManager Volume manager.
76 * @return {Element} Mosaic element. 80 * @return {Element} Mosaic element.
77 * @constructor 81 * @constructor
78 */ 82 */
79 function Mosaic(document, dataModel, selectionModel, metadataCache) { 83 function Mosaic(document, dataModel, selectionModel, metadataCache,
84 volumeManager) {
80 var self = document.createElement('div'); 85 var self = document.createElement('div');
81 Mosaic.decorate(self, dataModel, selectionModel, metadataCache); 86 Mosaic.decorate(
87 self, dataModel, selectionModel, metadataCache, volumeManager);
82 return self; 88 return self;
83 } 89 }
84 90
85 /** 91 /**
86 * Inherits from HTMLDivElement. 92 * Inherits from HTMLDivElement.
87 */ 93 */
88 Mosaic.prototype.__proto__ = HTMLDivElement.prototype; 94 Mosaic.prototype.__proto__ = HTMLDivElement.prototype;
89 95
90 /** 96 /**
91 * Default layout delay in ms. 97 * Default layout delay in ms.
(...skipping 10 matching lines...) Expand all
102 */ 108 */
103 Mosaic.ANIMATED_SCROLL_DURATION = 500; 109 Mosaic.ANIMATED_SCROLL_DURATION = 500;
104 110
105 /** 111 /**
106 * Decorates a Mosaic instance. 112 * Decorates a Mosaic instance.
107 * 113 *
108 * @param {Mosaic} self Self pointer. 114 * @param {Mosaic} self Self pointer.
109 * @param {cr.ui.ArrayDataModel} dataModel Data model. 115 * @param {cr.ui.ArrayDataModel} dataModel Data model.
110 * @param {cr.ui.ListSelectionModel} selectionModel Selection model. 116 * @param {cr.ui.ListSelectionModel} selectionModel Selection model.
111 * @param {MetadataCache} metadataCache Metadata cache. 117 * @param {MetadataCache} metadataCache Metadata cache.
118 * @param {VolumeManagerWrapper} volumeManager Volume manager.
112 */ 119 */
113 Mosaic.decorate = function(self, dataModel, selectionModel, metadataCache) { 120 Mosaic.decorate = function(
121 self, dataModel, selectionModel, metadataCache, volumeManager) {
114 self.__proto__ = Mosaic.prototype; 122 self.__proto__ = Mosaic.prototype;
115 self.className = 'mosaic'; 123 self.className = 'mosaic';
116 124
117 self.dataModel_ = dataModel; 125 self.dataModel_ = dataModel;
118 self.selectionModel_ = selectionModel; 126 self.selectionModel_ = selectionModel;
119 self.metadataCache_ = metadataCache; 127 self.metadataCache_ = metadataCache;
128 self.volumeManager_ = volumeManager;
hirono 2014/01/09 04:05:39 Is this member used?
mtomasz 2014/01/10 01:40:10 Yes, in #149.
120 129
121 // Initialization is completed lazily on the first call to |init|. 130 // Initialization is completed lazily on the first call to |init|.
122 }; 131 };
123 132
124 /** 133 /**
125 * Initializes the mosaic element. 134 * Initializes the mosaic element.
126 */ 135 */
127 Mosaic.prototype.init = function() { 136 Mosaic.prototype.init = function() {
128 if (this.tiles_) 137 if (this.tiles_)
129 return; // Already initialized, nothing to do. 138 return; // Already initialized, nothing to do.
130 139
131 this.layoutModel_ = new Mosaic.Layout(); 140 this.layoutModel_ = new Mosaic.Layout();
132 this.onResize_(); 141 this.onResize_();
133 142
134 this.selectionController_ = 143 this.selectionController_ =
135 new Mosaic.SelectionController(this.selectionModel_, this.layoutModel_); 144 new Mosaic.SelectionController(this.selectionModel_, this.layoutModel_);
136 145
137 this.tiles_ = []; 146 this.tiles_ = [];
138 for (var i = 0; i !== this.dataModel_.length; i++) 147 for (var i = 0; i !== this.dataModel_.length; i++) {
139 this.tiles_.push(new Mosaic.Tile(this, this.dataModel_.item(i))); 148 var locationInfo =
149 this.volumeManager_.getLocationInfo(this.dataModel_.item(i).getEntry());
150 this.tiles_.push(
151 new Mosaic.Tile(this, this.dataModel_.item(i), locationInfo));
152 }
140 153
141 this.selectionModel_.selectedIndexes.forEach(function(index) { 154 this.selectionModel_.selectedIndexes.forEach(function(index) {
142 this.tiles_[index].select(true); 155 this.tiles_[index].select(true);
143 }.bind(this)); 156 }.bind(this));
144 157
145 this.initTiles_(this.tiles_); 158 this.initTiles_(this.tiles_);
146 159
147 // The listeners might be called while some tiles are still loading. 160 // The listeners might be called while some tiles are still loading.
148 this.initListeners_(); 161 this.initListeners_();
149 }; 162 };
(...skipping 1465 matching lines...) Expand 10 before | Expand all | Expand 10 after
1615 } 1628 }
1616 }; 1629 };
1617 1630
1618 //////////////////////////////////////////////////////////////////////////////// 1631 ////////////////////////////////////////////////////////////////////////////////
1619 1632
1620 /** 1633 /**
1621 * A single tile of the image mosaic. 1634 * A single tile of the image mosaic.
1622 * 1635 *
1623 * @param {Element} container Container element. 1636 * @param {Element} container Container element.
1624 * @param {Gallery.Item} item Gallery item associated with this tile. 1637 * @param {Gallery.Item} item Gallery item associated with this tile.
1638 * @param {EntryLocation} locationInfo Location information for the tile.
hirono 2014/01/09 04:05:39 How about passing hidpiEmbedded flag instead of lo
mtomasz 2014/01/10 01:40:10 I was thinking about it. This would limit dependen
hirono 2014/01/10 03:18:23 So how about getting the flag in the constructor o
1625 * @return {Element} The new tile element. 1639 * @return {Element} The new tile element.
1626 * @constructor 1640 * @constructor
1627 */ 1641 */
1628 Mosaic.Tile = function(container, item) { 1642 Mosaic.Tile = function(container, item, locationInfo) {
1629 var self = container.ownerDocument.createElement('div'); 1643 var self = container.ownerDocument.createElement('div');
1630 Mosaic.Tile.decorate(self, container, item); 1644 Mosaic.Tile.decorate(self, container, item, locationInfo);
1631 return self; 1645 return self;
1632 }; 1646 };
1633 1647
1634 /** 1648 /**
1635 * @param {Element} self Self pointer. 1649 * @param {Element} self Self pointer.
1636 * @param {Element} container Container element. 1650 * @param {Element} container Container element.
1637 * @param {Gallery.Item} item Gallery item associated with this tile. 1651 * @param {Gallery.Item} item Gallery item associated with this tile.
1652 * @param {EntryLocation} locationInfo Location info for the tile image.
1638 */ 1653 */
1639 Mosaic.Tile.decorate = function(self, container, item) { 1654 Mosaic.Tile.decorate = function(self, container, item, locationInfo) {
1640 self.__proto__ = Mosaic.Tile.prototype; 1655 self.__proto__ = Mosaic.Tile.prototype;
1641 self.className = 'mosaic-tile'; 1656 self.className = 'mosaic-tile';
1642 1657
1643 self.container_ = container; 1658 self.container_ = container;
1644 self.item_ = item; 1659 self.item_ = item;
1660 self.locationInfo_ = locationInfo;
1645 self.left_ = null; // Mark as not laid out. 1661 self.left_ = null; // Mark as not laid out.
1646 }; 1662 };
1647 1663
1648 /** 1664 /**
1649 * Load mode for the tile's image. 1665 * Load mode for the tile's image.
1650 * @enum {number} 1666 * @enum {number}
1651 */ 1667 */
1652 Mosaic.Tile.LoadMode = { 1668 Mosaic.Tile.LoadMode = {
1653 LOW_DPI: 0, 1669 LOW_DPI: 0,
1654 HIGH_DPI: 1 1670 HIGH_DPI: 1
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 * @param {function()} onImageMeasured Image measured callback. 1786 * @param {function()} onImageMeasured Image measured callback.
1771 */ 1787 */
1772 Mosaic.Tile.prototype.init = function(metadata, onImageMeasured) { 1788 Mosaic.Tile.prototype.init = function(metadata, onImageMeasured) {
1773 this.markUnloaded(); 1789 this.markUnloaded();
1774 this.left_ = null; // Mark as not laid out. 1790 this.left_ = null; // Mark as not laid out.
1775 1791
1776 // Set higher priority for the selected elements to load them first. 1792 // Set higher priority for the selected elements to load them first.
1777 var priority = this.getAttribute('selected') ? 2 : 3; 1793 var priority = this.getAttribute('selected') ? 2 : 3;
1778 1794
1779 // Use embedded thumbnails on Drive, since they have higher resolution. 1795 // Use embedded thumbnails on Drive, since they have higher resolution.
1780 // TODO(mtomasz): Use Entry instead of paths. 1796 var hidpiEmbedded = this.locationInfo_ && this.locationInfo_.isDriveBased;
1781 var hidpiEmbedded =
1782 PathUtil.isDriveBasedPath(this.getItem().getEntry().fullPath);
1783 this.thumbnailLoader_ = new ThumbnailLoader( 1797 this.thumbnailLoader_ = new ThumbnailLoader(
1784 this.getItem().getEntry(), 1798 this.getItem().getEntry(),
1785 ThumbnailLoader.LoaderType.CANVAS, 1799 ThumbnailLoader.LoaderType.CANVAS,
1786 metadata, 1800 metadata,
1787 undefined, // Media type. 1801 undefined, // Media type.
1788 hidpiEmbedded ? ThumbnailLoader.UseEmbedded.USE_EMBEDDED : 1802 hidpiEmbedded ? ThumbnailLoader.UseEmbedded.USE_EMBEDDED :
1789 ThumbnailLoader.UseEmbedded.NO_EMBEDDED, 1803 ThumbnailLoader.UseEmbedded.NO_EMBEDDED,
1790 priority); 1804 priority);
1791 1805
1792 // If no hidpi embedded thumbnail available, then use the low resolution 1806 // If no hidpi embedded thumbnail available, then use the low resolution
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
2005 return new Rect(this.left_ - this.container_.scrollLeft, this.top_, 2019 return new Rect(this.left_ - this.container_.scrollLeft, this.top_,
2006 this.width_, this.height_).inflate(-margin, -margin); 2020 this.width_, this.height_).inflate(-margin, -margin);
2007 }; 2021 };
2008 2022
2009 /** 2023 /**
2010 * @return {number} X coordinate of the tile center. 2024 * @return {number} X coordinate of the tile center.
2011 */ 2025 */
2012 Mosaic.Tile.prototype.getCenterX = function() { 2026 Mosaic.Tile.prototype.getCenterX = function() {
2013 return this.left_ + Math.round(this.width_ / 2); 2027 return this.left_ + Math.round(this.width_ / 2);
2014 }; 2028 };
OLDNEW
« no previous file with comments | « chrome/browser/resources/file_manager/foreground/js/photo/gallery.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698