Index: ash/common/wm/overview/window_selector_item.h |
diff --git a/ash/common/wm/overview/window_selector_item.h b/ash/common/wm/overview/window_selector_item.h |
index d3467685e639fd637ca260f2d90830debf0eee42..43884072a94ca523bd8c7e166995f1a553ede81b 100644 |
--- a/ash/common/wm/overview/window_selector_item.h |
+++ b/ash/common/wm/overview/window_selector_item.h |
@@ -14,6 +14,7 @@ |
#include "ui/gfx/geometry/insets.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/views/controls/button/button.h" |
+#include "ui/views/controls/button/image_button.h" |
#include "ui/views/controls/button/label_button.h" |
#include "ui/views/widget/widget.h" |
@@ -44,6 +45,9 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// Makes sure that text is readable with |background_color|. |
void SetBackgroundColorHint(SkColor background_color); |
+ // Disconnects the listener so that the listener can go out of scope. |
+ void Disconnect() { listener_ = nullptr; } |
sky
2016/09/08 18:30:17
How about a more obvious RemoveListener? Or ResetL
varkha
2016/09/09 02:25:26
Done.
|
+ |
void set_padding(const gfx::Insets& padding) { padding_ = padding; } |
protected: |
@@ -57,6 +61,21 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
DISALLOW_COPY_AND_ASSIGN(OverviewLabelButton); |
}; |
+ // An image button with a close window icon. |
+ class OverviewCloseButton : public views::ImageButton { |
+ public: |
+ explicit OverviewCloseButton(views::ButtonListener* listener); |
+ ~OverviewCloseButton() override; |
+ |
+ // Disconnects the listener so that the listener can go out of scope. |
+ void Disconnect() { listener_ = nullptr; } |
sky
2016/09/08 18:30:16
Similar comment.
varkha
2016/09/09 02:25:26
Done.
|
+ |
+ private: |
+ gfx::ImageSkia icon_image_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(OverviewCloseButton); |
+ }; |
+ |
WindowSelectorItem(WmWindow* window, WindowSelector* window_selector); |
~WindowSelectorItem() override; |
@@ -113,6 +132,11 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// Closes |transform_window_|. |
void CloseWindow(); |
+ // Hides the original window header and sets shape or mask on a window. |
+ // When masks are used, rounded corner |radius| can be specified. |
+ // TODO(varkha): remove |radius|. |
+ void HideHeaderAndSetShape(int radius); |
+ |
// Sets if the item is dimmed in the overview. Changing the value will also |
// change the visibility of the transform windows. |
void SetDimmed(bool dimmed); |
@@ -131,8 +155,15 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
private: |
class CaptionContainerView; |
+ class RoundedContainerView; |
friend class WindowSelectorTest; |
+ enum HeaderFadeInMode { |
sky
2016/09/08 18:30:16
Generally we're moving toward enum class for bette
varkha
2016/09/09 02:25:26
Done.
|
+ Enter, |
sky
2016/09/08 18:30:17
Style for enums is ALL_CAPS.
varkha
2016/09/09 02:25:26
Done.
|
+ Update, |
+ Exit, |
+ }; |
+ |
// Sets the bounds of this selector's items to |target_bounds| in |
// |root_window_|. The bounds change will be animated as specified |
// by |animation_type|. |
@@ -151,8 +182,10 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// Updates the close button's and title label's bounds. Any change in bounds |
// will be animated from the current bounds to the new bounds as per the |
- // |animation_type|. |
- void UpdateHeaderLayout(OverviewAnimationType animation_type); |
+ // |animation_type|. |mode| allows distinguishing the first time update which |
+ // allows setting the initial bounds properly. |
+ void UpdateHeaderLayout(HeaderFadeInMode mode, |
+ OverviewAnimationType animation_type); |
// Animates opacity of the |transform_window_| and its caption to |opacity| |
// using |animation_type|. |
@@ -161,6 +194,9 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// Updates the close buttons accessibility name. |
void UpdateCloseButtonAccessibilityName(); |
+ // Fades out a window caption when exiting overview mode. |
+ void FadeOut(std::unique_ptr<views::Widget> widget); |
+ |
static bool hide_header() { return use_mask_ || use_shape_; } |
// True if the item is being shown in the overview, false if it's being |
@@ -181,6 +217,10 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// a window layer for display on another monitor. |
bool in_bounds_update_; |
+ // True when |this| item is visually selected. Item header is made transparent |
+ // when the item is selected. |
+ bool selected_; |
+ |
// Label displaying its name (active tab for tabbed windows). |
// With Material Design this Widget owns |caption_container_view_| and is |
// shown above the |transform_window_|. |
@@ -190,9 +230,6 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// Shadow around the item in overview. |
std::unique_ptr<::wm::Shadow> shadow_; |
- // Label background widget used to fade in opacity when moving selection. |
- std::unique_ptr<views::Widget> window_label_selector_; |
- |
// Container view that owns |window_label_button_view_| and |close_button_|. |
// Only used with Material Design. |
CaptionContainerView* caption_container_view_; |
@@ -206,12 +243,16 @@ class ASH_EXPORT WindowSelectorItem : public views::ButtonListener, |
// A close button for the window in this item. Owned by the |
// |caption_container_view_| with Material Design or by |close_button_widget_| |
// otherwise. |
- views::ImageButton* close_button_; |
+ OverviewCloseButton* close_button_; |
// Pointer to the WindowSelector that owns the WindowGrid containing |this|. |
// Guaranteed to be non-null for the lifetime of |this|. |
WindowSelector* window_selector_; |
+ // Pointer to a view that covers the original header and has rounded top |
+ // corners. This view can have its color and opacity animated. |
+ RoundedContainerView* background_view_; |
+ |
// If true, mask the original window header while in overview and make corners |
// rounded using a mask layer. This has performance implications so it can be |
// disabled when there are many windows. |