#ifndef ASH_FRAME_WIDE_FRAME_VIEW_H_
#define ASH_FRAME_WIDE_FRAME_VIEW_H_
#include "ash/ash_export.h"
#include "ash/frame/frame_context_menu_controller.h"
#include "ash/wm/overview/overview_observer.h"
#include "base/memory/raw_ptr.h"
#include "chromeos/ui/frame/caption_buttons/caption_button_model.h"
#include "chromeos/ui/frame/immersive/immersive_fullscreen_controller_delegate.h"
#include "ui/aura/window_observer.h"
#include "ui/display/display_observer.h"
#include "ui/views/widget/widget_delegate.h"
namespace chromeos {
class ImmersiveFullscreenController;
class HeaderView;
}
namespace views {
class Widget;
}
namespace ash {
class ASH_EXPORT WideFrameView
: public views::WidgetDelegateView,
public aura::WindowObserver,
public display::DisplayObserver,
public chromeos::ImmersiveFullscreenControllerDelegate,
public FrameContextMenuController::Delegate {
public:
explicit WideFrameView(views::Widget* target);
WideFrameView(const WideFrameView&) = delete;
WideFrameView& operator=(const WideFrameView&) = delete;
~WideFrameView() override;
void Init(chromeos::ImmersiveFullscreenController* controller);
void SetCaptionButtonModel(
std::unique_ptr<chromeos::CaptionButtonModel> mode);
chromeos::HeaderView* header_view() { return header_view_; }
private:
static gfx::Rect GetFrameBounds(views::Widget* target);
void Layout(PassKey) override;
void OnMouseEvent(ui::MouseEvent* event) override;
void OnWindowDestroying(aura::Window* window) override;
void OnDisplayMetricsChanged(const display::Display& display,
uint32_t changed_metrics) override;
void OnImmersiveRevealStarted() override;
void OnImmersiveRevealEnded() override;
void OnImmersiveFullscreenEntered() override;
void OnImmersiveFullscreenExited() override;
void SetVisibleFraction(double visible_fraction) override;
std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override;
bool ShouldShowContextMenu(views::View* source,
const gfx::Point& screen_coords_point) override;
chromeos::HeaderView* GetTargetHeaderView();
raw_ptr<views::Widget> target_;
std::unique_ptr<views::Widget> widget_;
display::ScopedDisplayObserver display_observer_{this};
raw_ptr<chromeos::HeaderView> header_view_ = nullptr;
std::unique_ptr<FrameContextMenuController> frame_context_menu_controller_;
void PaintAsActiveChanged();
base::CallbackListSubscription paint_as_active_subscription_;
};
}
#endif