mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: The goal of this PR is to migrate from deprecated `[UIScreen mainScreen]` and get the `displayScale` from currentTraitCollection. Both of those return the same values. ## Changelog: [IOS] [CHANGED] - retrieve screen scale from trait collection instead of UIScreen mainScreen Pull Request resolved: https://github.com/facebook/react-native/pull/41214 Test Plan: Go to Dimensions example and check that everything works as expected ### Before <img src="https://github.com/facebook/react-native/assets/52801365/53141e67-63e2-4c3b-818e-6a232aae8a5b" height="500" /> ### After <img src="https://github.com/facebook/react-native/assets/52801365/33728fce-0298-459c-b63e-a0b8ea34bde1" height="500" /> Reviewed By: NickGerleman Differential Revision: D50736794 Pulled By: javache fbshipit-source-id: d512cba1120204be95caf43ac9916f6597e2ccc8
69 lines
2.4 KiB
Objective-C
69 lines
2.4 KiB
Objective-C
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import "UIImage+Compare.h"
|
|
|
|
@implementation UIImage (Compare)
|
|
|
|
- (BOOL)compareWithImage:(UIImage *)image
|
|
{
|
|
NSAssert(CGSizeEqualToSize(self.size, image.size), @"Images must be same size.");
|
|
|
|
// The images have the equal size, so we could use the smallest amount of bytes because of byte padding
|
|
size_t minBytesPerRow = MIN(CGImageGetBytesPerRow(self.CGImage), CGImageGetBytesPerRow(image.CGImage));
|
|
size_t referenceImageSizeBytes = CGImageGetHeight(self.CGImage) * minBytesPerRow;
|
|
void *referenceImagePixels = calloc(1, referenceImageSizeBytes);
|
|
void *imagePixels = calloc(1, referenceImageSizeBytes);
|
|
|
|
if (!referenceImagePixels || !imagePixels) {
|
|
free(referenceImagePixels);
|
|
free(imagePixels);
|
|
return NO;
|
|
}
|
|
|
|
CGContextRef referenceImageContext = CGBitmapContextCreate(
|
|
referenceImagePixels,
|
|
CGImageGetWidth(self.CGImage),
|
|
CGImageGetHeight(self.CGImage),
|
|
CGImageGetBitsPerComponent(self.CGImage),
|
|
minBytesPerRow,
|
|
CGImageGetColorSpace(self.CGImage),
|
|
(CGBitmapInfo)kCGImageAlphaPremultipliedLast);
|
|
CGContextRef imageContext = CGBitmapContextCreate(
|
|
imagePixels,
|
|
CGImageGetWidth(image.CGImage),
|
|
CGImageGetHeight(image.CGImage),
|
|
CGImageGetBitsPerComponent(image.CGImage),
|
|
minBytesPerRow,
|
|
CGImageGetColorSpace(image.CGImage),
|
|
(CGBitmapInfo)kCGImageAlphaPremultipliedLast);
|
|
|
|
CGFloat scaleFactor = [UITraitCollection currentTraitCollection].displayScale;
|
|
CGContextScaleCTM(referenceImageContext, scaleFactor, scaleFactor);
|
|
CGContextScaleCTM(imageContext, scaleFactor, scaleFactor);
|
|
|
|
if (!referenceImageContext || !imageContext) {
|
|
CGContextRelease(referenceImageContext);
|
|
CGContextRelease(imageContext);
|
|
free(referenceImagePixels);
|
|
free(imagePixels);
|
|
return NO;
|
|
}
|
|
|
|
CGContextDrawImage(referenceImageContext, CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), self.CGImage);
|
|
CGContextDrawImage(imageContext, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage);
|
|
CGContextRelease(referenceImageContext);
|
|
CGContextRelease(imageContext);
|
|
|
|
BOOL imageEqual = (memcmp(referenceImagePixels, imagePixels, referenceImageSizeBytes) == 0);
|
|
free(referenceImagePixels);
|
|
free(imagePixels);
|
|
return imageEqual;
|
|
}
|
|
|
|
@end
|