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

Unified Diff: athena/home/home_card_impl.cc

Issue 502583002: Exports gesture manager to a separate file and adds its unittests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: const 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/home/home_card_gesture_manager_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/home/home_card_impl.cc
diff --git a/athena/home/home_card_impl.cc b/athena/home/home_card_impl.cc
index a82234b6a62cd840a1de84b1d91e77d9a854c893..6227ce5a7192d83f80c66904bc31056ca7c24e18 100644
--- a/athena/home/home_card_impl.cc
+++ b/athena/home/home_card_impl.cc
@@ -11,6 +11,8 @@
#include "athena/env/public/athena_env.h"
#include "athena/home/app_list_view_delegate.h"
#include "athena/home/athena_start_page_view.h"
+#include "athena/home/home_card_constants.h"
+#include "athena/home/home_card_gesture_manager.h"
#include "athena/home/minimized_home.h"
#include "athena/home/public/app_model_builder.h"
#include "athena/input/public/accelerator_manager.h"
@@ -40,8 +42,6 @@ namespace athena {
namespace {
HomeCard* instance = NULL;
-const int kHomeCardHeight = 100;
-const int kHomeCardMinimizedHeight = 6;
gfx::Rect GetBoundsForState(const gfx::Rect& screen_bounds,
HomeCard::State state) {
@@ -123,151 +123,6 @@ class HomeCardLayoutManager : public aura::LayoutManager {
DISALLOW_COPY_AND_ASSIGN(HomeCardLayoutManager);
};
-class HomeCardGestureManager {
- public:
- class Delegate {
- public:
- // Called when the gesture has ended. The state of the home card will
- // end up with |final_state|.
- virtual void OnGestureEnded(HomeCard::State final_state) = 0;
-
- // Called when the gesture position is updated so that |delegate| should
- // update the visual. The arguments represent the state of the current
- // gesture position is switching from |from_state| to |to_state|, and
- // the level of the progress is at |progress|, which is 0 to 1.
- // |from_state| and |to_state| could be same. For example, if the user moves
- // the finger down to the bottom of the screen, both states are MINIMIZED.
- // In that case |progress| is 0.
- virtual void OnGestureProgressed(
- HomeCard::State from_state,
- HomeCard::State to_state,
- float progress) = 0;
- };
-
- HomeCardGestureManager(Delegate* delegate,
- const gfx::Rect& screen_bounds)
- : delegate_(delegate),
- last_state_(HomeCard::Get()->GetState()),
- y_offset_(0),
- last_estimated_top_(0),
- screen_bounds_(screen_bounds) {}
-
- void ProcessGestureEvent(ui::GestureEvent* event) {
- switch (event->type()) {
- case ui::ET_GESTURE_SCROLL_BEGIN:
- y_offset_ = event->location().y();
- event->SetHandled();
- break;
- case ui::ET_GESTURE_SCROLL_END:
- event->SetHandled();
- delegate_->OnGestureEnded(GetClosestState());
- break;
- case ui::ET_GESTURE_SCROLL_UPDATE:
- UpdateScrollState(*event);
- break;
- case ui::ET_SCROLL_FLING_START: {
- const ui::GestureEventDetails& details = event->details();
- const float kFlingCompletionVelocity = 100.0f;
- if (::fabs(details.velocity_y()) > kFlingCompletionVelocity) {
- int step = (details.velocity_y() > 0) ? 1 : -1;
- int new_state = static_cast<int>(last_state_) + step;
- if (new_state >= HomeCard::VISIBLE_CENTERED &&
- new_state <= HomeCard::VISIBLE_MINIMIZED) {
- last_state_ = static_cast<HomeCard::State>(new_state);
- }
- delegate_->OnGestureEnded(last_state_);
- }
- break;
- }
- default:
- // do nothing.
- break;
- }
- }
-
- private:
- HomeCard::State GetClosestState() {
- // The top position of the bounds for one smaller state than the current
- // one.
- int smaller_top = -1;
- for (int i = HomeCard::VISIBLE_MINIMIZED;
- i >= HomeCard::VISIBLE_CENTERED; --i) {
- HomeCard::State state = static_cast<HomeCard::State>(i);
- int top = GetBoundsForState(screen_bounds_, state).y();
- if (last_estimated_top_ == top) {
- return state;
- } else if (last_estimated_top_ > top) {
- if (smaller_top < 0)
- return state;
-
- if (smaller_top - last_estimated_top_ > (smaller_top - top) / 5) {
- return state;
- } else {
- return static_cast<HomeCard::State>(i + 1);
- }
- }
- smaller_top = top;
- }
-
- return last_state_;
- }
-
- void UpdateScrollState(const ui::GestureEvent& event) {
- last_estimated_top_ = event.root_location().y() - y_offset_;
-
- // The bounds which is at one smaller state than the current one.
- gfx::Rect smaller_bounds;
-
- for (int i = HomeCard::VISIBLE_MINIMIZED;
- i >= HomeCard::VISIBLE_CENTERED; --i) {
- HomeCard::State state = static_cast<HomeCard::State>(i);
- const gfx::Rect bounds = GetBoundsForState(screen_bounds_, state);
- if (last_estimated_top_ == bounds.y()) {
- delegate_->OnGestureProgressed(last_state_, state, 1.0f);
- last_state_ = state;
- return;
- } else if (last_estimated_top_ > bounds.y()) {
- if (smaller_bounds.IsEmpty()) {
- // Smaller than minimized -- returning the minimized bounds.
- delegate_->OnGestureProgressed(last_state_, state, 1.0f);
- } else {
- // The finger is between two states.
- float progress =
- static_cast<float>((smaller_bounds.y() - last_estimated_top_)) /
- (smaller_bounds.y() - bounds.y());
- if (last_state_ == state) {
- if (event.details().scroll_y() > 0) {
- state = static_cast<HomeCard::State>(state + 1);
- progress = 1.0f - progress;
- } else {
- last_state_ = static_cast<HomeCard::State>(last_state_ + 1);
- }
- }
- delegate_->OnGestureProgressed(last_state_, state, progress);
- }
- last_state_ = state;
- return;
- }
- smaller_bounds = bounds;
- }
- }
-
- Delegate* delegate_;
- HomeCard::State last_state_;
-
- // The offset from the top edge of the home card and the initial position of
- // gesture.
- int y_offset_;
-
- // The estimated top edge of the home card after the last touch event.
- int last_estimated_top_;
-
- // The bounds of the screen to compute the home card bounds.
- gfx::Rect screen_bounds_;
-
- DISALLOW_COPY_AND_ASSIGN(HomeCardGestureManager);
-};
-
// The container view of home card contents of each state.
class HomeCardView : public views::WidgetDelegateView {
public:
« no previous file with comments | « athena/home/home_card_gesture_manager_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698