Add code to return the item properly from layoutAttributesForElementsInRect:, add missing NSCopying declaration to NSCollectionViewItem.h, minor cleanup in NSCollectionViewCompositionalLayout

This commit is contained in:
Gregory John Casamento 2022-07-19 09:08:13 -04:00
parent f3672c31e9
commit 5108348ca6
7 changed files with 28 additions and 28 deletions

View file

@ -49,11 +49,6 @@
@class NSMutableDictionary; @class NSMutableDictionary;
@class NSMutableSet; @class NSMutableSet;
@class NSMapTable;
@class NSMutableArray;
@class NSMutableDictionary;
@class NSMutableSet;
@protocol NSPasteboardWriting; @protocol NSPasteboardWriting;
enum enum
@ -439,9 +434,10 @@ APPKIT_EXPORT_CLASS
// Managing items // Managing items
NSMutableArray *_visibleItems; NSMutableArray *_visibleItems;
NSMutableSet *_indexPathsForVisibleItems; NSMutableSet *_indexPathsForVisibleItems;
NSDictionary *_visibleSupplementaryViews; NSMutableDictionary *_visibleSupplementaryViews;
NSMutableSet *_indexPathsForSupplementaryElementsOfKind; NSMutableSet *_indexPathsForSupplementaryElementsOfKind;
NSMutableDictionary *_itemsToAttributes;
// Registered class/nib for item identifier // Registered class/nib for item identifier
NSMapTable *_registeredNibs; NSMapTable *_registeredNibs;
NSMapTable *_registeredClasses; NSMapTable *_registeredClasses;

View file

