123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #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 "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;
- }
- namespace views {
- class Widget;
- }
- namespace ash {
- class HeaderView;
- // WideFrameView is used for the case where the widget's maximzed/fullscreen
- // doesn't cover the entire workarea/display area but the caption frame should
- // occupy the full width and placed at the top of the display. Its widget is
- // created as WIDGET_OWNS_NATIVE_WIDGET and caller is supposed to own and manage
- // its lifetime.
- //
- // TODO(oshima): Currently client is responsible for hooking this up to
- // the target widget because ImmersiveFullscreenController is not owned by
- // NonClientFrameViewAsh. Investigate if we integrate this into
- // NonClientFrameViewAsh.
- 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;
- // Initialize |immersive_fullscreen_controller| so that the controller reveals
- // and |hides_header_| in immersive mode.
- void Init(chromeos::ImmersiveFullscreenController* controller);
- // Set the caption model for caption buttions on this frame.
- void SetCaptionButtonModel(
- std::unique_ptr<chromeos::CaptionButtonModel> mode);
- HeaderView* header_view() { return header_view_; }
- private:
- static gfx::Rect GetFrameBounds(views::Widget* target);
- // views::View:
- void Layout() override;
- void OnMouseEvent(ui::MouseEvent* event) override;
- // aura::WindowObserver:
- void OnWindowDestroying(aura::Window* window) override;
- // display::DisplayObserver:
- void OnDisplayMetricsChanged(const display::Display& display,
- uint32_t changed_metrics) override;
- // ImmersiveFullscreenControllerDelegate:
- 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;
- // FrameContextMenuController::Delegate:
- bool ShouldShowContextMenu(views::View* source,
- const gfx::Point& screen_coords_point) override;
- HeaderView* GetTargetHeaderView();
- // The target widget this frame will control.
- views::Widget* target_;
- std::unique_ptr<views::Widget> widget_;
- display::ScopedDisplayObserver display_observer_{this};
- HeaderView* header_view_ = nullptr;
- std::unique_ptr<FrameContextMenuController> frame_context_menu_controller_;
- // Called when |target_|'s "paint as active" state has changed.
- void PaintAsActiveChanged();
- base::CallbackListSubscription paint_as_active_subscription_;
- };
- } // namespace ash
- #endif // ASH_FRAME_WIDE_FRAME_VIEW_H_
|