#ifndef UI_NATIVE_THEME_NATIVE_THEME_FLUENT_H_
#define UI_NATIVE_THEME_NATIVE_THEME_FLUENT_H_
#include "ui/native_theme/native_theme_base.h"
namespace gfx {
class Rect;
class RectF;
}
template <typename T>
class sk_sp;
class SkTypeface;
namespace ui {
class NATIVE_THEME_EXPORT NativeThemeFluent : public NativeThemeBase {
public:
explicit NativeThemeFluent(bool should_only_use_dark_colors);
NativeThemeFluent(const NativeThemeFluent&) = delete;
NativeThemeFluent& operator=(const NativeThemeFluent&) = delete;
~NativeThemeFluent() override;
static NativeThemeFluent* web_instance();
void PaintArrowButton(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
const gfx::Rect& rect,
Part direction,
State state,
ColorScheme color_scheme,
const ScrollbarArrowExtraParams& arrow) const override;
void PaintScrollbarTrack(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
Part part,
State state,
const ScrollbarTrackExtraParams& extra_params,
const gfx::Rect& rect,
ColorScheme color_scheme) const override;
void PaintScrollbarThumb(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
Part part,
State state,
const gfx::Rect& rect,
ScrollbarOverlayColorTheme theme,
ColorScheme color_scheme) const override;
void PaintScrollbarCorner(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
State state,
const gfx::Rect& rect,
ColorScheme color_scheme) const override;
gfx::Size GetPartSize(Part part,
State state,
const ExtraParams& extra) const override;
private:
friend class NativeThemeFluentTest;
void PaintButton(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
const gfx::Rect& rect,
ColorScheme color_scheme) const;
void PaintArrow(cc::PaintCanvas* canvas,
const ColorProvider* color_provider,
const gfx::Rect& rect,
Part part,
State state,
ColorScheme color_scheme) const;
gfx::RectF GetArrowRect(const gfx::Rect& rect, Part part, State state) const;
int GetArrowSideLength(State state) const;
void OffsetArrowRect(gfx::RectF& arrow_rect,
Part part,
int max_arrow_rect_side) const;
bool ArrowIconsAvailable() const { return typeface_.get(); }
const char* GetArrowCodePointForScrollbarPart(Part part) const;
sk_sp<SkTypeface> typeface_;
};
}
#endif