diff options
-rw-r--r-- | include/cru/osx/graphics/quartz/Convert.hpp | 9 | ||||
-rw-r--r-- | src/osx/graphics/quartz/Convert.cpp | 14 | ||||
-rw-r--r-- | src/osx/graphics/quartz/Painter.cpp | 53 |
3 files changed, 62 insertions, 14 deletions
diff --git a/include/cru/osx/graphics/quartz/Convert.hpp b/include/cru/osx/graphics/quartz/Convert.hpp index 9706dc00..89ade584 100644 --- a/include/cru/osx/graphics/quartz/Convert.hpp +++ b/include/cru/osx/graphics/quartz/Convert.hpp @@ -4,6 +4,9 @@ #include <CoreGraphics/CoreGraphics.h> namespace cru::platform::graphics::osx::quartz { - CGAffineTransform Convert(const Matrix& matrix); - Matrix Convert(const CGAffineTransform& matrix); -} +CGAffineTransform Convert(const Matrix& matrix); +Matrix Convert(const CGAffineTransform& matrix); + +CGRect Convert(const Rect& rect); +Rect Convert(const CGRect& rect); +} // namespace cru::platform::graphics::osx::quartz 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 |