68 lines
2.2 KiB
C++
68 lines
2.2 KiB
C++
#ifndef BWIDGETS_FONT_HANDLER_HPP
|
|
#define BWIDGETS_FONT_HANDLER_HPP
|
|
|
|
#include <memory>
|
|
|
|
#include <basic_widgets/core/font.hpp>
|
|
|
|
namespace bwidgets
|
|
{
|
|
class FontHandler
|
|
{
|
|
protected:
|
|
std::shared_ptr<Font> _font;
|
|
Color _font_color_bg = default_font_color_bg;
|
|
Color _font_color_fg = default_font_color_fg;
|
|
Font::RenderMode _font_render_mode {Font::RenderMode::SHADED};
|
|
|
|
virtual void _handle_font_change(const std::shared_ptr<Font>&) = 0;
|
|
virtual void _handle_font_color_change(const Color&, const Color&) = 0;
|
|
|
|
public:
|
|
inline static const Color default_font_color_bg {255, 255, 255,
|
|
SDL_ALPHA_OPAQUE};
|
|
inline static const Color default_font_color_fg {0, 0, 0, SDL_ALPHA_OPAQUE};
|
|
|
|
FontHandler() noexcept = default;
|
|
FontHandler(const FontHandler&) = delete;
|
|
FontHandler(FontHandler&&) = delete;
|
|
auto operator=(const FontHandler&) = delete;
|
|
auto operator=(FontHandler&&) = delete;
|
|
virtual ~FontHandler() noexcept = default;
|
|
|
|
virtual inline auto font(std::shared_ptr<Font> f) -> FontHandler* final
|
|
{
|
|
if (f != nullptr
|
|
&& (f != _font || f->family_name != _font->family_name
|
|
|| f->height != _font->height || f->hinting() != _font->hinting()
|
|
|| f->kerning() != _font->kerning()
|
|
|| f->outline() != _font->outline()
|
|
|| f->style_name != _font->style_name))
|
|
{
|
|
_handle_font_change(f);
|
|
_font = f;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
virtual inline auto font_color_bg(const Color& c) -> FontHandler* final
|
|
{
|
|
if (c != _font_color_bg) {
|
|
_handle_font_color_change(_font_color_bg, c);
|
|
_font_color_bg = c;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
virtual inline auto font_color_fg(const Color& c) -> FontHandler* final
|
|
{
|
|
if (c != _font_color_fg) {
|
|
_handle_font_color_change(c, _font_color_fg);
|
|
_font_color_fg = c;
|
|
}
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
|
|
#endif
|