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

Side by Side Diff: ui/app_list/views/apps_grid_view.cc

Issue 303543004: MacViews: views_examples_with_content_exe working! Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add files Created 6 years, 6 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/app_list/views/apps_grid_view.h ('k') | ui/app_list/views/contents_view.h » ('j') | 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 #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
11 #include "base/guid.h" 11 #include "base/guid.h"
12 #include "content/public/browser/web_contents.h" 12 #include "content/public/browser/web_contents.h"
13 #include "ui/app_list/app_list_constants.h" 13 #include "ui/app_list/app_list_constants.h"
14 #include "ui/app_list/app_list_folder_item.h" 14 #include "ui/app_list/app_list_folder_item.h"
15 #include "ui/app_list/app_list_item.h" 15 #include "ui/app_list/app_list_item.h"
16 #include "ui/app_list/app_list_switches.h" 16 #include "ui/app_list/app_list_switches.h"
17 #include "ui/app_list/pagination_model.h" 17 #include "ui/app_list/pagination_model.h"
18 #include "ui/app_list/views/app_list_drag_and_drop_host.h" 18 #include "ui/app_list/views/app_list_drag_and_drop_host.h"
19 #include "ui/app_list/views/app_list_folder_view.h" 19 #include "ui/app_list/views/app_list_folder_view.h"
20 #include "ui/app_list/views/app_list_item_view.h" 20 #include "ui/app_list/views/app_list_item_view.h"
21 #include "ui/app_list/views/apps_grid_view_delegate.h" 21 #include "ui/app_list/views/apps_grid_view_delegate.h"
22 #include "ui/app_list/views/apps_grid_view_folder_delegate.h"
22 #include "ui/app_list/views/page_switcher.h" 23 #include "ui/app_list/views/page_switcher.h"
23 #include "ui/app_list/views/pulsing_block_view.h" 24 #include "ui/app_list/views/pulsing_block_view.h"
24 #include "ui/app_list/views/top_icon_animation_view.h" 25 #include "ui/app_list/views/top_icon_animation_view.h"
25 #include "ui/compositor/scoped_layer_animation_settings.h" 26 #include "ui/compositor/scoped_layer_animation_settings.h"
26 #include "ui/events/event.h" 27 #include "ui/events/event.h"
27 #include "ui/gfx/animation/animation.h" 28 #include "ui/gfx/animation/animation.h"
28 #include "ui/views/border.h" 29 #include "ui/views/border.h"
29 #include "ui/views/controls/webview/webview.h" 30 #include "ui/views/controls/webview/webview.h"
30 #include "ui/views/view_model_utils.h" 31 #include "ui/views/view_model_utils.h"
31 #include "ui/views/widget/widget.h" 32 #include "ui/views/widget/widget.h"
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 cols_ = cols; 386 cols_ = cols;
386 rows_per_page_ = rows_per_page; 387 rows_per_page_ = rows_per_page;
387 388
388 SetBorder(views::Border::CreateEmptyBorder( 389 SetBorder(views::Border::CreateEmptyBorder(
389 kTopPadding, kLeftRightPadding, 0, kLeftRightPadding)); 390 kTopPadding, kLeftRightPadding, 0, kLeftRightPadding));
390 } 391 }
391 392
392 void AppsGridView::ResetForShowApps() { 393 void AppsGridView::ResetForShowApps() {
393 activated_folder_item_view_ = NULL; 394 activated_folder_item_view_ = NULL;
394 ClearDragState(); 395 ClearDragState();
395 layer()->SetOpacity(1.0f); 396 if (layer())
397 layer()->SetOpacity(1.0f);
396 SetVisible(true); 398 SetVisible(true);
397 // Set all views to visible in case they weren't made visible again by an 399 // Set all views to visible in case they weren't made visible again by an
398 // incomplete animation. 400 // incomplete animation.
399 for (int i = 0; i < view_model_.view_size(); ++i) { 401 for (int i = 0; i < view_model_.view_size(); ++i) {
400 view_model_.view_at(i)->SetVisible(true); 402 view_model_.view_at(i)->SetVisible(true);
401 } 403 }
402 } 404 }
403 405
404 void AppsGridView::SetModel(AppListModel* model) { 406 void AppsGridView::SetModel(AppListModel* model) {
405 if (model_) 407 if (model_)
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 for (int i = start; i < end; i++) { 836 for (int i = start; i < end; i++) {
835 AppListItemView* v = static_cast<AppListItemView*>(view_model_.view_at(i)); 837 AppListItemView* v = static_cast<AppListItemView*>(view_model_.view_at(i));
836 v->Prerender(); 838 v->Prerender();
837 } 839 }
838 } 840 }
839 841
840 bool AppsGridView::IsAnimatingView(views::View* view) { 842 bool AppsGridView::IsAnimatingView(views::View* view) {
841 return bounds_animator_.IsAnimating(view); 843 return bounds_animator_.IsAnimating(view);
842 } 844 }
843 845
846 const char* AppsGridView::GetClassName() const {
847 return "GridView";
848 }
849
844 gfx::Size AppsGridView::GetPreferredSize() const { 850 gfx::Size AppsGridView::GetPreferredSize() const {
845 const gfx::Insets insets(GetInsets()); 851 const gfx::Insets insets(GetInsets());
846 const gfx::Size tile_size = gfx::Size(kPreferredTileWidth, 852 const gfx::Size tile_size = gfx::Size(kPreferredTileWidth,
847 kPreferredTileHeight); 853 kPreferredTileHeight);
848 const int page_switcher_height = 854 const int page_switcher_height =
849 page_switcher_view_->GetPreferredSize().height(); 855 page_switcher_view_->GetPreferredSize().height();
850 return gfx::Size( 856 return gfx::Size(
851 tile_size.width() * cols_ + insets.width(), 857 tile_size.width() * cols_ + insets.width(),
852 tile_size.height() * rows_per_page_ + 858 tile_size.height() * rows_per_page_ +
853 page_switcher_height + insets.height()); 859 page_switcher_height + insets.height());
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 } 1002 }
997 } 1003 }
998 1004
999 views::View* AppsGridView::CreateViewForItemAtIndex(size_t index) { 1005 views::View* AppsGridView::CreateViewForItemAtIndex(size_t index) {
1000 // The drag_view_ might be pending for deletion, therefore view_model_ 1006 // The drag_view_ might be pending for deletion, therefore view_model_
1001 // may have one more item than item_list_. 1007 // may have one more item than item_list_.
1002 DCHECK_LE(index, item_list_->item_count()); 1008 DCHECK_LE(index, item_list_->item_count());
1003 AppListItemView* view = new AppListItemView(this, 1009 AppListItemView* view = new AppListItemView(this,
1004 item_list_->item_at(index)); 1010 item_list_->item_at(index));
1005 view->SetIconSize(icon_size_); 1011 view->SetIconSize(icon_size_);
1006 #if defined(USE_AURA)
1007 view->SetPaintToLayer(true); 1012 view->SetPaintToLayer(true);
1008 view->SetFillsBoundsOpaquely(false); 1013 view->SetFillsBoundsOpaquely(false);
1009 #endif
1010 return view; 1014 return view;
1011 } 1015 }
1012 1016
1013 AppsGridView::Index AppsGridView::GetIndexFromModelIndex( 1017 AppsGridView::Index AppsGridView::GetIndexFromModelIndex(
1014 int model_index) const { 1018 int model_index) const {
1015 return Index(model_index / tiles_per_page(), model_index % tiles_per_page()); 1019 return Index(model_index / tiles_per_page(), model_index % tiles_per_page());
1016 } 1020 }
1017 1021
1018 int AppsGridView::GetModelIndexFromIndex(const Index& index) const { 1022 int AppsGridView::GetModelIndexFromIndex(const Index& index) const {
1019 return index.page * tiles_per_page() + index.slot; 1023 return index.page * tiles_per_page() + index.slot;
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 // Determine page of |current| and |target|. -1 means in the left invisible 1229 // Determine page of |current| and |target|. -1 means in the left invisible
1226 // page, 0 is the center visible page and 1 means in the right invisible page. 1230 // page, 0 is the center visible page and 1 means in the right invisible page.
1227 const int current_page = current.x() < 0 ? -1 : 1231 const int current_page = current.x() < 0 ? -1 :
1228 current.x() >= width() ? 1 : 0; 1232 current.x() >= width() ? 1 : 0;
1229 const int target_page = target.x() < 0 ? -1 : 1233 const int target_page = target.x() < 0 ? -1 :
1230 target.x() >= width() ? 1 : 0; 1234 target.x() >= width() ? 1 : 0;
1231 1235
1232 const int dir = current_page < target_page || 1236 const int dir = current_page < target_page ||
1233 (current_page == target_page && current.y() < target.y()) ? 1 : -1; 1237 (current_page == target_page && current.y() < target.y()) ? 1 : -1;
1234 1238
1235 #if defined(USE_AURA)
1236 scoped_ptr<ui::Layer> layer; 1239 scoped_ptr<ui::Layer> layer;
1237 if (animate_current) { 1240 if (animate_current) {
1238 layer = view->RecreateLayer(); 1241 layer = view->RecreateLayer();
1239 layer->SuppressPaint(); 1242 layer->SuppressPaint();
1240 1243
1241 view->SetFillsBoundsOpaquely(false); 1244 view->SetFillsBoundsOpaquely(false);
1242 view->layer()->SetOpacity(0.f); 1245 view->layer()->SetOpacity(0.f);
1243 } 1246 }
1244 1247
1245 gfx::Rect current_out(current); 1248 gfx::Rect current_out(current);
1246 current_out.Offset(dir * kPreferredTileWidth, 0); 1249 current_out.Offset(dir * kPreferredTileWidth, 0);
1247 #endif
1248 1250
1249 gfx::Rect target_in(target); 1251 gfx::Rect target_in(target);
1250 if (animate_target) 1252 if (animate_target)
1251 target_in.Offset(-dir * kPreferredTileWidth, 0); 1253 target_in.Offset(-dir * kPreferredTileWidth, 0);
1252 view->SetBoundsRect(target_in); 1254 view->SetBoundsRect(target_in);
1253 bounds_animator_.AnimateViewTo(view, target); 1255 bounds_animator_.AnimateViewTo(view, target);
1254 1256
1255 #if defined(USE_AURA)
1256 bounds_animator_.SetAnimationDelegate( 1257 bounds_animator_.SetAnimationDelegate(
1257 view, 1258 view,
1258 new RowMoveAnimationDelegate(view, layer.release(), current_out), 1259 new RowMoveAnimationDelegate(view, layer.release(), current_out),
1259 true); 1260 true);
1260 #endif
1261 } 1261 }
1262 1262
1263 void AppsGridView::ExtractDragLocation(const ui::LocatedEvent& event, 1263 void AppsGridView::ExtractDragLocation(const ui::LocatedEvent& event,
1264 gfx::Point* drag_point) { 1264 gfx::Point* drag_point) {
1265 #if defined(USE_AURA) && !defined(OS_WIN) 1265 #if defined(USE_AURA) && !defined(OS_WIN)
1266 // Use root location of |event| instead of location in |drag_view_|'s 1266 // Use root location of |event| instead of location in |drag_view_|'s
1267 // coordinates because |drag_view_| has a scale transform and location 1267 // coordinates because |drag_view_| has a scale transform and location
1268 // could have integer round error and causes jitter. 1268 // could have integer round error and causes jitter.
1269 *drag_point = event.root_location(); 1269 *drag_point = event.root_location();
1270 1270
1271 // GetWidget() could be NULL for tests. 1271 // GetWidget() could be NULL for tests.
1272 if (GetWidget()) { 1272 if (GetWidget()) {
1273 aura::Window::ConvertPointToTarget( 1273 aura::Window::ConvertPointToTarget(
1274 GetWidget()->GetNativeWindow()->GetRootWindow(), 1274 GetWidget()->GetNativeWindow()->GetRootWindow(),
1275 GetWidget()->GetNativeWindow(), 1275 GetWidget()->GetNativeWindow(),
1276 drag_point); 1276 drag_point);
1277 } 1277 }
1278 1278
1279 views::View::ConvertPointFromWidget(this, drag_point); 1279 views::View::ConvertPointFromWidget(this, drag_point);
1280 #else 1280 #else
1281 // For non-aura, root location is not clearly defined but |drag_view_| does 1281 // For non-aura, root location is not clearly defined but |drag_view_| does
1282 // not have the scale transform. So no round error would be introduced and 1282 // not have the scale transform. So no round error would be introduced and
1283 // it's okay to use View::ConvertPointToTarget. 1283 // it's okay to use View::ConvertPointToTarget.
1284 // TODO(tapted): Investigate round error.
1284 *drag_point = event.location(); 1285 *drag_point = event.location();
1285 views::View::ConvertPointToTarget(drag_view_, this, drag_point); 1286 views::View::ConvertPointToTarget(drag_view_, this, drag_point);
1286 #endif 1287 #endif
1287 } 1288 }
1288 1289
1289 void AppsGridView::CalculateDropTarget(const gfx::Point& drag_point, 1290 void AppsGridView::CalculateDropTarget(const gfx::Point& drag_point,
1290 bool use_page_button_hovering) { 1291 bool use_page_button_hovering) {
1291 if (EnableFolderDragDropUI()) { 1292 if (EnableFolderDragDropUI()) {
1292 CalculateDropTargetWithFolderEnabled(drag_point, use_page_button_hovering); 1293 CalculateDropTargetWithFolderEnabled(drag_point, use_page_button_hovering);
1293 return; 1294 return;
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 Layout(); 1942 Layout();
1942 } 1943 }
1943 1944
1944 void AppsGridView::OnAppListModelStatusChanged() { 1945 void AppsGridView::OnAppListModelStatusChanged() {
1945 UpdatePulsingBlockViews(); 1946 UpdatePulsingBlockViews();
1946 Layout(); 1947 Layout();
1947 SchedulePaint(); 1948 SchedulePaint();
1948 } 1949 }
1949 1950
1950 void AppsGridView::SetViewHidden(views::View* view, bool hide, bool immediate) { 1951 void AppsGridView::SetViewHidden(views::View* view, bool hide, bool immediate) {
1951 #if defined(USE_AURA)
1952 ui::ScopedLayerAnimationSettings animator(view->layer()->GetAnimator()); 1952 ui::ScopedLayerAnimationSettings animator(view->layer()->GetAnimator());
1953 animator.SetPreemptionStrategy( 1953 animator.SetPreemptionStrategy(
1954 immediate ? ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET : 1954 immediate ? ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET :
1955 ui::LayerAnimator::BLEND_WITH_CURRENT_ANIMATION); 1955 ui::LayerAnimator::BLEND_WITH_CURRENT_ANIMATION);
1956 view->layer()->SetOpacity(hide ? 0 : 1); 1956 view->layer()->SetOpacity(hide ? 0 : 1);
1957 #endif
1958 } 1957 }
1959 1958
1960 void AppsGridView::OnImplicitAnimationsCompleted() { 1959 void AppsGridView::OnImplicitAnimationsCompleted() {
1961 if (layer()->opacity() == 0.0f) 1960 if (layer()->opacity() == 0.0f)
1962 SetVisible(false); 1961 SetVisible(false);
1963 } 1962 }
1964 1963
1965 bool AppsGridView::EnableFolderDragDropUI() { 1964 bool AppsGridView::EnableFolderDragDropUI() {
1966 // Enable drag and drop folder UI only if it is at the app list root level 1965 // Enable drag and drop folder UI only if it is at the app list root level
1967 // and the switch is on and the target folder can still accept new items. 1966 // and the switch is on and the target folder can still accept new items.
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, 2147 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index,
2149 bool is_target_folder) { 2148 bool is_target_folder) {
2150 AppListItemView* target_view = 2149 AppListItemView* target_view =
2151 static_cast<AppListItemView*>( 2150 static_cast<AppListItemView*>(
2152 GetViewAtSlotOnCurrentPage(target_index.slot)); 2151 GetViewAtSlotOnCurrentPage(target_index.slot));
2153 if (target_view) 2152 if (target_view)
2154 target_view->SetAsAttemptedFolderTarget(is_target_folder); 2153 target_view->SetAsAttemptedFolderTarget(is_target_folder);
2155 } 2154 }
2156 2155
2157 } // namespace app_list 2156 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/views/apps_grid_view.h ('k') | ui/app_list/views/contents_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698