#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/controls/button/button.h"
#include "ui/views/window/non_client_view.h"
namespace extensions {
class NativeAppWindow;
}
namespace gfx {
class Canvas;
class Point;
}
namespace views {
class ImageButton;
class Widget;
}
namespace apps {
class AppWindowFrameView : public views::NonClientFrameView {
public:
METADATA_HEADER(AppWindowFrameView);
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);
int resize_inside_bounds_size() const { return resize_inside_bounds_size_; }
private:
gfx::Rect GetBoundsForClientView() const override;
gfx::Rect GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const override;
int NonClientHitTest(const gfx::Point& point) override;
void GetWindowMask(const gfx::Size& size, SkPath* window_mask) override;
void ResetWindowControls() override {}
void UpdateWindowIcon() override {}
void UpdateWindowTitle() override {}
void SizeConstraintsChanged() override;
gfx::Size CalculatePreferredSize() const override;
void Layout() 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;
};
}
#endif