Ver código fonte

【OCToSwift】CPDFFreeTextAnnotation+PDFListView

tangchao 1 ano atrás
pai
commit
4b866c97bf

+ 8 - 10
PDF Office/PDF Master.xcodeproj/project.pbxproj

@@ -2950,6 +2950,9 @@
 		BBBB6CD62AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD52AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift */; };
 		BBBB6CD72AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD52AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift */; };
 		BBBB6CD82AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD52AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift */; };
+		BBBB6CDA2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD92AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift */; };
+		BBBB6CDB2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD92AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift */; };
+		BBBB6CDC2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBB6CD92AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift */; };
 		BBBF68802A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBF687F2A3BF17F0058E14E /* KMFilePromiseProvider.swift */; };
 		BBBF68812A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBF687F2A3BF17F0058E14E /* KMFilePromiseProvider.swift */; };
 		BBBF68822A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBF687F2A3BF17F0058E14E /* KMFilePromiseProvider.swift */; };
@@ -3285,9 +3288,6 @@
 		F36EB6CC2987C9FE004C25FB /* KMDocumentAIViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F36EB6C82987C9FE004C25FB /* KMDocumentAIViewController.xib */; };
 		F36EB6CD2987C9FE004C25FB /* KMDocumentAIViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F36EB6C82987C9FE004C25FB /* KMDocumentAIViewController.xib */; };
 		F36EB6CE2987C9FE004C25FB /* KMDocumentAIViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F36EB6C82987C9FE004C25FB /* KMDocumentAIViewController.xib */; };
-		F37322DE292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B4292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m */; };
-		F37322DF292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B4292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m */; };
-		F37322E0292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B4292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m */; };
 		F37322E7292DF9410013862C /* CPDFAnnotationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B8292DF9410013862C /* CPDFAnnotationModel.m */; };
 		F37322E8292DF9410013862C /* CPDFAnnotationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B8292DF9410013862C /* CPDFAnnotationModel.m */; };
 		F37322E9292DF9410013862C /* CPDFAnnotationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322B8292DF9410013862C /* CPDFAnnotationModel.m */; };
@@ -4704,6 +4704,7 @@
 		BBBB6CCD2AD13E210035AA66 /* CPDFButtonWidgetAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFButtonWidgetAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BBBB6CD12AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFChoiceWidgetAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BBBB6CD52AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFCircleAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
+		BBBB6CD92AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFFreeTextAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BBBF687F2A3BF17F0058E14E /* KMFilePromiseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFilePromiseProvider.swift; sourceTree = "<group>"; };
 		BBBF68832A3C3AF10058E14E /* NSDocumentController+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDocumentController+KMExtension.swift"; sourceTree = "<group>"; };
 		BBC2BCC4295DA8F30036B983 /* KMCropPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCropPreviewController.swift; sourceTree = "<group>"; };
@@ -4854,7 +4855,6 @@
 		F3732284292CB1150013862C /* NSEvent+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSEvent+PDFListView.h"; sourceTree = "<group>"; };
 		F3732288292CB4030013862C /* CPDFListView+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFListView+Private.h"; sourceTree = "<group>"; };
 		F37322B3292DF9410013862C /* CPDFRedactAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFRedactAnnotation+PDFListView.h"; sourceTree = "<group>"; };
-		F37322B4292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFFreeTextAnnotation+PDFListView.m"; sourceTree = "<group>"; };
 		F37322B5292DF9410013862C /* CPDFWidgetAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFWidgetAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322B8292DF9410013862C /* CPDFAnnotationModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFAnnotationModel.m; sourceTree = "<group>"; };
 		F37322B9292DF9410013862C /* CPDFSquareAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFSquareAnnotation+PDFListView.h"; sourceTree = "<group>"; };
@@ -4867,7 +4867,6 @@
 		F37322C1292DF9410013862C /* CPDFInkAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFInkAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322C3292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFTextWidgetAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322C4292DF9410013862C /* CPDFLineAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFLineAnnotation+PDFListView.h"; sourceTree = "<group>"; };
-		F37322C5292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFFreeTextAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322C7292DF9410013862C /* CSelfSignAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSelfSignAnnotation.h; sourceTree = "<group>"; };
 		F37322C8292DF9410013862C /* CSelfSignAnnotationFreeText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSelfSignAnnotationFreeText.m; sourceTree = "<group>"; };
 		F37322C9292DF9410013862C /* CSelfSignAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSelfSignAnnotation.m; sourceTree = "<group>"; };
@@ -9198,8 +9197,7 @@
 				BBBB6CCD2AD13E210035AA66 /* CPDFButtonWidgetAnnotation+PDFListView.swift */,
 				BBBB6CD12AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift */,
 				BBBB6CD52AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift */,
