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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
85 // Delays in milliseconds to show re-order preview. | 85 // Delays in milliseconds to show re-order preview. |
86 const int kReorderDelay = 120; | 86 const int kReorderDelay = 120; |
87 | 87 |
88 // Delays in milliseconds to show folder item reparent UI. | 88 // Delays in milliseconds to show folder item reparent UI. |
89 const int kFolderItemReparentDelay = 50; | 89 const int kFolderItemReparentDelay = 50; |
90 | 90 |
91 // Radius of the circle, in which if entered, show folder dropping preview | 91 // Radius of the circle, in which if entered, show folder dropping preview |
92 // UI. | 92 // UI. |
93 const int kFolderDroppingCircleRadius = 15; | 93 const int kFolderDroppingCircleRadius = 15; |
94 | 94 |
95 // Constants for dealing with scroll events. | |
96 const int kMinMouseWheelToSwitchPage = 20; | |
97 const int kMinScrollToSwitchPage = 20; | |
98 const int kMinHorizVelocityToSwitchPage = 800; | |
99 | |
100 const double kFinishTransitionThreshold = 0.33; | |
95 | 101 |
96 // RowMoveAnimationDelegate is used when moving an item into a different row. | 102 // RowMoveAnimationDelegate is used when moving an item into a different row. |
97 // Before running the animation, the item's layer is re-created and kept in | 103 // Before running the animation, the item's layer is re-created and kept in |
98 // the original position, then the item is moved to just before its target | 104 // the original position, then the item is moved to just before its target |
99 // position and opacity set to 0. When the animation runs, this delegate moves | 105 // position and opacity set to 0. When the animation runs, this delegate moves |
100 // the layer and fades it out while fading in the item at the same time. | 106 // the layer and fades it out while fading in the item at the same time. |
101 class RowMoveAnimationDelegate : public gfx::AnimationDelegate { | 107 class RowMoveAnimationDelegate : public gfx::AnimationDelegate { |
102 public: | 108 public: |
103 RowMoveAnimationDelegate(views::View* view, | 109 RowMoveAnimationDelegate(views::View* view, |
104 ui::Layer* layer, | 110 ui::Layer* layer, |
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
839 void AppsGridView::SetDragViewVisible(bool visible) { | 845 void AppsGridView::SetDragViewVisible(bool visible) { |
840 DCHECK(drag_view_); | 846 DCHECK(drag_view_); |
841 SetViewHidden(drag_view_, !visible, true); | 847 SetViewHidden(drag_view_, !visible, true); |
842 } | 848 } |
843 | 849 |
844 void AppsGridView::SetDragAndDropHostOfCurrentAppList( | 850 void AppsGridView::SetDragAndDropHostOfCurrentAppList( |
845 ApplicationDragAndDropHost* drag_and_drop_host) { | 851 ApplicationDragAndDropHost* drag_and_drop_host) { |
846 drag_and_drop_host_ = drag_and_drop_host; | 852 drag_and_drop_host_ = drag_and_drop_host; |
847 } | 853 } |
848 | 854 |
849 void AppsGridView::Prerender(int page_index) { | 855 void AppsGridView::Prerender() { |
850 Layout(); | 856 Layout(); |
851 int start = std::max(0, (page_index - kPrerenderPages) * tiles_per_page()); | 857 int selected_page = std::max(0, pagination_model_.selected_page()); |
858 int start = std::max(0, (selected_page - kPrerenderPages) * tiles_per_page()); | |
852 int end = std::min(view_model_.view_size(), | 859 int end = std::min(view_model_.view_size(), |
853 (page_index + 1 + kPrerenderPages) * tiles_per_page()); | 860 (selected_page + 1 + kPrerenderPages) * tiles_per_page()); |
854 for (int i = start; i < end; i++) { | 861 for (int i = start; i < end; i++) { |
855 AppListItemView* v = static_cast<AppListItemView*>(view_model_.view_at(i)); | 862 AppListItemView* v = static_cast<AppListItemView*>(view_model_.view_at(i)); |
856 v->Prerender(); | 863 v->Prerender(); |
857 } | 864 } |
858 } | 865 } |
859 | 866 |
860 bool AppsGridView::IsAnimatingView(views::View* view) { | 867 bool AppsGridView::IsAnimatingView(views::View* view) { |
861 return bounds_animator_.IsAnimating(view); | 868 return bounds_animator_.IsAnimating(view); |
862 } | 869 } |
863 | 870 |
(...skipping 18 matching lines...) Expand all Loading... | |
882 } | 889 } |
883 | 890 |
884 bool AppsGridView::CanDrop(const OSExchangeData& data) { | 891 bool AppsGridView::CanDrop(const OSExchangeData& data) { |
885 return true; | 892 return true; |
886 } | 893 } |
887 | 894 |
888 int AppsGridView::OnDragUpdated(const ui::DropTargetEvent& event) { | 895 int AppsGridView::OnDragUpdated(const ui::DropTargetEvent& event) { |
889 return ui::DragDropTypes::DRAG_MOVE; | 896 return ui::DragDropTypes::DRAG_MOVE; |
890 } | 897 } |
891 | 898 |
899 void AppsGridView::OnGestureEvent(ui::GestureEvent* event) { | |
calamity
2014/08/29 04:15:09
nit: May as well move this behind all the View ove
Matt Giuca
2014/08/29 06:28:19
Done.
| |
900 switch (event->type()) { | |
calamity
2014/08/29 04:15:10
I have a feeling this could change the folder beha
Matt Giuca
2014/08/29 06:28:19
Seems to be OK, but haven't tested on ChromeOS (wi
Matt Giuca
2014/08/29 07:47:28
Ugh, I can't test on ChromeOS because login manage
| |
901 case ui::ET_GESTURE_SCROLL_BEGIN: | |
902 pagination_model_.StartScroll(); | |
903 event->SetHandled(); | |
904 return; | |
905 case ui::ET_GESTURE_SCROLL_UPDATE: | |
906 // event->details.scroll_x() > 0 means moving contents to right. That is, | |
907 // transitioning to previous page. | |
908 pagination_model_.UpdateScroll(event->details().scroll_x() / | |
909 GetContentsBounds().width()); | |
910 event->SetHandled(); | |
911 return; | |
912 case ui::ET_GESTURE_SCROLL_END: | |
913 pagination_model_.EndScroll(pagination_model_.transition().progress < | |
914 kFinishTransitionThreshold); | |
915 event->SetHandled(); | |
916 return; | |
917 case ui::ET_SCROLL_FLING_START: { | |
918 pagination_model_.EndScroll(true); | |
919 if (fabs(event->details().velocity_x()) > kMinHorizVelocityToSwitchPage) { | |
920 pagination_model_.SelectPageRelative( | |
921 event->details().velocity_x() < 0 ? 1 : -1, true); | |
922 } | |
923 event->SetHandled(); | |
924 return; | |
925 } | |
926 default: | |
927 break; | |
928 } | |
929 } | |
930 | |
931 void AppsGridView::OnScrollEvent(ui::ScrollEvent* event) { | |
932 if (event->type() == ui::ET_SCROLL_FLING_CANCEL) | |
933 return; | |
934 | |
935 float offset; | |
936 if (std::abs(event->x_offset()) > std::abs(event->y_offset())) | |
937 offset = event->x_offset(); | |
938 else | |
939 offset = event->y_offset(); | |
940 | |
941 if (std::abs(offset) > kMinScrollToSwitchPage) { | |
942 if (!pagination_model_.has_transition()) { | |
943 pagination_model_.SelectPageRelative(offset > 0 ? -1 : 1, true); | |
944 } | |
945 event->SetHandled(); | |
946 event->StopPropagation(); | |
947 } | |
948 } | |
949 | |
892 void AppsGridView::Layout() { | 950 void AppsGridView::Layout() { |
893 if (bounds_animator_.IsAnimating()) | 951 if (bounds_animator_.IsAnimating()) |
894 bounds_animator_.Cancel(); | 952 bounds_animator_.Cancel(); |
895 | 953 |
896 CalculateIdealBounds(); | 954 CalculateIdealBounds(); |
897 for (int i = 0; i < view_model_.view_size(); ++i) { | 955 for (int i = 0; i < view_model_.view_size(); ++i) { |
898 views::View* view = view_model_.view_at(i); | 956 views::View* view = view_model_.view_at(i); |
899 if (view != drag_view_) | 957 if (view != drag_view_) |
900 view->SetBoundsRect(view_model_.ideal_bounds(i)); | 958 view->SetBoundsRect(view_model_.ideal_bounds(i)); |
901 } | 959 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
946 } | 1004 } |
947 | 1005 |
948 bool AppsGridView::OnKeyReleased(const ui::KeyEvent& event) { | 1006 bool AppsGridView::OnKeyReleased(const ui::KeyEvent& event) { |
949 bool handled = false; | 1007 bool handled = false; |
950 if (selected_view_) | 1008 if (selected_view_) |
951 handled = selected_view_->OnKeyReleased(event); | 1009 handled = selected_view_->OnKeyReleased(event); |
952 | 1010 |
953 return handled; | 1011 return handled; |
954 } | 1012 } |
955 | 1013 |
1014 bool AppsGridView::OnMouseWheel(const ui::MouseWheelEvent& event) { | |
1015 int offset; | |
1016 if (abs(event.x_offset()) > abs(event.y_offset())) | |
1017 offset = event.x_offset(); | |
1018 else | |
1019 offset = event.y_offset(); | |
1020 | |
1021 if (abs(offset) > kMinMouseWheelToSwitchPage) { | |
1022 if (!pagination_model_.has_transition()) { | |
1023 pagination_model_.SelectPageRelative(offset > 0 ? -1 : 1, true); | |
1024 } | |
1025 return true; | |
1026 } | |
1027 | |
1028 return false; | |
1029 } | |
1030 | |
956 void AppsGridView::ViewHierarchyChanged( | 1031 void AppsGridView::ViewHierarchyChanged( |
957 const ViewHierarchyChangedDetails& details) { | 1032 const ViewHierarchyChangedDetails& details) { |
958 if (!details.is_add && details.parent == this) { | 1033 if (!details.is_add && details.parent == this) { |
959 // The view being delete should not have reference in |view_model_|. | 1034 // The view being delete should not have reference in |view_model_|. |
960 CHECK_EQ(-1, view_model_.GetIndexOfView(details.child)); | 1035 CHECK_EQ(-1, view_model_.GetIndexOfView(details.child)); |
961 | 1036 |
962 if (selected_view_ == details.child) | 1037 if (selected_view_ == details.child) |
963 selected_view_ = NULL; | 1038 selected_view_ = NULL; |
964 if (activated_folder_item_view_ == details.child) | 1039 if (activated_folder_item_view_ == details.child) |
965 activated_folder_item_view_ = NULL; | 1040 activated_folder_item_view_ = NULL; |
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2171 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, | 2246 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, |
2172 bool is_target_folder) { | 2247 bool is_target_folder) { |
2173 AppListItemView* target_view = | 2248 AppListItemView* target_view = |
2174 static_cast<AppListItemView*>( | 2249 static_cast<AppListItemView*>( |
2175 GetViewAtSlotOnCurrentPage(target_index.slot)); | 2250 GetViewAtSlotOnCurrentPage(target_index.slot)); |
2176 if (target_view) | 2251 if (target_view) |
2177 target_view->SetAsAttemptedFolderTarget(is_target_folder); | 2252 target_view->SetAsAttemptedFolderTarget(is_target_folder); |
2178 } | 2253 } |
2179 | 2254 |
2180 } // namespace app_list | 2255 } // namespace app_list |
OLD | NEW |