mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 01:25:39 +00:00
fe4b4c2d83
Summary: @public Our background color propagation mechanism is designed to make rendering of translucent content more efficient by pre-blending against an opaque background. Currently this only works for text however, because images are not composited into their background even if the background color is opaque. This diff precomposites network images with their background color when the background is opaque, allowing them to take advantage of this performance optimization. I've also added some logic to correctly crop the downloaded image when the resizeMode is "cover" or "contain" - previously it was only correct for "stretch". Before:{F22437859} After:{F22437862} Test Plan: Run the UIExplorer "<ListView> - Paging" example with "color blended layers" enabled and observe that the images appear in green now, instead of red as they did before.
48 lines
1.7 KiB
Objective-C
48 lines
1.7 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
typedef void (^RCTDataDownloadBlock)(NSData *data, NSError *error);
|
|
typedef void (^RCTImageDownloadBlock)(UIImage *image, NSError *error);
|
|
|
|
@interface RCTImageDownloader : NSObject
|
|
|
|
+ (instancetype)sharedInstance;
|
|
|
|
/**
|
|
* Downloads a block of raw data and returns it. Note that the callback block
|
|
* will not be executed on the same thread you called the method from, nor on
|
|
* the main thread. Returns a token that can be used to cancel the download.
|
|
*/
|
|
- (id)downloadDataForURL:(NSURL *)url
|
|
block:(RCTDataDownloadBlock)block;
|
|
|
|
/**
|
|
* Downloads an image and decompresses it a the size specified. The compressed
|
|
* image will be cached in memory and to disk. Note that the callback block
|
|
* will not be executed on the same thread you called the method from, nor on
|
|
* the main thread. Returns a token that can be used to cancel the download.
|
|
*/
|
|
- (id)downloadImageForURL:(NSURL *)url
|
|
size:(CGSize)size
|
|
scale:(CGFloat)scale
|
|
resizeMode:(UIViewContentMode)resizeMode
|
|
backgroundColor:(UIColor *)backgroundColor
|
|
block:(RCTImageDownloadBlock)block;
|
|
|
|
/**
|
|
* Cancel an in-flight download. If multiple requets have been made for the
|
|
* same image, only the request that relates to the token passed will be
|
|
* cancelled.
|
|
*/
|
|
- (void)cancelDownload:(id)downloadToken;
|
|
|
|
@end
|