diff options
Diffstat (limited to 'src/platform/graphics/cairo/PangoTextLayout.cpp')
-rw-r--r-- | src/platform/graphics/cairo/PangoTextLayout.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/platform/graphics/cairo/PangoTextLayout.cpp b/src/platform/graphics/cairo/PangoTextLayout.cpp index 65f2130e..2fcb9158 100644 --- a/src/platform/graphics/cairo/PangoTextLayout.cpp +++ b/src/platform/graphics/cairo/PangoTextLayout.cpp @@ -1,9 +1,35 @@ #include "cru/platform/graphics/cairo/PangoTextLayout.h" +#include "cru/platform/Check.h" +#include "cru/platform/graphics/cairo/CairoGraphicsFactory.h" +#include "cru/platform/graphics/cairo/PangoFont.h" namespace cru::platform::graphics::cairo { -PangoTextLayout::PangoTextLayout(CairoGraphicsFactory* factory) - : CairoResource(factory) {} +PangoTextLayout::PangoTextLayout(CairoGraphicsFactory* factory, + std::shared_ptr<IFont> font) + : CairoResource(factory) { + Expects(font); + font_ = CheckPlatform<PangoFont>(font, GetPlatformId()); + pango_layout_ = pango_layout_new(factory->GetDefaultPangoContext()); + pango_layout_set_font_description(pango_layout_, + font_->GetPangoFontDescription()); +}; -PangoTextLayout::~PangoTextLayout() {} +PangoTextLayout::~PangoTextLayout() { g_object_unref(pango_layout_); } +String PangoTextLayout::GetText() { return text_; } + +void PangoTextLayout::SetText(String new_text) { + text_ = std::move(new_text); + auto text_utf8 = text_.ToUtf8(); + pango_layout_set_text(pango_layout_, text_utf8.c_str(), text_utf8.size()); +} + +std::shared_ptr<IFont> PangoTextLayout::GetFont() { return font_; } + +void PangoTextLayout::SetFont(std::shared_ptr<IFont> font) { + Expects(font); + font_ = CheckPlatform<PangoFont>(font, GetPlatformId()); + pango_layout_set_font_description(pango_layout_, + font_->GetPangoFontDescription()); +} } // namespace cru::platform::graphics::cairo |