mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
[ASDisplayNode] Use kCGBlendModeCopy in a Couple More Places (#2250)
* Use blend mode copy in a couple more places * Add some tests
This commit is contained in:
@@ -677,7 +677,7 @@ extern asimagenode_modification_block_t ASImageNodeRoundBorderModificationBlock(
|
|||||||
[roundOutline addClip];
|
[roundOutline addClip];
|
||||||
|
|
||||||
// Draw the original image
|
// Draw the original image
|
||||||
[originalImage drawAtPoint:CGPointZero];
|
[originalImage drawAtPoint:CGPointZero blendMode:kCGBlendModeCopy alpha:1];
|
||||||
|
|
||||||
// Draw a border on top.
|
// Draw a border on top.
|
||||||
if (borderWidth > 0.0) {
|
if (borderWidth > 0.0) {
|
||||||
@@ -700,7 +700,7 @@ extern asimagenode_modification_block_t ASImageNodeTintColorModificationBlock(UI
|
|||||||
// Set color and render template
|
// Set color and render template
|
||||||
[color setFill];
|
[color setFill];
|
||||||
UIImage *templateImage = [originalImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
UIImage *templateImage = [originalImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||||
[templateImage drawAtPoint:CGPointZero];
|
[templateImage drawAtPoint:CGPointZero blendMode:kCGBlendModeCopy alpha:1];
|
||||||
|
|
||||||
UIImage *modifiedImage = UIGraphicsGetImageFromCurrentImageContext();
|
UIImage *modifiedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||||
UIGraphicsEndImageContext();
|
UIGraphicsEndImageContext();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#import "ASAssert.h"
|
#import "ASAssert.h"
|
||||||
#import "ASDisplayNodeInternal.h"
|
#import "ASDisplayNodeInternal.h"
|
||||||
#import "ASDisplayNode+FrameworkPrivate.h"
|
#import "ASDisplayNode+FrameworkPrivate.h"
|
||||||
|
#import "ASInternalHelpers.h"
|
||||||
|
|
||||||
@interface ASDisplayNode () <_ASDisplayLayerDelegate>
|
@interface ASDisplayNode () <_ASDisplayLayerDelegate>
|
||||||
@end
|
@end
|
||||||
@@ -113,7 +114,9 @@
|
|||||||
if (displayBlock) {
|
if (displayBlock) {
|
||||||
UIImage *image = (UIImage *)displayBlock();
|
UIImage *image = (UIImage *)displayBlock();
|
||||||
if (image) {
|
if (image) {
|
||||||
[image drawInRect:bounds];
|
BOOL opaque = ASImageAlphaInfoIsOpaque(CGImageGetAlphaInfo(image.CGImage));
|
||||||
|
CGBlendMode blendMode = opaque ? kCGBlendModeCopy : kCGBlendModeNormal;
|
||||||
|
[image drawInRect:bounds blendMode:blendMode alpha:1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -58,4 +58,30 @@
|
|||||||
@"Contents should be 100 x 100 by contents scale.");
|
@"Contents should be 100 x 100 by contents scale.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)testTintColorBlock
|
||||||
|
{
|
||||||
|
UIImage *test = [self testImage];
|
||||||
|
UIImage *tinted = ASImageNodeTintColorModificationBlock([UIColor redColor])(test);
|
||||||
|
ASImageNode *node = [[ASImageNode alloc] init];
|
||||||
|
node.image = tinted;
|
||||||
|
[node layoutThatFits:ASSizeRangeMake(test.size)];
|
||||||
|
|
||||||
|
ASSnapshotVerifyNode(node, nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testRoundedCornerBlock
|
||||||
|
{
|
||||||
|
UIGraphicsBeginImageContext(CGSizeMake(100, 100));
|
||||||
|
[[UIColor blueColor] setFill];
|
||||||
|
UIRectFill(CGRectMake(0, 0, 100, 100));
|
||||||
|
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
|
||||||
|
UIGraphicsEndImageContext();
|
||||||
|
UIImage *rounded = ASImageNodeRoundBorderModificationBlock(2, [UIColor redColor])(result);
|
||||||
|
ASImageNode *node = [[ASImageNode alloc] init];
|
||||||
|
node.image = rounded;
|
||||||
|
[node layoutThatFits:ASSizeRangeMake(rounded.size)];
|
||||||
|
|
||||||
|
ASSnapshotVerifyNode(node, nil);
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 354 KiB |
Reference in New Issue
Block a user