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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit