blob: 9dcbbbafb95d41e659dc2ee9ee8419a47068117a [file] [log] [blame]
//
// 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