#ifndef APPS_UI_VIEWS_APP_WINDOW_FRAME_VIEW_H_
#define APPS_UI_VIEWS_APP_WINDOW_FRAME_VIEW_H_
#include "base/memory/raw_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/window/frame_view.h"
namespace extensions {
class NativeAppWindow;
}
namespace gfx {
class Canvas;
class Point;
}
namespace views {
class ImageButton;
class Widget;
}
namespace apps {
class AppWindowFrameView : public views::FrameView {
METADATA_HEADER(AppWindowFrameView, views::FrameView)
public:
AppWindowFrameView(views::Widget* widget,
extensions::NativeAppWindow* window,
bool draw_frame,
const SkColor& active_frame_color,
const SkColor& inactive_frame_color);
AppWindowFrameView(const AppWindowFrameView&) = delete;
AppWindowFrameView& operator=(const AppWindowFrameView&) = delete;
~AppWindowFrameView() override;
void Init();
void SetResizeSizes(int resize_inside_bounds_size,
int resize_outside_bounds_size,
int resize_area_corner_size);
void SetFrameCornerRadius(int radius);
int resize_inside_bounds_size() const { return resize_inside_bounds_size_; }
protected:
bool draw_frame() const { return draw_frame_; }
private:
gfx::Rect GetBoundsForClientView() const override;
gfx::Rect GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const override;
int NonClientHitTest(const gfx::Point& point) override;
void SizeConstraintsChanged() override;
gfx::Size CalculatePreferredSize(
const views::SizeBounds& available_size) const override;
void Layout(PassKey) override;
void OnPaint(gfx::Canvas* canvas) override;
gfx::Size GetMinimumSize() const override;
gfx::Size GetMaximumSize() const override;
void SetButtonImagesForFrame();
SkColor CurrentFrameColor();
raw_ptr<views::Widget, DanglingUntriaged> widget_;
raw_ptr<extensions::NativeAppWindow, DanglingUntriaged> window_;
bool draw_frame_;
SkColor active_frame_color_;
SkColor inactive_frame_color_;
raw_ptr<views::ImageButton, DanglingUntriaged> close_button_ = nullptr;
raw_ptr<views::ImageButton, DanglingUntriaged> maximize_button_ = nullptr;
raw_ptr<views::ImageButton, DanglingUntriaged> restore_button_ = nullptr;
raw_ptr<views::ImageButton, DanglingUntriaged> minimize_button_ = nullptr;
int resize_inside_bounds_size_ = 5;
int resize_outside_bounds_size_ = 0;
int resize_area_corner_size_ = 16;
int frame_corner_radius_ = 0;
};
}
#endif