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
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			160 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Matlab
		
	
| 
											7 years ago
										 | // | ||
|  | //  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 |