From fffa207ecce80f03121e8009bf1f609254eb4601 Mon Sep 17 00:00:00 2001 From: D N <4661784+retyui@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:39:57 +0100 Subject: [PATCH] fix: Restore resizeMode logic after New Arch update --- ios/RNCImageEditor.mm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/ios/RNCImageEditor.mm b/ios/RNCImageEditor.mm index 148c147..1f96a8c 100644 --- a/ios/RNCImageEditor.mm +++ b/ios/RNCImageEditor.mm @@ -50,12 +50,14 @@ - (void) cropImage:(NSString *)uri CGSize size = [RCTConvert CGSize:@{ @"width": @(data.size().width()), @"height": @(data.size().height()) }]; CGPoint offset = [RCTConvert CGPoint:@{ @"x": @(data.offset().x()), @"y": @(data.offset().y()) }]; CGSize targetSize = size; - if (data.displaySize().has_value()) { - JS::NativeRNCImageEditor::SpecCropImageCropDataDisplaySize displaySize = *data.displaySize(); // Extract the value from the optional + CGSize displaySize = CGSizeZero; + BOOL hasDisplaySizeValue = data.displaySize().has_value(); + if (hasDisplaySizeValue) { + JS::NativeRNCImageEditor::SpecCropImageCropDataDisplaySize rawDisplaySize = *data.displaySize(); // Extract the value from the optional // in pixels - targetSize = [RCTConvert CGSize:@{ @"width": @(displaySize.width()), @"height": @(displaySize.height()) }]; + displaySize = [RCTConvert CGSize:@{ @"width": @(rawDisplaySize.width()), @"height": @(rawDisplaySize.height()) }]; } - NSString *displaySize = data.resizeMode(); + RCTResizeMode resizeMode = [RCTConvert RCTResizeMode:data.resizeMode() ?: @"contain"]; NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString: uri]]; CGFloat compressionQuality = 1; if (data.quality().has_value()) { @@ -70,10 +72,11 @@ - (void) cropImage:(NSString *)uri NSString *format = cropData[@"format"]; CGSize size = [RCTConvert CGSize:cropData[@"size"]]; CGPoint offset = [RCTConvert CGPoint:cropData[@"offset"]]; - CGSize targetSize = size; - NSString *displaySize = cropData[@"resizeMode"]; - if(displaySize){ - targetSize = [RCTConvert CGSize:cropData[@"displaySize"]]; + RCTResizeMode resizeMode = [RCTConvert RCTResizeMode:cropData[@"resizeMode"] ?: @"contain"]; + CGSize displaySize = CGSizeZero; + BOOL hasDisplaySizeValue = cropData[@"displaySize"]; + if(hasDisplaySizeValue){ + displaySize = [RCTConvert CGSize:cropData[@"displaySize"]]; } CGFloat compressionQuality = 1; if(cropData[@"quality"]){ @@ -99,13 +102,14 @@ - (void) cropImage:(NSString *)uri } // Crop image + CGSize targetSize = rect.size; CGRect targetRect = {{-rect.origin.x, -rect.origin.y}, image.size}; CGAffineTransform transform = RCTTransformFromTargetRect(image.size, targetRect); UIImage *croppedImage = RCTTransformImage(image, targetSize, image.scale, transform); // Scale image - if (displaySize) { - RCTResizeMode resizeMode = [RCTConvert RCTResizeMode:displaySize ?: @"contain"]; + if (hasDisplaySizeValue) { + targetSize = displaySize; targetRect = RCTTargetRect(croppedImage.size, targetSize, 1, resizeMode); transform = RCTTransformFromTargetRect(croppedImage.size, targetRect); croppedImage = RCTTransformImage(croppedImage, targetSize, image.scale, transform);