-				F37322C5292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.h */,
-				F37322B4292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m */,
+				BBBB6CD92AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift */,
 				F37322C1292DF9410013862C /* CPDFInkAnnotation+PDFListView.h */,
 				F37322D7292DF9410013862C /* CPDFInkAnnotation+PDFListView.m */,
 				F37322C4292DF9410013862C /* CPDFLineAnnotation+PDFListView.h */,
@@ -10609,6 +10607,7 @@
 				BBEC00C7295C319400A26C98 /* KMBatesManager.swift in Sources */,
 				BB147020299DC0D100784A6A /* OIDServiceDiscovery.m in Sources */,
 				9F0201652A176AF200C9B673 /* KMDottedLineView.swift in Sources */,
+				BBBB6CDA2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */,
 				BB5DF1F12959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.swift in Sources */,
 				BBC3482429559506008D2CD1 /* KMBackgroundManager.swift in Sources */,
 				AD867FC529DFFBC400F00440 /* KMAnnotationOutlineRowView.swift in Sources */,
@@ -10988,7 +10987,6 @@
 				AD867F8629D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */,
 				9F0CB535298656F900007028 /* KMDesignToken+BorderWidthLeft.swift in Sources */,
 				ADD1B7022946C8AD00C3FFF7 /* KMBaseTextField.swift in Sources */,
-				F37322DE292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */,
 				BB89724D294C1DCE0045787C /* KMWatermarkAdjectiveListTableCellView.swift in Sources */,
 				ADC075CA29866DDC006C752F /* KMBatchConvertPDFItemView.swift in Sources */,
 				ADB5E5192A3711CB007110A8 /* KMSubscribeWaterMarkView.swift in Sources */,
@@ -11320,6 +11318,7 @@
 				ADBC373D29CA9AE100D93208 /* KMComparativeManager.swift in Sources */,
 				BB147009299DC0D100784A6A /* OIDRegistrationRequest.m in Sources */,
 				89316841296E436B0073EA59 /* KMSignature.m in Sources */,
+				BBBB6CDB2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */,
 				BBA19F4829AE27DA001A285A /* KMAnnotationTableRowView.swift in Sources */,
 				BB8F4566295AA3ED0037EA22 /* KMHeaderFooterManager.swift in Sources */,
 				ADB1FEB829754F9D00ED072D /* KMBatchSettingItemView.swift in Sources */,
@@ -11485,7 +11484,6 @@
 				F34BF94029530D02002C25A2 /* NSBezierPath+PDFListView.m in Sources */,
 				BB88E455294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				BBCE57152A72713A00508EFC /* NSViewController+KMExtension.swift in Sources */,
-				F37322DF292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */,
 				ADD1B6AC2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
 				ADC075EB2987A38C006C752F /* KMBatchConverPDFCSVView.swift in Sources */,
 				9FDD0FAF29534FDC000C4DAD /* KMCompLight.swift in Sources */,
@@ -12186,6 +12184,7 @@
 				F36AD77929642FE80015AD53 /* CPDFListView+UndoManager.m in Sources */,
 				BBB14A5D2978EBBE00936EDB /* KMRedactMutilPageFlagContentView.swift in Sources */,
 				8942F7C12923670F00389627 /* KMBOTAManagerClass.swift in Sources */,
+				BBBB6CDC2AD15B900035AA66 /* CPDFFreeTextAnnotation+PDFListView.swift in Sources */,
 				ADCB98F829274B6B00B51A03 /* KMBatchProcessingTableView.swift in Sources */,
 				89E93F01299CBDEE00F10F66 /* KMOCRComboBox.m in Sources */,
 				F37322F5292DF9410013862C /* CSelfSignAnnotationFreeText.m in Sources */,
