#include "cru/platform/graphics/quartz/Convert.h" #include 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(rect.origin.x), static_cast(rect.origin.y), static_cast(rect.size.width), static_cast(rect.size.height)}; } const CGDataProviderSequentialCallbacks kStreamToCGDataProviderCallbacks{ 1, [](void* stream, void* buffer, size_t size) -> size_t { return static_cast(stream)->Read( static_cast(buffer), size); }, [](void* stream, off_t offset) -> off_t { auto s = static_cast(stream); auto current_position = s->Tell(); s->Seek(offset, io::Stream::SeekOrigin::Current); return s->Tell() - current_position; }, [](void* stream) { static_cast(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(info)->Write( static_cast(buffer), count); }, [](void* info) {}}; CGDataConsumerRef ConvertStreamToCGDataConsumer(io::Stream* stream) { return CGDataConsumerCreate(stream, &kStreamToCGDataConsumerCallbacks); } } // namespace cru::platform::graphics::quartz