Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include "ui/app_list/views/apps_grid_view.h" | 5 #include "ui/app_list/views/apps_grid_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 871 v->Prerender(); | 871 v->Prerender(); |
| 872 } | 872 } |
| 873 } | 873 } |
| 874 | 874 |
| 875 bool AppsGridView::IsAnimatingView(views::View* view) { | 875 bool AppsGridView::IsAnimatingView(views::View* view) { |
| 876 return bounds_animator_.IsAnimating(view); | 876 return bounds_animator_.IsAnimating(view); |
| 877 } | 877 } |
| 878 | 878 |
| 879 gfx::Size AppsGridView::GetPreferredSize() const { | 879 gfx::Size AppsGridView::GetPreferredSize() const { |
| 880 const gfx::Insets insets(GetInsets()); | 880 const gfx::Insets insets(GetInsets()); |
| 881 const gfx::Size tile_size = gfx::Size(kPreferredTileWidth, | |
| 882 kPreferredTileHeight); | |
| 883 int page_switcher_height = kBottomPadding; | 881 int page_switcher_height = kBottomPadding; |
| 884 if (page_switcher_view_) | 882 if (page_switcher_view_) |
| 885 page_switcher_height = page_switcher_view_->GetPreferredSize().height(); | 883 page_switcher_height = page_switcher_view_->GetPreferredSize().height(); |
| 886 return gfx::Size( | 884 gfx::Size size = GetTileGridSize(); |
| 887 tile_size.width() * cols_ + insets.width(), | 885 size.Enlarge(insets.width(), insets.height() + page_switcher_height); |
| 888 tile_size.height() * rows_per_page_ + | 886 return size; |
| 889 page_switcher_height + insets.height()); | |
| 890 } | 887 } |
| 891 | 888 |
| 892 bool AppsGridView::GetDropFormats( | 889 bool AppsGridView::GetDropFormats( |
| 893 int* formats, | 890 int* formats, |
| 894 std::set<OSExchangeData::CustomFormat>* custom_formats) { | 891 std::set<OSExchangeData::CustomFormat>* custom_formats) { |
| 895 // TODO(koz): Only accept a specific drag type for app shortcuts. | 892 // TODO(koz): Only accept a specific drag type for app shortcuts. |
| 896 *formats = OSExchangeData::FILE_NAME; | 893 *formats = OSExchangeData::FILE_NAME; |
| 897 return true; | 894 return true; |
| 898 } | 895 } |
| 899 | 896 |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1155 target_slot = last_item_slot; | 1152 target_slot = last_item_slot; |
| 1156 } | 1153 } |
| 1157 } | 1154 } |
| 1158 | 1155 |
| 1159 int target_page = std::min(pagination_model_.total_pages() - 1, | 1156 int target_page = std::min(pagination_model_.total_pages() - 1, |
| 1160 std::max(selected.page + page_delta, 0)); | 1157 std::max(selected.page + page_delta, 0)); |
| 1161 SetSelectedItemByIndex(Index(target_page, target_slot)); | 1158 SetSelectedItemByIndex(Index(target_page, target_slot)); |
| 1162 } | 1159 } |
| 1163 | 1160 |
| 1164 void AppsGridView::CalculateIdealBounds() { | 1161 void AppsGridView::CalculateIdealBounds() { |
| 1165 gfx::Rect rect(GetContentsBounds()); | 1162 gfx::Rect rect(GetContentsBounds()); |
|
Matt Giuca
2014/09/10 05:35:06
You should be able to delete this now (unless ther
calamity
2014/09/11 06:53:34
Done.
Matt Giuca
2014/09/12 01:04:46
Also delete rect itself. (That was my point.)
| |
| 1166 if (rect.IsEmpty()) | 1163 if (rect.IsEmpty()) |
| 1167 return; | 1164 return; |
| 1168 | 1165 |
| 1169 gfx::Size tile_size(kPreferredTileWidth, kPreferredTileHeight); | 1166 gfx::Size grid_size = GetTileGridSize(); |
|
Matt Giuca
2014/09/10 05:35:06
This is actually fixing a subtle bug: calling grid
calamity
2014/09/11 06:53:34
Amended CL description as discussed.
Matt Giuca
2014/09/12 01:04:46
Acknowledged.
| |
| 1170 | |
| 1171 gfx::Rect grid_rect(gfx::Size(tile_size.width() * cols_, | |
| 1172 tile_size.height() * rows_per_page_)); | |
| 1173 grid_rect.Intersect(rect); | |
| 1174 | 1167 |
| 1175 // Page size including padding pixels. A tile.x + page_width means the same | 1168 // Page size including padding pixels. A tile.x + page_width means the same |
| 1176 // tile slot in the next page; similarly for tile.y + page_height. | 1169 // tile slot in the next page; similarly for tile.y + page_height. |
| 1177 const int page_width = grid_rect.width() + kPagePadding; | 1170 const int page_width = grid_size.width() + kPagePadding; |
| 1178 const int page_height = grid_rect.height() + kPagePadding; | 1171 const int page_height = grid_size.height() + kPagePadding; |
| 1179 | 1172 |
| 1180 // If there is a transition, calculates offset for current and target page. | 1173 // If there is a transition, calculates offset for current and target page. |
| 1181 const int current_page = pagination_model_.selected_page(); | 1174 const int current_page = pagination_model_.selected_page(); |
| 1182 const PaginationModel::Transition& transition = | 1175 const PaginationModel::Transition& transition = |
| 1183 pagination_model_.transition(); | 1176 pagination_model_.transition(); |
| 1184 const bool is_valid = pagination_model_.is_valid_page(transition.target_page); | 1177 const bool is_valid = pagination_model_.is_valid_page(transition.target_page); |
| 1185 | 1178 |
| 1186 // Transition to previous page means negative offset. | 1179 // Transition to previous page means negative offset. |
| 1187 const int dir = transition.target_page > current_page ? -1 : 1; | 1180 const int dir = transition.target_page > current_page ? -1 : 1; |
| 1188 | 1181 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1234 if (is_valid) { | 1227 if (is_valid) { |
| 1235 if (view_index.page == current_page || | 1228 if (view_index.page == current_page || |
| 1236 view_index.page == transition.target_page) { | 1229 view_index.page == transition.target_page) { |
| 1237 y_offset += transition.progress * page_height * dir; | 1230 y_offset += transition.progress * page_height * dir; |
| 1238 } | 1231 } |
| 1239 } | 1232 } |
| 1240 } | 1233 } |
| 1241 | 1234 |
| 1242 const int row = view_index.slot / cols_; | 1235 const int row = view_index.slot / cols_; |
| 1243 const int col = view_index.slot % cols_; | 1236 const int col = view_index.slot % cols_; |
| 1244 gfx::Rect tile_slot( | 1237 gfx::Rect tile_slot = GetExpectedTileBounds(row, col); |
| 1245 gfx::Point(grid_rect.x() + col * tile_size.width() + x_offset, | 1238 tile_slot.Offset(x_offset, y_offset); |
| 1246 grid_rect.y() + row * tile_size.height() + y_offset), | |
| 1247 tile_size); | |
| 1248 if (i < view_model_.view_size()) { | 1239 if (i < view_model_.view_size()) { |
| 1249 view_model_.set_ideal_bounds(i, tile_slot); | 1240 view_model_.set_ideal_bounds(i, tile_slot); |
| 1250 } else { | 1241 } else { |
| 1251 pulsing_blocks_model_.set_ideal_bounds(i - view_model_.view_size(), | 1242 pulsing_blocks_model_.set_ideal_bounds(i - view_model_.view_size(), |
| 1252 tile_slot); | 1243 tile_slot); |
| 1253 } | 1244 } |
| 1254 | 1245 |
| 1255 ++slot_index; | 1246 ++slot_index; |
| 1256 } | 1247 } |
| 1257 } | 1248 } |
| (...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2181 // Check if |point| is outside of contents bounds. | 2172 // Check if |point| is outside of contents bounds. |
| 2182 gfx::Rect bounds(GetContentsBounds()); | 2173 gfx::Rect bounds(GetContentsBounds()); |
| 2183 if (!bounds.Contains(point)) | 2174 if (!bounds.Contains(point)) |
| 2184 return gfx::Rect(); | 2175 return gfx::Rect(); |
| 2185 | 2176 |
| 2186 // Calculate which tile |point| is enclosed in. | 2177 // Calculate which tile |point| is enclosed in. |
| 2187 int x = point.x(); | 2178 int x = point.x(); |
| 2188 int y = point.y(); | 2179 int y = point.y(); |
| 2189 int col = (x - bounds.x()) / kPreferredTileWidth; | 2180 int col = (x - bounds.x()) / kPreferredTileWidth; |
| 2190 int row = (y - bounds.y()) / kPreferredTileHeight; | 2181 int row = (y - bounds.y()) / kPreferredTileHeight; |
| 2191 gfx::Rect tile_rect = GetTileBounds(row, col); | 2182 gfx::Rect tile_rect = GetExpectedTileBounds(row, col); |
| 2192 | 2183 |
| 2193 // Check if |point| is outside a valid item's tile. | 2184 // Check if |point| is outside a valid item's tile. |
| 2194 Index index(pagination_model_.selected_page(), row * cols_ + col); | 2185 Index index(pagination_model_.selected_page(), row * cols_ + col); |
| 2195 *tile_index = index; | 2186 *tile_index = index; |
| 2196 return tile_rect; | 2187 return tile_rect; |
| 2197 } | 2188 } |
| 2198 | 2189 |
| 2199 gfx::Rect AppsGridView::GetTileBounds(int row, int col) const { | 2190 gfx::Size AppsGridView::GetTileGridSize() const { |
| 2191 gfx::Rect bounds; | |
| 2192 bounds.Union(GetExpectedTileBounds(0, 0)); | |
|
Matt Giuca
2014/09/10 05:35:06
No need to do this first union. Just:
gfx::Rect bo
calamity
2014/09/11 06:53:35
Done.
| |
| 2193 bounds.Union(GetExpectedTileBounds(rows_per_page_ - 1, cols_ - 1)); | |
| 2194 return bounds.size(); | |
| 2195 } | |
| 2196 | |
| 2197 gfx::Rect AppsGridView::GetExpectedTileBounds(int row, int col) const { | |
| 2200 gfx::Rect bounds(GetContentsBounds()); | 2198 gfx::Rect bounds(GetContentsBounds()); |
| 2201 gfx::Size tile_size(kPreferredTileWidth, kPreferredTileHeight); | 2199 gfx::Size tile_size(kPreferredTileWidth, kPreferredTileHeight); |
| 2202 gfx::Rect grid_rect(gfx::Size(tile_size.width() * cols_, | 2200 gfx::Rect tile_rect(gfx::Point(bounds.x() + col * tile_size.width(), |
|
Matt Giuca
2014/09/10 05:35:06
Just return this directly.
calamity
2014/09/11 06:53:35
Done.
| |
| 2203 tile_size.height() * rows_per_page_)); | 2201 bounds.y() + row * tile_size.height()), |
| 2204 grid_rect.Intersect(bounds); | 2202 tile_size); |
| 2205 gfx::Rect tile_rect( | |
| 2206 gfx::Point(grid_rect.x() + col * tile_size.width(), | |
| 2207 grid_rect.y() + row * tile_size.height()), | |
| 2208 tile_size); | |
| 2209 return tile_rect; | 2203 return tile_rect; |
| 2210 } | 2204 } |
| 2211 | 2205 |
| 2212 bool AppsGridView::IsLastPossibleDropTarget(const Index& index) const { | 2206 bool AppsGridView::IsLastPossibleDropTarget(const Index& index) const { |
| 2213 int last_possible_slot = view_model_.view_size() % tiles_per_page(); | 2207 int last_possible_slot = view_model_.view_size() % tiles_per_page(); |
| 2214 return (index.page == pagination_model_.total_pages() - 1 && | 2208 return (index.page == pagination_model_.total_pages() - 1 && |
| 2215 index.slot == last_possible_slot + 1); | 2209 index.slot == last_possible_slot + 1); |
| 2216 } | 2210 } |
| 2217 | 2211 |
| 2218 views::View* AppsGridView::GetViewAtSlotOnCurrentPage(int slot) { | 2212 views::View* AppsGridView::GetViewAtSlotOnCurrentPage(int slot) { |
| 2219 if (slot < 0) | 2213 if (slot < 0) |
| 2220 return NULL; | 2214 return NULL; |
| 2221 | 2215 |
| 2222 // Calculate the original bound of the tile at |index|. | 2216 // Calculate the original bound of the tile at |index|. |
| 2223 int row = slot / cols_; | 2217 int row = slot / cols_; |
| 2224 int col = slot % cols_; | 2218 int col = slot % cols_; |
| 2225 gfx::Rect tile_rect = GetTileBounds(row, col); | 2219 gfx::Rect tile_rect = GetExpectedTileBounds(row, col); |
| 2226 | 2220 |
| 2227 for (int i = 0; i < view_model_.view_size(); ++i) { | 2221 for (int i = 0; i < view_model_.view_size(); ++i) { |
| 2228 views::View* view = view_model_.view_at(i); | 2222 views::View* view = view_model_.view_at(i); |
| 2229 if (view->bounds() == tile_rect && view != drag_view_) | 2223 if (view->bounds() == tile_rect && view != drag_view_) |
| 2230 return view; | 2224 return view; |
| 2231 } | 2225 } |
| 2232 return NULL; | 2226 return NULL; |
| 2233 } | 2227 } |
| 2234 | 2228 |
| 2235 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, | 2229 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, |
| 2236 bool is_target_folder) { | 2230 bool is_target_folder) { |
| 2237 AppListItemView* target_view = | 2231 AppListItemView* target_view = |
| 2238 static_cast<AppListItemView*>( | 2232 static_cast<AppListItemView*>( |
| 2239 GetViewAtSlotOnCurrentPage(target_index.slot)); | 2233 GetViewAtSlotOnCurrentPage(target_index.slot)); |
| 2240 if (target_view) | 2234 if (target_view) |
| 2241 target_view->SetAsAttemptedFolderTarget(is_target_folder); | 2235 target_view->SetAsAttemptedFolderTarget(is_target_folder); |
| 2242 } | 2236 } |
| 2243 | 2237 |
| 2244 } // namespace app_list | 2238 } // namespace app_list |
| OLD | NEW |