| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "athena/home/home_card_impl.h" | 5 #include "athena/home/home_card_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "athena/env/public/athena_env.h" | 10 #include "athena/env/public/athena_env.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 } | 62 } |
| 63 | 63 |
| 64 } // namespace | 64 } // namespace |
| 65 | 65 |
| 66 // Makes sure the homecard is center-aligned horizontally and bottom-aligned | 66 // Makes sure the homecard is center-aligned horizontally and bottom-aligned |
| 67 // vertically. | 67 // vertically. |
| 68 class HomeCardLayoutManager : public aura::LayoutManager { | 68 class HomeCardLayoutManager : public aura::LayoutManager { |
| 69 public: | 69 public: |
| 70 HomeCardLayoutManager() : home_card_(nullptr), minimized_layer_(nullptr) {} | 70 HomeCardLayoutManager() : home_card_(nullptr), minimized_layer_(nullptr) {} |
| 71 | 71 |
| 72 virtual ~HomeCardLayoutManager() {} | 72 ~HomeCardLayoutManager() override {} |
| 73 | 73 |
| 74 void Layout(bool animate, gfx::Tween::Type tween_type) { | 74 void Layout(bool animate, gfx::Tween::Type tween_type) { |
| 75 // |home_card| could be detached from the root window (e.g. when it is being | 75 // |home_card| could be detached from the root window (e.g. when it is being |
| 76 // destroyed). | 76 // destroyed). |
| 77 if (!home_card_ || !home_card_->IsVisible() || !home_card_->GetRootWindow()) | 77 if (!home_card_ || !home_card_->IsVisible() || !home_card_->GetRootWindow()) |
| 78 return; | 78 return; |
| 79 | 79 |
| 80 scoped_ptr<ui::ScopedLayerAnimationSettings> settings; | 80 scoped_ptr<ui::ScopedLayerAnimationSettings> settings; |
| 81 if (animate) { | 81 if (animate) { |
| 82 settings.reset(new ui::ScopedLayerAnimationSettings( | 82 settings.reset(new ui::ScopedLayerAnimationSettings( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 95 private: | 95 private: |
| 96 void UpdateMinimizedHomeBounds() { | 96 void UpdateMinimizedHomeBounds() { |
| 97 gfx::Rect minimized_bounds = minimized_layer_->parent()->bounds(); | 97 gfx::Rect minimized_bounds = minimized_layer_->parent()->bounds(); |
| 98 minimized_bounds.set_y( | 98 minimized_bounds.set_y( |
| 99 minimized_bounds.bottom() - kHomeCardMinimizedHeight); | 99 minimized_bounds.bottom() - kHomeCardMinimizedHeight); |
| 100 minimized_bounds.set_height(kHomeCardMinimizedHeight); | 100 minimized_bounds.set_height(kHomeCardMinimizedHeight); |
| 101 minimized_layer_->SetBounds(minimized_bounds); | 101 minimized_layer_->SetBounds(minimized_bounds); |
| 102 } | 102 } |
| 103 | 103 |
| 104 // aura::LayoutManager: | 104 // aura::LayoutManager: |
| 105 virtual void OnWindowResized() override { | 105 void OnWindowResized() override { |
| 106 Layout(false, gfx::Tween::LINEAR); | 106 Layout(false, gfx::Tween::LINEAR); |
| 107 UpdateMinimizedHomeBounds(); | 107 UpdateMinimizedHomeBounds(); |
| 108 } | 108 } |
| 109 virtual void OnWindowAddedToLayout(aura::Window* child) override { | 109 void OnWindowAddedToLayout(aura::Window* child) override { |
| 110 if (!home_card_) { | 110 if (!home_card_) { |
| 111 home_card_ = child; | 111 home_card_ = child; |
| 112 Layout(false, gfx::Tween::LINEAR); | 112 Layout(false, gfx::Tween::LINEAR); |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 virtual void OnWillRemoveWindowFromLayout(aura::Window* child) override { | 115 void OnWillRemoveWindowFromLayout(aura::Window* child) override { |
| 116 if (home_card_ == child) | 116 if (home_card_ == child) |
| 117 home_card_ = nullptr; | 117 home_card_ = nullptr; |
| 118 } | 118 } |
| 119 virtual void OnWindowRemovedFromLayout(aura::Window* child) override { | 119 void OnWindowRemovedFromLayout(aura::Window* child) override {} |
| 120 } | 120 void OnChildWindowVisibilityChanged(aura::Window* child, |
| 121 virtual void OnChildWindowVisibilityChanged(aura::Window* child, | 121 bool visible) override { |
| 122 bool visible) override { | |
| 123 if (home_card_ == child) | 122 if (home_card_ == child) |
| 124 Layout(false, gfx::Tween::LINEAR); | 123 Layout(false, gfx::Tween::LINEAR); |
| 125 } | 124 } |
| 126 virtual void SetChildBounds(aura::Window* child, | 125 void SetChildBounds(aura::Window* child, |
| 127 const gfx::Rect& requested_bounds) override { | 126 const gfx::Rect& requested_bounds) override { |
| 128 SetChildBoundsDirect(child, requested_bounds); | 127 SetChildBoundsDirect(child, requested_bounds); |
| 129 } | 128 } |
| 130 | 129 |
| 131 aura::Window* home_card_; | 130 aura::Window* home_card_; |
| 132 ui::Layer* minimized_layer_; | 131 ui::Layer* minimized_layer_; |
| 133 | 132 |
| 134 DISALLOW_COPY_AND_ASSIGN(HomeCardLayoutManager); | 133 DISALLOW_COPY_AND_ASSIGN(HomeCardLayoutManager); |
| 135 }; | 134 }; |
| 136 | 135 |
| 137 // The container view of home card contents of each state. | 136 // The container view of home card contents of each state. |
| 138 class HomeCardView : public views::WidgetDelegateView, | 137 class HomeCardView : public views::WidgetDelegateView, |
| 139 public AthenaStartPageView::Observer { | 138 public AthenaStartPageView::Observer { |
| 140 public: | 139 public: |
| 141 HomeCardView(app_list::AppListViewDelegate* view_delegate, | 140 HomeCardView(app_list::AppListViewDelegate* view_delegate, |
| 142 aura::Window* container, | 141 aura::Window* container, |
| 143 HomeCardGestureManager::Delegate* gesture_delegate) | 142 HomeCardGestureManager::Delegate* gesture_delegate) |
| 144 : gesture_delegate_(gesture_delegate) { | 143 : gesture_delegate_(gesture_delegate) { |
| 145 SetLayoutManager(new views::FillLayout()); | 144 SetLayoutManager(new views::FillLayout()); |
| 146 // Ideally AppListMainView should be used here and have AthenaStartPageView | 145 // Ideally AppListMainView should be used here and have AthenaStartPageView |
| 147 // as its child view, so that custom pages and apps grid are available in | 146 // as its child view, so that custom pages and apps grid are available in |
| 148 // the home card. | 147 // the home card. |
| 149 // TODO(mukai): make it so after the detailed UI has been fixed. | 148 // TODO(mukai): make it so after the detailed UI has been fixed. |
| 150 main_view_ = new AthenaStartPageView(view_delegate); | 149 main_view_ = new AthenaStartPageView(view_delegate); |
| 151 main_view_->AddObserver(this); | 150 main_view_->AddObserver(this); |
| 152 AddChildView(main_view_); | 151 AddChildView(main_view_); |
| 153 } | 152 } |
| 154 | 153 |
| 155 virtual ~HomeCardView() { main_view_->RemoveObserver(this); } | 154 ~HomeCardView() override { main_view_->RemoveObserver(this); } |
| 156 | 155 |
| 157 void SetStateProgress(HomeCard::State from_state, | 156 void SetStateProgress(HomeCard::State from_state, |
| 158 HomeCard::State to_state, | 157 HomeCard::State to_state, |
| 159 float progress) { | 158 float progress) { |
| 160 // TODO(mukai): not clear the focus, but simply close the virtual keyboard. | 159 // TODO(mukai): not clear the focus, but simply close the virtual keyboard. |
| 161 GetFocusManager()->ClearFocus(); | 160 GetFocusManager()->ClearFocus(); |
| 162 if (from_state == HomeCard::VISIBLE_CENTERED) | 161 if (from_state == HomeCard::VISIBLE_CENTERED) |
| 163 main_view_->SetLayoutState(1.0f - progress); | 162 main_view_->SetLayoutState(1.0f - progress); |
| 164 else if (to_state == HomeCard::VISIBLE_CENTERED) | 163 else if (to_state == HomeCard::VISIBLE_CENTERED) |
| 165 main_view_->SetLayoutState(progress); | 164 main_view_->SetLayoutState(progress); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 176 | 175 |
| 177 main_view_->SetLayoutStateWithAnimation( | 176 main_view_->SetLayoutStateWithAnimation( |
| 178 (state == HomeCard::VISIBLE_CENTERED) ? 1.0f : 0.0f, tween_type); | 177 (state == HomeCard::VISIBLE_CENTERED) ? 1.0f : 0.0f, tween_type); |
| 179 } | 178 } |
| 180 | 179 |
| 181 void ClearGesture() { | 180 void ClearGesture() { |
| 182 gesture_manager_.reset(); | 181 gesture_manager_.reset(); |
| 183 } | 182 } |
| 184 | 183 |
| 185 // views::View: | 184 // views::View: |
| 186 virtual void OnGestureEvent(ui::GestureEvent* event) override { | 185 void OnGestureEvent(ui::GestureEvent* event) override { |
| 187 if (!gesture_manager_ && | 186 if (!gesture_manager_ && |
| 188 event->type() == ui::ET_GESTURE_SCROLL_BEGIN) { | 187 event->type() == ui::ET_GESTURE_SCROLL_BEGIN) { |
| 189 gesture_manager_.reset(new HomeCardGestureManager( | 188 gesture_manager_.reset(new HomeCardGestureManager( |
| 190 gesture_delegate_, | 189 gesture_delegate_, |
| 191 GetWidget()->GetNativeWindow()->GetRootWindow()->bounds())); | 190 GetWidget()->GetNativeWindow()->GetRootWindow()->bounds())); |
| 192 } | 191 } |
| 193 | 192 |
| 194 if (gesture_manager_) | 193 if (gesture_manager_) |
| 195 gesture_manager_->ProcessGestureEvent(event); | 194 gesture_manager_->ProcessGestureEvent(event); |
| 196 } | 195 } |
| 197 virtual bool OnMousePressed(const ui::MouseEvent& event) override { | 196 bool OnMousePressed(const ui::MouseEvent& event) override { |
| 198 if (HomeCard::Get()->GetState() == HomeCard::VISIBLE_MINIMIZED && | 197 if (HomeCard::Get()->GetState() == HomeCard::VISIBLE_MINIMIZED && |
| 199 event.IsLeftMouseButton() && event.GetClickCount() == 1) { | 198 event.IsLeftMouseButton() && event.GetClickCount() == 1) { |
| 200 athena::WindowManager::Get()->EnterOverview(); | 199 athena::WindowManager::Get()->EnterOverview(); |
| 201 return true; | 200 return true; |
| 202 } | 201 } |
| 203 return false; | 202 return false; |
| 204 } | 203 } |
| 205 | 204 |
| 206 private: | 205 private: |
| 207 void UpdateShadow(bool should_show) { | 206 void UpdateShadow(bool should_show) { |
| 208 wm::SetShadowType( | 207 wm::SetShadowType( |
| 209 GetWidget()->GetNativeWindow(), | 208 GetWidget()->GetNativeWindow(), |
| 210 should_show ? wm::SHADOW_TYPE_RECTANGULAR : wm::SHADOW_TYPE_NONE); | 209 should_show ? wm::SHADOW_TYPE_RECTANGULAR : wm::SHADOW_TYPE_NONE); |
| 211 } | 210 } |
| 212 | 211 |
| 213 // views::WidgetDelegate: | 212 // views::WidgetDelegate: |
| 214 virtual views::View* GetContentsView() override { | 213 views::View* GetContentsView() override { return this; } |
| 215 return this; | |
| 216 } | |
| 217 | 214 |
| 218 // AthenaStartPageView::Observer: | 215 // AthenaStartPageView::Observer: |
| 219 virtual void OnLayoutStateChanged(float new_state) override { | 216 void OnLayoutStateChanged(float new_state) override { |
| 220 if (new_state == 1.0f) | 217 if (new_state == 1.0f) |
| 221 HomeCard::Get()->SetState(HomeCard::VISIBLE_CENTERED); | 218 HomeCard::Get()->SetState(HomeCard::VISIBLE_CENTERED); |
| 222 } | 219 } |
| 223 | 220 |
| 224 AthenaStartPageView* main_view_; | 221 AthenaStartPageView* main_view_; |
| 225 scoped_ptr<HomeCardGestureManager> gesture_manager_; | 222 scoped_ptr<HomeCardGestureManager> gesture_manager_; |
| 226 HomeCardGestureManager::Delegate* gesture_delegate_; | 223 HomeCardGestureManager::Delegate* gesture_delegate_; |
| 227 | 224 |
| 228 DISALLOW_COPY_AND_ASSIGN(HomeCardView); | 225 DISALLOW_COPY_AND_ASSIGN(HomeCardView); |
| 229 }; | 226 }; |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 instance = nullptr; | 437 instance = nullptr; |
| 441 } | 438 } |
| 442 | 439 |
| 443 // static | 440 // static |
| 444 HomeCard* HomeCard::Get() { | 441 HomeCard* HomeCard::Get() { |
| 445 DCHECK(instance); | 442 DCHECK(instance); |
| 446 return instance; | 443 return instance; |
| 447 } | 444 } |
| 448 | 445 |
| 449 } // namespace athena | 446 } // namespace athena |
| OLD | NEW |