mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			160 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			160 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Objective-C
		
	
| //
 | |
| //  Created by Jesse Squires
 | |
| //  http://www.jessesquires.com
 | |
| //
 | |
| //
 | |
| //  Documentation
 | |
| //  http://cocoadocs.org/docsets/JSQMessagesViewController
 | |
| //
 | |
| //
 | |
| //  GitHub
 | |
| //  https://github.com/jessesquires/JSQMessagesViewController
 | |
| //
 | |
| //
 | |
| //  License
 | |
| //  Copyright (c) 2014 Jesse Squires
 | |
| //  Released under an MIT license: http://opensource.org/licenses/MIT
 | |
| //
 | |
| 
 | |
| #import "JSQMessagesAvatarImageFactory.h"
 | |
| 
 | |
| #import "UIColor+JSQMessages.h"
 | |
| 
 | |
| 
 | |
| @implementation JSQMessagesAvatarImageFactory
 | |
| 
 | |
| #pragma mark - Public
 | |
| 
 | |
| + (JSQMessagesAvatarImage *)avatarImageWithPlaceholder:(UIImage *)placeholderImage diameter:(NSUInteger)diameter
 | |
| {
 | |
|     UIImage *circlePlaceholderImage = [JSQMessagesAvatarImageFactory jsq_circularImage:placeholderImage
 | |
|                                                                           withDiameter:diameter
 | |
|                                                                       highlightedColor:nil];
 | |
| 
 | |
|     return [JSQMessagesAvatarImage avatarImageWithPlaceholder:circlePlaceholderImage];
 | |
| }
 | |
| 
 | |
| + (JSQMessagesAvatarImage *)avatarImageWithImage:(UIImage *)image diameter:(NSUInteger)diameter
 | |
| {
 | |
|     UIImage *avatar = [JSQMessagesAvatarImageFactory circularAvatarImage:image withDiameter:diameter];
 | |
|     UIImage *highlightedAvatar = [JSQMessagesAvatarImageFactory circularAvatarHighlightedImage:image withDiameter:diameter];
 | |
| 
 | |
|     return [[JSQMessagesAvatarImage alloc] initWithAvatarImage:avatar
 | |
|                                               highlightedImage:highlightedAvatar
 | |
|                                               placeholderImage:avatar];
 | |
| }
 | |
| 
 | |
| + (UIImage *)circularAvatarImage:(UIImage *)image withDiameter:(NSUInteger)diameter
 | |
| {
 | |
|     return [JSQMessagesAvatarImageFactory jsq_circularImage:image
 | |
|                                                withDiameter:diameter
 | |
|                                            highlightedColor:nil];
 | |
| }
 | |
| 
 | |
| + (UIImage *)circularAvatarHighlightedImage:(UIImage *)image withDiameter:(NSUInteger)diameter
 | |
| {
 | |
|     return [JSQMessagesAvatarImageFactory jsq_circularImage:image
 | |
|                                                withDiameter:diameter
 | |
|                                            highlightedColor:[UIColor colorWithWhite:0.1f alpha:0.3f]];
 | |
| }
 | |
| 
 | |
| + (JSQMessagesAvatarImage *)avatarImageWithUserInitials:(NSString *)userInitials
 | |
|                                         backgroundColor:(UIColor *)backgroundColor
 | |
|                                               textColor:(UIColor *)textColor
 | |
|                                                    font:(UIFont *)font
 | |
|                                                diameter:(NSUInteger)diameter
 | |
| {
 | |
|     UIImage *avatarImage = [JSQMessagesAvatarImageFactory jsq_imageWitInitials:userInitials
 | |
|                                                                backgroundColor:backgroundColor
 | |
|                                                                      textColor:textColor
 | |
|                                                                           font:font
 | |
|                                                                       diameter:diameter];
 | |
| 
 | |
|     UIImage *avatarHighlightedImage = [JSQMessagesAvatarImageFactory jsq_circularImage:avatarImage
 | |
|                                                                           withDiameter:diameter
 | |
|                                                                       highlightedColor:[UIColor colorWithWhite:0.1f alpha:0.3f]];
 | |
| 
 | |
|     return [[JSQMessagesAvatarImage alloc] initWithAvatarImage:avatarImage
 | |
|                                               highlightedImage:avatarHighlightedImage
 | |
|                                               placeholderImage:avatarImage];
 | |
| }
 | |
