aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/platform/graphics/cairo/CairoGraphicsFactory.h13
-rw-r--r--src/platform/graphics/cairo/CairoGraphicsFactory.cpp28
2 files changed, 41 insertions, 0 deletions
diff --git a/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h b/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
index 6932f10a..e95b78a3 100644
--- a/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
+++ b/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
@@ -19,6 +19,19 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGraphicsFactory
cairo_t* GetDefaultCairo() { return default_cairo_; }
PangoContext* GetDefaultPangoContext() { return default_pango_context_; }
+ public:
+ std::unique_ptr<ISolidColorBrush> CreateSolidColorBrush() override;
+
+ std::unique_ptr<IGeometryBuilder> CreateGeometryBuilder() override;
+
+ std::unique_ptr<IFont> CreateFont(String font_family,
+ float font_size) override;
+
+ std::unique_ptr<ITextLayout> CreateTextLayout(std::shared_ptr<IFont> font,
+ String text) override;
+
+ IImageFactory* GetImageFactory() override;
+
private:
cairo_surface_t* default_cairo_surface_;
cairo_t* default_cairo_;
diff --git a/src/platform/graphics/cairo/CairoGraphicsFactory.cpp b/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
index 1fea8979..8fb7d12e 100644
--- a/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
+++ b/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
@@ -1,5 +1,9 @@
#include "cru/platform/graphics/cairo/CairoGraphicsFactory.h"
+#include "cru/platform/graphics/cairo/CairoBrush.h"
+#include "cru/platform/graphics/cairo/CairoGeometry.h"
#include "cru/platform/graphics/cairo/CairoResource.h"
+#include "cru/platform/graphics/cairo/PangoFont.h"
+#include "cru/platform/graphics/cairo/PangoTextLayout.h"
namespace cru::platform::graphics::cairo {
CairoGraphicsFactory::CairoGraphicsFactory() : CairoResource(this) {
@@ -14,4 +18,28 @@ CairoGraphicsFactory::~CairoGraphicsFactory() {
cairo_destroy(default_cairo_);
cairo_surface_destroy(default_cairo_surface_);
}
+
+std::unique_ptr<ISolidColorBrush>
+CairoGraphicsFactory::CreateSolidColorBrush() {
+ return std::make_unique<CairoSolidColorBrush>(this);
+}
+
+std::unique_ptr<IGeometryBuilder>
+CairoGraphicsFactory::CreateGeometryBuilder() {
+ return std::make_unique<CairoGeometryBuilder>(this);
+}
+
+std::unique_ptr<IFont> CairoGraphicsFactory::CreateFont(String font_family,
+ float font_size) {
+ return std::make_unique<PangoFont>(this, std::move(font_family), font_size);
+}
+
+std::unique_ptr<ITextLayout> CairoGraphicsFactory::CreateTextLayout(
+ std::shared_ptr<IFont> font, String text) {
+ auto text_layout = std::make_unique<PangoTextLayout>(this, std::move(font));
+ text_layout->SetText(std::move(text));
+ return text_layout;
+}
+
+IImageFactory* CairoGraphicsFactory::GetImageFactory() { return nullptr; }
} // namespace cru::platform::graphics::cairo