@@ -12513,7 +12512,6 @@
 				BBFBE74928DD7DB8008B2335 /* ViewController.swift in Sources */,
 				ADB1FE33297008E800ED072D /* KMBatchCollectionView.swift in Sources */,
 				9F1FE4B029406E4700E952CA /* CTPresentationModeController.m in Sources */,
-				F37322E0292DF9410013862C /* CPDFFreeTextAnnotation+PDFListView.m in Sources */,
 				BBD1F791296FE6A500343885 /* KMPageEditSplitWindowController.swift in Sources */,
 				ADD1B6EA2946C02600C3FFF7 /* KMPrintChoosePageSizeMultipageView.swift in Sources */,
 				9F0CB4612966C9E200007028 /* KMFormPropertPanelViewController.swift in Sources */,

+ 0 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFAnnotationModel.m

@@ -12,7 +12,6 @@
 
 #import "CPDFAnnotationModel.h"
 
-#import "CPDFFreeTextAnnotation+PDFListView.h"
 #import "CPDFInkAnnotation+PDFListView.h"
 #import "CPDFLineAnnotation+PDFListView.h"
 #import "CPDFSquareAnnotation+PDFListView.h"

+ 2 - 2
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFCircleAnnotation+PDFListView.swift

@@ -73,8 +73,8 @@ import Foundation
         context?.addEllipse(in: bounds)
         context?.strokePath()
         
