Revision: 16516
http://sourceforge.net/p/skim-app/code/16516
Author: hofman
Date: 2026-09-21 16:18:53 +0000 (Mon, 21 Sep 2026)
Log Message:
-----------
move SKNPDFAnnotationNote class header and implementation to PDFAnnotation
category files
Modified Paths:
--------------
trunk/SkimNotes/PDFAnnotation_SKNExtensions.h
trunk/SkimNotes/PDFAnnotation_SKNExtensions.m
trunk/SkimNotes/PDFDocument_SKNExtensions.m
trunk/SkimNotes/SkimNotes.h
trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj
trunk/SkimNotes/skimpdf.m
Removed Paths:
-------------
trunk/SkimNotes/SKNPDFAnnotationNote.h
trunk/SkimNotes/SKNPDFAnnotationNote.m
Modified: trunk/SkimNotes/PDFAnnotation_SKNExtensions.h
===================================================================
--- trunk/SkimNotes/PDFAnnotation_SKNExtensions.h 2026-09-21 15:38:28 UTC
(rev 16515)
+++ trunk/SkimNotes/PDFAnnotation_SKNExtensions.h 2026-09-21 16:18:53 UTC
(rev 16516)
@@ -38,8 +38,8 @@
/*!
@header
- @abstract An <code>PDFAnnotation</code> category to manage Skim notes.
- @discussion This header file provides API for an
<code>PDFAnnotation</code> categories to convert Skim note dictionaries to
<code>PDFAnnotations</code> and back.
+ @abstract An <code>PDFAnnotation</code> category and an
<code>PDFAnnotation</code> subclass to manage Skim notes.
+ @discussion This header file provides API for <code>PDFAnnotation</code>
categories and an <code>PDFAnnotation</code> subclass to convert Skim note
dictionaries to <code>PDFAnnotations</code> and back.
*/
#import <Foundation/Foundation.h>
#import <PDFKit/PDFKit.h>
@@ -49,9 +49,15 @@
#ifndef PDFRect
#define PDFRect NSRect
#endif
+#ifndef PDFSize
+#define PDFSize NSSize
+#endif
#ifndef PDFKitPlatformBezierPath
#define PDFKitPlatformBezierPath NSBezierPath
#endif
+#ifndef PDFKitPlatformImage
+#define PDFKitPlatformImage NSImage
+#endif
/*!
@discussion Global string for Free Text note type.
@@ -246,6 +252,24 @@
*/
PDFKIT_EXTERN NSString * const SKNPDFAnnotationFieldNameKey;
+/*!
+ @discussion Global string for annotation text key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationTextKey;
+/*!
+ @discussion Global string for annotation image key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationImageKey;
+/*!
+ @discussion Global string for annotation drawsImage key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationDrawsImageKey;
+
+/*!
+ @discussion Default size of an anchored note.
+*/
+PDFKIT_EXTERN const PDFSize SKNPDFAnnotationNoteSize;
+
/**
@enum SKNWidgetType
@abstract Type of widget annotations.
@@ -471,4 +495,55 @@
#endif
+#pragma mark -
+
+#ifndef PDFKIT_PLATFORM_IOS
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+/*!
+ @abstract A concrete <code>PDFAnnotation</code> subclass representing a
Skim anchored note.
+ @discussion This is a <code>PDFAnnotationText</code> subclass containing
a separate short string value, a longer rich text property, and an image
property.
+*/
+@interface SKNPDFAnnotationNote : PDFAnnotationText
+#pragma clang diagnostic pop
+#else
+@interface SKNPDFAnnotationNote : PDFAnnotation
+#endif
+{
+ NSString *_string;
+ PDFKitPlatformImage *_image;
+ NSAttributedString *_text;
+ BOOL _drawsImage;
+#ifndef PDFKIT_PLATFORM_IOS
+ NSTextStorage *_textStorage;
+ NSArray *_texts;
+#endif
+}
+
+/*!
+ @abstract The rich text of the annotation.
+ @discussion This is the longer rich text contents of the anchored note
annotation. Setting this updates the contents using
<code>updateContents</code>.
+*/
+@property (nonatomic, copy, nullable) NSAttributedString *text;
+
+/*!
+ @abstract The image of the annotation.
+ @discussion
+*/
+@property (nonatomic, strong, nullable) PDFKitPlatformImage *image;
+
+/*!
+ @abstract Whether the annotation should draw the image rather than an
icon.
+ @discussion
+*/
+@property (nonatomic) BOOL drawsImage;
+
+/*!
+ @abstract Synchronizes the contents of the annotation with the string
and text.
+ @discussion This sets the contents to the string value and the text
appended, separated by a double space.
+*/
+- (void)updateContents;
+
+@end
+
NS_ASSUME_NONNULL_END
Modified: trunk/SkimNotes/PDFAnnotation_SKNExtensions.m
===================================================================
--- trunk/SkimNotes/PDFAnnotation_SKNExtensions.m 2026-09-21 15:38:28 UTC
(rev 16515)
+++ trunk/SkimNotes/PDFAnnotation_SKNExtensions.m 2026-09-21 16:18:53 UTC
(rev 16516)
@@ -37,7 +37,6 @@
*/
#import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
#import <tgmath.h>
#ifdef PDFKIT_PLATFORM_IOS
@@ -133,6 +132,12 @@
NSString * const SKNPDFAnnotationWidgetTypeKey = @"widgetType";
NSString * const SKNPDFAnnotationFieldNameKey = @"fieldName";
+NSString * const SKNPDFAnnotationTextKey = @"text";
+NSString * const SKNPDFAnnotationImageKey = @"image";
+NSString * const SKNPDFAnnotationDrawsImageKey = @"drawsImage";
+
+const PDFSize SKNPDFAnnotationNoteSize = {16.0, 16.0};
+
#define SKNSquigglyString @"Squiggly"
static PDFKitPlatformColor *SKNColorFromArray(NSArray *array) {
@@ -270,8 +275,12 @@
#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED <
MAC_OS_X_VERSION_10_12
@interface PDFAnnotation (SKNSierraDeclarations)
- (id)valueForAnnotationKey:(NSString *)key;
+- (BOOL)setValue:(id)value forAnnotationKey:(NSString *)key;
- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context;
@end
+@interface PDFPage (SKNSierraDeclarations)
+- (void)transformContext:(CGContextRef)context forBox:(PDFDisplayBox)box;
+@end
#endif
#if !defined(MAC_OS_X_VERSION_10_13) || MAC_OS_X_VERSION_MAX_ALLOWED <
MAC_OS_X_VERSION_10_13
@@ -283,8 +292,14 @@
@end
#endif
+#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_15
+static inline void drawIcon(CGContextRef context, NSRect bounds,
PDFTextAnnotationIconType iconType);
+#define SKNAppKitVersionNumber10_12 1504
+#define SKNAppKitVersionNumber10_14 1671
#endif
+#endif
+
@implementation PDFAnnotation (SKNExtensions)
char SKNIsSkimNoteKey;
@@ -1665,4 +1680,403 @@
@end
+#pragma mark -
+
+#ifndef PDFKIT_PLATFORM_IOS
+@interface SKNPDFAnnotationNote ()
+@property (nonatomic, readonly) NSTextStorage *mutableText;
+@property (nonatomic, strong, nullable) NSArray *texts;
+@end
#endif
+
+@implementation SKNPDFAnnotationNote
+
+@synthesize text = _text;
+@synthesize image = _image;
+@synthesize drawsImage = _drawsImage;
+#ifndef PDFKIT_PLATFORM_IOS
+@dynamic mutableText;
+@synthesize texts = _texts;
+#endif
+
+- (void)updateContents {
+ NSMutableString *contents = [NSMutableString string];
+ if ([_string length])
+ [contents appendString:_string];
+ if ([_text length]) {
+ [contents appendString:@" "];
+ [contents appendString:[_text string]];
+ }
+ [super setContents:contents];
+}
+
+- (id)initSkimNoteWithProperties:(NSDictionary *)dict{
+ self = [super initSkimNoteWithProperties:dict];
+ if (self) {
+ Class attrStringClass = [NSAttributedString class];
+ Class stringClass = [NSString class];
+ Class imageClass = [PDFKitPlatformImage class];
+ Class dataClass = [NSData class];
+ NSString *aName = [dict objectForKey:SKNPDFAnnotationNameKey];
+ NSAttributedString *aText = [dict
objectForKey:SKNPDFAnnotationTextKey];
+ PDFKitPlatformImage *anImage = [dict
objectForKey:SKNPDFAnnotationImageKey];
+ NSNumber *drawImage = [dict
objectForKey:SKNPDFAnnotationDrawsImageKey];
+ if ([aName isKindOfClass:stringClass] && [self
respondsToSelector:@selector(setValue:forAnnotationKey:)])
+ [self setValue:aName forAnnotationKey:@"/Name"];
+ if ([drawImage respondsToSelector:@selector(boolValue)])
+ [self setDrawsImage:[drawImage boolValue]];
+ else
+ [self setDrawsImage:[[dict objectForKey:SKNPDFAnnotationTypeKey]
isEqualToString:SKNStampString]];
+ if ([anImage isKindOfClass:imageClass])
+ _image = anImage;
+ else if ([anImage isKindOfClass:dataClass])
+ _image = [[PDFKitPlatformImage alloc] initWithData:(NSData
*)anImage];
+ if ([aText isKindOfClass:stringClass])
+ aText = [[NSAttributedString alloc] initWithString:(NSString
*)aText];
+ else if ([aText isKindOfClass:dataClass])
+ aText = [[NSAttributedString alloc] initWithData:(NSData *)aText
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL];
+ if ([aText isKindOfClass:attrStringClass])
+ [self setText:aText];
+ [self updateContents];
+ }
+ return self;
+}
+
+- (NSDictionary *)SkimNoteProperties{
+ NSMutableDictionary *dict = [self genericSkimNoteProperties];
+ [dict setValue:[NSNumber numberWithInteger:[self iconType]]
forKey:SKNPDFAnnotationIconTypeKey];
+ if ([self drawsImage]) {
+ [dict setValue:[NSNumber numberWithBool:YES]
forKey:SKNPDFAnnotationDrawsImageKey];
+ if ([self respondsToSelector:@selector(valueForAnnotationKey:)]) {
+ NSString *name = [self valueForAnnotationKey:@"/Name"];
+ if (name && [[NSSet setWithObjects:@"/Comment", @"/Key", @"/Note",
@"/Help", @"/NewParagraph", @"/Paragraph", @"/Insert", nil]
containsObject:name] == NO)
+ [dict setValue:name forKey:SKNPDFAnnotationNameKey];
+ }
+ }
+ [dict setValue:[self text] forKey:SKNPDFAnnotationTextKey];
+ [dict setValue:[self image] forKey:SKNPDFAnnotationImageKey];
+ return dict;
+}
+
+- (NSString *)type {
+ return SKNNoteString;
+}
+
+- (void)setDrawsImage:(BOOL)drawsImage {
+ _drawsImage = drawsImage;
+ if ([self respondsToSelector:@selector(setValue:forAnnotationKey:)])
+ [self setValue:drawsImage ? @"/Stamp" : @"/Text"
forAnnotationKey:@"/Subtype"];
+}
+
+- (NSString *)string {
+ return _string;
+}
+
+- (void)setString:(NSString *)string {
+ if (_string != string) {
+ _string = [string copy];
+ // update the contents to string + text
+ [self updateContents];
+ }
+}
+
+#ifdef PDFKIT_PLATFORM_IOS
+
+- (void)setText:(NSAttributedString *)text {
+ if (_text != text) {
+ _text = [text copy];
+ // update the contents to string + text
+ [self updateContents];
+ }
+}
+
+- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
+ if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
+ NSRect bounds = [self bounds];
+ CGContextSaveGState(context);
+ [[self page] transformContext:context forBox:box];
+ UIGraphicsPushContext(context);
+ CGContextTranslateCTM(context, CGRectGetMinX(bounds),
CGRectGetMaxY(bounds));
+ CGContextScaleCTM(context, 1.0, -1.0);
+ bounds.origin = CGPointZero;
+ [[self image] drawInRect:bounds];
+ UIGraphicsPopContext(context);
+ CGContextRestoreGState(context);
+ } else {
+ [super drawWithBox:box inContext:context];
+ }
+}
+
+#else
+
+- (void)setText:(NSAttributedString *)text {
+ if ([self mutableText] != text) {
+ // edit the textStorage, this will trigger KVO and update the text
automatically
+ if (text)
+ [_textStorage replaceCharactersInRange:NSMakeRange(0,
[_textStorage length]) withAttributedString:text];
+ else
+ [_textStorage deleteCharactersInRange:NSMakeRange(0, [_textStorage
length])];
+ }
+}
+
+// changes to text are made through textStorage, this allows Skim to provide
edits through AppleScript, which works directly on the textStorage
+// KVO is triggered manually when the textStorage is edited, either through
setText: or through some other means, e.g. through AppleScript
++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
+ if ([key isEqualToString:SKNPDFAnnotationTextKey])
+ return NO;
+ else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return [super automaticallyNotifiesObserversForKey:key];
+#pragma clang diagnostic pop
+}
+
+- (void)textDidChange:(NSNotification *)notification {
+ // texts should be an array of objects wrapping the text of the note, used
by Skim to provide a data source for the children in the outlineView
+ [_texts makeObjectsPerformSelector:@selector(willChangeValueForKey:)
withObject:SKNPDFAnnotationTextKey];
+ // trigger KVO manually
+ [self willChangeValueForKey:SKNPDFAnnotationTextKey];
+ // update the text
+ _text = [[NSAttributedString alloc] initWithAttributedString:_textStorage];
+ [self didChangeValueForKey:SKNPDFAnnotationTextKey];
+ [_texts makeObjectsPerformSelector:@selector(didChangeValueForKey:)
withObject:SKNPDFAnnotationTextKey];
+ // update the contents to string + text
+ [self updateContents];
+}
+
+- (NSTextStorage *)mutableText {
+ if (_textStorage == nil) {
+ _textStorage = [[NSTextStorage alloc] init];
+ [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textDidChange:)
name:NSTextStorageDidProcessEditingNotification object:_textStorage];
+ }
+ return _textStorage;
+}
+
+- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
+ if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
+ CGContextSaveGState(context);
+ [[self page] transformContext:context forBox:box];
+ [NSGraphicsContext saveGraphicsState];
+ [NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithCGContext:context flipped:NO]];
+ [[self image] drawInRect:[self bounds]];
+ [NSGraphicsContext restoreGraphicsState];
+ CGContextRestoreGState(context);
+#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_15
+ } else if ([self hasAppearanceStream] == NO &&
floor(NSAppKitVersionNumber) <= SKNAppKitVersionNumber10_14 &&
floor(NSAppKitVersionNumber) >= SKNAppKitVersionNumber10_12) {
+ // on 10.12 through 10.14 draws based on the type rather than the
/Subtype
+ // as PDFKit does not know type Note we need to draw ourselves
+ // type Text does just draws a dumb filled square anyway
+ NSRect bounds = [self bounds];
+ CGContextSaveGState(context);
+ [[self page] transformContext:context forBox:box];
+ if (NSWidth(bounds) > 2.0 && NSHeight(bounds) > 2.0) {
+ CGContextSetFillColorWithColor(context, [[self color] CGColor]);
+ CGContextSetStrokeColorWithColor(context,
CGColorGetConstantColor(kCGColorBlack));
+ drawIcon(context, bounds, [self iconType]);
+ } else {
+ CGContextSetFillColorWithColor(context,
CGColorGetConstantColor(kCGColorBlack));
+ CGContextFillRect(context, NSRectToCGRect(bounds));
+ }
+ CGContextRestoreGState(context);
+#endif
+ } else {
+ [super drawWithBox:box inContext:context];
+ }
+}
+
+#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_12
+
+- (void)drawWithBox:(PDFDisplayBox)box {
+ if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
+ [NSGraphicsContext saveGraphicsState];
+ [[self page] transformContextForBox:box];
+ [[self image] drawInRect:[self bounds]];
+ [NSGraphicsContext restoreGraphicsState];
+ } else {
+ [super drawWithBox:box];
+ }
+}
+
+#endif
+
+#endif
+
+@end
+
+#if !defined(PDFKIT_PLATFORM_IOS) && (!defined(MAC_OS_X_VERSION_10_15) ||
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_15)
+
+#define KAPPA 0.552284749830793398402251632279597438
+#define KAPPA2 0.265216489839544009215463496859568305
+
+static inline void drawIconComment(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGContextMoveToPoint(context, x + 0.3 * w, y + 0.3 * h - 0.5);
+ CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.3 * h - 0.5);
+ CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.3 * h
- 0.5, x, y + (0.4 - 0.1 * KAPPA) * h - 0.5, x, y + 0.4 * h - 0.5);
+ CGContextAddLineToPoint(context, x, y + 0.9 * h);
+ CGContextAddCurveToPoint(context, x, y + (0.9 + 0.1 * KAPPA) * h, x + (0.1
- 0.1 * KAPPA) * w, y + h, x + 0.1 * w, y + h);
+ CGContextAddLineToPoint(context, x + 0.9 * w, y + h);
+ CGContextAddCurveToPoint(context, x + (0.9 + 0.1 * KAPPA) * w, y + h, x +
w, y + (0.9 + 0.1 * KAPPA) * h, x + w, y + 0.9 * h);
+ CGContextAddLineToPoint(context, x + w, y + 0.4 * h - 0.5);
+ CGContextAddCurveToPoint(context, x + w, y + (0.4 - 0.1 * KAPPA) * h -
0.5, x + (0.9 + 0.1 * KAPPA) * w, y + 0.3 * h - 0.5, x + 0.9 * w, y + 0.3 * h -
0.5);
+ CGContextAddLineToPoint(context, x + 0.5 * w, y + 0.3 * h - 0.5);
+ CGContextAddLineToPoint(context, x + 0.25 * w, y);
+ CGContextClosePath(context);
+ CGContextDrawPath(context, kCGPathFillStroke);
+ x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
+ CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
+ {x + 0.9 * w, y + 0.85 * h},
+ {x + 0.1 * w, y + 0.65 * h},
+ {x + 0.9 * w, y + 0.65 * h},
+ {x + 0.1 * w, y + 0.45 * h},
+ {x + 0.7 * w, y + 0.45 * h}};
+ CGContextSetLineWidth(context, 0.1 * h);
+ CGContextStrokeLineSegments(context, points3, 6);
+}
+
+static inline void drawIconKey(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGPoint points[9] = {{x + 0.55 * w, y + 0.65 * h},
+ {x + w, y + 0.15 * h},
+ {x + w, y},
+ {x + 0.7 * w, y},
+ {x + 0.7 * w, y + 0.15 * h},
+ {x + 0.55 * w, y + 0.15 * h},
+ {x + 0.55 * w, y + 0.3 * h},
+ {x + 0.4 * w, y + 0.3 * h},
+ {x + 0.4 * w, y + 0.45 * h}};
+ CGContextAddLines(context, points, 9);
+ CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.45 * h);
+ CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.45 *
h, x, y + (0.55 - 0.1 * KAPPA) * h, x, y + 0.55 * h);
+ CGContextAddLineToPoint(context, x, y + 0.8 * h);
+ CGContextAddCurveToPoint(context, x, y + (0.8 + 0.2 * KAPPA) * h, x + (0.2
- 0.2 * KAPPA) * w, y + h, x + 0.2 * w, y + h);
+ CGContextAddLineToPoint(context, x + 0.45 * w, y + h);
+ CGContextAddCurveToPoint(context, x + (0.45 + 0.1 * KAPPA) * w, y + h, x +
0.55 * w, y + (0.9 + 0.1 * KAPPA) * h, x + 0.55 * w, y + 0.9 * h);
+ CGContextClosePath(context);
+ CGContextAddEllipseInRect(context, CGRectMake(x + 0.1 * w, y + h - 0.3 *
h, 0.2 * w, 0.2 * h));
+ CGContextDrawPath(context, kCGPathEOFillStroke);
+}
+
+static inline void drawIconNote(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGPoint points1[5] = {{x, y},
+ {x, y + h},
+ {x + w, y + h},
+ {x + w, y + 0.25 * h},
+ {x + 0.75 * w, y}};
+ CGPoint points2[3] = {{x + 0.75 * w, y},
+ {x + 0.75 * w, y + 0.25 * h},
+ {x + w, y + 0.25 * h}};
+ CGContextAddLines(context, points1, 5);
+ CGContextClosePath(context);
+ CGContextAddLines(context, points2, 3);
+ CGContextDrawPath(context, kCGPathFillStroke);
+ x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
+ CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
+ {x + 0.9 * w, y + 0.85 * h},
+ {x + 0.1 * w, y + 0.65 * h},
+ {x + 0.9 * w, y + 0.65 * h},
+ {x + 0.1 * w, y + 0.45 * h},
+ {x + 0.7 * w, y + 0.45 * h}};
+ CGContextSetLineWidth(context, 0.1 * h);
+ CGContextStrokeLineSegments(context, points3, 6);
+}
+
+static inline void drawIconHelp(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGContextMoveToPoint(context, x + 0.275 * w, y + 0.65 * h);
+ CGContextAddCurveToPoint(context, x + 0.275 * w, y + (0.65 + 0.225 *
KAPPA) * h, x + (0.5 - 0.225 * KAPPA) * w, y + 0.875 * h, x + 0.5 * w, y +
0.875 * h);
+ CGContextAddCurveToPoint(context, x + (0.5 + 0.225 * KAPPA) * w, y + 0.875
* h, x + 0.725 * w, y + (0.65 + 0.225 * KAPPA) * h, x + 0.725 * w, y + 0.65 *
h);
+ CGContextAddCurveToPoint(context, x + 0.725 * w, y + (0.65 - 0.225 *
KAPPA2) * h, x + (0.5 + 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * w, y
+ (0.65 - 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * h, x + (0.5 + 0.225
* M_SQRT1_2) * w, y + (0.65 - 0.225 * M_SQRT1_2) * h);
+ CGContextAddLineToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2) * w, y +
(0.825 - 0.575 * M_SQRT1_2) * h);
+ CGContextAddCurveToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2 - 0.125 *
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.575 * M_SQRT1_2 - 0.125 * M_SQRT1_2 *
KAPPA2) * h, x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2 + 0.125 * KAPPA2) * h,
x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2) * h);
+ CGContextAddLineToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 *
M_SQRT1_2) * h);
+ CGContextAddCurveToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 *
M_SQRT1_2 + 0.225 * KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2 - 0.225 *
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.475 * M_SQRT1_2 - 0.225 * M_SQRT1_2 *
KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2) * w, y + (0.825 - 0.475 *
M_SQRT1_2) * h);
+ CGContextAddLineToPoint(context, x + (0.5 + 0.125 * M_SQRT1_2) * w, y +
(0.65 - 0.125 * M_SQRT1_2) * h);
+ CGContextAddCurveToPoint(context,x + (0.5 + 0.125 * M_SQRT1_2 + 0.125 *
M_SQRT1_2 * KAPPA2) * w, y + (0.65 - 0.125 * M_SQRT1_2 + 0.125 * M_SQRT1_2 *
KAPPA2) * h, x + 0.625 * w, y + (0.65 - 0.125 * KAPPA2) * h, x + 0.625 * w, y +
0.65 * h);
+ CGContextAddCurveToPoint(context, x + 0.625 * w, y + (0.65 + 0.125 *
KAPPA) * h, x + (0.5 + 0.125 * KAPPA) * w, y + 0.775 * h, x + 0.5 * w, y +
0.775 * h);
+ CGContextAddCurveToPoint(context, x + (0.5 - 0.125 * KAPPA) * w, y + 0.775
* h, x + 0.375 * w, y + (0.65 + 0.125 * KAPPA) * h, x + 0.375 * w, y + 0.65 *
h);
+ CGContextClosePath(context);
+ CGContextAddEllipseInRect(context, CGRectMake(x + 0.425 * w, y + 0.1 * h,
0.15 * w, 0.15 * h));
+ CGContextAddEllipseInRect(context, NSRectToCGRect(bounds));
+ CGContextClosePath(context);
+ CGContextDrawPath(context, kCGPathEOFillStroke);
+}
+
+static inline void drawIconNewParagraph(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGPoint points1[3] = {{x + 0.1 * w, y + 0.5 * h},
+ {x + 0.5 * w, y + h},
+ {x + 0.9 * w, y + 0.5 * h}};
+ CGContextAddLines(context, points1, 3);
+ CGContextClosePath(context);
+ CGContextDrawPath(context, kCGPathFillStroke);
+ CGContextSetLineCap(context, kCGLineCapRound);
+ CGPoint points2[4] = {{x + 0.1 * w, y},
+ {x + 0.1 * w, y + 0.4 * h},
+ {x + 0.4 * w, y},
+ {x + 0.4 * w, y + 0.4 * h}};
+ CGContextAddLines(context, points2, 4);
+ CGContextMoveToPoint(context, x + 0.6 * w, y);
+ CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.4 * h);
+ CGContextAddLineToPoint(context, x + 0.8 * w, y + 0.4 * h);
+ CGContextAddCurveToPoint(context, x + (0.8 + 0.1 * KAPPA) * w, y + 0.4 *
h, x + 0.9 * w, y + (0.3 + 0.1 * KAPPA) * h, x + 0.9 * w, y + 0.3 * h);
+ CGContextAddCurveToPoint(context, x + 0.9 * w, y + (0.3 - 0.1 * KAPPA) *
h, x + (0.8 + 0.1 * KAPPA) * w, y + 0.2 * h, x + 0.8 * w, y + 0.2 * h);
+ CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.2 * h);
+ CGContextStrokePath(context);
+}
+
+static inline void drawIconParagraph(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGPoint points[8] = {{x + 0.9 * w, y + h},
+ {x + 0.9 * w, y},
+ {x + 0.76 * w, y},
+ {x + 0.76 * w, y + 0.8 * h},
+ {x + 0.63 * w, y + 0.8 * h},
+ {x + 0.63 * w, y},
+ {x + 0.5 * w, y},
+ {x + 0.5 * w, y + 0.5 * h}};
+ CGContextAddLines(context, points, 8);
+ CGContextAddLineToPoint(context, x + 0.35 * w, y + 0.5 * h);
+ CGContextAddCurveToPoint(context, x + (0.35 - 0.25 * KAPPA) * w, y + 0.5 *
h, x + 0.1 * w, y + (0.75 - 0.25 * KAPPA) * h, x + 0.1 * w, y + 0.75 * h);
+ CGContextAddCurveToPoint(context, x + 0.1 * w, y + (0.75 + 0.25 * KAPPA) *
h, x + (0.35 - 0.25 * KAPPA) * w, y + h, x + 0.35 * w, y + h);
+ CGContextClosePath(context);
+ CGContextDrawPath(context, kCGPathFillStroke);
+}
+
+static inline void drawIconInsert(CGContextRef context, NSRect bounds) {
+ bounds = NSInsetRect(bounds, 0.5, 0.5);
+ CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
+ CGContextMoveToPoint(context, x, y);
+ CGContextAddLineToPoint(context, x + 0.5 * w, y + h);
+ CGContextAddLineToPoint(context, x + w, y);
+ CGContextClosePath(context);
+ CGContextDrawPath(context, kCGPathFillStroke);
+}
+
+static inline void drawIcon(CGContextRef context, NSRect bounds,
PDFTextAnnotationIconType iconType) {
+ CGContextSetLineWidth(context, 1.0);
+ CGContextSetLineCap(context, kCGLineCapButt);
+ CGContextSetLineJoin(context, kCGLineJoinRound);
+ CGContextClipToRect(context, NSRectToCGRect(bounds));
+ switch (iconType) {
+ case kPDFTextAnnotationIconComment: drawIconComment(context,
bounds); break;
+ case kPDFTextAnnotationIconKey: drawIconKey(context, bounds);
break;
+ case kPDFTextAnnotationIconNote: drawIconNote(context,
bounds); break;
+ case kPDFTextAnnotationIconHelp: drawIconHelp(context,
bounds); break;
+ case kPDFTextAnnotationIconNewParagraph: drawIconNewParagraph(context,
bounds); break;
+ case kPDFTextAnnotationIconParagraph: drawIconParagraph(context,
bounds); break;
+ case kPDFTextAnnotationIconInsert: drawIconInsert(context,
bounds); break;
+ default: drawIconNote(context,
bounds); break;
+ }
+}
+
+#endif
+
+#endif
Modified: trunk/SkimNotes/PDFDocument_SKNExtensions.m
===================================================================
--- trunk/SkimNotes/PDFDocument_SKNExtensions.m 2026-09-21 15:38:28 UTC (rev
16515)
+++ trunk/SkimNotes/PDFDocument_SKNExtensions.m 2026-09-21 16:18:53 UTC (rev
16516)
@@ -38,7 +38,6 @@
#import "PDFDocument_SKNExtensions.h"
#import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
#import "NSFileManager_SKNExtensions.h"
#import "SKNDefines.h"
Deleted: trunk/SkimNotes/SKNPDFAnnotationNote.h
===================================================================
--- trunk/SkimNotes/SKNPDFAnnotationNote.h 2026-09-21 15:38:28 UTC (rev
16515)
+++ trunk/SkimNotes/SKNPDFAnnotationNote.h 2026-09-21 16:18:53 UTC (rev
16516)
@@ -1,123 +0,0 @@
-//
-// SKNPDFAnnotationNote.h
-// SkimNotes
-//
-// Created by Christiaan Hofman on 6/15/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*!
- @header
- @abstract A concrete <code>PDFAnnotation</code> subclass representing a
Skim anchored note.
- @discussion This header file declares API for a concrete
<code>PDFAnnotation</code> class representing a Skim anchored note.
-*/
-#import <Foundation/Foundation.h>
-#import <PDFKit/PDFKit.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-#ifndef PDFKitPlatformImage
-#define PDFKitPlatformImage NSImage
-#endif
-#ifndef PDFSize
-#define PDFSize NSSize
-#endif
-
-/*!
- @discussion Global string for annotation text key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationTextKey;
-/*!
- @discussion Global string for annotation image key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationImageKey;
-/*!
- @discussion Global string for annotation drawsImage key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationDrawsImageKey;
-
-/*!
- @discussion Default size of an anchored note.
-*/
-PDFKIT_EXTERN const PDFSize SKNPDFAnnotationNoteSize;
-
-#ifndef PDFKIT_PLATFORM_IOS
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-/*!
- @abstract A concrete <code>PDFAnnotation</code> subclass, a subclass of
<code>PDFAnnotationText</code>, representing a Skim anchored note.
- @discussion This is a <code>PDFAnnotationText</code> subclass containing
a separate short string value, a longer rich text property, and an image
property.
-*/
-@interface SKNPDFAnnotationNote : PDFAnnotationText
-#pragma clang diagnostic pop
-#else
-@interface SKNPDFAnnotationNote : PDFAnnotation
-#endif
-{
- NSString *_string;
- PDFKitPlatformImage *_image;
- NSAttributedString *_text;
- BOOL _drawsImage;
-#ifndef PDFKIT_PLATFORM_IOS
- NSTextStorage *_textStorage;
- NSArray *_texts;
-#endif
-}
-
-/*!
- @abstract The rich text of the annotation.
- @discussion This is the longer rich text contents of the anchored note
annotation. Setting this updates the contents using
<code>updateContents</code>.
-*/
-@property (nonatomic, copy, nullable) NSAttributedString *text;
-
-/*!
- @abstract The image of the annotation.
- @discussion
-*/
-@property (nonatomic, strong, nullable) PDFKitPlatformImage *image;
-
-/*!
- @abstract Whether the annotation should draw the image rather than an
icon.
- @discussion
-*/
-@property (nonatomic) BOOL drawsImage;
-
-/*!
- @abstract Synchronizes the contents of the annotation with the string
and text.
- @discussion This sets the contents to the string value and the text
appended, separated by a double space.
-*/
-- (void)updateContents;
-
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/SkimNotes/SKNPDFAnnotationNote.m
===================================================================
--- trunk/SkimNotes/SKNPDFAnnotationNote.m 2026-09-21 15:38:28 UTC (rev
16515)
+++ trunk/SkimNotes/SKNPDFAnnotationNote.m 2026-09-21 16:18:53 UTC (rev
16516)
@@ -1,469 +0,0 @@
-//
-// SKNPDFAnnotationNote.m
-// SkimNotes
-//
-// Created by Christiaan Hofman on 6/15/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "SKNPDFAnnotationNote.h"
-#import "PDFAnnotation_SKNExtensions.h"
-
-NSString * const SKNPDFAnnotationTextKey = @"text";
-NSString * const SKNPDFAnnotationImageKey = @"image";
-NSString * const SKNPDFAnnotationDrawsImageKey = @"drawsImage";
-
-const PDFSize SKNPDFAnnotationNoteSize = {16.0, 16.0};
-
-#ifndef PDFKIT_PLATFORM_IOS
-
-#import <CoreGraphics/CoreGraphics.h>
-
-#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_15
-static inline void drawIcon(CGContextRef context, NSRect bounds,
PDFTextAnnotationIconType iconType);
-
-#define SKNAppKitVersionNumber10_12 1504
-#define SKNAppKitVersionNumber10_14 1671
-
-#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED <
MAC_OS_X_VERSION_10_12
-@interface PDFAnnotation (SKNSierraDeclarations)
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context;
-- (id)valueForAnnotationKey:(NSString *)key;
-- (BOOL)setValue:(id)value forAnnotationKey:(NSString *)key;
-@end
-@interface PDFPage (SKNSierraDeclarations)
-- (void)transformContext:(CGContextRef)context forBox:(PDFDisplayBox)box;
-@end
-#endif
-#endif
-
-@interface SKNPDFAnnotationNote ()
-@property (nonatomic, readonly) NSTextStorage *mutableText;
-@property (nonatomic, strong, nullable) NSArray *texts;
-@end
-
-#endif
-
-@interface PDFAnnotation (SKNPrivateDeclarations)
-- (NSMutableDictionary *)genericSkimNoteProperties;
-@end
-
-@implementation SKNPDFAnnotationNote
-
-@synthesize text = _text;
-@synthesize image = _image;
-@synthesize drawsImage = _drawsImage;
-#ifndef PDFKIT_PLATFORM_IOS
-@dynamic mutableText;
-@synthesize texts = _texts;
-#endif
-
-- (void)updateContents {
- NSMutableString *contents = [NSMutableString string];
- if ([_string length])
- [contents appendString:_string];
- if ([_text length]) {
- [contents appendString:@" "];
- [contents appendString:[_text string]];
- }
- [super setContents:contents];
-}
-
-- (id)initSkimNoteWithProperties:(NSDictionary *)dict{
- self = [super initSkimNoteWithProperties:dict];
- if (self) {
- Class attrStringClass = [NSAttributedString class];
- Class stringClass = [NSString class];
- Class imageClass = [PDFKitPlatformImage class];
- Class dataClass = [NSData class];
- NSString *aName = [dict objectForKey:SKNPDFAnnotationNameKey];
- NSAttributedString *aText = [dict
objectForKey:SKNPDFAnnotationTextKey];
- PDFKitPlatformImage *anImage = [dict
objectForKey:SKNPDFAnnotationImageKey];
- NSNumber *drawImage = [dict
objectForKey:SKNPDFAnnotationDrawsImageKey];
- if ([aName isKindOfClass:stringClass] && [self
respondsToSelector:@selector(setValue:forAnnotationKey:)])
- [self setValue:aName forAnnotationKey:@"/Name"];
- if ([drawImage respondsToSelector:@selector(boolValue)])
- [self setDrawsImage:[drawImage boolValue]];
- else
- [self setDrawsImage:[[dict objectForKey:SKNPDFAnnotationTypeKey]
isEqualToString:SKNStampString]];
- if ([anImage isKindOfClass:imageClass])
- _image = anImage;
- else if ([anImage isKindOfClass:dataClass])
- _image = [[PDFKitPlatformImage alloc] initWithData:(NSData
*)anImage];
- if ([aText isKindOfClass:stringClass])
- aText = [[NSAttributedString alloc] initWithString:(NSString
*)aText];
- else if ([aText isKindOfClass:dataClass])
- aText = [[NSAttributedString alloc] initWithData:(NSData *)aText
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL];
- if ([aText isKindOfClass:attrStringClass])
- [self setText:aText];
- [self updateContents];
- }
- return self;
-}
-
-- (NSDictionary *)SkimNoteProperties{
- NSMutableDictionary *dict = [self genericSkimNoteProperties];
- [dict setValue:[NSNumber numberWithInteger:[self iconType]]
forKey:SKNPDFAnnotationIconTypeKey];
- if ([self drawsImage]) {
- [dict setValue:[NSNumber numberWithBool:YES]
forKey:SKNPDFAnnotationDrawsImageKey];
- if ([self respondsToSelector:@selector(valueForAnnotationKey:)]) {
- NSString *name = [self valueForAnnotationKey:@"/Name"];
- if (name && [[NSSet setWithObjects:@"/Comment", @"/Key", @"/Note",
@"/Help", @"/NewParagraph", @"/Paragraph", @"/Insert", nil]
containsObject:name] == NO)
- [dict setValue:name forKey:SKNPDFAnnotationNameKey];
- }
- }
- [dict setValue:[self text] forKey:SKNPDFAnnotationTextKey];
- [dict setValue:[self image] forKey:SKNPDFAnnotationImageKey];
- return dict;
-}
-
-- (NSString *)type {
- return SKNNoteString;
-}
-
-- (void)setDrawsImage:(BOOL)drawsImage {
- _drawsImage = drawsImage;
- if ([self respondsToSelector:@selector(setValue:forAnnotationKey:)])
- [self setValue:drawsImage ? @"/Stamp" : @"/Text"
forAnnotationKey:@"/Subtype"];
-}
-
-- (NSString *)string {
- return _string;
-}
-
-- (void)setString:(NSString *)string {
- if (_string != string) {
- _string = [string copy];
- // update the contents to string + text
- [self updateContents];
- }
-}
-
-#ifdef PDFKIT_PLATFORM_IOS
-
-- (void)setText:(NSAttributedString *)text {
- if (_text != text) {
- _text = [text copy];
- // update the contents to string + text
- [self updateContents];
- }
-}
-
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
- if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
- NSRect bounds = [self bounds];
- CGContextSaveGState(context);
- [[self page] transformContext:context forBox:box];
- UIGraphicsPushContext(context);
- CGContextTranslateCTM(context, CGRectGetMinX(bounds),
CGRectGetMaxY(bounds));
- CGContextScaleCTM(context, 1.0, -1.0);
- bounds.origin = CGPointZero;
- [[self image] drawInRect:bounds];
- UIGraphicsPopContext(context);
- CGContextRestoreGState(context);
- } else {
- [super drawWithBox:box inContext:context];
- }
-}
-
-#else
-
-- (void)setText:(NSAttributedString *)text {
- if ([self mutableText] != text) {
- // edit the textStorage, this will trigger KVO and update the text
automatically
- if (text)
- [_textStorage replaceCharactersInRange:NSMakeRange(0,
[_textStorage length]) withAttributedString:text];
- else
- [_textStorage deleteCharactersInRange:NSMakeRange(0, [_textStorage
length])];
- }
-}
-
-// changes to text are made through textStorage, this allows Skim to provide
edits through AppleScript, which works directly on the textStorage
-// KVO is triggered manually when the textStorage is edited, either through
setText: or through some other means, e.g. through AppleScript
-+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
- if ([key isEqualToString:SKNPDFAnnotationTextKey])
- return NO;
- else
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- return [super automaticallyNotifiesObserversForKey:key];
-#pragma clang diagnostic pop
-}
-
-- (void)textDidChange:(NSNotification *)notification {
- // texts should be an array of objects wrapping the text of the note, used
by Skim to provide a data source for the children in the outlineView
- [_texts makeObjectsPerformSelector:@selector(willChangeValueForKey:)
withObject:SKNPDFAnnotationTextKey];
- // trigger KVO manually
- [self willChangeValueForKey:SKNPDFAnnotationTextKey];
- // update the text
- _text = [[NSAttributedString alloc] initWithAttributedString:_textStorage];
- [self didChangeValueForKey:SKNPDFAnnotationTextKey];
- [_texts makeObjectsPerformSelector:@selector(didChangeValueForKey:)
withObject:SKNPDFAnnotationTextKey];
- // update the contents to string + text
- [self updateContents];
-}
-
-- (NSTextStorage *)mutableText {
- if (_textStorage == nil) {
- _textStorage = [[NSTextStorage alloc] init];
- [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textDidChange:)
name:NSTextStorageDidProcessEditingNotification object:_textStorage];
- }
- return _textStorage;
-}
-
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
- if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
- CGContextSaveGState(context);
- [[self page] transformContext:context forBox:box];
- [NSGraphicsContext saveGraphicsState];
- [NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithCGContext:context flipped:NO]];
- [[self image] drawInRect:[self bounds]];
- [NSGraphicsContext restoreGraphicsState];
- CGContextRestoreGState(context);
-#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_15
- } else if ([self hasAppearanceStream] == NO &&
floor(NSAppKitVersionNumber) <= SKNAppKitVersionNumber10_14 &&
floor(NSAppKitVersionNumber) >= SKNAppKitVersionNumber10_12) {
- // on 10.12 through 10.14 draws based on the type rather than the
/Subtype
- // as PDFKit does not know type Note we need to draw ourselves
- // type Text does just draws a dumb filled square anyway
- NSRect bounds = [self bounds];
- CGContextSaveGState(context);
- [[self page] transformContext:context forBox:box];
- if (NSWidth(bounds) > 2.0 && NSHeight(bounds) > 2.0) {
- CGContextSetFillColorWithColor(context, [[self color] CGColor]);
- CGContextSetStrokeColorWithColor(context,
CGColorGetConstantColor(kCGColorBlack));
- drawIcon(context, bounds, [self iconType]);
- } else {
- CGContextSetFillColorWithColor(context,
CGColorGetConstantColor(kCGColorBlack));
- CGContextFillRect(context, NSRectToCGRect(bounds));
- }
- CGContextRestoreGState(context);
-#endif
- } else {
- [super drawWithBox:box inContext:context];
- }
-}
-
-#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MIN_REQUIRED <
MAC_OS_X_VERSION_10_12
-
-- (void)drawWithBox:(PDFDisplayBox)box {
- if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image]
!= nil) {
- [NSGraphicsContext saveGraphicsState];
- [[self page] transformContextForBox:box];
- [[self image] drawInRect:[self bounds]];
- [NSGraphicsContext restoreGraphicsState];
- } else {
- [super drawWithBox:box];
- }
-}
-
-#endif
-
-#endif
-
-@end
-
-#if !defined(PDFKIT_PLATFORM_IOS) && (!defined(MAC_OS_X_VERSION_10_15) ||
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_15)
-
-#define KAPPA 0.552284749830793398402251632279597438
-#define KAPPA2 0.265216489839544009215463496859568305
-
-static inline void drawIconComment(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGContextMoveToPoint(context, x + 0.3 * w, y + 0.3 * h - 0.5);
- CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.3 * h - 0.5);
- CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.3 * h
- 0.5, x, y + (0.4 - 0.1 * KAPPA) * h - 0.5, x, y + 0.4 * h - 0.5);
- CGContextAddLineToPoint(context, x, y + 0.9 * h);
- CGContextAddCurveToPoint(context, x, y + (0.9 + 0.1 * KAPPA) * h, x + (0.1
- 0.1 * KAPPA) * w, y + h, x + 0.1 * w, y + h);
- CGContextAddLineToPoint(context, x + 0.9 * w, y + h);
- CGContextAddCurveToPoint(context, x + (0.9 + 0.1 * KAPPA) * w, y + h, x +
w, y + (0.9 + 0.1 * KAPPA) * h, x + w, y + 0.9 * h);
- CGContextAddLineToPoint(context, x + w, y + 0.4 * h - 0.5);
- CGContextAddCurveToPoint(context, x + w, y + (0.4 - 0.1 * KAPPA) * h -
0.5, x + (0.9 + 0.1 * KAPPA) * w, y + 0.3 * h - 0.5, x + 0.9 * w, y + 0.3 * h -
0.5);
- CGContextAddLineToPoint(context, x + 0.5 * w, y + 0.3 * h - 0.5);
- CGContextAddLineToPoint(context, x + 0.25 * w, y);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathFillStroke);
- x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
- CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
- {x + 0.9 * w, y + 0.85 * h},
- {x + 0.1 * w, y + 0.65 * h},
- {x + 0.9 * w, y + 0.65 * h},
- {x + 0.1 * w, y + 0.45 * h},
- {x + 0.7 * w, y + 0.45 * h}};
- CGContextSetLineWidth(context, 0.1 * h);
- CGContextStrokeLineSegments(context, points3, 6);
-}
-
-static inline void drawIconKey(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGPoint points[9] = {{x + 0.55 * w, y + 0.65 * h},
- {x + w, y + 0.15 * h},
- {x + w, y},
- {x + 0.7 * w, y},
- {x + 0.7 * w, y + 0.15 * h},
- {x + 0.55 * w, y + 0.15 * h},
- {x + 0.55 * w, y + 0.3 * h},
- {x + 0.4 * w, y + 0.3 * h},
- {x + 0.4 * w, y + 0.45 * h}};
- CGContextAddLines(context, points, 9);
- CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.45 * h);
- CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.45 *
h, x, y + (0.55 - 0.1 * KAPPA) * h, x, y + 0.55 * h);
- CGContextAddLineToPoint(context, x, y + 0.8 * h);
- CGContextAddCurveToPoint(context, x, y + (0.8 + 0.2 * KAPPA) * h, x + (0.2
- 0.2 * KAPPA) * w, y + h, x + 0.2 * w, y + h);
- CGContextAddLineToPoint(context, x + 0.45 * w, y + h);
- CGContextAddCurveToPoint(context, x + (0.45 + 0.1 * KAPPA) * w, y + h, x +
0.55 * w, y + (0.9 + 0.1 * KAPPA) * h, x + 0.55 * w, y + 0.9 * h);
- CGContextClosePath(context);
- CGContextAddEllipseInRect(context, CGRectMake(x + 0.1 * w, y + h - 0.3 *
h, 0.2 * w, 0.2 * h));
- CGContextDrawPath(context, kCGPathEOFillStroke);
-}
-
-static inline void drawIconNote(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGPoint points1[5] = {{x, y},
- {x, y + h},
- {x + w, y + h},
- {x + w, y + 0.25 * h},
- {x + 0.75 * w, y}};
- CGPoint points2[3] = {{x + 0.75 * w, y},
- {x + 0.75 * w, y + 0.25 * h},
- {x + w, y + 0.25 * h}};
- CGContextAddLines(context, points1, 5);
- CGContextClosePath(context);
- CGContextAddLines(context, points2, 3);
- CGContextDrawPath(context, kCGPathFillStroke);
- x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
- CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
- {x + 0.9 * w, y + 0.85 * h},
- {x + 0.1 * w, y + 0.65 * h},
- {x + 0.9 * w, y + 0.65 * h},
- {x + 0.1 * w, y + 0.45 * h},
- {x + 0.7 * w, y + 0.45 * h}};
- CGContextSetLineWidth(context, 0.1 * h);
- CGContextStrokeLineSegments(context, points3, 6);
-}
-
-static inline void drawIconHelp(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGContextMoveToPoint(context, x + 0.275 * w, y + 0.65 * h);
- CGContextAddCurveToPoint(context, x + 0.275 * w, y + (0.65 + 0.225 *
KAPPA) * h, x + (0.5 - 0.225 * KAPPA) * w, y + 0.875 * h, x + 0.5 * w, y +
0.875 * h);
- CGContextAddCurveToPoint(context, x + (0.5 + 0.225 * KAPPA) * w, y + 0.875
* h, x + 0.725 * w, y + (0.65 + 0.225 * KAPPA) * h, x + 0.725 * w, y + 0.65 *
h);
- CGContextAddCurveToPoint(context, x + 0.725 * w, y + (0.65 - 0.225 *
KAPPA2) * h, x + (0.5 + 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * w, y
+ (0.65 - 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * h, x + (0.5 + 0.225
* M_SQRT1_2) * w, y + (0.65 - 0.225 * M_SQRT1_2) * h);
- CGContextAddLineToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2) * w, y +
(0.825 - 0.575 * M_SQRT1_2) * h);
- CGContextAddCurveToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2 - 0.125 *
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.575 * M_SQRT1_2 - 0.125 * M_SQRT1_2 *
KAPPA2) * h, x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2 + 0.125 * KAPPA2) * h,
x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2) * h);
- CGContextAddLineToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 *
M_SQRT1_2) * h);
- CGContextAddCurveToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 *
M_SQRT1_2 + 0.225 * KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2 - 0.225 *
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.475 * M_SQRT1_2 - 0.225 * M_SQRT1_2 *
KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2) * w, y + (0.825 - 0.475 *
M_SQRT1_2) * h);
- CGContextAddLineToPoint(context, x + (0.5 + 0.125 * M_SQRT1_2) * w, y +
(0.65 - 0.125 * M_SQRT1_2) * h);
- CGContextAddCurveToPoint(context,x + (0.5 + 0.125 * M_SQRT1_2 + 0.125 *
M_SQRT1_2 * KAPPA2) * w, y + (0.65 - 0.125 * M_SQRT1_2 + 0.125 * M_SQRT1_2 *
KAPPA2) * h, x + 0.625 * w, y + (0.65 - 0.125 * KAPPA2) * h, x + 0.625 * w, y +
0.65 * h);
- CGContextAddCurveToPoint(context, x + 0.625 * w, y + (0.65 + 0.125 *
KAPPA) * h, x + (0.5 + 0.125 * KAPPA) * w, y + 0.775 * h, x + 0.5 * w, y +
0.775 * h);
- CGContextAddCurveToPoint(context, x + (0.5 - 0.125 * KAPPA) * w, y + 0.775
* h, x + 0.375 * w, y + (0.65 + 0.125 * KAPPA) * h, x + 0.375 * w, y + 0.65 *
h);
- CGContextClosePath(context);
- CGContextAddEllipseInRect(context, CGRectMake(x + 0.425 * w, y + 0.1 * h,
0.15 * w, 0.15 * h));
- CGContextAddEllipseInRect(context, NSRectToCGRect(bounds));
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathEOFillStroke);
-}
-
-static inline void drawIconNewParagraph(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGPoint points1[3] = {{x + 0.1 * w, y + 0.5 * h},
- {x + 0.5 * w, y + h},
- {x + 0.9 * w, y + 0.5 * h}};
- CGContextAddLines(context, points1, 3);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathFillStroke);
- CGContextSetLineCap(context, kCGLineCapRound);
- CGPoint points2[4] = {{x + 0.1 * w, y},
- {x + 0.1 * w, y + 0.4 * h},
- {x + 0.4 * w, y},
- {x + 0.4 * w, y + 0.4 * h}};
- CGContextAddLines(context, points2, 4);
- CGContextMoveToPoint(context, x + 0.6 * w, y);
- CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.4 * h);
- CGContextAddLineToPoint(context, x + 0.8 * w, y + 0.4 * h);
- CGContextAddCurveToPoint(context, x + (0.8 + 0.1 * KAPPA) * w, y + 0.4 *
h, x + 0.9 * w, y + (0.3 + 0.1 * KAPPA) * h, x + 0.9 * w, y + 0.3 * h);
- CGContextAddCurveToPoint(context, x + 0.9 * w, y + (0.3 - 0.1 * KAPPA) *
h, x + (0.8 + 0.1 * KAPPA) * w, y + 0.2 * h, x + 0.8 * w, y + 0.2 * h);
- CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.2 * h);
- CGContextStrokePath(context);
-}
-
-static inline void drawIconParagraph(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGPoint points[8] = {{x + 0.9 * w, y + h},
- {x + 0.9 * w, y},
- {x + 0.76 * w, y},
- {x + 0.76 * w, y + 0.8 * h},
- {x + 0.63 * w, y + 0.8 * h},
- {x + 0.63 * w, y},
- {x + 0.5 * w, y},
- {x + 0.5 * w, y + 0.5 * h}};
- CGContextAddLines(context, points, 8);
- CGContextAddLineToPoint(context, x + 0.35 * w, y + 0.5 * h);
- CGContextAddCurveToPoint(context, x + (0.35 - 0.25 * KAPPA) * w, y + 0.5 *
h, x + 0.1 * w, y + (0.75 - 0.25 * KAPPA) * h, x + 0.1 * w, y + 0.75 * h);
- CGContextAddCurveToPoint(context, x + 0.1 * w, y + (0.75 + 0.25 * KAPPA) *
h, x + (0.35 - 0.25 * KAPPA) * w, y + h, x + 0.35 * w, y + h);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathFillStroke);
-}
-
-static inline void drawIconInsert(CGContextRef context, NSRect bounds) {
- bounds = NSInsetRect(bounds, 0.5, 0.5);
- CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h =
NSHeight(bounds);
- CGContextMoveToPoint(context, x, y);
- CGContextAddLineToPoint(context, x + 0.5 * w, y + h);
- CGContextAddLineToPoint(context, x + w, y);
- CGContextClosePath(context);
- CGContextDrawPath(context, kCGPathFillStroke);
-}
-
-static inline void drawIcon(CGContextRef context, NSRect bounds,
PDFTextAnnotationIconType iconType) {
- CGContextSetLineWidth(context, 1.0);
- CGContextSetLineCap(context, kCGLineCapButt);
- CGContextSetLineJoin(context, kCGLineJoinRound);
- CGContextClipToRect(context, NSRectToCGRect(bounds));
- switch (iconType) {
- case kPDFTextAnnotationIconComment: drawIconComment(context,
bounds); break;
- case kPDFTextAnnotationIconKey: drawIconKey(context, bounds);
break;
- case kPDFTextAnnotationIconNote: drawIconNote(context,
bounds); break;
- case kPDFTextAnnotationIconHelp: drawIconHelp(context,
bounds); break;
- case kPDFTextAnnotationIconNewParagraph: drawIconNewParagraph(context,
bounds); break;
- case kPDFTextAnnotationIconParagraph: drawIconParagraph(context,
bounds); break;
- case kPDFTextAnnotationIconInsert: drawIconInsert(context,
bounds); break;
- default: drawIconNote(context,
bounds); break;
- }
-}
-
-#endif
Modified: trunk/SkimNotes/SkimNotes.h
===================================================================
--- trunk/SkimNotes/SkimNotes.h 2026-09-21 15:38:28 UTC (rev 16515)
+++ trunk/SkimNotes/SkimNotes.h 2026-09-21 16:18:53 UTC (rev 16516)
@@ -45,4 +45,3 @@
#import <SkimNotes/PDFDocument_SKNExtensions.h>
#import <SkimNotes/PDFAnnotation_SKNExtensions.h>
-#import <SkimNotes/SKNPDFAnnotationNote.h>
Modified: trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj
===================================================================
--- trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj 2026-09-21 15:38:28 UTC
(rev 16515)
+++ trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj 2026-09-21 16:18:53 UTC
(rev 16516)
@@ -39,7 +39,6 @@
/* Begin PBXBuildFile section */
CE0C360629A9361D0056897C /* SKNExtendedAttributeManager.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B630E05675E0000B2E6 /*
SKNExtendedAttributeManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
CE0C360729A9361D0056897C /* PDFAnnotation_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B6F0E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CE0C360829A9361D0056897C /* SKNPDFAnnotationNote.h in Headers
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8B0E0569010000B2E6 /*
SKNPDFAnnotationNote.h */; settings = {ATTRIBUTES = (Public, ); }; };
CE0C360929A9361D0056897C /* NSFileManager_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BD30E05826D0000B2E6 /*
NSFileManager_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
CE0C360A29A9361D0056897C /* PDFDocument_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BE00E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
CE0C360B29A9361D0056897C /* SkimNotes.h in Headers */ = {isa =
PBXBuildFile; fileRef = CEBA2CD60E058CF00000B2E6 /* SkimNotes.h */; settings =
{ATTRIBUTES = (Public, ); }; };
@@ -47,7 +46,6 @@
CE0C360E29A9361D0056897C /* SkimNotes.strings in Resources */ =
{isa = PBXBuildFile; fileRef = CE3907AF0E082C460015B0B7 /* SkimNotes.strings
*/; };
CE0C361029A9361D0056897C /* SKNExtendedAttributeManager.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B640E05675E0000B2E6 /*
SKNExtendedAttributeManager.m */; };
CE0C361129A9361D0056897C /* PDFAnnotation_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.m */; };
- CE0C361229A9361D0056897C /* SKNPDFAnnotationNote.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /*
SKNPDFAnnotationNote.m */; };
CE0C361329A9361D0056897C /* NSFileManager_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /*
NSFileManager_SKNExtensions.m */; };
CE0C361429A9361D0056897C /* PDFDocument_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BE10E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.m */; };
CE0C361529A9361D0056897C /* SKNUtilities.m in Sources */ = {isa
= PBXBuildFile; fileRef = CE37768B0E2FC26100261604 /* SKNUtilities.m */; };
@@ -72,7 +70,6 @@
CE1414281229B8B200C9EBA0 /* NSFileManager_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /*
NSFileManager_SKNExtensions.m */; };
CE1414291229B8B300C9EBA0 /* PDFAnnotation_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.m */; };
CE14142A1229B8B400C9EBA0 /* PDFDocument_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BE10E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.m */; };
- CE14142B1229B8B500C9EBA0 /* SKNPDFAnnotationNote.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /*
SKNPDFAnnotationNote.m */; };
CE1586F429ACB319001ADBCB /* PDFKit.framework in Frameworks */ =
{isa = PBXBuildFile; fileRef = CE1586F329ACB319001ADBCB /* PDFKit.framework */;
};
CE1586F529ACBF95001ADBCB /* PDFKit.framework in Frameworks */ =
{isa = PBXBuildFile; fileRef = CE1586F329ACB319001ADBCB /* PDFKit.framework */;
};
CE1F64E20E34FF7F00E07E76 /* Foundation.framework in Frameworks
*/ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /*
Foundation.framework */; };
@@ -112,8 +109,6 @@
CEBA2B670E05675E0000B2E6 /* SKNExtendedAttributeManager.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B640E05675E0000B2E6 /*
SKNExtendedAttributeManager.m */; };
CEBA2B710E0568430000B2E6 /* PDFAnnotation_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B6F0E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
CEBA2B720E0568430000B2E6 /* PDFAnnotation_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.m */; };
- CEBA2B8D0E0569010000B2E6 /* SKNPDFAnnotationNote.h in Headers
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8B0E0569010000B2E6 /*
SKNPDFAnnotationNote.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CEBA2B8E0E0569010000B2E6 /* SKNPDFAnnotationNote.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /*
SKNPDFAnnotationNote.m */; };
CEBA2BD50E05826D0000B2E6 /* NSFileManager_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BD30E05826D0000B2E6 /*
NSFileManager_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
CEBA2BD60E05826D0000B2E6 /* NSFileManager_SKNExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /*
NSFileManager_SKNExtensions.m */; };
CEBA2BE20E0587EB0000B2E6 /* PDFDocument_SKNExtensions.h in
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BE00E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -255,8 +250,6 @@
CEBA2B640E05675E0000B2E6 /* SKNExtendedAttributeManager.m */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = SKNExtendedAttributeManager.m; sourceTree =
"<group>"; };
CEBA2B6F0E0568430000B2E6 /* PDFAnnotation_SKNExtensions.h */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h;
path = PDFAnnotation_SKNExtensions.h; sourceTree = "<group>"; };
CEBA2B700E0568430000B2E6 /* PDFAnnotation_SKNExtensions.m */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = PDFAnnotation_SKNExtensions.m; sourceTree =
"<group>"; };
- CEBA2B8B0E0569010000B2E6 /* SKNPDFAnnotationNote.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
SKNPDFAnnotationNote.h; sourceTree = "<group>"; };
- CEBA2B8C0E0569010000B2E6 /* SKNPDFAnnotationNote.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= SKNPDFAnnotationNote.m; sourceTree = "<group>"; };
CEBA2BD30E05826D0000B2E6 /* NSFileManager_SKNExtensions.h */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h;
path = NSFileManager_SKNExtensions.h; sourceTree = "<group>"; };
CEBA2BD40E05826D0000B2E6 /* NSFileManager_SKNExtensions.m */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = NSFileManager_SKNExtensions.m; sourceTree =
"<group>"; };
CEBA2BE00E0587EB0000B2E6 /* PDFDocument_SKNExtensions.h */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h;
path = PDFDocument_SKNExtensions.h; sourceTree = "<group>"; };
@@ -475,8 +468,6 @@
CEBA2BE10E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.m */,
CEBA2B6F0E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.h */,
CEBA2B700E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.m */,
- CEBA2B8B0E0569010000B2E6 /*
SKNPDFAnnotationNote.h */,
- CEBA2B8C0E0569010000B2E6 /*
SKNPDFAnnotationNote.m */,
);
name = "Framework PDF Classes";
sourceTree = "<group>";
@@ -569,7 +560,6 @@
files = (
CEBA2B660E05675E0000B2E6 /*
SKNExtendedAttributeManager.h in Headers */,
CEBA2B710E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.h in Headers */,
- CEBA2B8D0E0569010000B2E6 /*
SKNPDFAnnotationNote.h in Headers */,
CEBA2BD50E05826D0000B2E6 /*
NSFileManager_SKNExtensions.h in Headers */,
CE4E365E2B221B2000A609FB /* SKNDefines.h in
Headers */,
CEBA2BE20E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.h in Headers */,
@@ -585,7 +575,6 @@
files = (
CE0C360629A9361D0056897C /*
SKNExtendedAttributeManager.h in Headers */,
CE0C360729A9361D0056897C /*
PDFAnnotation_SKNExtensions.h in Headers */,
- CE0C360829A9361D0056897C /*
SKNPDFAnnotationNote.h in Headers */,
CE0C360929A9361D0056897C /*
NSFileManager_SKNExtensions.h in Headers */,
CE4E36602B221B2200A609FB /* SKNDefines.h in
Headers */,
CE0C360A29A9361D0056897C /*
PDFDocument_SKNExtensions.h in Headers */,
@@ -883,7 +872,6 @@
files = (
CEBA2B670E05675E0000B2E6 /*
SKNExtendedAttributeManager.m in Sources */,
CEBA2B720E0568430000B2E6 /*
PDFAnnotation_SKNExtensions.m in Sources */,
- CEBA2B8E0E0569010000B2E6 /*
SKNPDFAnnotationNote.m in Sources */,
CEBA2BD60E05826D0000B2E6 /*
NSFileManager_SKNExtensions.m in Sources */,
CEBA2BE30E0587EB0000B2E6 /*
PDFDocument_SKNExtensions.m in Sources */,
CE37768D0E2FC26100261604 /* SKNUtilities.m in
Sources */,
@@ -896,7 +884,6 @@
files = (
CE0C361029A9361D0056897C /*
SKNExtendedAttributeManager.m in Sources */,
CE0C361129A9361D0056897C /*
PDFAnnotation_SKNExtensions.m in Sources */,
- CE0C361229A9361D0056897C /*
SKNPDFAnnotationNote.m in Sources */,
CE0C361329A9361D0056897C /*
NSFileManager_SKNExtensions.m in Sources */,
CE0C361429A9361D0056897C /*
PDFDocument_SKNExtensions.m in Sources */,
CE0C361529A9361D0056897C /* SKNUtilities.m in
Sources */,
@@ -923,7 +910,6 @@
CE1414281229B8B200C9EBA0 /*
NSFileManager_SKNExtensions.m in Sources */,
CE1414291229B8B300C9EBA0 /*
PDFAnnotation_SKNExtensions.m in Sources */,
CE14142A1229B8B400C9EBA0 /*
PDFDocument_SKNExtensions.m in Sources */,
- CE14142B1229B8B500C9EBA0 /*
SKNPDFAnnotationNote.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: trunk/SkimNotes/skimpdf.m
===================================================================
--- trunk/SkimNotes/skimpdf.m 2026-09-21 15:38:28 UTC (rev 16515)
+++ trunk/SkimNotes/skimpdf.m 2026-09-21 16:18:53 UTC (rev 16516)
@@ -41,7 +41,6 @@
#import "NSFileManager_SKNExtensions.h"
#import "PDFDocument_SKNExtensions.h"
#import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
#define SKNAppKitVersionNumber11_0 2022
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