| OLD | NEW | 
|    1 // Copyright 2013 The Chromium Authors. All rights reserved. |    1 // Copyright 2013 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 "ash/common/wm/overview/window_selector_item.h" |    5 #include "ash/common/wm/overview/window_selector_item.h" | 
|    6  |    6  | 
|    7 #include <algorithm> |    7 #include <algorithm> | 
|    8 #include <vector> |    8 #include <vector> | 
|    9  |    9  | 
|   10 #include "ash/common/material_design/material_design_controller.h" |   10 #include "ash/common/material_design/material_design_controller.h" | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|   37 #include "ui/gfx/color_utils.h" |   37 #include "ui/gfx/color_utils.h" | 
|   38 #include "ui/gfx/geometry/safe_integer_conversions.h" |   38 #include "ui/gfx/geometry/safe_integer_conversions.h" | 
|   39 #include "ui/gfx/paint_vector_icon.h" |   39 #include "ui/gfx/paint_vector_icon.h" | 
|   40 #include "ui/gfx/transform_util.h" |   40 #include "ui/gfx/transform_util.h" | 
|   41 #include "ui/strings/grit/ui_strings.h" |   41 #include "ui/strings/grit/ui_strings.h" | 
|   42 #include "ui/views/background.h" |   42 #include "ui/views/background.h" | 
|   43 #include "ui/views/border.h" |   43 #include "ui/views/border.h" | 
|   44 #include "ui/views/layout/box_layout.h" |   44 #include "ui/views/layout/box_layout.h" | 
|   45 #include "ui/views/window/non_client_view.h" |   45 #include "ui/views/window/non_client_view.h" | 
|   46 #include "ui/wm/core/shadow.h" |   46 #include "ui/wm/core/shadow.h" | 
|   47 #include "ui/wm/core/shadow_types.h" |  | 
|   48 #include "ui/wm/core/window_util.h" |   47 #include "ui/wm/core/window_util.h" | 
|   49  |   48  | 
|   50 namespace ash { |   49 namespace ash { | 
|   51  |   50  | 
|   52 namespace { |   51 namespace { | 
|   53  |   52  | 
|   54 // In the conceptual overview table, the window margin is the space reserved |   53 // In the conceptual overview table, the window margin is the space reserved | 
|   55 // around the window within the cell. This margin does not overlap so the |   54 // around the window within the cell. This margin does not overlap so the | 
|   56 // closest distance between adjacent windows will be twice this amount. |   55 // closest distance between adjacent windows will be twice this amount. | 
|   57 static const int kWindowMargin = 5; |   56 static const int kWindowMargin = 5; | 
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  493   SetItemBounds(inset_bounds, animation_type); |  492   SetItemBounds(inset_bounds, animation_type); | 
|  494  |  493  | 
|  495   // SetItemBounds is called before UpdateHeaderLayout so the header can |  494   // SetItemBounds is called before UpdateHeaderLayout so the header can | 
|  496   // properly use the updated windows bounds. |  495   // properly use the updated windows bounds. | 
|  497   UpdateHeaderLayout(HeaderFadeInMode::UPDATE, animation_type); |  496   UpdateHeaderLayout(HeaderFadeInMode::UPDATE, animation_type); | 
|  498 } |  497 } | 
|  499  |  498  | 
|  500 void WindowSelectorItem::SetSelected(bool selected) { |  499 void WindowSelectorItem::SetSelected(bool selected) { | 
|  501   selected_ = selected; |  500   selected_ = selected; | 
|  502   background_view_->AnimateBackgroundOpacity(selected ? 0.f : kHeaderOpacity); |  501   background_view_->AnimateBackgroundOpacity(selected ? 0.f : kHeaderOpacity); | 
|  503  |  | 
|  504   if (shadow_) { |  | 
|  505     ui::ScopedLayerAnimationSettings animation_settings_shadow( |  | 
|  506         shadow_->shadow_layer()->GetAnimator()); |  | 
|  507     animation_settings_shadow.SetTransitionDuration( |  | 
|  508         base::TimeDelta::FromMilliseconds(kSelectorFadeInMilliseconds)); |  | 
|  509     animation_settings_shadow.SetTweenType( |  | 
|  510         selected ? gfx::Tween::FAST_OUT_LINEAR_IN |  | 
|  511                  : gfx::Tween::LINEAR_OUT_SLOW_IN); |  | 
|  512     animation_settings_shadow.SetPreemptionStrategy( |  | 
|  513         ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |  | 
|  514     shadow_->shadow_layer()->SetOpacity(selected ? 0.0f : 1.0f); |  | 
|  515   } |  | 
|  516 } |  502 } | 
|  517  |  503  | 
|  518 void WindowSelectorItem::SendAccessibleSelectionEvent() { |  504 void WindowSelectorItem::SendAccessibleSelectionEvent() { | 
|  519   caption_container_view_->listener_button()->NotifyAccessibilityEvent( |  505   caption_container_view_->listener_button()->NotifyAccessibilityEvent( | 
|  520       ui::AX_EVENT_SELECTION, true); |  506       ui::AX_EVENT_SELECTION, true); | 
|  521 } |  507 } | 
|  522  |  508  | 
|  523 void WindowSelectorItem::CloseWindow() { |  509 void WindowSelectorItem::CloseWindow() { | 
|  524   gfx::Rect inset_bounds(target_bounds_); |  510   gfx::Rect inset_bounds(target_bounds_); | 
|  525   inset_bounds.Inset(target_bounds_.width() * kPreCloseScale, |  511   inset_bounds.Inset(target_bounds_.width() * kPreCloseScale, | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  661   // background color is opaque or transparent to decide whether to use |  647   // background color is opaque or transparent to decide whether to use | 
|  662   // subpixel rendering. Does not actually set the label's background color. |  648   // subpixel rendering. Does not actually set the label's background color. | 
|  663   label_view_->SetBackgroundColor(kLabelBackgroundColor); |  649   label_view_->SetBackgroundColor(kLabelBackgroundColor); | 
|  664  |  650  | 
|  665   caption_container_view_ = new CaptionContainerView( |  651   caption_container_view_ = new CaptionContainerView( | 
|  666       this, label_view_, close_button_, background_view_); |  652       this, label_view_, close_button_, background_view_); | 
|  667   item_widget_->SetContentsView(caption_container_view_); |  653   item_widget_->SetContentsView(caption_container_view_); | 
|  668   label_view_->SetVisible(false); |  654   label_view_->SetVisible(false); | 
|  669   item_widget_->SetOpacity(0); |  655   item_widget_->SetOpacity(0); | 
|  670   item_widget_->Show(); |  656   item_widget_->Show(); | 
|  671  |  | 
|  672   // TODO(varkha): Restore shadows when programmatic shadows exist. |  | 
|  673   // Note: current shadow implementation does not allow proper animation when |  | 
|  674   // the parent layer bounds change during the animation since |  | 
|  675   // Shadow::UpdateLayerBounds() only happens before the animation starts. |  | 
|  676   if (ash::MaterialDesignController::GetMode() == |  | 
|  677       ash::MaterialDesignController::Mode::MATERIAL_EXPERIMENTAL) { |  | 
|  678     shadow_.reset(new ::wm::Shadow()); |  | 
|  679     shadow_->Init(::wm::ShadowElevation::MEDIUM); |  | 
|  680     shadow_->layer()->SetVisible(true); |  | 
|  681     item_widget_->GetLayer()->Add(shadow_->layer()); |  | 
|  682   } |  | 
|  683   item_widget_->GetLayer()->SetMasksToBounds(false); |  657   item_widget_->GetLayer()->SetMasksToBounds(false); | 
|  684 } |  658 } | 
|  685  |  659  | 
|  686 void WindowSelectorItem::UpdateHeaderLayout( |  660 void WindowSelectorItem::UpdateHeaderLayout( | 
|  687     HeaderFadeInMode mode, |  661     HeaderFadeInMode mode, | 
|  688     OverviewAnimationType animation_type) { |  662     OverviewAnimationType animation_type) { | 
|  689   gfx::Rect transformed_window_bounds = root_window_->ConvertRectFromScreen( |  663   gfx::Rect transformed_window_bounds = root_window_->ConvertRectFromScreen( | 
|  690       transform_window_.GetTransformedBounds()); |  664       transform_window_.GetTransformedBounds()); | 
|  691  |  665  | 
|  692   gfx::Rect label_rect(close_button_->GetPreferredSize()); |  666   gfx::Rect label_rect(close_button_->GetPreferredSize()); | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  729   if (mode != HeaderFadeInMode::ENTER) { |  703   if (mode != HeaderFadeInMode::ENTER) { | 
|  730     label_rect.set_height(close_button_->GetPreferredSize().height() + |  704     label_rect.set_height(close_button_->GetPreferredSize().height() + | 
|  731                           transformed_window_bounds.height()); |  705                           transformed_window_bounds.height()); | 
|  732   } |  706   } | 
|  733   label_rect.Inset(-kWindowSelectorMargin, -kWindowSelectorMargin); |  707   label_rect.Inset(-kWindowSelectorMargin, -kWindowSelectorMargin); | 
|  734   widget_window->SetBounds(label_rect); |  708   widget_window->SetBounds(label_rect); | 
|  735   gfx::Transform label_transform; |  709   gfx::Transform label_transform; | 
|  736   label_transform.Translate(transformed_window_bounds.x(), |  710   label_transform.Translate(transformed_window_bounds.x(), | 
|  737                             transformed_window_bounds.y()); |  711                             transformed_window_bounds.y()); | 
|  738   widget_window->SetTransform(label_transform); |  712   widget_window->SetTransform(label_transform); | 
|  739  |  | 
|  740   gfx::Rect shadow_bounds(label_rect.size()); |  | 
|  741   shadow_bounds.Inset(kWindowSelectorMargin, kWindowSelectorMargin); |  | 
|  742   if (shadow_) |  | 
|  743     shadow_->SetContentBounds(shadow_bounds); |  | 
|  744 } |  713 } | 
|  745  |  714  | 
|  746 void WindowSelectorItem::AnimateOpacity(float opacity, |  715 void WindowSelectorItem::AnimateOpacity(float opacity, | 
|  747                                         OverviewAnimationType animation_type) { |  716                                         OverviewAnimationType animation_type) { | 
|  748   DCHECK_GE(opacity, 0.f); |  717   DCHECK_GE(opacity, 0.f); | 
|  749   DCHECK_LE(opacity, 1.f); |  718   DCHECK_LE(opacity, 1.f); | 
|  750   ScopedTransformOverviewWindow::ScopedAnimationSettings animation_settings; |  719   ScopedTransformOverviewWindow::ScopedAnimationSettings animation_settings; | 
|  751   transform_window_.BeginScopedAnimation(animation_type, &animation_settings); |  720   transform_window_.BeginScopedAnimation(animation_type, &animation_settings); | 
|  752   transform_window_.SetOpacity(opacity); |  721   transform_window_.SetOpacity(opacity); | 
|  753  |  722  | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  792  |  761  | 
|  793 gfx::SlideAnimation* WindowSelectorItem::GetBackgroundViewAnimation() { |  762 gfx::SlideAnimation* WindowSelectorItem::GetBackgroundViewAnimation() { | 
|  794   return background_view_ ? background_view_->animation() : nullptr; |  763   return background_view_ ? background_view_->animation() : nullptr; | 
|  795 } |  764 } | 
|  796  |  765  | 
|  797 WmWindow* WindowSelectorItem::GetOverviewWindowForMinimizedStateForTest() { |  766 WmWindow* WindowSelectorItem::GetOverviewWindowForMinimizedStateForTest() { | 
|  798   return transform_window_.GetOverviewWindowForMinimizedState(); |  767   return transform_window_.GetOverviewWindowForMinimizedState(); | 
|  799 } |  768 } | 
|  800  |  769  | 
|  801 }  // namespace ash |  770 }  // namespace ash | 
| OLD | NEW |