aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-08-24 00:58:57 +0800
committercrupest <crupest@outlook.com>2021-08-24 00:58:57 +0800
commitfdafa45b7d28a191439b0c0deabff94b0d1a7094 (patch)
treed7ebe04d5ce304ed99d13fdff55d94b5a4ef014b /src
parent100c2ae5cd7b815dc9accca0fa9ceaca2f5d1020 (diff)
downloadcru-fdafa45b7d28a191439b0c0deabff94b0d1a7094.tar.gz
cru-fdafa45b7d28a191439b0c0deabff94b0d1a7094.tar.bz2
cru-fdafa45b7d28a191439b0c0deabff94b0d1a7094.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/osx/graphics/quartz/Convert.cpp14
-rw-r--r--src/osx/graphics/quartz/Painter.cpp53
2 files changed, 56 insertions, 11 deletions
diff --git a/src/osx/graphics/quartz/Convert.cpp b/src/osx/graphics/quartz/Convert.cpp
index 95923083..c1177a41 100644
--- a/src/osx/graphics/quartz/Convert.cpp
+++ b/src/osx/graphics/quartz/Convert.cpp
@@ -2,10 +2,22 @@
namespace cru::platform::graphics::osx::quartz {
CGAffineTransform Convert(const Matrix& matrix) {
- return CGAffineTransformMake(matrix.m11, matrix.m12, matrix.m21, matrix.m22, matrix.m31, matrix.m32);
+ return CGAffineTransformMake(matrix.m11, matrix.m12, matrix.m21, matrix.m22,
+ matrix.m31, matrix.m32);
}
Matrix Convert(const CGAffineTransform& matrix) {
return Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
}
+
+CGRect Convert(const Rect& rect) {
+ return CGRect{CGPoint{rect.left, rect.top}, CGSize{rect.width, rect.height}};
+}
+
+Rect Convert(const CGRect& rect) {
+ return Rect{static_cast<float>(rect.origin.x),
+ static_cast<float>(rect.origin.y),
+ static_cast<float>(rect.size.width),
+ static_cast<float>(rect.size.height)};
+}
} // namespace cru::platform::graphics::osx::quartz
diff --git a/src/osx/graphics/quartz/Painter.cpp b/src/osx/graphics/quartz/Painter.cpp
index 65cf9154..42f6f1b7 100644
--- a/src/osx/graphics/quartz/Painter.cpp
+++ b/src/osx/graphics/quartz/Painter.cpp
@@ -1,16 +1,49 @@
#include "cru/osx/graphics/quartz/Painter.hpp"
+#include "cru/osx/graphics/quartz/Brush.hpp"
#include "cru/osx/graphics/quartz/Convert.hpp"
+#include "cru/platform/Check.hpp"
namespace cru::platform::graphics::osx::quartz {
- Matrix QuartzCGContextPainter::GetTransform() {
- return Convert(CGContextGetCTM(cg_context_));
- }
-
- void QuartzCGContextPainter::SetTransform(const Matrix& matrix) {
- auto old = CGContextGetCTM(cg_context_);
- old = CGAffineTransformInvert(old);
- CGContextConcatCTM(cg_context_, old);
- CGContextConcatCTM(cg_context_, Convert(matrix));
- }
+Matrix QuartzCGContextPainter::GetTransform() {
+ return Convert(CGContextGetCTM(cg_context_));
}
+
+void QuartzCGContextPainter::SetTransform(const Matrix& matrix) {
+ auto old = CGContextGetCTM(cg_context_);
+ old = CGAffineTransformInvert(old);
+ CGContextConcatCTM(cg_context_, old);
+ CGContextConcatCTM(cg_context_, Convert(matrix));
+}
+
+void QuartzCGContextPainter::Clear(const Color& color) {
+ // TODO:
+}
+
+void QuartzCGContextPainter::DrawLine(const Point& start, const Point& end,
+ IBrush* brush, float width) {
+ CGContextBeginPath(cg_context_);
+ CGContextMoveToPoint(cg_context_, start.x, start.y);
+ CGContextAddLineToPoint(cg_context_, end.x, end.y);
+
+ QuartzBrush* b = CheckPlatform<QuartzBrush>(brush, GetPlatformId());
+ b->Select(cg_context_);
+ CGContextSetLineWidth(cg_context_, width);
+ CGContextStrokePath(cg_context_);
+}
+
+void QuartzCGContextPainter::StrokeRectangle(const Rect& rectangle,
+ IBrush* brush, float width) {
+ QuartzBrush* b = CheckPlatform<QuartzBrush>(brush, GetPlatformId());
+ b->Select(cg_context_);
+ CGContextStrokeRectWithWidth(cg_context_, Convert(rectangle), width);
+}
+
+void QuartzCGContextPainter::FillRectangle(const Rect& rectangle,
+ IBrush* brush) {
+ QuartzBrush* b = CheckPlatform<QuartzBrush>(brush, GetPlatformId());
+ b->Select(cg_context_);
+ CGContextFillRect(cg_context_, Convert(rectangle));
+}
+
+} // namespace cru::platform::graphics::osx::quartz