Revision: 15071 http://sourceforge.net/p/skim-app/code/15071 Author: hofman Date: 2025-04-02 16:37:46 +0000 (Wed, 02 Apr 2025) Log Message: ----------- Support draging font from font well
Modified Paths: -------------- trunk/SKFontWell.m Modified: trunk/SKFontWell.m =================================================================== --- trunk/SKFontWell.m 2025-04-02 14:34:27 UTC (rev 15070) +++ trunk/SKFontWell.m 2025-04-02 16:37:46 UTC (rev 15071) @@ -40,6 +40,7 @@ #import "NSGraphics_SKExtensions.h" #import "NSColor_SKExtensions.h" #import "NSObject_SKExtensions.h" +#import "NSImage_SKExtensions.h" #define SKNSFontPanelDescriptorsPboardType @"NSFontPanelDescriptorsPboardType" #define SKNSFontPanelFamiliesPboardType @"NSFontPanelFamiliesPboardType" @@ -257,6 +258,12 @@ } } +#pragma mark NSDraggingSource protocol + +- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context { + return NSDragOperationGeneric; +} + #pragma mark NSDraggingDestination protocol - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender { @@ -287,7 +294,7 @@ @try { if ([type isEqualToString:SKNSFontPanelDescriptorsPboardType]) { - NSData *data = [pboard dataForType:type]; + NSData *data = [pboard dataForType:type] ?: [pboard dataForType:CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag(kUTTagClassNSPboardType, (__bridge CFStringRef)type, NULL))]; NSDictionary *dict = [data isKindOfClass:[NSData class]] ? [NSKeyedUnarchiver unarchiveObjectWithData:data] : nil; if ([dict isKindOfClass:[NSDictionary class]]) { NSArray *fontDescriptors = [dict objectForKey:SKNSFontCollectionFontDescriptors]; @@ -299,7 +306,7 @@ } } } else if ([type isEqualToString:SKNSFontPanelFamiliesPboardType]) { - NSArray *families = [pboard propertyListForType:type]; + NSArray *families = [pboard propertyListForType:type] ?: [pboard propertyListForType:CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag(kUTTagClassNSPboardType, (__bridge CFStringRef)type, NULL))]; NSString *family = ([families isKindOfClass:[NSArray class]] && [families count]) ? [families objectAtIndex:0] : nil; if ([family isKindOfClass:[NSString class]]) droppedFont = [[NSFontManager sharedFontManager] convertFont:[self font] toFamily:family]; @@ -412,6 +419,28 @@ } } +- (BOOL)trackMouse:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag { + BOOL didTrack = [super trackMouse:event inRect:cellFrame ofView:controlView untilMouseUp:flag]; + if (didTrack == NO) { + NSRect bounds = [controlView bounds]; + + NSImage *dragImage = [NSImage bitmapImageWithSize:bounds.size forView:controlView drawingHandler:^(NSRect rect){ + [self drawInteriorWithFrame:rect inView:controlView]; + }]; + + NSDictionary *dict = @{SKNSFontCollectionFontDescriptors: @[[[self font] fontDescriptor]], NSFontSizeAttribute: [NSNumber numberWithDouble:[[self font] pointSize]]}; + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict]; + NSPasteboardItem *item = [[NSPasteboardItem alloc] init]; + [item setData:data forType:CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag(kUTTagClassNSPboardType, (__bridge CFStringRef)SKNSFontPanelDescriptorsPboardType, NULL))]; + + NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:item]; + [dragItem setDraggingFrame:bounds contents:dragImage]; + + [controlView beginDraggingSessionWithItems:@[dragItem] event:event source:(id<NSDraggingSource>)controlView]; + } + return YES; +} + - (NSString *)accessibilitySubrole { return @"AXFontWell"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit