aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-06-09 20:26:09 +0800
committercrupest <crupest@outlook.com>2022-06-09 20:26:09 +0800
commite076c0316b2c501fd1745a4c6bac909d3b2c9b1c (patch)
treecdeb21f16727b6afbfc476f40304f42447735744
parenta61a783929c1f792e58de6ec9592e5177885c1fe (diff)
downloadcru-e076c0316b2c501fd1745a4c6bac909d3b2c9b1c.tar.gz
cru-e076c0316b2c501fd1745a4c6bac909d3b2c9b1c.tar.bz2
cru-e076c0316b2c501fd1745a4c6bac909d3b2c9b1c.zip
...
-rw-r--r--demos/CMakeLists.txt1
-rw-r--r--include/cru/platform/graphics/cairo/CairoGraphicsFactory.h4
-rw-r--r--src/platform/graphics/cairo/CairoGraphicsFactory.cpp7
-rw-r--r--src/platform/graphics/cairo/CairoImageFactory.cpp1
4 files changed, 12 insertions, 1 deletions
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt
index 9b8f0fec..46da3544 100644
--- a/demos/CMakeLists.txt
+++ b/demos/CMakeLists.txt
@@ -19,6 +19,7 @@ elseif(APPLE)
add_subdirectory(InputMethod)
add_subdirectory(SvgPath)
elseif(UNIX)
+ add_subdirectory(graphics)
add_subdirectory(xcb)
endif()
diff --git a/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h b/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
index e95b78a3..f0f7ecc5 100644
--- a/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
+++ b/include/cru/platform/graphics/cairo/CairoGraphicsFactory.h
@@ -7,6 +7,8 @@
#include <pango/pango.h>
namespace cru::platform::graphics::cairo {
+class CairoImageFactory;
+
class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGraphicsFactory
: public CairoResource,
public virtual IGraphicsFactory {
@@ -36,5 +38,7 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGraphicsFactory
cairo_surface_t* default_cairo_surface_;
cairo_t* default_cairo_;
PangoContext* default_pango_context_;
+
+ std::unique_ptr<CairoImageFactory> image_factory_;
};
} // namespace cru::platform::graphics::cairo
diff --git a/src/platform/graphics/cairo/CairoGraphicsFactory.cpp b/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
index 8fb7d12e..11d2e734 100644
--- a/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
+++ b/src/platform/graphics/cairo/CairoGraphicsFactory.cpp
@@ -1,6 +1,7 @@
#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/CairoImageFactory.h"
#include "cru/platform/graphics/cairo/CairoResource.h"
#include "cru/platform/graphics/cairo/PangoFont.h"
#include "cru/platform/graphics/cairo/PangoTextLayout.h"
@@ -11,6 +12,8 @@ CairoGraphicsFactory::CairoGraphicsFactory() : CairoResource(this) {
cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100);
default_cairo_ = cairo_create(default_cairo_surface_);
default_pango_context_ = pango_context_new();
+
+ image_factory_ = std::make_unique<CairoImageFactory>(this);
}
CairoGraphicsFactory::~CairoGraphicsFactory() {
@@ -41,5 +44,7 @@ std::unique_ptr<ITextLayout> CairoGraphicsFactory::CreateTextLayout(
return text_layout;
}
-IImageFactory* CairoGraphicsFactory::GetImageFactory() { return nullptr; }
+IImageFactory* CairoGraphicsFactory::GetImageFactory() {
+ return image_factory_.get();
+}
} // namespace cru::platform::graphics::cairo
diff --git a/src/platform/graphics/cairo/CairoImageFactory.cpp b/src/platform/graphics/cairo/CairoImageFactory.cpp
index 8377911f..18aed4a1 100644
--- a/src/platform/graphics/cairo/CairoImageFactory.cpp
+++ b/src/platform/graphics/cairo/CairoImageFactory.cpp
@@ -181,6 +181,7 @@ void CairoImageFactory::EncodeToStream(IImage* image, io::Stream* stream,
if (format == ImageFormat::Png) {
EncodePng(cairo_image->GetCairoSurface(), stream);
+ return;
}
throw Exception(u"Not implemented. Currently only support png.");