| 
 | |
| #pragma mark - Private
 | |
| 
 | |
| + (UIImage *)jsq_imageWitInitials:(NSString *)initials
 | |
|                   backgroundColor:(UIColor *)backgroundColor
 | |
|                         textColor:(UIColor *)textColor
 | |
|                              font:(UIFont *)font
 | |
|                          diameter:(NSUInteger)diameter
 | |
| {
 | |
|     NSParameterAssert(initials != nil);
 | |
|     NSParameterAssert(backgroundColor != nil);
 | |
|     NSParameterAssert(textColor != nil);
 | |
|     NSParameterAssert(font != nil);
 | |
|     NSParameterAssert(diameter > 0);
 | |
| 
 | |
|     CGRect frame = CGRectMake(0.0f, 0.0f, diameter, diameter);
 | |
| 
 | |
|     NSDictionary *attributes = @{ NSFontAttributeName : font,
 | |
|                                   NSForegroundColorAttributeName : textColor };
 | |
| 
 | |
|     CGRect textFrame = [initials boundingRectWithSize:frame.size
 | |
|                                               options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
 | |
|                                            attributes:attributes
 | |
|                                               context:nil];
 | |
| 
 | |
|     CGPoint frameMidPoint = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame));
 | |
|     CGPoint textFrameMidPoint = CGPointMake(CGRectGetMidX(textFrame), CGRectGetMidY(textFrame));
 | |
| 
 | |
|     CGFloat dx = frameMidPoint.x - textFrameMidPoint.x;
 | |
|     CGFloat dy = frameMidPoint.y - textFrameMidPoint.y;
 | |
|     CGPoint drawPoint = CGPointMake(dx, dy);
 | |
|     UIImage *image = nil;
 | |
| 
 | |
|     UIGraphicsBeginImageContextWithOptions(frame.size, NO, [UIScreen mainScreen].scale);
 | |
|     {
 | |
|         CGContextRef context = UIGraphicsGetCurrentContext();
 | |
| 
 | |
|         CGContextSetFillColorWithColor(context, backgroundColor.CGColor);
 | |
|         CGContextFillRect(context, frame);
 | |
|         [initials drawAtPoint:drawPoint withAttributes:attributes];
 | |
| 
 | |
|         image = UIGraphicsGetImageFromCurrentImageContext();
 | |
| 
 | |
|     }
 | |
|     UIGraphicsEndImageContext();
 | |
| 
 | |
|     return [JSQMessagesAvatarImageFactory jsq_circularImage:image withDiameter:diameter highlightedColor:nil];
 | |
| }
 | |
| 
 | |
| + (UIImage *)jsq_circularImage:(UIImage *)image withDiameter:(NSUInteger)diameter highlightedColor:(UIColor *)highlightedColor
 | |
| {
 | |
|     NSParameterAssert(image != nil);
 | |
|     NSParameterAssert(diameter > 0);
 | |
| 
 | |
|     CGRect frame = CGRectMake(0.0f, 0.0f, diameter, diameter);
 | |
|     UIImage *newImage = nil;
 | |
| 
 | |
|     UIGraphicsBeginImageContextWithOptions(frame.size, NO, [UIScreen mainScreen].scale);
 | |
|     {
 | |
|         CGContextRef context = UIGraphicsGetCurrentContext();
 | |
| 
 | |
|         UIBezierPath *imgPath = [UIBezierPath bezierPathWithOvalInRect:frame];
 | |
|         [imgPath addClip];
 | |
|         [image drawInRect:frame];
 | |
| 
 | |
|         if (highlightedColor != nil) {
 | |
|             CGContextSetFillColorWithColor(context, highlightedColor.CGColor);
 | |
|             CGContextFillEllipseInRect(context, frame);
 | |
|         }
 | |
| 
 | |
|         newImage = UIGraphicsGetImageFromCurrentImageContext();
 | |
|         
 | |
|     }
 | |
|     UIGraphicsEndImageContext();
 | |
|     
 | |
|     return newImage;
 | |
| }
 | |
| 
 | |
| @end
 |