diff options
author | crupest <crupest@outlook.com> | 2022-05-15 14:08:06 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-05-15 14:08:06 +0800 |
commit | 8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6 (patch) | |
tree | 77e41cc14264060517c0f7ed95837012afb8342e /src/platform/graphics/quartz/Convert.cpp | |
parent | 9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752 (diff) | |
download | cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.tar.gz cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.tar.bz2 cru-8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6.zip |
...
Diffstat (limited to 'src/platform/graphics/quartz/Convert.cpp')
-rw-r--r-- | src/platform/graphics/quartz/Convert.cpp | 63 |
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 |