Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion React/Base/RCTUtils.m
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,21 @@ CGSize RCTScreenSize()

return size;
}
#endif // [macOS]
#else // [macOS
CGFloat RCTScreenScale()
{
return [NSScreen mainScreen].backingScaleFactor;
}

CGFloat RCTFontSizeMultiplier() {
return 1.0;
}

CGSize RCTScreenSize()
{
return [NSScreen mainScreen].frame.size;
}
#endif // macOS]

#if !TARGET_OS_OSX // [macOS]
CGSize RCTViewportSize()
Expand All @@ -385,6 +399,12 @@ CGFloat RCTFloorPixelValue(CGFloat value)
return floor(value * scale) / scale;
}
#else // [macOS
CGSize RCTViewportSize()
{
NSScreen* screen = [NSScreen mainScreen];
return screen ? screen.frame.size : RCTScreenSize();
}

CGFloat RCTRoundPixelValue(CGFloat value, CGFloat scale)
{
return round(value * scale) / scale;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,21 @@ - (instancetype)initWithFrame:(CGRect)frame
_props = defaultProps;

_imageView = [RCTUIImageViewAnimated new];
#if !TARGET_OS_OSX // [macOS]
_imageView.clipsToBounds = YES;
_imageView.contentMode = RCTContentModeFromImageResizeMode(defaultProps->resizeMode);
#endif // [macOS]
_imageView.layer.minificationFilter = kCAFilterTrilinear;
_imageView.layer.magnificationFilter = kCAFilterTrilinear;

_imageResponseObserverProxy = RCTImageResponseObserverProxy(self);

#if !TARGET_OS_OSX // [macOS]
self.contentView = _imageView;
#else // [macOS
self.contentView = [RCTUIView new];
[self.contentView addSubview:_imageView];
#endif // macOS]
}

return self;
Expand All @@ -56,6 +63,7 @@ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &
auto const &oldImageProps = *std::static_pointer_cast<ImageProps const>(_props);
auto const &newImageProps = *std::static_pointer_cast<ImageProps const>(props);

#if !TARGET_OS_OSX // [macOS]
// `resizeMode`
if (oldImageProps.resizeMode != newImageProps.resizeMode) {
_imageView.contentMode = RCTContentModeFromImageResizeMode(newImageProps.resizeMode);
Expand All @@ -65,6 +73,7 @@ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &
if (oldImageProps.tintColor != newImageProps.tintColor) {
_imageView.tintColor = RCTUIColorFromSharedColor(newImageProps.tintColor);
}
#endif // [macOS]

[super updateProps:props oldProps:oldProps];
}
Expand Down Expand Up @@ -132,6 +141,7 @@ - (void)didReceiveImage:(UIImage *)image metadata:(id)metadata fromObserver:(voi

const auto &imageProps = *std::static_pointer_cast<ImageProps const>(_props);

#if !TARGET_OS_OSX // [macOS]
if (imageProps.tintColor) {
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}
Expand All @@ -144,6 +154,7 @@ - (void)didReceiveImage:(UIImage *)image metadata:(id)metadata fromObserver:(voi
image = [image resizableImageWithCapInsets:RCTUIEdgeInsetsFromEdgeInsets(imageProps.capInsets)
resizingMode:UIImageResizingModeStretch];
}
#endif // [macOS]

if (imageProps.blurRadius > __FLT_EPSILON__) {
// Blur on a background thread to avoid blocking interaction.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#import <React/RCTAssert.h>
#import <React/RCTBorderDrawing.h>
#import <React/RCTConversions.h>
#import <React/RCTUtils.h> // [macOS]
#import <react/renderer/components/view/ViewComponentDescriptor.h>
#import <react/renderer/components/view/ViewEventEmitter.h>
#import <react/renderer/components/view/ViewProps.h>
Expand Down Expand Up @@ -626,9 +627,14 @@ - (void)invalidateLayer
CGRect contentsCenter = CGRect{
CGPoint{imageCapInsets.left / imageSize.width, imageCapInsets.top / imageSize.height},
CGSize{(CGFloat)1.0 / imageSize.width, (CGFloat)1.0 / imageSize.height}};

_borderLayer.contents = (id)image.CGImage;
_borderLayer.contentsScale = image.scale;

#if !TARGET_OS_OSX // [macOS]
_borderLayer.contents = (id)image.CGImage;
_borderLayer.contentsScale = image.scale;
#else // [macOS
_borderLayer.contents = [image layerContentsForContentsScale:scaleFactor];
_borderLayer.contentsScale = RCTScreenScale();
#endif // macOS]

BOOL isResizable = !UIEdgeInsetsEqualToEdgeInsets(image.capInsets, UIEdgeInsetsZero);
if (isResizable) {
Expand Down