| // |
| // 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 "JSQMessagesCollectionViewLayoutAttributes.h" |
| |
| @implementation JSQMessagesCollectionViewLayoutAttributes |
| |
| #pragma mark - Init |
| |
| - (instancetype)init { |
| self = [super init]; |
| if (self) { |
| _messageBubbleFont = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; |
| _messageBubbleContainerViewWidth = 320.0f; |
| } |
| return self; |
| } |
| |
| #pragma mark - Setters |
| |
| - (void)setMessageBubbleFont:(UIFont *)messageBubbleFont |
| { |
| NSParameterAssert(messageBubbleFont != nil); |
| _messageBubbleFont = messageBubbleFont; |
| } |
| |
| - (void)setMessageBubbleContainerViewWidth:(CGFloat)messageBubbleContainerViewWidth |
| { |
| NSParameterAssert(messageBubbleContainerViewWidth > 0.0f); |
| _messageBubbleContainerViewWidth = ceilf(messageBubbleContainerViewWidth); |
| } |
| |
| - (void)setIncomingAvatarViewSize:(CGSize)incomingAvatarViewSize |
| { |
| NSParameterAssert(incomingAvatarViewSize.width >= 0.0f && incomingAvatarViewSize.height >= 0.0f); |
| _incomingAvatarViewSize = [self jsq_correctedAvatarSizeFromSize:incomingAvatarViewSize]; |
| } |
| |
| - (void)setOutgoingAvatarViewSize:(CGSize)outgoingAvatarViewSize |
| { |
| NSParameterAssert(outgoingAvatarViewSize.width >= 0.0f && outgoingAvatarViewSize.height >= 0.0f); |
| _outgoingAvatarViewSize = [self jsq_correctedAvatarSizeFromSize:outgoingAvatarViewSize]; |
| } |
| |
| - (void)setCellTopLabelHeight:(CGFloat)cellTopLabelHeight |
| { |
| NSParameterAssert(cellTopLabelHeight >= 0.0f); |
| _cellTopLabelHeight = [self jsq_correctedLabelHeightForHeight:cellTopLabelHeight]; |
| } |
| |
| - (void)setMessageBubbleTopLabelHeight:(CGFloat)messageBubbleTopLabelHeight |
| { |
| NSParameterAssert(messageBubbleTopLabelHeight >= 0.0f); |
| _messageBubbleTopLabelHeight = [self jsq_correctedLabelHeightForHeight:messageBubbleTopLabelHeight]; |
| } |
| |
| - (void)setCellBottomLabelHeight:(CGFloat)cellBottomLabelHeight |
| { |
| NSParameterAssert(cellBottomLabelHeight >= 0.0f); |
| _cellBottomLabelHeight = [self jsq_correctedLabelHeightForHeight:cellBottomLabelHeight]; |
| } |
| |
| #pragma mark - Utilities |
| |
| - (CGSize)jsq_correctedAvatarSizeFromSize:(CGSize)size |
| { |
| return CGSizeMake(ceilf(size.width), ceilf(size.height)); |
| } |
| |
| - (CGFloat)jsq_correctedLabelHeightForHeight:(CGFloat)height |
| { |
| return ceilf(height); |
| } |
| |
| #pragma mark - NSObject |
| |
| - (BOOL)isEqual:(id)object |
| { |
| if (self == object) { |
| return YES; |
| } |
| |
| if (![object isKindOfClass:[self class]]) { |
| return NO; |
| } |
| |
| if (self.representedElementCategory == UICollectionElementCategoryCell) { |
| JSQMessagesCollectionViewLayoutAttributes *layoutAttributes = (JSQMessagesCollectionViewLayoutAttributes *)object; |
| |
| if (![layoutAttributes.messageBubbleFont isEqual:self.messageBubbleFont] |
| || !UIEdgeInsetsEqualToEdgeInsets(layoutAttributes.textViewFrameInsets, self.textViewFrameInsets) |
| || !UIEdgeInsetsEqualToEdgeInsets(layoutAttributes.textViewTextContainerInsets, self.textViewTextContainerInsets) |
| || !CGSizeEqualToSize(layoutAttributes.incomingAvatarViewSize, self.incomingAvatarViewSize) |
| || !CGSizeEqualToSize(layoutAttributes.outgoingAvatarViewSize, self.outgoingAvatarViewSize) |
| || (int)layoutAttributes.messageBubbleContainerViewWidth != (int)self.messageBubbleContainerViewWidth |
| || (int)layoutAttributes.cellTopLabelHeight != (int)self.cellTopLabelHeight |
| || (int)layoutAttributes.messageBubbleTopLabelHeight != (int)self.messageBubbleTopLabelHeight |
| || (int)layoutAttributes.cellBottomLabelHeight != (int)self.cellBottomLabelHeight) { |
| return NO; |
| } |
| } |
| |
| return [super isEqual:object]; |
| } |
| |
| - (NSUInteger)hash |
| { |
| return [self.indexPath hash]; |
| } |
| |
| #pragma mark - NSCopying |
| |
| - (instancetype)copyWithZone:(NSZone *)zone |
| { |
| JSQMessagesCollectionViewLayoutAttributes *copy = [super copyWithZone:zone]; |
| |
| if (copy.representedElementCategory != UICollectionElementCategoryCell) { |
| return copy; |
| } |
| |
| copy.messageBubbleFont = self.messageBubbleFont; |
| copy.messageBubbleContainerViewWidth = self.messageBubbleContainerViewWidth; |
| copy.textViewFrameInsets = self.textViewFrameInsets; |
| copy.textViewTextContainerInsets = self.textViewTextContainerInsets; |
| copy.incomingAvatarViewSize = self.incomingAvatarViewSize; |
| copy.outgoingAvatarViewSize = self.outgoingAvatarViewSize; |
| copy.cellTopLabelHeight = self.cellTopLabelHeight; |
| copy.messageBubbleTopLabelHeight = self.messageBubbleTopLabelHeight; |
| copy.cellBottomLabelHeight = self.cellBottomLabelHeight; |
| |
| return copy; |
| } |
| |
| @end |