| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_WM_OVERVIEW_OVERVIEW_ITEM_VIEW_H_ |
| #define ASH_WM_OVERVIEW_OVERVIEW_ITEM_VIEW_H_ |
| |
| #include "ash/wm/overview/event_handler_delegate.h" |
| #include "ash/wm/window_mini_view.h" |
| #include "base/memory/raw_ptr.h" |
| #include "ui/base/metadata/metadata_header_macros.h" |
| #include "ui/views/controls/button/button.h" |
| |
| namespace aura { |
| class Window; |
| } // namespace aura |
| |
| namespace ash { |
| |
| class CloseButton; |
| class OverviewItem; |
| class OverviewSession; |
| |
| // OverviewItemView covers the overview window, provides an overview only header |
| // and handles events. It hosts a mirror view if the window is minimized. |
| class ASH_EXPORT OverviewItemView : public WindowMiniView { |
| METADATA_HEADER(OverviewItemView, WindowMiniView) |
| |
| public: |
| // If `show_preview` is true, this class will contain a child view which |
| // mirrors `window`. |
| OverviewItemView(OverviewItem* overview_item, |
| EventHandlerDelegate* event_handler_delegate, |
| views::Button::PressedCallback close_callback, |
| aura::Window* window, |
| bool show_preview); |
| OverviewItemView(const OverviewItemView&) = delete; |
| OverviewItemView& operator=(const OverviewItemView&) = delete; |
| ~OverviewItemView() override; |
| |
| OverviewItem* overview_item() { return overview_item_; } |
| CloseButton* close_button() { return close_button_; } |
| |
| void SetCloseButtonVisible(bool visible); |
| |
| // Hides the close button instantaneously, and then fades it in slowly and |
| // with a long delay. Sets `current_header_visibility_` to kVisible. Assumes |
| // that `close_button_` is not null, and that `current_header_visibility_` is |
| // not kInvisible. |
| void HideCloseInstantlyAndThenShowItSlowly(); |
| |
| // Called when `overview_item_` is about to be restored to its original state |
| // outside of overview. |
| void OnOverviewItemWindowRestoring(); |
| |
| // Refreshes `preview_view_` so that its content is up-to-date. Used by tab |
| // dragging. |
| void RefreshPreviewView(); |
| |
| // Called when the user exits overview by using 3-finger vertical trackpad |
| // swipes. |
| void AcceptSelection(OverviewSession* overview_session); |
| |
| // WindowMiniView: |
| gfx::Size GetPreviewViewSize() const override; |
| void RefreshItemVisuals() override; |
| bool OnMousePressed(const ui::MouseEvent& event) override; |
| bool OnMouseDragged(const ui::MouseEvent& event) override; |
| void OnMouseReleased(const ui::MouseEvent& event) override; |
| void OnGestureEvent(ui::GestureEvent* event) override; |
| bool CanAcceptEvent(const ui::Event& event) override; |
| bool AcceleratorPressed(const ui::Accelerator& accelerator) override; |
| bool CanHandleAccelerators() const override; |
| void OnWindowDestroying(aura::Window* window) override; |
| |
| private: |
| void UpdateAccessibleDescription(); |
| |
| // The `OverviewItem` whose item widget owns and hosts this view. Please note |
| // that `item_widget_` may outlive its corresponding `OverviewItem` which will |
| // make `overview_item_` null while `this` is still alive. `overview_item_` |
| // will be explicitly set to null when `OnOverviewItemWindowRestoring()` is |
| // called. |
| raw_ptr<OverviewItem> overview_item_; |
| |
| // Points to the event handling delegate to handle the events forwarded from |
| // `this`. |
| raw_ptr<EventHandlerDelegate> event_handler_delegate_; |
| |
| raw_ptr<CloseButton> close_button_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_WM_OVERVIEW_OVERVIEW_ITEM_VIEW_H_ |