@ -44,4 +44,3 @@ extern "C" {
#endif /* GS_API_MACOSX */ #endif /* GS_API_MACOSX */
#endif /* _NSCollectionViewCompositionalLayout_h_GNUSTEP_GUI_INCLUDE */ #endif /* _NSCollectionViewCompositionalLayout_h_GNUSTEP_GUI_INCLUDE */

View file

@ -42,7 +42,7 @@
APPKIT_EXPORT_CLASS APPKIT_EXPORT_CLASS
@interface NSCollectionViewItem : NSViewController @interface NSCollectionViewItem : NSViewController <NSCopying>
{ {
IBOutlet NSTextField *textField; IBOutlet NSTextField *textField;
IBOutlet NSImageView *imageView; IBOutlet NSImageView *imageView;

View file

@ -53,6 +53,7 @@ NSCollectionViewSupplementaryElementKind NSCollectionElementKindInterItemGapIndi
@class NSCollectionView; @class NSCollectionView;
@class NSDictionary; @class NSDictionary;
@class NSIndexPath; @class NSIndexPath;
@class NSMutableDictionary;
@class NSNib; @class NSNib;
@class NSSet; @class NSSet;
@ -161,6 +162,7 @@ typedef NSInteger NSCollectionUpdateAction;
{ {
NSCollectionView *_collectionView; // weak NSCollectionView *_collectionView; // weak
BOOL _valid; BOOL _valid;
NSMutableDictionary *_itemsToAttributes;
Class _layoutAttributesClass; Class _layoutAttributesClass;
Class _invalidationContextClass; Class _invalidationContextClass;

View file

@ -130,8 +130,11 @@ static NSString *placeholderItem = nil;
-(void) _initDefaults -(void) _initDefaults
{ {
_itemSize = NSMakeSize(0, 0);
_tileWidth = -1.0;
_draggingSourceOperationMaskForLocal = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy; _draggingSourceOperationMaskForLocal = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy;
_draggingSourceOperationMaskForRemote = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy; _draggingSourceOperationMaskForRemote = NSDragOperationGeneric | NSDragOperationMove | NSDragOperationCopy;
[self _resetItemSize]; [self _resetItemSize];
_content = [[NSArray alloc] init]; _content = [[NSArray alloc] init];
_items = [[NSMutableArray alloc] init]; _items = [[NSMutableArray alloc] init];
@ -145,6 +148,7 @@ static NSString *placeholderItem = nil;
_indexPathsForVisibleItems = [[NSMutableSet alloc] init]; _indexPathsForVisibleItems = [[NSMutableSet alloc] init];
_visibleSupplementaryViews = [[NSMutableDictionary alloc] init]; _visibleSupplementaryViews = [[NSMutableDictionary alloc] init];
_indexPathsForSupplementaryElementsOfKind = [[NSMutableSet alloc] init]; _indexPathsForSupplementaryElementsOfKind = [[NSMutableSet alloc] init];
_itemsToAttributes = [[NSMutableDictionary alloc] init];
// Registered nib/class // Registered nib/class
_registeredNibs = RETAIN([NSMapTable weakToStrongObjectsMapTable]); _registeredNibs = RETAIN([NSMapTable weakToStrongObjectsMapTable]);
@ -441,7 +445,6 @@ static NSString *placeholderItem = nil;
{ {
ASSIGN(_collectionViewLayout, layout); ASSIGN(_collectionViewLayout, layout);
NSLog(@"layout = %@", layout);
[_collectionViewLayout setCollectionView: self]; // weak reference [_collectionViewLayout setCollectionView: self]; // weak reference
[self reloadData]; [self reloadData];
} }
@ -662,9 +665,7 @@ static NSString *placeholderItem = nil;
if (self) if (self)
{ {
_itemSize = NSMakeSize(0, 0); [self _initDefaults];
_tileWidth = -1.0;
if ([aCoder allowsKeyedCoding]) if ([aCoder allowsKeyedCoding])
{ {
if ([aCoder containsValueForKey: NSCollectionViewMinItemSizeKey]) if ([aCoder containsValueForKey: NSCollectionViewMinItemSizeKey])
@ -720,7 +721,6 @@ static NSString *placeholderItem = nil;
[self setCollectionViewLayout: [aCoder decodeObject]]; [self setCollectionViewLayout: [aCoder decodeObject]];
} }
} }
[self _initDefaults];
return self; return self;
} }
@ -1405,6 +1405,9 @@ static NSString *placeholderItem = nil;
[v setFrame: frame]; [v setFrame: frame];
[v setHidden: hidden]; [v setHidden: hidden];
[v setAlphaValue: alpha]; [v setAlphaValue: alpha];
[_itemsToAttributes setObject: attrs
forKey: item];
// NSLog(@"v = %@, a = %@, l = %@", v, attrs, _collectionViewLayout); // NSLog(@"v = %@, a = %@, l = %@", v, attrs, _collectionViewLayout);
[self addSubview: v]; [self addSubview: v];

View file

@ -464,7 +464,7 @@
[attrs setSize: sz]; [attrs setSize: sz];
[attrs setHidden: NO]; [attrs setHidden: NO];
[attrs setAlpha: 1.0]; [attrs setAlpha: 1.0];
return attrs; return attrs;
} }

View file

@ -27,21 +27,14 @@
#import "GSFastEnumeration.h" #import "GSFastEnumeration.h"
@interface NSCollectionViewItem (__NSCollectionViewLayout__) @interface NSCollectionView (__NSCollectionViewLayout__)
- (NSCollectionViewLayoutAttributes *) attrs; - (NSDictionary *) itemsToAttributes;
@end @end
@implementation NSCollectionViewItem (__NSCollectionViewLayout__) @implementation NSCollectionView (__NSCollectionViewLayout__)
- (NSCollectionViewLayoutAttributes *) attrs - (NSDictionary *) itemsToAttributes
{ {
NSCollectionViewLayoutAttributes *attrs = AUTORELEASE([[NSCollectionViewLayoutAttributes alloc] init]); return _itemsToAttributes;
[attrs setFrame: [[self view] frame]];
[attrs setSize: [[self view] frame].size];
[attrs setAlpha: [[self view] alphaValue]];
[attrs setHidden: [[self view] isHidden]];
return attrs;
} }
@end @end
@ -252,6 +245,11 @@
@implementation NSCollectionViewLayout @implementation NSCollectionViewLayout
// Initializers // Initializers
- (void) _initDefaults
{
_itemsToAttributes = [[NSMutableDictionary alloc] init];
}
- (void)invalidateLayout - (void)invalidateLayout
{ {
_valid = NO; _valid = NO;
@ -292,6 +290,7 @@
self = [super init]; self = [super init];
if (self != nil) if (self != nil)
{ {
[self _initDefaults];
} }
return self; return self;
} }
@ -310,6 +309,7 @@
{ {
NSMutableArray *result = [NSMutableArray array]; NSMutableArray *result = [NSMutableArray array];
NSArray *items = [_collectionView visibleItems]; NSArray *items = [_collectionView visibleItems];
NSDictionary *itemsToAttributes = [_collectionView itemsToAttributes];
FOR_IN(NSCollectionViewItem*, i, items) FOR_IN(NSCollectionViewItem*, i, items)
{ {
@ -319,7 +319,7 @@
if (intersects) if (intersects)
{ {
NSCollectionViewLayoutAttributes *a = [i attrs]; NSCollectionViewLayoutAttributes *a = [itemsToAttributes objectForKey: i];
[result addObject: a]; // add item since it intersects [result addObject: a]; // add item since it intersects
} }
} }