#ifndef CHROMEOS_UI_FRAME_HIGHLIGHT_BORDER_OVERLAY_H_
#define CHROMEOS_UI_FRAME_HIGHLIGHT_BORDER_OVERLAY_H_
#include <memory>
#include "chromeos/ui/frame/highlight_border_overlay_delegate.h"
#include "ui/aura/window_observer.h"
#include "ui/compositor/layer.h"
#include "ui/display/display_observer.h"
#include "ui/display/tablet_state.h"
namespace gfx {
class Canvas;
}
namespace views {
class Widget;
}
class HighlightBorderOverlay : public aura::WindowObserver,
public display::DisplayObserver {
public:
HighlightBorderOverlay(
views::Widget* widget,
std::unique_ptr<HighlightBorderOverlayDelegate> delegate);
HighlightBorderOverlay(const HighlightBorderOverlay&) = delete;
HighlightBorderOverlay& operator=(const HighlightBorderOverlay&) = delete;
~HighlightBorderOverlay() override;
gfx::Size CalculateImageSourceSize() const;
void OnWindowBoundsChanged(aura::Window* window,
const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds,
ui::PropertyChangeReason reason) override;
void OnWindowPropertyChanged(aura::Window* window,
const void* key,
intptr_t old) override;
void OnWindowDestroying(aura::Window* window) override;
void OnDisplayTabletStateChanged(display::TabletState state) override;
private:
gfx::Insets CalculateBorderRegion() const;
void UpdateLayerVisibilityAndBounds();
void UpdateNinePatchLayer();
ui::Layer layer_;
raw_ptr<views::Widget> widget_;
raw_ptr<aura::Window> window_;
int rounded_corner_radius_ = 0;
std::unique_ptr<HighlightBorderOverlayDelegate> delegate_;
display::ScopedDisplayObserver display_observer_{this};
};
#endif