aboutsummaryrefslogtreecommitdiff
path: root/src/platform/graphics/quartz/Convert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/graphics/quartz/Convert.cpp')
-rw-r--r--src/platform/graphics/quartz/Convert.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/platform/graphics/quartz/Convert.cpp b/src/platform/graphics/quartz/Convert.cpp
new file mode 100644
index 00000000..06720982
--- /dev/null
+++ b/src/platform/graphics/quartz/Convert.cpp
@@ -0,0 +1,63 @@
+#include "cru/platform/graphics/quartz/Convert.h"
+#include <cstdint>
+
+namespace cru::platform::graphics::quartz {
+
+CGPoint Convert(const Point& point) { return CGPoint{point.x, point.y}; }
+Point Convert(const CGPoint& point) { return Point(point.x, point.y); }
+
+CGSize Convert(const Size& size) { return CGSize{size.width, size.height}; }
+Size Convert(const CGSize& size) { return Size(size.width, size.height); }
+
+CGAffineTransform Convert(const Matrix& matrix) {
+ 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)};
+}
+
+const CGDataProviderSequentialCallbacks kStreamToCGDataProviderCallbacks{
+ 1,
+ [](void* stream, void* buffer, size_t size) -> size_t {
+ return static_cast<io::Stream*>(stream)->Read(
+ static_cast<std::byte*>(buffer), size);
+ },
+ [](void* stream, off_t offset) -> off_t {
+ auto s = static_cast<io::Stream*>(stream);
+ auto current_position = s->Tell();
+ s->Seek(offset, io::Stream::SeekOrigin::Current);
+ return s->Tell() - current_position;
+ },
+ [](void* stream) { static_cast<io::Stream*>(stream)->Rewind(); },
+ [](void* stream) {}};
+
+CGDataProviderRef ConvertStreamToCGDataProvider(io::Stream* stream) {
+ return CGDataProviderCreateSequential(stream,
+ &kStreamToCGDataProviderCallbacks);
+}
+
+const CGDataConsumerCallbacks kStreamToCGDataConsumerCallbacks{
+ [](void* info, const void* buffer, size_t count) -> size_t {
+ return static_cast<io::Stream*>(info)->Write(
+ static_cast<const std::byte*>(buffer), count);
+ },
+ [](void* info) {}};
+
+CGDataConsumerRef ConvertStreamToCGDataConsumer(io::Stream* stream) {
+ return CGDataConsumerCreate(stream, &kStreamToCGDataConsumerCallbacks);
+}
+
+} // namespace cru::platform::graphics::quartz