aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-08-22 22:19:59 +0800
committercrupest <crupest@outlook.com>2021-08-22 22:19:59 +0800
commit100c2ae5cd7b815dc9accca0fa9ceaca2f5d1020 (patch)
tree35af05c94af8ff616e83f199cef971811ff1ecf8
parent7fa6f61b1d7b253f749be73a4bfeee9a77cd2e88 (diff)
downloadcru-100c2ae5cd7b815dc9accca0fa9ceaca2f5d1020.tar.gz
cru-100c2ae5cd7b815dc9accca0fa9ceaca2f5d1020.tar.bz2
cru-100c2ae5cd7b815dc9accca0fa9ceaca2f5d1020.zip
...
-rw-r--r--include/cru/osx/graphics/quartz/Brush.hpp7
-rw-r--r--include/cru/osx/graphics/quartz/Factory.hpp19
-rw-r--r--src/osx/graphics/quartz/Brush.cpp9
-rw-r--r--src/osx/graphics/quartz/Factory.cpp11
4 files changed, 46 insertions, 0 deletions
diff --git a/include/cru/osx/graphics/quartz/Brush.hpp b/include/cru/osx/graphics/quartz/Brush.hpp
index fa0ef18c..1b5fd7e4 100644
--- a/include/cru/osx/graphics/quartz/Brush.hpp
+++ b/include/cru/osx/graphics/quartz/Brush.hpp
@@ -6,6 +6,8 @@
#include <CoreGraphics/CoreGraphics.h>
+#include <functional>
+
namespace cru::platform::graphics::osx::quartz {
class QuartzBrush : public OsxQuartzResource, public virtual IBrush {
public:
@@ -14,6 +16,9 @@ class QuartzBrush : public OsxQuartzResource, public virtual IBrush {
CRU_DELETE_COPY(QuartzBrush)
CRU_DELETE_MOVE(QuartzBrush)
~QuartzBrush() override = default;
+
+ public:
+ virtual void Select(CGContextRef context) = 0;
};
class QuartzSolidColorBrush : public QuartzBrush,
@@ -31,6 +36,8 @@ class QuartzSolidColorBrush : public QuartzBrush,
CGColorRef GetCGColorRef() const { return cg_color_; }
+ void Select(CGContextRef context) override;
+
private:
Color color_;
CGColorRef cg_color_;
diff --git a/include/cru/osx/graphics/quartz/Factory.hpp b/include/cru/osx/graphics/quartz/Factory.hpp
index 6f70f09b..5346d039 100644
--- a/include/cru/osx/graphics/quartz/Factory.hpp
+++ b/include/cru/osx/graphics/quartz/Factory.hpp
@@ -1 +1,20 @@
#pragma once
+#include "Resource.hpp"
+#include "cru/common/Base.hpp"
+#include "cru/platform/graphics/Factory.hpp"
+
+namespace cru::platform::graphics::osx::quartz {
+class QuartzGraphicsFactory : public OsxQuartzResource,
+ public virtual IGraphFactory {
+ public:
+ QuartzGraphicsFactory() : OsxQuartzResource(this) {}
+
+ CRU_DELETE_COPY(QuartzGraphicsFactory)
+ CRU_DELETE_MOVE(QuartzGraphicsFactory)
+
+ ~QuartzGraphicsFactory() override = default;
+
+ public:
+ std::unique_ptr<ISolidColorBrush> CreateSolidColorBrush() override;
+};
+} // namespace cru::platform::graphics::osx::quartz
diff --git a/src/osx/graphics/quartz/Brush.cpp b/src/osx/graphics/quartz/Brush.cpp
index a930719c..6e4893b1 100644
--- a/src/osx/graphics/quartz/Brush.cpp
+++ b/src/osx/graphics/quartz/Brush.cpp
@@ -18,4 +18,13 @@ void QuartzSolidColorBrush::SetColor(const Color& color) {
CGColorCreateGenericRGB(color.GetFloatRed(), color.GetFloatGreen(),
color.GetFloatBlue(), color.GetFloatAlpha());
}
+
+void QuartzSolidColorBrush::Select(CGContextRef context) {
+ CGContextSaveGState(context);
+
+ CGContextSetStrokeColorWithColor(context, cg_color_);
+ CGContextSetFillColorWithColor(context, cg_color_);
+
+ CGContextRestoreGState(context);
+}
} // namespace cru::platform::graphics::osx::quartz
diff --git a/src/osx/graphics/quartz/Factory.cpp b/src/osx/graphics/quartz/Factory.cpp
index f9b792f2..72dd96c7 100644
--- a/src/osx/graphics/quartz/Factory.cpp
+++ b/src/osx/graphics/quartz/Factory.cpp
@@ -1 +1,12 @@
#include "cru/osx/graphics/quartz/Factory.hpp"
+
+#include "cru/osx/graphics/quartz/Brush.hpp"
+
+#include <memory>
+
+namespace cru::platform::graphics::osx::quartz {
+std::unique_ptr<ISolidColorBrush>
+QuartzGraphicsFactory::CreateSolidColorBrush() {
+ return std::make_unique<QuartzSolidColorBrush>(this, colors::black);
+}
+} // namespace cru::platform::graphics::osx::quartz