-        let interiorColor = annotationModel.interiorColor().withAlphaComponent(annotationModel.interiorOpacity())
-        if (interiorColor != nil && annotationModel.interiorOpacity() > 0.01) {
+        if let data = annotationModel.interiorColor(), annotationModel.interiorOpacity() > 0.01 {
+            let interiorColor = data.withAlphaComponent(annotationModel.interiorOpacity())
             bounds = CGRectInset(bounds, lineWidth/2.0, lineWidth/2.0)
             context?.setFillColor(interiorColor.cgColor)
             context?.fillEllipse(in: bounds)

+ 0 - 21
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFFreeTextAnnotation+PDFListView.h

@@ -1,21 +0,0 @@
-//
-//  CPDFFreeTextAnnotation+PDFListView.h
-//  ComPDFKit
-//
-//  Copyright © 2014-2022 PDF Technologies, Inc. All Rights Reserved.
-//
-//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
-//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
-//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
-//  This notice may not be removed from this file.
-//
-
-#import <ComPDFKit/ComPDFKit.h>
-
-@class CPDFAnnotationModel;
-
-@interface CPDFFreeTextAnnotation (PDFListView)
-
-+ (NSImage *)annotationImageWithAnnotationModel:(CPDFAnnotationModel *)annotationModel;
-
-@end

+ 0 - 145
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFFreeTextAnnotation+PDFListView.m

@@ -1,145 +0,0 @@
-//
-//  CPDFFreeTextAnnotation+PDFListView.m
-//  ComPDFKit
-//
-//  Copyright © 2014-2022 PDF Technologies, Inc. All Rights Reserved.
-//
-//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
-//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
-//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
-//  This notice may not be removed from this file.
-//
-
-#import "CPDFFreeTextAnnotation+PDFListView.h"
-#import "CPDFListView+Tool.h"
-#import "CPDFListView+Private.h"
-
-#import "CPDFAnnotationModel.h"
-#import "CPDFListViewConfig.h"
-#import <PDF_Master-Swift.h>
-
-@implementation CPDFFreeTextAnnotation (PDFListView)
-
-- (instancetype)initPDFListViewNoteWithDocument:(CPDFDocument *)document {
-    self = [self initWithDocument:document];
-    if (self) {
-        CPDFAnnotationModel *annotationModel = [[CPDFAnnotationModel alloc] initWithAnnotationType:CAnnotationTypeFreeText];
-        CGFloat red,green,blue,alpha;
-        [[annotationModel.color colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha];
-        if ((red == 0) && (green == 0) && (blue == 0) && (alpha == 1)) {
-            self.color = nil;
-        } else {
-            self.color = annotationModel.color;
-        }
-
-        if (!annotationModel.fontColor) {
-            [self setFontColor:[NSColor blackColor]];
-            [self setOpacity:0];
-        } else {
-            [self setFontColor:annotationModel.fontColor];
-            [self setOpacity:annotationModel.opacity];
-        }
-        [self setAlignment:annotationModel.alignment];
-        NSFont *font = [NSFont fontWithName:annotationModel.fontName size:annotationModel.fontSize];
-        [self setFont:font];
-        self.border = [[CPDFBorder alloc] initWithStyle:annotationModel.style lineWidth:annotationModel.lineWidth dashPattern:annotationModel.dashPattern];
-    }
-    return self;
-}
-
-- (void)drawSelectionHighlightForView:(CPDFListView *)pdfView inContext:(CGContextRef)context isHover:(BOOL)isHover {
-    if (NSIsEmptyRect([self bounds]))
-        return;
-
-    NSRect rect = [self borderRecctForView:pdfView];
-    CGFloat lineWidth = [pdfView unitWidthOnPage:[self page]];
-    CGContextSaveGState(context);
-    CGColorRef color = [CPDFListViewConfig defaultManager].annotationBorderColor.CGColor;
-    CGContextSetStrokeColorWithColor(context, color);
-    if(isHover) {
-        CGFloat length[] = {5,5};
-        CGContextSetLineDash(context, 0, length, 2);
-        CGContextStrokeRectWithWidth(context, CGRectInset(NSRectToCGRect(rect), 0,0), lineWidth);
-    } else {
-        CGContextStrokeRectWithWidth(context, CGRectInset(NSRectToCGRect(rect), 0,0), lineWidth);
-    }
-    CGContextRestoreGState(context);
-    CGContextSaveGState(context);
-    if ([self isResizable] && (pdfView.activeAnnotations.count == 1 || pdfView.selectAnnotations.count > 0) && !isHover)
-        CPDFListViewDrawFreeTextResizeHandle(context, rect, 4.0 * lineWidth, YES);
-    CGContextRestoreGState(context);
-}
-
-- (CRectEdges)resizeHandleForPoint:(NSPoint)point scaleFactor:(CGFloat)scaleFactor {
-    NSNumber *offsetNum = [CPDFListViewConfig defaultManager].annotationBorderOffset;
-    NSRect rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect([self bounds]), -(offsetNum.floatValue), -(offsetNum.floatValue)));
-    CRectEdges rectEdges = CPDFListViewResizeHandleForPointFromRect(point, rect, 8.0 / scaleFactor);
-    if(((rectEdges & CMaxXEdgeMask) && (rectEdges & CMinYEdgeMask)) ||
-       ((rectEdges & CMinXEdgeMask) && (rectEdges & CMaxYEdgeMask)) ||
-       ((rectEdges & CMaxXEdgeMask) && (rectEdges & CMaxYEdgeMask)) ||
-       ((rectEdges & CMinXEdgeMask) && (rectEdges & CMinYEdgeMask)) ||
-       (rectEdges & CMaxYEdgeMask) ||
-       (rectEdges & CMinYEdgeMask))
-        rectEdges = CEditInEdgeMask;
-    return [self isResizable] ? rectEdges : 0;
-}
-
-- (BOOL)isResizable { return YES; }
-
-- (BOOL)isMovable { return YES; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *circleKeys = nil;
-    if (circleKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] mutableCopy];
-        [mutableKeys addObjectsFromArray:@[CPDFAnnotationFontKey,
-                                           CPDFAnnotationFontColorKey,
-                                           CPDFAnnotationAlignmentKey]];
-        circleKeys = [mutableKeys copy];
-    }
-    return circleKeys;
-}
-
-+ (NSImage *)annotationImageWithAnnotationModel:(CPDFAnnotationModel *)annotationModel{
-    NSImage *image = nil;
-    NSString *string = annotationModel.contents;
-    NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
-    attributes[NSFontAttributeName] = [NSFont fontWithName:annotationModel.fontName size:annotationModel.fontSize];
-    CGFloat red,green,blue,alpha;
-    NSColor *fontColor = annotationModel.fontColor?:[NSColor clearColor];
-    [[fontColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha];
-
-    if ((fabs(alpha - 0) < 0.001)) {
-        fontColor = [NSColor clearColor];
-    } else {
-        fontColor = [NSColor colorWithRed:red green:green blue:blue alpha:annotationModel.opacity];
-    }
-    attributes[NSForegroundColorAttributeName] = fontColor;
-    NSColor *color = annotationModel.color;
-    if (color) {
-        [[color colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&alpha];
-        if ((red == 0) && (green == 0) && (blue == 0) && (alpha == 1)) {
-            attributes[NSBackgroundColorAttributeName] = nil;
-        } else {
-            attributes[NSBackgroundColorAttributeName] = [NSColor colorWithRed:red green:green blue:blue alpha:annotationModel.opacity];
-        }
-    } else {
-        attributes[NSBackgroundColorAttributeName] = [NSColor colorWithWhite:1.0 alpha:0];
-    }
-    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
-    style.alignment = annotationModel.alignment;
-    attributes[NSParagraphStyleAttributeName] = style;
-
-    NSSize size = [string sizeWithAttributes:attributes];
-    image = [[NSImage alloc] initWithSize:size];
-    [image lockFocus];
-    [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
-
-    [string drawInRect:NSMakeRect(0, 0, image.size.width, image.size.height) withAttributes:attributes];
-
-    [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationDefault];
-    [image unlockFocus];
-    
-    return image;
-}
-@end

+ 148 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFFreeTextAnnotation+PDFListView.swift

@@ -0,0 +1,148 @@
+//
+//  CPDFFreeTextAnnotation+PDFListView.swift
+//  PDF Master
+//
+//  Created by tangchao on 2023/10/7.
+//
+
+import Foundation
+
+@objc extension CPDFFreeTextAnnotation {
+    convenience init(PDFListViewNoteWith document: CPDFDocument) {
+        self.init(document: document)
+        if let model = CPDFAnnotationModel(annotationType: .freeText) {
+            var red: CGFloat = 0
+            var green: CGFloat = 0
+            var blue: CGFloat = 0
+            var alpha: CGFloat = 0
+            model.color().usingColorSpaceName(.calibratedRGB)?.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+            if ((red == 0) && (green == 0) && (blue == 0) && (alpha == 1)) {
+                self.color = nil
+            } else {
+                self.color = model.color()
+            }
+            
+            if let data = model.fontColor() {
+                self.fontColor = data
+                self.opacity = model.opacity()
+            } else {
+                self.fontColor = .black
+                self.opacity = 0
+            }
+            self.alignment = model.alignment()
+            let font = NSFont(name: model.fontName(), size: model.fontSize())
+            self.font = font
+            self.border = CPDFBorder(style: model.style(), lineWidth: model.lineWidth(), dashPattern: model.dashPattern())
+        }
+    }
+    
+    override func drawSelectionHighlightForView(_ pdfView: CPDFListView, inContext context: CGContext, isHover: Bool) {
+        if (NSIsEmptyRect(self.bounds)) {
+            return
+        }
+        
+        let rect = self.borderRecct(for: pdfView)
+        
+        let lineWidth = pdfView.unitWidth(on: self.page)
+        context.saveGState()
+        let color = CPDFListViewConfig.defaultManager().annotationBorderColor.cgColor
+        context.setStrokeColor(color)
+        if (isHover) {
+            let lengths: [CGFloat] = [5.0, 5.0]
+            context.setLineDash(phase: 0.0, lengths: lengths)
+            context.stroke(CGRectInset(NSRectToCGRect(rect), 0,0), width: lineWidth)
+        } else {
+            context.stroke(CGRectInset(NSRectToCGRect(rect), 0,0), width: lineWidth)
+        }
+        context.restoreGState()
+        context.saveGState()
+        if (self.isResizable() && (pdfView.activeAnnotations.count == 1 || pdfView.selectAnnotations.count > 0) && !isHover) {
+            CPDFListViewDrawFreeTextResizeHandle(context, rect, 4.0 * lineWidth, true)
+        }
+        context.restoreGState()
+    }
+    
+    override func resizeHandleForPoint(_ point: NSPoint, scaleFactor: CGFloat) -> CRectEdges {
+        let offsetNum = CPDFListViewConfig.defaultManager().annotationBorderOffset
+        let rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect(self.bounds), CGFloat(-(offsetNum?.floatValue ?? 0.0)), CGFloat(-(offsetNum?.floatValue ?? 0.0))))
+        var rectEdges = CPDFListViewResizeHandleForPointFromRect(point, rect, 8.0 / scaleFactor)
+
+        if ((rectEdges.contains(.maxXEdgeMask) && rectEdges.contains(.minYEdgeMask)) ||
+            (rectEdges.contains(.minXEdgeMask) && rectEdges.contains(.maxYEdgeMask)) ||
+            (rectEdges.contains(.maxXEdgeMask) && rectEdges.contains(.maxYEdgeMask)) ||
+            (rectEdges.contains(.minXEdgeMask) && rectEdges.contains(.minYEdgeMask)) ||
+            rectEdges.contains(.maxYEdgeMask) ||
+            rectEdges.contains(.minYEdgeMask)) {
+            rectEdges = .editInEdgeMask
+        }
+        
+        return self.isResizable() ? rectEdges: CRectEdges(rawValue: 0)
+    }
+    
+    override func isResizable() -> Bool {
+        return true
+    }
+    
+    override func isMovable() -> Bool {
+        return true
+    }
+    
+    private static var _ft_keys: Set<AnyHashable>?
+    override func keysForValuesToObserveForUndo() -> Set<AnyHashable>! {
+        if (CPDFFreeTextAnnotation._ft_keys == nil) {
+            CPDFFreeTextAnnotation._ft_keys = super.keysForValuesToObserveForUndo()
+            _ = CPDFFreeTextAnnotation._ft_keys?.insert(CPDFAnnotationFontKey)
+            _ = CPDFFreeTextAnnotation._ft_keys?.insert(CPDFAnnotationFontColorKey)
+            _ = CPDFFreeTextAnnotation._ft_keys?.insert(CPDFAnnotationAlignmentKey)
+        }
+        return CPDFFreeTextAnnotation._ft_keys
+    }
+    
+    class func annotationImage(annotationModel: CPDFAnnotationModel) -> NSImage? {
+        var image: NSImage?
+        let string: NSString = annotationModel.contents() as? NSString ?? ""
+        var attributes: [NSAttributedString.Key : Any] = [:]
+        attributes[.font] = NSFont(name: annotationModel.fontName(), size: annotationModel.fontSize())
+        var red: CGFloat = 0
+        var green: CGFloat = 0
+        var blue: CGFloat = 0
+        var alpha: CGFloat = 0
+        var fontColor = annotationModel.fontColor()
+        fontColor?.usingColorSpaceName(.calibratedRGB)?.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+        
+        if ((abs(alpha - 0) < 0.001)) {
+            fontColor = .clear
+        } else {
+            fontColor = NSColor(red: red, green: green, blue: blue, alpha: annotationModel.opacity())
+        }
+        attributes[.foregroundColor] = fontColor
+        if let color = annotationModel.color() {
+            var red: CGFloat = 0
+            var green: CGFloat = 0
+            var blue: CGFloat = 0
+            var alpha: CGFloat = 0
+            color.usingColorSpaceName(.calibratedRGB)?.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+            if ((red == 0) && (green == 0) && (blue == 0) && (alpha == 1)) {
+//                attributes[NSBackgroundColorAttributeName] = nil;
+            } else {
+                attributes[.backgroundColor] = NSColor(red: red, green: green, blue: blue, alpha: annotationModel.opacity())
+            }
+        } else {
+            attributes[.backgroundColor] = NSColor(white: 1.0, alpha: 0)
+        }
+        let style = NSMutableParagraphStyle()
+        style.alignment = annotationModel.alignment()
+        attributes[.paragraphStyle] = style
+        
+        let size = string.size(withAttributes: attributes)
+        image = NSImage(size: size)
+        image?.lockFocus()
+        NSGraphicsContext.current?.imageInterpolation = .high
+        
+        string.draw(in: NSMakeRect(0, 0, image!.size.width, image!.size.height), withAttributes: attributes)
+        NSGraphicsContext.current?.imageInterpolation = .default
+        
+        image?.unlockFocus()
+        return image
+    }
+}

+ 0 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/ComPDFUIKit.h

@@ -24,7 +24,6 @@
 #import "CPDFLinkAnnotation+PDFListView.h"
 #import "CPDFMarkupAnnotation+PDFListView.h"
 #import "CPDFRedactAnnotation+PDFListView.h"
-#import "CPDFFreeTextAnnotation+PDFListView.h"
 #import "CPDFSquareAnnotation+PDFListView.h"
 #import "CPDFWidgetAnnotation+PDFListView.h"
 #import "CPDFTextWidgetAnnotation+PDFListView.h"