aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--include/cru/platform/graphics/cairo/CairoBrush.h32
-rw-r--r--src/platform/graphics/cairo/CMakeLists.txt1
-rw-r--r--src/platform/graphics/cairo/CairoBrush.cpp30
4 files changed, 67 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e1510f8f..776f4638 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,6 +5,10 @@ set(CMAKE_CXX_EXTENSIONS OFF)
project(cru)
+if (APPLE)
+ include_directories(BEFORE SYSTEM "/usr/local/include")
+endif()
+
add_subdirectory(lib/Catch2)
add_subdirectory(lib/double-conversion)
add_subdirectory(lib/GSL)
diff --git a/include/cru/platform/graphics/cairo/CairoBrush.h b/include/cru/platform/graphics/cairo/CairoBrush.h
new file mode 100644
index 00000000..818295a3
--- /dev/null
+++ b/include/cru/platform/graphics/cairo/CairoBrush.h
@@ -0,0 +1,32 @@
+#pragma once
+#include "CairoResource.h"
+#include "cru/platform/graphics/Brush.h"
+
+#include <cairo/cairo.h>
+
+namespace cru::platform::graphics::cairo {
+class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoBrush : public CairoResource,
+ public virtual IBrush {
+ public:
+ explicit CairoBrush(CairoGraphicsFactory* factory);
+ ~CairoBrush() override;
+};
+
+class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoSolidColorBrush
+ : public CairoBrush,
+ public virtual ISolidColorBrush {
+ public:
+ explicit CairoSolidColorBrush(CairoGraphicsFactory* factory);
+ ~CairoSolidColorBrush() override;
+
+ public:
+ Color GetColor() override;
+ void SetColor(const Color& color) override;
+
+ cairo_pattern_t* GetCairoPattern() const { return pattern_; }
+
+ private:
+ Color color_;
+ cairo_pattern_t* pattern_;
+};
+} // namespace cru::platform::graphics::cairo
diff --git a/src/platform/graphics/cairo/CMakeLists.txt b/src/platform/graphics/cairo/CMakeLists.txt
index f79e1277..e9107120 100644
--- a/src/platform/graphics/cairo/CMakeLists.txt
+++ b/src/platform/graphics/cairo/CMakeLists.txt
@@ -3,6 +3,7 @@ if (UNIX)
find_library(LIB_PANGO NAMES pango pango-1.0 REQUIRED)
add_library(CruPlatformGraphicsCairo SHARED
+ CairoBrush.cpp
CairoGraphicsFactory.cpp
CairoResource.cpp
)
diff --git a/src/platform/graphics/cairo/CairoBrush.cpp b/src/platform/graphics/cairo/CairoBrush.cpp
new file mode 100644
index 00000000..7920119b
--- /dev/null
+++ b/src/platform/graphics/cairo/CairoBrush.cpp
@@ -0,0 +1,30 @@
+#include "cru/platform/graphics/cairo/CairoBrush.h"
+#include "cru/platform/Color.h"
+
+namespace cru::platform::graphics::cairo {
+CairoBrush::CairoBrush(CairoGraphicsFactory* factory)
+ : CairoResource(factory) {}
+
+CairoBrush::~CairoBrush() {}
+
+CairoSolidColorBrush::CairoSolidColorBrush(CairoGraphicsFactory* factory)
+ : CairoBrush(factory), color_(colors::black) {
+ pattern_ =
+ cairo_pattern_create_rgba(color_.red / 255.0, color_.green / 255.0,
+ color_.blue / 255.0, color_.alpha / 255.0);
+}
+
+CairoSolidColorBrush::~CairoSolidColorBrush() {
+ cairo_pattern_destroy(pattern_);
+}
+
+Color CairoSolidColorBrush::GetColor() { return color_; }
+
+void CairoSolidColorBrush::SetColor(const Color& color) {
+ color_ = color;
+ cairo_pattern_destroy(pattern_);
+ pattern_ =
+ cairo_pattern_create_rgba(color_.red / 255.0, color_.green / 255.0,
+ color_.blue / 255.0, color_.alpha / 255.0);
+}
+} // namespace cru::platform::graphics::cairo