| // Copyright 2016-present the Material Components for iOS authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #import "MDCCollectionViewLayoutAttributes.h" |
| |
| #import <CoreGraphics/CoreGraphics.h> |
| |
| @implementation MDCCollectionViewLayoutAttributes |
| |
| - (id)copyWithZone:(NSZone *)zone { |
| MDCCollectionViewLayoutAttributes *attributes = |
| (MDCCollectionViewLayoutAttributes *)[super copyWithZone:zone]; |
| attributes->_editing = _editing; |
| attributes->_shouldShowReorderStateMask = _shouldShowReorderStateMask; |
| attributes->_shouldShowSelectorStateMask = _shouldShowSelectorStateMask; |
| attributes->_shouldShowGridBackground = _shouldShowGridBackground; |
| attributes->_sectionOrdinalPosition = _sectionOrdinalPosition; |
| attributes->_backgroundImage = _backgroundImage; |
| attributes->_backgroundImageViewInsets = _backgroundImageViewInsets; |
| attributes->_isGridLayout = _isGridLayout; |
| attributes->_separatorColor = _separatorColor; |
| attributes->_separatorInset = _separatorInset; |
| attributes->_separatorLineHeight = _separatorLineHeight; |
| attributes->_shouldHideSeparators = _shouldHideSeparators; |
| attributes->_willAnimateCellsOnAppearance = _willAnimateCellsOnAppearance; |
| attributes->_animateCellsOnAppearanceDuration = _animateCellsOnAppearanceDuration; |
| attributes->_animateCellsOnAppearanceDelay = _animateCellsOnAppearanceDelay; |
| return attributes; |
| } |
| |
| - (BOOL)isEqual:(id)object { |
| if (object == self) { |
| return YES; |
| } |
| if (!object || ![[object class] isEqual:[self class]]) { |
| return NO; |
| } |
| |
| // Compare custom properties that affect layout. |
| MDCCollectionViewLayoutAttributes *otherAttrs = (MDCCollectionViewLayoutAttributes *)object; |
| BOOL backgroundImageIdentity = NO; |
| if (self.backgroundImage && otherAttrs.backgroundImage) { |
| backgroundImageIdentity = [self.backgroundImage isEqual:otherAttrs.backgroundImage]; |
| } else if (!self.backgroundImage && !otherAttrs.backgroundImage) { |
| backgroundImageIdentity = YES; |
| } |
| |
| BOOL separatorColorIdentity = NO; |
| if (self.separatorColor && otherAttrs.separatorColor) { |
| separatorColorIdentity = [self.separatorColor isEqual:otherAttrs.separatorColor]; |
| } else if (!self.separatorColor && !otherAttrs.separatorColor) { |
| separatorColorIdentity = YES; |
| } |
| |
| if ((otherAttrs.editing != self.editing) || |
| (otherAttrs.shouldShowReorderStateMask != self.shouldShowReorderStateMask) || |
| (otherAttrs.shouldShowSelectorStateMask != self.shouldShowSelectorStateMask) || |
| (otherAttrs.shouldShowGridBackground != self.shouldShowGridBackground) || |
| (otherAttrs.sectionOrdinalPosition != self.sectionOrdinalPosition) || |
| !backgroundImageIdentity || |
| (!UIEdgeInsetsEqualToEdgeInsets(otherAttrs.backgroundImageViewInsets, |
| self.backgroundImageViewInsets)) || |
| (otherAttrs.isGridLayout != self.isGridLayout) || !separatorColorIdentity || |
| (!UIEdgeInsetsEqualToEdgeInsets(otherAttrs.separatorInset, self.separatorInset)) || |
| (otherAttrs.separatorLineHeight != self.separatorLineHeight) || |
| (otherAttrs.shouldHideSeparators != self.shouldHideSeparators) || |
| (!CGRectEqualToRect(otherAttrs.frame, self.frame))) { |
| return NO; |
| } |
| |
| return [super isEqual:object]; |
| } |
| |
| - (NSUInteger)hash { |
| return (NSUInteger)self.editing ^ (NSUInteger)self.shouldShowReorderStateMask ^ |
| (NSUInteger)self.shouldShowSelectorStateMask ^ (NSUInteger)self.shouldShowGridBackground ^ |
| (NSUInteger)self.sectionOrdinalPosition ^ (NSUInteger)self.backgroundImage ^ |
| (NSUInteger)self.isGridLayout ^ (NSUInteger)self.separatorColor ^ |
| (NSUInteger)self.separatorLineHeight ^ (NSUInteger)self.shouldHideSeparators; |
| } |
| |
| @end |