Revision: 16539
http://sourceforge.net/p/skim-app/code/16539
Author: hofman
Date: 2026-09-26 21:49:13 +0000 (Sat, 26 Sep 2026)
Log Message:
-----------
remove categories for legacy PDFAnnotation subclasses
Modified Paths:
--------------
trunk/PDFPage_SKExtensions.m
trunk/Skim.xcodeproj/project.pbxproj
Removed Paths:
-------------
trunk/PDFAnnotationButtonWidget_SKExtensions.h
trunk/PDFAnnotationButtonWidget_SKExtensions.m
trunk/PDFAnnotationChoiceWidget_SKExtensions.h
trunk/PDFAnnotationChoiceWidget_SKExtensions.m
trunk/PDFAnnotationCircle_SKExtensions.h
trunk/PDFAnnotationCircle_SKExtensions.m
trunk/PDFAnnotationFreeText_SKExtensions.h
trunk/PDFAnnotationFreeText_SKExtensions.m
trunk/PDFAnnotationInk_SKExtensions.h
trunk/PDFAnnotationInk_SKExtensions.m
trunk/PDFAnnotationLine_SKExtensions.h
trunk/PDFAnnotationLine_SKExtensions.m
trunk/PDFAnnotationLink_SKExtensions.h
trunk/PDFAnnotationLink_SKExtensions.m
trunk/PDFAnnotationMarkup_SKExtensions.h
trunk/PDFAnnotationMarkup_SKExtensions.m
trunk/PDFAnnotationSquare_SKExtensions.h
trunk/PDFAnnotationSquare_SKExtensions.m
trunk/PDFAnnotationStamp_SKExtensions.h
trunk/PDFAnnotationStamp_SKExtensions.m
trunk/PDFAnnotationTextWidget_SKExtensions.h
trunk/PDFAnnotationTextWidget_SKExtensions.m
trunk/PDFAnnotationText_SKExtensions.h
trunk/PDFAnnotationText_SKExtensions.m
Deleted: trunk/PDFAnnotationButtonWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationButtonWidget_SKExtensions.h 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationButtonWidget_SKExtensions.h 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationButtonWidget_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationButtonWidget(SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationButtonWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationButtonWidget_SKExtensions.m 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationButtonWidget_SKExtensions.m 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,85 +0,0 @@
-//
-// PDFAnnotationButtonWidget_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 "PDFAnnotationButtonWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationButtonWidget (SKExtensions)
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
- [fdfString appendFDFName:SKFDFFieldTypeButton];
- [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
- [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @""
lossyStringUsingEncoding:NSISOLatin1StringEncoding]
stringByEscapingParenthesis]];
- [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
- [fdfString appendFormat:@"/%@", [self state] == NSControlStateValueOn ?
[self onStateValue] : @"Off"];
- return fdfString;
-}
-
-- (id)objectValue {
- return [NSNumber numberWithInteger:[self state]];
-}
-
-- (void)setObjectValue:(id)newObjectValue {
- [self setState:[newObjectValue integerValue]];
-}
-
-- (SKNPDFWidgetType)widgetType {
- return kSKNPDFWidgetTypeButton;
-}
-
-- (BOOL)isWidget {
- return [self controlType] == kPDFWidgetCheckBoxControl || [self
controlType] == kPDFWidgetRadioButtonControl;
-}
-
-- (BOOL)isLink { return NO; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- if ([self controlType] != kPDFWidgetCheckBoxControl && [self controlType]
!= kPDFWidgetRadioButtonControl)
- return nil;
- static NSSet *keys = nil;
- if (keys == nil)
- keys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationStateKey, nil];
- return keys;
-}
-
-@end
Deleted: trunk/PDFAnnotationChoiceWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationChoiceWidget_SKExtensions.h 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationChoiceWidget_SKExtensions.h 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationChoiceWidget_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationChoiceWidget (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationChoiceWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationChoiceWidget_SKExtensions.m 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationChoiceWidget_SKExtensions.m 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,81 +0,0 @@
-//
-// PDFAnnotationChoiceWidget_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 "PDFAnnotationChoiceWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationChoiceWidget (SKExtensions)
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
- [fdfString appendFDFName:SKFDFFieldTypeChoice];
- [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
- [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @""
lossyStringUsingEncoding:NSISOLatin1StringEncoding]
stringByEscapingParenthesis]];
- [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
- [fdfString appendFormat:@"(%@)", [[[self stringValue] ?: @""
lossyStringUsingEncoding:NSISOLatin1StringEncoding]
stringByEscapingParenthesis]];
- return fdfString;
-}
-
-- (id)objectValue {
- return [self stringValue];
-}
-
-- (void)setObjectValue:(id)newObjectValue {
- [self setStringValue:newObjectValue];
-}
-
-- (SKNPDFWidgetType)widgetType {
- return kSKNPDFWidgetTypeChoice;
-}
-
-- (BOOL)isWidget { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *keys = nil;
- if (keys == nil)
- keys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationStringValueKey,
nil];
- return keys;
-}
-
-@end
Deleted: trunk/PDFAnnotationCircle_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationCircle_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationCircle_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,48 +0,0 @@
-//
-// PDFAnnotationCircle_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationCircle (SKExtensions)
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationCircle_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationCircle_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationCircle_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,164 +0,0 @@
-//
-// PDFAnnotationCircle_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 "PDFAnnotationCircle_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-@implementation PDFAnnotationCircle (SKExtensions)
-
-- (void)setDefaultSkimNoteProperties {
- NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
- NSColor *color = [sud colorForKey:SKCircleNoteInteriorColorKey];
- if ([color alphaComponent] > 0.0)
- [self setInteriorColor:color];
- [self setColor:[sud colorForKey:SKCircleNoteColorKey]];
- [[self border] setLineWidth:[sud floatForKey:SKCircleNoteLineWidthKey]];
- [[self border] setDashPattern:[sud
arrayForKey:SKCircleNoteDashPatternKey]];
- [[self border] setStyle:[sud floatForKey:SKCircleNoteLineStyleKey]];
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- CGFloat r, g, b, a = 0.0;
- [[[self interiorColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace]
getRed:&r green:&g blue:&b alpha:&a];
- if (a > 0.0) {
- [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
- [fdfString appendFormat:@"[%f %f %f]", r, g, b];
- }
- return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isShape { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
- if ([super hitTest:point] == NO)
- return NO;
-
- NSRect bounds = [self bounds];
- CGFloat dx = 2.0 * (point.x - NSMidX(bounds)) / NSWidth(bounds);
- CGFloat dy = 2.0 * (point.y - NSMidY(bounds)) / NSHeight(bounds);
- if (dx * dx + dy * dy > 1.0)
- return NO;
-
- if ([self interiorColor])
- return YES;
-
- CGFloat delta = fmax(8.0, [self lineWidth]);
- if (NSWidth(bounds) <= 2.0 * delta || NSHeight(bounds) <= 2.0 * delta)
- return YES;
-
- bounds = NSInsetRect(bounds, delta, delta);
- dx = 2.0 * (point.x - NSMidX(bounds)) / NSWidth(bounds);
- dy = 2.0 * (point.y - NSMidY(bounds)) / NSHeight(bounds);
- return dx * dx + dy * dy >= 1.0;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
- // this calculation is roughly the inverse of -[PDFView
addOtherAnnotationWithType:selection:point:]
- NSRect bounds = NSInsetRect([self bounds], [self lineWidth] - 1.0, [self
lineWidth] - 1.0);
- CGFloat t, w = NSWidth(bounds), h = NSWidth(bounds);
- if (w <= 0.0 || h <= 0.0)
- return;
- t = 0.5 * w * h * (w + h - sqrt(2.0 * w * h)) / (w * w + h * h);
- bounds = NSInsetRect(bounds, t, t);
- NSString *selString = [[page selectionForRect:bounds] cleanedString];
- if ([selString length])
- [self setString:selString];
-}
-
-- (NSString *)colorDefaultKey { return SKCircleNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKCircleNoteInteriorColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKCircleNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKCircleNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKCircleNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *circleKeys = nil;
- if (circleKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
- circleKeys = [mutableKeys copy];
- }
- return circleKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customCircleScriptingKeys = nil;
- if (customCircleScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
- customCircleScriptingKeys = [customKeys copy];
- }
- return customCircleScriptingKeys;
-}
-
-- (NSColor *)scriptingInteriorColor {
- return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
- if ([self isEditable]) {
- [self setInteriorColor:newColor];
- }
-}
-
-@end
Deleted: trunk/PDFAnnotationFreeText_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationFreeText_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationFreeText_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,56 +0,0 @@
-//
-// PDFAnnotationFreeText_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationScriptingFontColorKey;
-extern NSString * const SKPDFAnnotationScriptingAlignmentKey;
-
-@interface PDFAnnotationFreeText (SKExtensions)
-
-@property (nonatomic, nullable, copy) NSFont *fontName;
-@property (nonatomic) CGFloat fontSize;
-@property (nonatomic, nullable, copy) NSColor *scriptingFontColor;
-@property (nonatomic) NSInteger scriptingAlignment;
-
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationFreeText_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationFreeText_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationFreeText_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,209 +0,0 @@
-//
-// PDFAnnotationFreeText_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 "PDFAnnotationFreeText_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-NSString * const SKPDFAnnotationScriptingFontColorKey = @"scriptingFontColor";
-NSString * const SKPDFAnnotationScriptingAlignmentKey = @"scriptingAlignment";
-
-
-@implementation PDFAnnotationFreeText (SKExtensions)
-
-static inline NSTextAlignment textAlignmentFromAlignment(NSInteger alignment) {
- switch (alignment) {
- case 0: return NSTextAlignmentLeft;
- case 1: return NSTextAlignmentRight;
- case 2: return NSTextAlignmentCenter;
- default: return NSTextAlignmentLeft;
- }
-}
-
-- (void)setDefaultSkimNoteProperties {
- NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
- NSFont *font = [sud fontForNameKey:SKFreeTextNoteFontNameKey
sizeKey:SKFreeTextNoteFontSizeKey];
- if (font)
- [self setFont:font];
- [self setColor:[sud colorForKey:SKFreeTextNoteColorKey]];
- [self setFontColor:[sud colorForKey:SKFreeTextNoteFontColorKey]];
- [self setAlignment:textAlignmentFromAlignment([sud
integerForKey:SKFreeTextNoteAlignmentKey])];
- PDFBorder *border = [[PDFBorder alloc] init];
- [border setLineWidth:[sud floatForKey:SKFreeTextNoteLineWidthKey]];
- [border setDashPattern:[sud arrayForKey:SKFreeTextNoteDashPatternKey]];
- [border setStyle:[sud floatForKey:SKFreeTextNoteLineStyleKey]];
- if ([border lineWidth] > 0.0) {
- [self setBorder:border];
- } else {
- [self setBorder:nil];
- // on 10.12 you can't set the border to nil, so set its lineWidth to 0
- [[self border] setLineWidth:0.0];
- }
-}
-
-static inline NSString *alignmentStyleKeyword(NSTextAlignment alignment) {
- switch (alignment) {
- case NSTextAlignmentLeft: return @"left";
- case NSTextAlignmentRight: return @"right";
- case NSTextAlignmentCenter: return @"center";
- default: return @"left";
- }
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- CGFloat r = 0.0, g = 0.0, b = 0.0, a;
- [[[self fontColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace]
getRed:&r green:&g blue:&b alpha:&a];
- [fdfString appendFDFName:SKFDFDefaultAppearanceKey];
- [fdfString appendFormat:@"(/%@ %f Tf %f %f %f rg)", [self fontName], [self
fontSize], r, g, b];
- [fdfString appendFDFName:SKFDFDefaultStyleKey];
- [[[self fontColor] colorUsingColorSpace:[NSColorSpace sRGBColorSpace]]
getRed:&r green:&g blue:&b alpha:&a];
- [fdfString appendFormat:@"(font: %@ %fpt; text-align:%@;
color:#%.2x%.2x%.2x)", [self fontName], [self fontSize],
alignmentStyleKeyword([self alignment]), (unsigned int)(255*r), (unsigned
int)(255*g), (unsigned int)(255*b)];
- [fdfString appendFDFName:SKFDFAnnotationAlignmentKey];
- [fdfString appendFormat:@" %ld",
(long)SKFDFFreeTextAnnotationAlignmentFromPDFFreeTextAnnotationAlignment([self
alignment])];
- return fdfString;
-}
-
-- (BOOL)isText { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (NSString *)colorDefaultKey { return SKFreeTextNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKFreeTextNoteFontColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKFreeTextNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKFreeTextNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKFreeTextNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *freeTextKeys = nil;
- if (freeTextKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys addObject:SKNPDFAnnotationFontKey];
- [mutableKeys addObject:SKNPDFAnnotationFontColorKey];
- [mutableKeys addObject:SKNPDFAnnotationAlignmentKey];
- freeTextKeys = [mutableKeys copy];
- }
- return freeTextKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customFreeTextScriptingKeys = nil;
- if (customFreeTextScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKNPDFAnnotationFontNameKey];
- [customKeys addObject:SKNPDFAnnotationFontSizeKey];
- [customKeys addObject:SKPDFAnnotationScriptingFontColorKey];
- [customKeys addObject:SKPDFAnnotationScriptingAlignmentKey];
- customFreeTextScriptingKeys = [customKeys copy];
- }
- return customFreeTextScriptingKeys;
-}
-
-- (id)textContents {
- NSTextStorage *textContents = [super textContents];
- if ([self font])
- [textContents addAttribute:NSFontAttributeName value:[self font]
range:NSMakeRange(0, [textContents length])];
- if ([self fontColor])
- [textContents addAttribute:NSForegroundColorAttributeName value:[self
fontColor] range:NSMakeRange(0, [textContents length])];
- return textContents;
-}
-
-- (NSString *)fontName {
- return [[self font] fontName];
-}
-
-- (void)setFontName:(NSString *)fontName {
- if ([self isEditable]) {
- NSFont *font = [NSFont fontWithName:fontName size:[[self font]
pointSize]];
- if (font)
- [self setFont:font];
- }
-}
-
-- (CGFloat)fontSize {
- return [[self font] pointSize];
-}
-
-- (void)setFontSize:(CGFloat)pointSize {
- if ([self isEditable]) {
- NSFont *font = [NSFont fontWithName:[[self font] fontName]
size:pointSize];
- if (font)
- [self setFont:font];
- }
-}
-
-- (NSColor *)scriptingFontColor {
- return [self fontColor];
-}
-
-- (void)setScriptingFontColor:(NSColor *)newScriptingFontColor {
- if ([self isEditable]) {
- [self setFontColor:newScriptingFontColor];
- }
-}
-
-- (NSInteger)scriptingAlignment {
- NSTextAlignment align = [self alignment];
- return align == 2 ? NSTextAlignmentCenter : align == 1 ?
NSTextAlignmentRight : NSTextAlignmentLeft;
-}
-
-- (void)setScriptingAlignment:(NSInteger)alignment {
- if ([self isEditable]) {
- [self setAlignment:alignment == NSTextAlignmentCenter ? 2 : alignment
== NSTextAlignmentRight ? 1 : 0];
- }
-}
-
-@end
Deleted: trunk/PDFAnnotationInk_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationInk_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationInk_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,50 +0,0 @@
-//
-// PDFAnnotationInk_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 9/14/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationBezierPathsKey;
-extern NSString * const SKPDFAnnotationScriptingPointListsKey;
-
-@interface PDFAnnotationInk (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationInk_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationInk_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationInk_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,339 +0,0 @@
-//
-// PDFAnnotationInk_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 9/14/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 "PDFAnnotationInk_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "NSShadow_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "PDFView_SKExtensions.h"
-
-NSString * const SKPDFAnnotationBezierPathsKey = @"bezierPaths";
-NSString * const SKPDFAnnotationScriptingPointListsKey =
@"scriptingPointLists";
-
-@implementation PDFAnnotationInk (SKExtensions)
-
-static CGAffineTransform (*CGContextGetBaseCTM_func)(CGContextRef) = NULL;
-
-+ (void)load {
- CGContextGetBaseCTM_func =
(typeof(CGContextGetBaseCTM_func))CFBundleGetFunctionPointerForName(CFBundleGetBundleWithIdentifier(CFSTR("com.apple.CoreGraphics")),
CFSTR("CGContextGetBaseCTM"));
-}
-
-- (void)setDefaultSkimNoteProperties {
- NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
- [self setColor:[sud colorForKey:SKInkNoteColorKey]];
- PDFBorder *border = [[PDFBorder alloc] init];
- [border setLineWidth:[sud floatForKey:SKInkNoteLineWidthKey]];
- [border setDashPattern:[sud arrayForKey:SKInkNoteDashPatternKey]];
- [border setStyle:[sud floatForKey:SKInkNoteLineStyleKey]];
- [self setBorder:[border lineWidth] > 0.0 ? border : nil];
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- NSPoint point;
- NSInteger i, iMax;
- NSRect bounds = [self bounds];
- [fdfString appendFDFName:SKFDFAnnotationInkListKey];
- [fdfString appendString:@"["];
- for (NSBezierPath *path in [self paths]) {
- iMax = [path elementCount];
- [fdfString appendString:@"["];
- for (i = 0; i < iMax; i++) {
- point = [path associatedPointForElementAtIndex:i];
- [fdfString appendFormat:@"%f %f ", point.x + NSMinX(bounds),
point.y + NSMinY(bounds)];
- }
- [fdfString appendString:@"]"];
- }
- [fdfString appendString:@"]"];
- return fdfString;
-}
-
-- (BOOL)isInk { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
- if ([super hitTest:point] == NO)
- return NO;
-
- CGFloat delta = fmax(4.0, 0.5 * [self lineWidth]);
-
- point = SKSubstractPoints(point, [self bounds].origin);
-
- for (NSBezierPath *path in [self paths]) {
-
- if (NSPointInRect(point, NSInsetRect([path nonEmptyBounds], -delta,
-delta))) {
-
- NSBezierPathElement elt;
- NSPoint prevPoint, nextPoint = NSZeroPoint, points[3];
- NSUInteger i, iMax = [path elementCount];
-
- for (i = 0; i < iMax; i++) {
-
- prevPoint = nextPoint;
- elt = [path elementAtIndex:i associatedPoints:points];
-
- if (elt == NSCurveToBezierPathElement) {
- NSPoint min = prevPoint, max = prevPoint;
- NSBezierPath *flattenedPath;
- NSUInteger j, jMax;
-
- for (j = 0; j < 3; j++) {
- min.x = fmin(min.x, points[j].x);
- min.y = fmin(min.y, points[j].y);
- max.x = fmax(max.x, points[j].x);
- max.y = fmax(max.y, points[j].y);
- }
- if (point.x < min.x - delta || point.y < min.y - delta ||
point.x > max.x + delta || point.y > max.y + delta) {
- nextPoint = points[2];
- } else {
- flattenedPath = [NSBezierPath bezierPath];
- [flattenedPath moveToPoint:prevPoint];
- [flattenedPath curveToPoint:points[0]
controlPoint1:points[1] controlPoint2:points[2]];
- flattenedPath = [flattenedPath
bezierPathByFlatteningPath];
- jMax = [flattenedPath elementCount];
- for (j = 1; j < jMax; j++) {
- prevPoint = nextPoint;
- nextPoint = [flattenedPath
associatedPointForElementAtIndex:j];
- if (SKPointNearLineFromPointToPoint(point,
prevPoint, nextPoint, delta))
- return YES;
- }
- }
- } else {
- nextPoint = points[0];
- if (elt != NSMoveToBezierPathElement &&
SKPointNearLineFromPointToPoint(point, prevPoint, nextPoint, delta))
- return YES;
- }
-
- }
-
- }
-
- }
-
- return NO;
-}
-
-- (void)drawShadowWithUnitWidth:(CGFloat)unitWidth
inContext:(CGContextRef)context {
- NSRect bounds = [self bounds];
- CGFloat r = fmin(2.0, 2.0 * unitWidth);
- CGRect rect = NSRectToCGRect(NSInsetRect(bounds, 2.0 * r, 2.0 * r));
- CGAffineTransform t = CGAffineTransformConcat(CGContextGetCTM(context),
CGAffineTransformInvert(CGContextGetBaseCTM_func(context)));
- r = fabs(CGSizeApplyAffineTransform(CGSizeMake(r, r), t).height);
- t = CGAffineTransformMakeTranslation(NSMinX(bounds), NSMinY(bounds));
- CGMutablePathRef path = CGPathCreateMutable();
- for (NSBezierPath *aPath in [self paths])
- [aPath addToCGPath:path transform:&t];
- CGContextSaveGState(context);
- CGContextSetAlpha(context, [[self color] alphaComponent]);
- CGContextBeginTransparencyLayerWithRect(context, rect, NULL);
- CGContextSetLineWidth(context, [self lineWidth]);
- if ([self borderStyle] == kPDFBorderStyleDashed) {
- NSArray *dashPattern = [self dashPattern];
- NSUInteger i, count = [dashPattern count];
- CGFloat pattern[count];
- for (i = 0; i < count; i++)
- pattern[i] = [[dashPattern objectAtIndex:i] doubleValue];
- CGContextSetLineDash(context, 0.0, pattern, count);
- CGContextSetLineCap(context, kCGLineCapButt);
- } else {
- CGContextSetLineCap(context, kCGLineCapRound);
- }
- CGContextSetShadow(context, CGSizeMake(0.0, -r), r);
- CGContextAddPath(context, path);
- CGContextStrokePath(context);
- CGContextSetShadowWithColor(context, CGSizeZero, 0.0, NULL);
- CGContextSetBlendMode(context, kCGBlendModeClear);
- CGContextAddPath(context, path);
- CGContextStrokePath(context);
- CGContextEndTransparencyLayer(context);
- CGContextRestoreGState(context);
- CGPathRelease(path);
-}
-
-- (void)drawFallbackShadowWithUnitWidth:(CGFloat)unitWidth
inContext:(CGContextRef)context {
- CGFloat r = fmin(2.0 / unitWidth, 2.0);
- NSSize offset = NSZeroSize;
- switch ([[self page] rotation]) {
- case 0: offset.height = -r; break;
- case 90: offset.width = r; break;
- case 180: offset.height = r; break;
- case 270: offset.width = -r; break;
- default: offset.height = -r; break;
- }
- NSRect bounds = [self bounds];
- NSRect rect = NSIntersectionRect(NSOffsetRect(NSInsetRect(bounds, -r *
unitWidth, -r * unitWidth), offset.width * unitWidth, offset.height *
unitWidth), NSRectFromCGRect(CGContextGetClipBoundingBox(context)));
- if (NSIsEmptyRect(rect) == NO) {
- NSRect imgRect = NSMakeRect(0.0, 0.0, ceil(NSWidth(rect) / unitWidth),
ceil(NSHeight(rect) / unitWidth));
- rect.size = NSMakeSize(NSWidth(imgRect) * unitWidth, NSHeight(imgRect)
* unitWidth);
- NSImage *image = [NSImage imageWithSize:imgRect.size flipped:NO
drawingHandler:^(NSRect dstRect){
- NSAffineTransform *transform = [NSAffineTransform transform];
- [transform scaleBy:1.0 / unitWidth];
- [transform translateXBy:NSMinX(bounds) - NSMinX(rect)
yBy:NSMinY(bounds) - NSMinY(rect)];
- [transform concat];
- NSBezierPath *path = [NSBezierPath bezierPath];
- for (NSBezierPath *aPath in [self paths])
- [path appendBezierPath:aPath];
- [path setLineWidth:fmax(1.0, [self lineWidth])];
- [path setLineJoinStyle:NSRoundLineJoinStyle];
- if ([self borderStyle] == kPDFBorderStyleDashed) {
- [path setDashPattern:[self dashPattern]];
- [path setLineCapStyle:NSButtLineCapStyle];
- } else {
- [path setLineCapStyle:NSRoundLineCapStyle];
- }
- [NSGraphicsContext saveGraphicsState];
- [NSShadow setShadowWithColor:[NSColor
colorWithGenericGamma22White:0.0 alpha:0.33333] blurRadius:r offset:offset];
- [path stroke];
- [NSGraphicsContext restoreGraphicsState];
- [[NSGraphicsContext currentContext]
setCompositingOperation:NSCompositingOperationClear];
- [path stroke];
- return YES;
- }];
- [NSGraphicsContext saveGraphicsState];
- [NSGraphicsContext setCurrentContext:[NSGraphicsContext
graphicsContextWithCGContext:context flipped:NO]];
- [image drawInRect:rect fromRect:imgRect
operation:NSCompositingOperationSourceOver fraction:[[self color]
alphaComponent]];
- [NSGraphicsContext restoreGraphicsState];
- }
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth
active:(BOOL)active inContext:(CGContextRef)context {
- if (NSIsEmptyRect([self bounds]) == NO && [self isSkimNote]) {
- if (CGContextGetBaseCTM_func != NULL)
- [self drawShadowWithUnitWidth:unitWidth inContext:context];
- else
- [self drawFallbackShadowWithUnitWidth:unitWidth inContext:context];
- }
- [super drawSelectionHighlightWithUnitWidth:unitWidth active:active
inContext:context];
-}
-
-- (NSString *)colorDefaultKey { return SKInkNoteColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKInkNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKInkNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKInkNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *inkKeys = nil;
- if (inkKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys addObject:SKPDFAnnotationBezierPathsKey];
- inkKeys = [mutableKeys copy];
- }
- return inkKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customInkScriptingKeys = nil;
- if (customInkScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKPDFAnnotationScriptingPointListsKey];
- customInkScriptingKeys = [customKeys copy];
- }
- return customInkScriptingKeys;
-}
-
-- (NSArray *)scriptingPointLists {
- NSPoint origin = [self bounds].origin;
- NSMutableArray *pointLists = [NSMutableArray array];
- NSMutableArray *pointValues;
- NSPoint point;
- NSInteger i, iMax;
- for (NSBezierPath *path in [self paths]) {
- iMax = [path elementCount];
- pointValues = [[NSMutableArray alloc] initWithCapacity:iMax];
- for (i = 0; i < iMax; i++) {
- point = [path associatedPointForElementAtIndex:i];
- [pointValues addObject:[NSData
dataWithPointAsNSPoint:SKAddPoints(point, origin)]];
- }
- [pointLists addObject:pointValues];
- }
- return pointLists;
-}
-
-- (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData {
- if ([self isEditable]) {
- NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
- CGFloat margin = [self pathInset];
- NSRect bounds = [self bounds];
-
- if (NSWidth(newBounds) < 2.0 * margin)
- newBounds.size.width = 2.0 * margin;
- if (NSHeight(newBounds) < 2.0 * margin)
- newBounds.size.height = 2.0 * margin;
-
- if (NSEqualSizes(bounds.size, newBounds.size) == NO) {
- NSMutableArray *paths = [NSMutableArray array];
- NSAffineTransform *transform = [NSAffineTransform transform];
- [transform translateXBy:margin yBy:margin];
- [transform scaleXBy:fmax(1.0, NSWidth(newBounds) - 2.0 * margin) /
fmax(1.0, NSWidth(bounds) - 2.0 * margin) yBy:fmax(1.0, NSHeight(newBounds) -
2.0 * margin) / fmax(1.0, NSHeight(bounds) - 2.0 * margin)];
- [transform translateXBy:-margin yBy:-margin];
-
- for (NSBezierPath *path in [self paths])
- [paths addObject:[transform transformBezierPath:path]];
-
- [self setBezierPaths:paths];
- }
-
- [self setBounds:newBounds];
- }
-
-}
-
-@end
Deleted: trunk/PDFAnnotationLine_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationLine_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationLine_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,59 +0,0 @@
-//
-// PDFAnnotationLine_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationStartPointAsQDPointKey;
-extern NSString * const SKPDFAnnotationEndPointAsQDPointKey;
-extern NSString * const SKPDFAnnotationScriptingStartLineStyleKey;
-extern NSString * const SKPDFAnnotationScriptingEndLineStyleKey;
-
-@interface PDFAnnotationLine (SKExtensions)
-
-@property (nonatomic, nullable, copy) NSData *startPointAsQDPoint;
-@property (nonatomic, nullable, copy) NSData *endPointAsQDPoint;
-@property (nonatomic) PDFLineStyle scriptingStartLineStyle;
-@property (nonatomic) PDFLineStyle scriptingEndLineStyle;
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationLine_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationLine_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationLine_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,317 +0,0 @@
-//
-// PDFAnnotationLine_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 "PDFAnnotationLine_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSGraphics_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "SKRuntime.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "PDFView_SKExtensions.h"
-
-NSString * const SKPDFAnnotationStartPointAsQDPointKey =
@"startPointAsQDPoint";
-NSString * const SKPDFAnnotationEndPointAsQDPointKey = @"endPointAsQDPoint";
-NSString * const SKPDFAnnotationScriptingStartLineStyleKey =
@"scriptingStartLineStyle";
-NSString * const SKPDFAnnotationScriptingEndLineStyleKey =
@"scriptingEndLineStyle";
-
-@implementation PDFAnnotationLine (SKExtensions)
-
-static void (*original_setBounds)(id, SEL, NSRect) = NULL;
-
-static void replacement_setBounds(id self, SEL _cmd , NSRect newBounds) {
- NSArray *points = [self valueForAnnotationKey:PDFAnnotationKeyLinePoints];
- if ([points isKindOfClass:[NSArray class]] && [points count] == 4) {
- NSPoint d = SKSubstractPoints(newBounds.origin, [self bounds].origin);
- if (NSEqualPoints(d, NSZeroPoint))
- points = nil;
- else
- points = @[@([points[0] doubleValue] + d.x), @([points[1]
doubleValue] + d.y), @([points[2] doubleValue] + d.x), @([points[3]
doubleValue] + d.y)];
- } else if (points) {
- points = nil;
- }
- original_setBounds(self, _cmd, newBounds);
- if (points)
- [self setValue:points forAnnotationKey:PDFAnnotationKeyLinePoints];
-}
-
-+ (void)load {
- if (@available(macOS 10.14, *)) {} else {
- original_setBounds = (void (*)(id, SEL,
NSRect))SKReplaceInstanceMethodImplementation(self, @selector(setBounds:),
(IMP)replacement_setBounds);
- }
-}
-
-- (void)setDefaultSkimNoteProperties {
- NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
- NSRect bounds = [self bounds];
- [self setColor:[sud colorForKey:SKLineNoteColorKey]];
- NSColor *color = [sud colorForKey:SKLineNoteInteriorColorKey];
- if ([color alphaComponent] > 0.0)
- [self setInteriorColor:color];
- [self setStartLineStyle:[sud integerForKey:SKLineNoteStartLineStyleKey]];
- [self setEndLineStyle:[sud integerForKey:SKLineNoteEndLineStyleKey]];
- [self setStartPoint:NSMakePoint(0.0, 0.0)];
- [self setEndPoint:NSMakePoint(NSWidth(bounds), NSHeight(bounds))];
- PDFBorder *border = [[PDFBorder alloc] init];
- [border setLineWidth:[sud floatForKey:SKLineNoteLineWidthKey]];
- [border setDashPattern:[sud arrayForKey:SKLineNoteDashPatternKey]];
- [border setStyle:[sud floatForKey:SKLineNoteLineStyleKey]];
- [self setBorder:[border lineWidth] > 0.0 ? border : nil];
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- [fdfString appendFDFName:SKFDFAnnotationLineStylesKey];
- [fdfString appendString:@"["];
- [fdfString appendFDFName:SKFDFLineStyleFromPDFLineStyle([self
startLineStyle])];
- [fdfString appendFDFName:SKFDFLineStyleFromPDFLineStyle([self
endLineStyle])];
- [fdfString appendString:@"]"];
- NSPoint startPoint = SKAddPoints([self startPoint], [self bounds].origin);
- NSPoint endPoint = SKAddPoints([self endPoint], [self bounds].origin);
- [fdfString appendFDFName:SKFDFAnnotationLinePointsKey];
- [fdfString appendFormat:@"[%f %f %f %f]", startPoint.x, startPoint.y,
endPoint.x, endPoint.y];
- CGFloat r, g, b, a = 0.0;
- [[self interiorColor] getRed:&r green:&g blue:&b alpha:&a];
- if (a > 0.0) {
- [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
- [fdfString appendFormat:@"[%f %f %f]", r, g, b];
- }
- return fdfString;
-}
-
-- (BOOL)isLine { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
- if ([self shouldDisplay] == NO || [self isSkimNote] == NO)
- return NO;
- CGFloat delta = fmax(4.0, 0.5 * [self lineWidth]);
- return SKPointNearLineFromPointToPoint(SKSubstractPoints(point, [self
bounds].origin), [self startPoint], [self endPoint], delta);
-}
-
-- (CGFloat)boundsOrder {
- CGFloat delta = ceil(fmax(4.0 * [self lineWidth], 4.0));
- NSPoint origin = [self bounds].origin;
- NSRect startBounds = SKRectFromCenterAndSquareSize(SKAddPoints(origin,
[self startPoint]), delta);
- NSRect endBounds = SKRectFromCenterAndSquareSize(SKAddPoints(origin, [self
endPoint]), delta);
- PDFPage *page = [self page];
- return fmin([page sortOrderForBounds:startBounds], [page
sortOrderForBounds:endBounds]);
-}
-
-- (SKRectEdges)resizeHandleForPoint:(NSPoint)point
scaleFactor:(CGFloat)scaleFactor {
- if ([self isResizable] == NO)
- return SKRectEdgesNone;
- NSSize size = SKMakeSquareSize(8.0 / scaleFactor);
- point = SKSubstractPoints(point, [self bounds].origin);
- if (NSPointInRect(point, SKRectFromCenterAndSize([self endPoint], size)))
- return SKRectEdgesMaxX;
- else if (NSPointInRect(point, SKRectFromCenterAndSize([self startPoint],
size)))
- return SKRectEdgesMinX;
- else
- return SKRectEdgesNone;
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth
active:(BOOL)active inContext:(CGContextRef)context {
- if (NSIsEmptyRect([self bounds]))
- return;
- NSPoint origin = [self bounds].origin;
- SKDrawResizeHandlePair(context, SKAddPoints(origin, [self startPoint]),
SKAddPoints(origin, [self endPoint]), unitWidth, active);
-}
-
-- (NSString *)colorDefaultKey { return SKLineNoteColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKLineNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKLineNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKLineNoteDashPatternKey; }
-
-- (PDFLineStyle)startLineStyleDefaultKey { return SKLineNoteStartLineStyleKey;
}
-
-- (PDFLineStyle)endLineStyleDefaultKey { return SKLineNoteEndLineStyleKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *lineKeys = nil;
- if (lineKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys addObject:SKNPDFAnnotationStartLineStyleKey];
- [mutableKeys addObject:SKNPDFAnnotationEndLineStyleKey];
- [mutableKeys addObject:SKNPDFAnnotationStartPointKey];
- [mutableKeys addObject:SKNPDFAnnotationEndPointKey];
- [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
- lineKeys = [mutableKeys copy];
- }
- return lineKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customLineScriptingKeys = nil;
- if (customLineScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKPDFAnnotationStartPointAsQDPointKey];
- [customKeys addObject:SKPDFAnnotationEndPointAsQDPointKey];
- [customKeys addObject:SKPDFAnnotationScriptingStartLineStyleKey];
- [customKeys addObject:SKPDFAnnotationScriptingEndLineStyleKey];
- [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
- customLineScriptingKeys = [customKeys copy];
- }
- return customLineScriptingKeys;
-}
-
-- (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData {
- if ([self isEditable] && inQDPointAsData && [inQDPointAsData
isEqual:[NSNull null]] == NO) {
- NSPoint startPoint = [inQDPointAsData pointValueAsQDPoint];
-
- NSRect bounds = [self bounds];
- NSPoint endPoint = SKIntegralPoint(SKAddPoints([self endPoint],
bounds.origin));
-
- bounds = SKIntegralRectFromPoints(startPoint, endPoint);
-
- if (NSWidth(bounds) < 8.0) {
- bounds.size.width = 8.0;
- bounds.origin.x = floor(0.5 * (startPoint.x + endPoint.x) - 4.0);
- }
- if (NSHeight(bounds) < 8.0) {
- bounds.size.height = 8.0;
- bounds.origin.y = floor(0.5 * (startPoint.y + endPoint.y) - 4.0);
- }
-
- startPoint = SKSubstractPoints(startPoint, bounds.origin);
- endPoint = SKSubstractPoints(endPoint, bounds.origin);
-
- [self setBounds:bounds];
- [self setStartPoint:startPoint];
- [self setEndPoint:endPoint];
- }
-
-}
-
-- (NSData *)startPointAsQDPoint {
- NSRect bounds = [self bounds];
- NSPoint startPoint = SKAddPoints([self startPoint], bounds.origin);
- startPoint.x = floor(startPoint.x);
- startPoint.y = floor(startPoint.y);
- return [NSData dataWithPointAsQDPoint:startPoint];
-}
-
-- (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData {
- if ([self isEditable] && inQDPointAsData && [inQDPointAsData
isEqual:[NSNull null]] == NO) {
- NSPoint endPoint = [inQDPointAsData pointValueAsQDPoint];
-
- NSRect bounds = [self bounds];
- NSPoint startPoint = SKIntegralPoint(SKAddPoints([self startPoint],
bounds.origin));
-
- bounds = SKIntegralRectFromPoints(startPoint, endPoint);
-
- if (NSWidth(bounds) < 8.0) {
- bounds.size.width = 8.0;
- bounds.origin.x = floor(0.5 * (startPoint.x + endPoint.x) - 4.0);
- }
- if (NSHeight(bounds) < 8.0) {
- bounds.size.height = 8.0;
- bounds.origin.y = floor(0.5 * (startPoint.y + endPoint.y) - 4.0);
- }
-
- startPoint = SKSubstractPoints(startPoint, bounds.origin);
- endPoint = SKSubstractPoints(endPoint, bounds.origin);
-
- [self setBounds:bounds];
- [self setStartPoint:startPoint];
- [self setEndPoint:endPoint];
- }
-
-}
-
-- (NSData *)endPointAsQDPoint {
- NSRect bounds = [self bounds];
- NSPoint endPoint = SKAddPoints([self endPoint], bounds.origin);
- endPoint.x = floor(endPoint.x);
- endPoint.y = floor(endPoint.y);
- return [NSData dataWithPointAsQDPoint:endPoint];
-}
-
-- (PDFLineStyle)scriptingStartLineStyle {
- return [self startLineStyle];
-}
-
-- (PDFLineStyle)scriptingEndLineStyle {
- return [self endLineStyle];
-}
-
-- (void)setScriptingStartLineStyle:(PDFLineStyle)style {
- if ([self isEditable]) {
- [self setStartLineStyle:style];
- }
-}
-
-- (void)setScriptingEndLineStyle:(PDFLineStyle)style {
- if ([self isEditable]) {
- [self setEndLineStyle:style];
- }
-}
-
-- (NSColor *)scriptingInteriorColor {
- return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
- if ([self isEditable]) {
- [self setInteriorColor:newColor];
- }
-}
-
-@end
Deleted: trunk/PDFAnnotationLink_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationLink_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationLink_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationLink_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 7/8/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationLink (SKExtension)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationLink_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationLink_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationLink_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationLink_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 7/8/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 "PDFAnnotationLink_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-
-
-@implementation PDFAnnotationLink (SKExtensions)
-
-- (BOOL)isLink { return YES; }
-
-@end
Deleted: trunk/PDFAnnotationMarkup_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationMarkup_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationMarkup_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,54 +0,0 @@
-//
-// PDFAnnotationMarkup_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationSelectionSpecifierKey;
-
-@interface PDFAnnotationMarkup (SKExtensions)
-
-- (nullable instancetype)initSkimNoteWithSelection:(PDFSelection *)selection
forPage:(PDFPage *)page forType:(NSString *)type;
-
-@property (nonatomic, nullable, readonly) PDFSelection *selection;
-
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationMarkup_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationMarkup_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationMarkup_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,367 +0,0 @@
-//
-// PDFAnnotationMarkup_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 "PDFAnnotationMarkup_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "PDFAnnotationInk_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "NSCharacterSet_SKExtensions.h"
-#import "NSPointerArray_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "NSView_SKExtensions.h"
-#import "SKNoteText.h"
-#import "PDFView_SKExtensions.h"
-#import "SKRuntime.h"
-#import <objc/objc-runtime.h>
-
-NSString * const SKPDFAnnotationSelectionSpecifierKey = @"selectionSpecifier";
-
-static char SKLineRectsKey;
-static char SKTextStringKey;
-static char SKNoteTextKey;
-
-@implementation PDFAnnotationMarkup (SKExtensions)
-
-/*
- http://www.cocoabuilder.com/archive/message/cocoa/2007/2/16/178891
- The docs are wrong (as is Adobe's spec). The ordering on the rotated page
is:
- --------
- | 0 1 |
- | 2 3 |
- --------
- */
-
-static void addQuadPointsWithBounds(NSMutableArray *quadPoints, const NSRect
bounds, const NSPoint origin, NSInteger lineAngle)
-{
- static NSInteger offset[4] = {0, 1, 3, 2};
- NSRect r = NSOffsetRect(bounds, -origin.x, -origin.y);
- NSInteger i = lineAngle / 90;
- NSPoint p[4];
- memset(&p, 0, 4 * sizeof(NSPoint));
- p[offset[i]] = SKBottomLeftPoint(r);
- p[offset[++i%4]] = SKTopLeftPoint(r);
- p[offset[++i%4]] = SKTopRightPoint(r);
- p[offset[++i%4]] = SKBottomRightPoint(r);
- for (i = 0; i < 4; i++)
- [quadPoints addObject:[NSValue valueWithPoint:p[i]]];
-}
-
-static void (*original_setColor)(id, SEL, id) = NULL;
-
-// PDFView raises an exception when a highlight has a sRGB black color
-static void replacement_setColor(id self, SEL _cmd, NSColor *color) {
- static NSColor *blackColor = nil;
- if (blackColor == nil)
- blackColor = [NSColor colorWithSRGBRed:0.0 green:0.0 blue:0.0
alpha:1.0];
- if ([self markupType] == kPDFMarkupTypeHighlight && [color
isEqual:blackColor])
- color = [NSColor blackColor];
- original_setColor(self, _cmd, color);
-}
-
-+ (void)load {
- original_setColor = (void (*)(id, SEL,
id))SKReplaceInstanceMethodImplementation(self, @selector(setColor:),
(IMP)replacement_setColor);
-}
-
-- (void)setDefaultSkimNoteProperties {
- NSString *key = nil;
- switch ([self markupType]) {
- case kPDFMarkupTypeUnderline: key = SKUnderlineNoteColorKey; break;
- case kPDFMarkupTypeStrikeOut: key = SKStrikeOutNoteColorKey; break;
- default: key = SKHighlightNoteColorKey; break;
- }
- [self setColor:[[NSUserDefaults standardUserDefaults] colorForKey:key]];
- [self setPopup:nil];
-}
-
-- (instancetype)initSkimNoteWithSelection:(PDFSelection *)selection
forPage:(PDFPage *)page forType:(NSString *)type {
- NSRect bounds = NSZeroRect;
- NSPointerArray *lines = nil;
- if ([selection safeIndexOfFirstCharacterOnPage:page] != NSNotFound) {
- for (PDFSelection *sel in [selection connectedSelectionsOnPage:page]) {
- NSRect lineRect = [sel boundsForPage:page];
- if (NSIsEmptyRect(lineRect) == NO && [[sel string]
rangeOfCharacterFromSet:[NSCharacterSet
nonWhitespaceAndNewlineCharacterSet]].length) {
- if (lines == nil)
- lines = [[NSPointerArray alloc] initForRectPointers];
- [lines addPointer:&lineRect];
- bounds = NSUnionRect(lineRect, bounds);
- }
- }
- }
- if (lines == nil) {
- self = [self init];
- self = nil;
- } else {
- self = [self initSkimNoteWithBounds:bounds forType:type];
- if (self) {
- NSInteger lineAngle = [page lineDirectionAngle];
- NSMutableArray *quadPoints = [[NSMutableArray alloc] init];
- NSUInteger i, iMax = [lines count];
- for (i = 0; i < iMax; i++)
- addQuadPointsWithBounds(quadPoints, [lines rectAtIndex:i],
bounds.origin, lineAngle);
- [self setQuadrilateralPoints:quadPoints];
- objc_setAssociatedObject(self, &SKLineRectsKey, lines,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- }
- return self;
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- NSPoint point;
- NSRect bounds = [self bounds];
- [fdfString appendFDFName:SKFDFAnnotationQuadrilateralPointsKey];
- [fdfString appendString:@"["];
- for (NSValue *value in [self quadrilateralPoints]) {
- point = [value pointValue];
- [fdfString appendFormat:@"%f %f ", point.x + NSMinX(bounds), point.y +
NSMinY(bounds)];
- }
- [fdfString appendString:@"]"];
- return fdfString;
-}
-
-- (NSPointerArray *)lineRects {
- NSPointerArray *lineRects = objc_getAssociatedObject(self,
&SKLineRectsKey);
- if (lineRects == nil) {
- lineRects = [[NSPointerArray alloc] initForRectPointers];
-
- // archived annotations (or annotations we didn't create) won't have
these
- NSArray *quadPoints = [self quadrilateralPoints];
- NSAssert([quadPoints count] % 4 == 0, @"inconsistent number of quad
points");
-
- NSUInteger j, jMax = [quadPoints count] / 4;
- NSPoint origin = [self bounds].origin;
- NSRange range = NSMakeRange(0, 4);
-
- for (j = 0; j < jMax; j++) {
-
- range.location = 4 * j;
-
- NSPoint point;
- NSUInteger i;
- CGFloat minX = CGFLOAT_MAX, maxX = -CGFLOAT_MAX, minY =
CGFLOAT_MAX, maxY = -CGFLOAT_MAX;
- for (i = 0; i < 4; i++) {
- point = [[quadPoints objectAtIndex:4 * j + i] pointValue];
- minX = fmin(minX, point.x);
- maxX = fmax(maxX, point.x);
- minY = fmin(minY, point.y);
- maxY = fmax(maxY, point.y);
- }
-
- NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY,
maxX - minX, maxY - minY);
- [lineRects addPointer:&lineRect];
- }
-
- objc_setAssociatedObject(self, &SKLineRectsKey, lineRects,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- return lineRects;
-}
-
-- (PDFSelection *)selectionWithPage:(PDFPage *)page {
- PDFSelection *selection = nil;
- NSMutableArray *selections = nil;
- NSPointerArray *lines = [self lineRects];
- NSUInteger i, iMax = [lines count];
-
- for (i = 0; i < iMax; i++) {
- // slightly outset the rect to avoid rounding errors, as
selectionForRect is pretty strict in some OS versions, but unfortunately not in
others
- PDFSelection *sel = [page selectionForRect:NSInsetRect([lines
rectAtIndex:i], -1.0, -1.0)];
- if ([sel hasCharacters]) {
- if (selection == nil)
- selection = sel;
- else if (selections)
- [selections addObject:sel];
- else
- selections = [NSMutableArray arrayWithObject:sel];
- }
- }
- if (selections)
- [selection addSelections:selections];
- return selection;
-}
-
-- (PDFSelection *)selection {
- return [self selectionWithPage:[self page]];
-}
-
-- (BOOL)hitTest:(NSPoint)point {
- if ([super hitTest:point] == NO)
- return NO;
-
- NSPointerArray *lines = [self lineRects];
- NSUInteger i = [lines count];
- BOOL isContained = NO;
-
- while (i-- && NO == isContained)
- isContained = NSPointInRect(point, [lines rectAtIndex:i]);
-
- return isContained;
-}
-
-- (CGFloat)boundsOrder {
- NSPointerArray *lines = [self lineRects];
- NSRect bounds = [lines count] > 0 ? [lines rectAtIndex:0] : [self bounds];
- return [[self page] sortOrderForBounds:bounds];
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth
active:(BOOL)active inContext:(CGContextRef)context {
- if (NSIsEmptyRect([self bounds]))
- return;
-
- NSPointerArray *lines = [self lineRects];
- NSUInteger i, iMax = [lines count];
- CGColorRef color = [[NSColor selectionHighlightColor:active] CGColor];
-
- CGContextSaveGState(context);
- CGContextSetStrokeColorWithColor(context, color);
- CGContextSetLineWidth(context, unitWidth);
- for (i = 0; i < iMax; i++) {
- CGRect rect = CGContextConvertRectToUserSpace(context,
CGRectIntegral(CGContextConvertRectToDeviceSpace(context, NSRectToCGRect([lines
rectAtIndex:i]))));
- CGContextStrokeRect(context, CGRectInset(rect, -0.5 * unitWidth, -0.5
* unitWidth));
- }
- CGContextRestoreGState(context);
-}
-
-- (BOOL)isMarkup { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)hasBorder { return NO; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hasNoteText { return [self isEditable]; }
-
-- (SKNoteText *)noteText {
- if ([self isEditable] == NO)
- return nil;
- SKNoteText *noteText = objc_getAssociatedObject(self, &SKNoteTextKey);
- if (noteText == nil) {
- noteText = [[SKNoteText alloc] initWithNote:self];
- objc_setAssociatedObject(self, &SKNoteTextKey, noteText,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- return noteText;
-}
-
-- (NSString *)textString {
- if ([[self page] pageRef] == NULL)
- return nil;
- NSString *textString = objc_getAssociatedObject(self, &SKTextStringKey);
- if (textString == nil) {
- textString = [[self selection] cleanedString] ?: @"";
- objc_setAssociatedObject(self, &SKTextStringKey, textString,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- return textString;
-}
-
-- (NSString *)colorDefaultKey {
- switch ([self markupType]) {
- case kPDFMarkupTypeUnderline: return SKUnderlineNoteColorKey;
- case kPDFMarkupTypeStrikeOut: return SKStrikeOutNoteColorKey;
- case kPDFMarkupTypeHighlight: return SKHighlightNoteColorKey;
- default: return SKHighlightNoteColorKey;
- }
- return nil;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
- NSString *selString = [[self selectionWithPage:page] cleanedString];
- if ([selString length]) {
- // page should be future [self page] and textString will not have been
called
- objc_setAssociatedObject(self, &SKTextStringKey, selString,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- [self setString:selString];
- }
-}
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *markupKeys = nil;
- if (markupKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys removeObject:SKNPDFAnnotationBorderKey];
- markupKeys = [mutableKeys copy];
- }
- return markupKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customMarkupScriptingKeys = nil;
- if (customMarkupScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKPDFAnnotationSelectionSpecifierKey];
- [customKeys addObject:SKPDFAnnotationScriptingPointListsKey];
- [customKeys removeObject:SKNPDFAnnotationLineWidthKey];
- [customKeys removeObject:SKNPDFAnnotationBorderStyleKey];
- [customKeys removeObject:SKNPDFAnnotationDashPatternKey];
- customMarkupScriptingKeys = [customKeys copy];
- }
- return customMarkupScriptingKeys;
-}
-
-- (id)selectionSpecifier {
- PDFSelection *sel = [self selection];
- return [sel hasCharacters] ? [sel objectSpecifiers] : @[];
-}
-
-- (NSArray *)scriptingPointLists {
- NSPoint origin = [self bounds].origin;
- NSMutableArray *pointLists = [NSMutableArray array];
- NSMutableArray *pointValues;
- NSPoint point;
- NSInteger i, j, iMax = [[self quadrilateralPoints] count] / 4;
- for (i = 0; i < iMax; i++) {
- pointValues = [[NSMutableArray alloc] initWithCapacity:iMax];
- for (j = 0; j < 4; j++) {
- point = [[[self quadrilateralPoints] objectAtIndex:4 * i + j]
pointValue];
- [pointValues addObject:[NSData
dataWithPointAsNSPoint:SKAddPoints(point, origin)]];
- }
- [pointLists addObject:pointValues];
- }
- return pointLists;
-}
-
-@end
Deleted: trunk/PDFAnnotationSquare_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationSquare_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationSquare_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,48 +0,0 @@
-//
-// PDFAnnotationSquare_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationSquare (SKExtensions)
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationSquare_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationSquare_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationSquare_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,150 +0,0 @@
-//
-// PDFAnnotationSquare_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 4/1/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 "PDFAnnotationSquare_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-@implementation PDFAnnotationSquare (SKExtensions)
-
-- (void)setDefaultSkimNoteProperties {
- NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
- NSColor *color = [sud colorForKey:SKSquareNoteInteriorColorKey];
- if ([color alphaComponent] > 0.0)
- [self setInteriorColor:color];
- [self setColor:[sud colorForKey:SKSquareNoteColorKey]];
- [[self border] setLineWidth:[sud floatForKey:SKSquareNoteLineWidthKey]];
- [[self border] setDashPattern:[sud
arrayForKey:SKSquareNoteDashPatternKey]];
- [[self border] setStyle:[sud floatForKey:SKSquareNoteLineStyleKey]];
-
-}
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- CGFloat r, g, b, a = 0.0;
- [[[self interiorColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace]
getRed:&r green:&g blue:&b alpha:&a];
- if (a > 0.0) {
- [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
- [fdfString appendFormat:@"[%f %f %f]", r, g, b];
- }
- return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isShape { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
- if ([super hitTest:point] == NO)
- return NO;
-
- if ([self interiorColor])
- return YES;
-
- NSRect bounds = [self bounds];
- CGFloat delta = fmax(8.0, [self lineWidth]);
- return NSWidth(bounds) <= 2.0 * delta || NSHeight(bounds) <= 2.0 * delta
|| NSPointInRect(point, NSInsetRect(bounds, delta, delta)) == NO;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
- NSRect bounds = NSInsetRect([self bounds], [self lineWidth] - 1.0, [self
lineWidth] - 1.0);
- if (NSWidth(bounds) <= 0.0 || NSHeight(bounds) <= 0.0)
- return;
- NSString *selString = [[page selectionForRect:bounds] cleanedString];
- if ([selString length])
- [self setString:selString];
-}
-
-- (NSString *)colorDefaultKey { return SKSquareNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKSquareNoteInteriorColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKSquareNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKSquareNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKSquareNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
- static NSSet *squareKeys = nil;
- if (squareKeys == nil) {
- NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo]
mutableCopy];
- [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
- squareKeys = [mutableKeys copy];
- }
- return squareKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
- static NSSet *customSquareScriptingKeys = nil;
- if (customSquareScriptingKeys == nil) {
- NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
- [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
- customSquareScriptingKeys = [customKeys copy];
- }
- return customSquareScriptingKeys;
-}
-
-- (NSColor *)scriptingInteriorColor {
- return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
- if ([self isEditable]) {
- [self setInteriorColor:newColor];
- }
-}
-
-@end
Deleted: trunk/PDFAnnotationStamp_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationStamp_SKExtensions.h 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationStamp_SKExtensions.h 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationStamp_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 26/10/2024.
-/*
- This software is Copyright (c) 2024
- 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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationStamp (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationStamp_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationStamp_SKExtensions.m 2026-09-26 21:41:10 UTC (rev
16538)
+++ trunk/PDFAnnotationStamp_SKExtensions.m 2026-09-26 21:49:13 UTC (rev
16539)
@@ -1,61 +0,0 @@
-//
-// PDFAnnotationStamp_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 26/10/2024.
-/*
- This software is Copyright (c) 2024
- 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 "PDFAnnotationStamp_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKFDFParser.h"
-
-@implementation PDFAnnotationStamp (SKExtensions)
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- [fdfString appendFDFName:SKFDFAnnotationIconTypeKey];
- [fdfString
appendFDFName:SKFDFTextAnnotationIconTypeFromPDFTextAnnotationIconType([self
iconType])];
- return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-@end
Deleted: trunk/PDFAnnotationTextWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationTextWidget_SKExtensions.h 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationTextWidget_SKExtensions.h 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,47 +0,0 @@
-//
-// PDFAnnotationTextWidget_SKExtensions.h
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationTextWidget (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END
Deleted: trunk/PDFAnnotationTextWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationTextWidget_SKExtensions.m 2026-09-26 21:41:10 UTC
(rev 16538)
+++ trunk/PDFAnnotationTextWidget_SKExtensions.m 2026-09-26 21:49:13 UTC
(rev 16539)
@@ -1,81 +0,0 @@
-//
-// PDFAnnotationTextWidget_SKExtensions.m
-// Skim
-//
-// Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-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 "PDFAnnotationTextWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationTextWidget (SKExtensions)
-
-- (NSString *)fdfString {
- NSMutableString *fdfString = [[super fdfString] mutableCopy];
- [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
- [fdfString appendFDFName:SKFDFFieldTypeText];
- [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
- [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @""
lossyStringUsingEncoding:NSISOLatin1StringEncoding]
stringByEscapingParenthesis]];
- [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
- [fdfString appendFormat:@"(%@)", [[[self stringValue] ?: @""
lossyStringUsingEncoding:NSISOLatin1StringEncoding]
stringByEscapingParenthesis]];
- return fdfString;
-}
-
-- (id)objectValue {
@@ Diff output truncated at 100000 characters. @@
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