Ver código fonte

【OCToSwift】CPDFTextAnnotation+PDFListView

tangchao 1 ano atrás
pai
commit
973c60ef4f

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

@@ -2487,6 +2487,9 @@
 		BB5F8A1F29BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F8A1829BB15AD00365ADB /* KMEmailSubWindowController.m */; };
 		BB5F8A2029BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F8A1829BB15AD00365ADB /* KMEmailSubWindowController.m */; };
 		BB5F8A2129BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F8A1829BB15AD00365ADB /* KMEmailSubWindowController.m */; };
+		BB6013802AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB60137F2AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift */; };
+		BB6013812AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB60137F2AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift */; };
+		BB6013822AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB60137F2AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift */; };
 		BB6719E52AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6719E42AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift */; };
 		BB6719E62AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6719E42AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift */; };
 		BB6719E72AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6719E42AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift */; };
@@ -3324,9 +3327,6 @@
 		F373230B292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322D6292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m */; };
 		F373230C292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322D6292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m */; };
 		F373230D292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322D6292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m */; };
-		F3732314292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322DA292DF9410013862C /* CPDFTextAnnotation+PDFListView.m */; };
-		F3732315292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322DA292DF9410013862C /* CPDFTextAnnotation+PDFListView.m */; };
-		F3732316292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F37322DA292DF9410013862C /* CPDFTextAnnotation+PDFListView.m */; };
 		F3732323292DFFFE0013862C /* CPDFListView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = F3732322292DFFFE0013862C /* CPDFListView+Extension.m */; };
 		F3732324292DFFFE0013862C /* CPDFListView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = F3732322292DFFFE0013862C /* CPDFListView+Extension.m */; };
 		F3732325292DFFFE0013862C /* CPDFListView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = F3732322292DFFFE0013862C /* CPDFListView+Extension.m */; };
@@ -4511,6 +4511,7 @@
 		BB5F8A1629BB15AD00365ADB /* pic_mail.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = pic_mail.pdf; sourceTree = "<group>"; };
 		BB5F8A1729BB15AD00365ADB /* KMEmailSubWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMEmailSubWindowController.xib; sourceTree = "<group>"; };
 		BB5F8A1829BB15AD00365ADB /* KMEmailSubWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMEmailSubWindowController.m; sourceTree = "<group>"; };
+		BB60137F2AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFTextAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BB6719E42AD28527003D44D5 /* CPDFLineAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFLineAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BB6719E82AD2A57C003D44D5 /* CPDFLinkAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFLinkAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
 		BB6719F42AD2C949003D44D5 /* CPDFRedactAnnotation+PDFListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFRedactAnnotation+PDFListView.swift"; sourceTree = "<group>"; };
@@ -4856,7 +4857,6 @@
 		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>"; };
 		F37322BD292DF9410013862C /* CPDFMarkupAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFMarkupAnnotation+PDFListView.m"; sourceTree = "<group>"; };
-		F37322BE292DF9410013862C /* CPDFTextAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFTextAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322BF292DF9410013862C /* CPDFAnnotationHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFAnnotationHeader.h; sourceTree = "<group>"; };
 		F37322C3292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFTextWidgetAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322C7292DF9410013862C /* CSelfSignAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSelfSignAnnotation.h; sourceTree = "<group>"; };
@@ -4867,7 +4867,6 @@
 		F37322CF292DF9410013862C /* CPDFWidgetAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFWidgetAnnotation+PDFListView.m"; sourceTree = "<group>"; };
 		F37322D1292DF9410013862C /* CPDFMarkupAnnotation+PDFListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CPDFMarkupAnnotation+PDFListView.h"; sourceTree = "<group>"; };
 		F37322D6292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFTextWidgetAnnotation+PDFListView.m"; sourceTree = "<group>"; };
-		F37322DA292DF9410013862C /* CPDFTextAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFTextAnnotation+PDFListView.m"; sourceTree = "<group>"; };
 		F3732321292DFFFE0013862C /* CPDFListView+Extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CPDFListView+Extension.h"; sourceTree = "<group>"; };
 		F3732322292DFFFE0013862C /* CPDFListView+Extension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CPDFListView+Extension.m"; sourceTree = "<group>"; };
 		F386CEFA29361E2D00C44524 /* CPDFListViewConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFListViewConfig.h; sourceTree = "<group>"; };
@@ -9187,8 +9186,7 @@
 				BB6719F82AD2CC05003D44D5 /* CPDFSignatureWidgetAnnotation+PDFListView.swift */,
 				BB6719FC2AD2CE1B003D44D5 /* CPDFSquareAnnotation+PDFListView.swift */,
 				BB671A002AD2D2A0003D44D5 /* CPDFStampAnnotation+PDFListView.swift */,
-				F37322BE292DF9410013862C /* CPDFTextAnnotation+PDFListView.h */,
-				F37322DA292DF9410013862C /* CPDFTextAnnotation+PDFListView.m */,
+				BB60137F2AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift */,
 				F37322C3292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.h */,
 				F37322D6292DF9410013862C /* CPDFTextWidgetAnnotation+PDFListView.m */,
 				F37322B5292DF9410013862C /* CPDFWidgetAnnotation+PDFListView.h */,
@@ -10527,7 +10525,6 @@
 				9FBA0EF92900188F001117AF /* KMFastToolCollectionView.swift in Sources */,
 				BBFE6E752930E53000142C01 /* KMMergePopoverViewController.swift in Sources */,
 				9FBA0EFE29015A82001117AF /* KMFastToolCollectionViewItem.swift in Sources */,
-				F3732314292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */,
 				BBA8B7A32935CD740097D183 /* KMRemovePasswordAlertWindowController.swift in Sources */,
 				BB897246294C19980045787C /* KMWatermarkAdjectiveListController.swift in Sources */,
 				BBC347FD295448DE008D2CD1 /* KMWatermarkTemplateModel.swift in Sources */,
@@ -10785,6 +10782,7 @@
 				9F1FE4D829406E4700E952CA /* NSString+Utils.m in Sources */,
 				BB6DD81829348A00001F0544 /* KMSecureEncryptComboBoxCellView.swift in Sources */,
 				9F0CB4CD298654FA00007028 /* KMDesignToken+Height.swift in Sources */,
+				BB6013802AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */,
 				ADB1FE3B29700D3400ED072D /* KMBatchCollectionViewItem.swift in Sources */,
 				89752D9A2936E675003FF08E /* KMToolBarBox.swift in Sources */,
 				BB4EEF4429764FEF003A3537 /* KMWatermarkAligementView.swift in Sources */,
@@ -12004,13 +12002,13 @@
 				9F1F82B5292DEF370092C4B4 /* KMCloudDocumentsViewController.swift in Sources */,
 				BB8F4577295AFA2D0037EA22 /* KMHeaderFooterAdjectiveInfoBaseView.swift in Sources */,
 				9F0CB4E22986556400007028 /* KMDesignToken+PaddingTop.swift in Sources */,
+				BB6013812AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */,
 				F37322FD292DF9410013862C /* CPDFWidgetAnnotation+PDFListView.m in Sources */,
 				AD0FA4FA29A8DD6F00EDEB50 /* KMRegisterSuccessView.swift in Sources */,
 				BB146FFA299DC0D100784A6A /* OIDExternalUserAgentMac.m in Sources */,
 				BB9DCCA02A0A2B0A0024A6F1 /* KMConvertSettingView.swift in Sources */,
 				BBFE6E6E2930D9C600142C01 /* KMMergeSettingWindowController.swift in Sources */,
 				BB49ECE6293EF54800C82CA2 /* KMCustomPDFView.swift in Sources */,
-				F3732315292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */,
 				BB6B43672A04919200E02B54 /* KMBaseViewController.swift in Sources */,
 				BB146FD0299DC0D100784A6A /* GTMMIMEDocument.m in Sources */,
 				AD4B45722940B0000076FA14 /* KMOCRModel.swift in Sources */,
@@ -12104,7 +12102,6 @@
 				BBEC00B1295C2AF300A26C98 /* KMBatesPreviewController.swift in Sources */,
 				BB897260294C5DDA0045787C /* KMWatermarkPropertyInfoController.swift in Sources */,
 				BB0A55162A3052F800B6E84B /* KMCustomTextField.swift in Sources */,
-				F3732316292DF9410013862C /* CPDFTextAnnotation+PDFListView.m in Sources */,
 				BBB1A3A029F6128200E54E47 /* KMSystemMenu.swift in Sources */,
 				9F0201882A1DA28B00C9B673 /* KMAILanguagePopVC.swift in Sources */,
 				BB8F4562295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
@@ -12341,6 +12338,7 @@
 				ADBC2D4629A0D09A006280C8 /* ImageToPDFTools.swift in Sources */,
 				BBD1F789296FAC7C00343885 /* KMPageEditSettingBaseView.swift in Sources */,
 				BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */,
+				BB6013822AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */,
 				BB2EDF6C296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
 				BBD7FE052A1323A400F96075 /* KMEditImagePropertyViewController.swift in Sources */,
 				BBBB6CD02AD13E210035AA66 /* CPDFButtonWidgetAnnotation+PDFListView.swift in Sources */,

+ 74 - 0
PDF Office/PDF Master/Class/Common/Category/NSObject+KMExtension.swift

@@ -199,3 +199,77 @@ private var _currentPointingDeviceType: NSEvent.PointingDeviceType = .unknown
         _currentPointingDeviceType = deviceType
     }
 }
+
+// MARK: - CGContext 相关
+
+func KMContextSaveGState(_ ctx: CGContext?) {
+    ctx?.saveGState()
+}
+
+func KMContextRestoreGState(_ ctx: CGContext?) {
+    ctx?.restoreGState()
+}
+
+func KMContextSetLineWidth(_ ctx: CGContext?, _ width: CGFloat) {
+    ctx?.setLineWidth(width)
+}
+
+func KMContextSetLineCap(_ ctx: CGContext?, _ cap: CGLineCap) {
+    ctx?.setLineCap(cap)
+}
+
+func CGContextSetLineJoin(_ ctx: CGContext?, _ join: CGLineJoin) {
+    ctx?.setLineJoin(join)
+}
+
+func KMContextSetLineDash(_ ctx: CGContext?, _ phase: CGFloat, _ lengths: [CGFloat]?, _ count: UInt) {
+    if let data = lengths {
+        ctx?.setLineDash(phase: phase, lengths: data)
+    }
+}
+
+func KMContextMoveToPoint(_ ctx: CGContext?, _ x: CGFloat, _ y: CGFloat) {
+    ctx?.move(to: CGPointMake(x, y))
+}
+
+func KMContextAddLineToPoint(_ ctx: CGContext?, _ x: CGFloat, _ y: CGFloat) {
+    ctx?.addLine(to: CGPointMake(x, y))
+}
+
+func KMContextFillRect(_ ctx: CGContext?, _ c: CGRect) {
+    ctx?.fill(c)
+}
+
+func KMContextFillRects(_ ctx: CGContext?, _ rects: [CGRect]?, _ count: UInt) {
+    if let data = rects {
+        ctx?.fill(data)
+    }
+}
+
+func KMContextStrokeRect(_ ctx: CGContext?, _ rect: CGRect) {
+    ctx?.stroke(rect)
+}
+
+func KMContextStrokeRectWithWidth(_ ctx: CGContext?, _ rect: CGRect, _ width: CGFloat) {
+    ctx?.stroke(rect, width: width)
+}
+
+func KMContextDrawPath(_ ctx: CGContext?, _ mode: CGPathDrawingMode) {
+    ctx?.drawPath(using: mode)
+}
+
+func KMContextStrokePath(_ ctx: CGContext?) {
+    ctx?.strokePath()
+}
+
+func KMContextSetFillColorWithColor(_ ctx: CGContext?, _ color: CGColor?) {
+    if let data = color {
+        ctx?.setFillColor(data)
+    }
+}
+
+func KMContextSetStrokeColorWithColor(_ ctx: CGContext?, _ color: CGColor?) {
+    if let data = color {
+        ctx?.setStrokeColor(data)
+    }
+}

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

@@ -13,7 +13,6 @@
 #import "CPDFAnnotationModel.h"
 
 #import "CPDFMarkupAnnotation+PDFListView.h"
-#import "CPDFTextAnnotation+PDFListView.h"
 
 #import "CSelfSignAnnotationFreeText.h"
 #import "CSelfSignAnnotation.h"

+ 0 - 23
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFTextAnnotation+PDFListView.h

@@ -1,23 +0,0 @@
-//
-//  CPDFTextAnnotation+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,CPDFListView;
-
-@interface CPDFTextAnnotation (PDFListView)
-
-- (void)drawSelectionHighlightForView:(CPDFListView *)pdfView inContext:(CGContextRef)context isHover:(BOOL)isHover;
-
-+ (NSImage *)annotationImageWithAnnotationModel:(CPDFAnnotationModel *)annotationModel;
-
-@end

+ 0 - 172
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFTextAnnotation+PDFListView.m

@@ -1,172 +0,0 @@
-//
-//  CPDFTextAnnotation+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 "CPDFTextAnnotation+PDFListView.h"
-#import "CPDFListView+Tool.h"
-#import "CPDFAnnotationModel.h"
-#import "CPDFListView+Private.h"
-#import "CPDFListView+Private.h"
-#import "NSImage+PDFListView.h"
-#import <PDF_Master-Swift.h>
-
-@implementation CPDFTextAnnotation (PDFListView)
-
-- (instancetype)initPDFListViewNoteWithDocument:(CPDFDocument *)document {
-    self = [self initWithDocument:document];
-    if (self) {
-        CPDFAnnotationModel *annotationModel = [[CPDFAnnotationModel alloc] initWithAnnotationType:CAnnotationTypeAnchored];
-        self.color = annotationModel.color;
-        self.opacity = annotationModel.opacity;
-        self.iconType = annotationModel.anchoredIconType;
-    }
-    return self;
-}
-
-- (BOOL)isMovable { return YES; }
-
-- (CRectEdges)resizeHandleForPoint:(NSPoint)point scaleFactor:(CGFloat)scaleFactor {
-    NSNumber *offsetNum = [CPDFListViewConfig defaultManager].annotationBorderOffset;
-    NSRect rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect([self bounds]), -(offsetNum.floatValue), -(offsetNum.floatValue)));
-    return CPDFListViewResizeHandleForPointFromRect(point, rect, 8.0 / scaleFactor);
-}
-
-- (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 = [NSColor colorWithRed:82.0/255.0 green:102.0/255.0 blue:204.0/255.0 alpha:1].CGColor;
-    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);
-    }
-    CGContextSetStrokeColorWithColor(context, color);
-    CGContextRestoreGState(context);
-}
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *circleKeys = nil;
-    if (circleKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] mutableCopy];
-        [mutableKeys addObject:CPDFAnnotationIconTypeKey];
-        circleKeys = [mutableKeys copy];
-    }
-    return circleKeys;
-}
-
-+ (NSImage *)annotationImageWithAnnotationModel:(CPDFAnnotationModel *)annotationModel {
-    
-    NSString *imageName = @"note_note_bg";
-    NSString *baseImageName = @"note_note";
-    CGRect bounds = annotationModel.annotationImageBounds;
-    NSImage *image = [[NSImage alloc] initWithSize:bounds.size];
-
-    switch ([annotationModel anchoredIconType]) {
-        case CPDFTextAnnotationIconComment:
-            imageName = @"note_comment_bg";
-            baseImageName = @"note_comment";
-            break;
-        case CPDFTextAnnotationIconKey:
-            imageName = @"note_key_bg";
-            baseImageName = @"note_key";
-            break;
-        case CPDFTextAnnotationIconNote:
-            imageName = @"note_note_bg";
-            baseImageName = @"note_note";
-            break;
-        case CPDFTextAnnotationIconHelp:
-            imageName = @"note_help_bg";
-            baseImageName = @"note_help";
-            break;
-        case CPDFTextAnnotationIconNewParagraph:
-            imageName = @"note_newparagraph_bg";
-            baseImageName = @"note_newparagraph";
-            break;
-        case CPDFTextAnnotationIconParagraph:
-            imageName = @"note_paragraph_bg";
-            baseImageName = @"note_paragraph";
-            break;
-        case CPDFTextAnnotationIconInsert:
-        default:
-            imageName = @"note_insert_bg";
-            baseImageName = @"note_insert";
-            break;
-    }
-    
-    NSImage * baseImage = [NSImage imageNamed:imageName];
-    NSImage * frameImage = [NSImage imageNamed:baseImageName];
-    CPDFKitPlatformColor *color = [annotationModel.color colorWithAlphaComponent:annotationModel.opacity];
-
-   image =  [NSImage colorWithImage:baseImage frameImage:frameImage withColor:color];
-    if (image) {
-    } else {
-        [image lockFocus];
-        [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
-        CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
-
-        NSColor *color = [annotationModel.color colorWithAlphaComponent:1.0];
-        if (color) {
-            CGContextSetFillColorWithColor(context, color.CGColor);
-        } else {
-            CGContextSetRGBFillColor(context, 1.0, 1.0, 0.0, 1.0);
-        }
-        CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
-
-        // Draw outer boxes.
-        CGFloat width = 1.0;
-        CGFloat size = 4.0;
-        CGRect outerRect1 = CGRectInset(bounds, 0, 0);
-        outerRect1.origin.y += size;
-        outerRect1.size.height -= size;
-        CGRect outerRect2 = outerRect1;
-        outerRect2.origin.x += size;
-        outerRect2.origin.y -= size;
-        outerRect2.size.width = size;
-        outerRect2.size.height = size;
-
-        CGContextSetLineWidth(context, width);
-        CGContextMoveToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMinY(outerRect1));
-        CGContextAddLineToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMaxY(outerRect1));
-        CGContextAddLineToPoint(context, CGRectGetMaxX(outerRect1), CGRectGetMaxY(outerRect1));
-        CGContextAddLineToPoint(context, CGRectGetMaxX(outerRect1), CGRectGetMinY(outerRect1));
-        CGContextAddLineToPoint(context, CGRectGetMaxX(outerRect2), CGRectGetMaxY(outerRect2));
-        CGContextAddLineToPoint(context, CGRectGetMidX(outerRect2), CGRectGetMinY(outerRect2));
-        CGContextAddLineToPoint(context, CGRectGetMinX(outerRect2), CGRectGetMaxY(outerRect2));
-        CGContextAddLineToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMinY(outerRect1));
-        CGContextDrawPath(context, kCGPathFillStroke);
-
-        // Draw inner lines.
-        int count = 3;
-        CGFloat xDelta = 2.0;
-        CGFloat yDelta = outerRect1.size.height / (count + 1);
-
-        CGRect lineRect = outerRect1;
-        lineRect.origin.x += xDelta;
-        lineRect.size.width -= 2*xDelta;
-
-        for (int i=0; i<count; i++) {
-            CGFloat y = CGRectGetMaxY(lineRect) - yDelta * (i + 1);
-            CGContextMoveToPoint(context, CGRectGetMinX(lineRect), y);
-            CGContextAddLineToPoint(context, CGRectGetMaxX(lineRect), y);
-            CGContextStrokePath(context);
-        }
-        [image unlockFocus];
-    }
-    
-    return image;
-}
-
-@end

+ 152 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFTextAnnotation+PDFListView.swift

@@ -0,0 +1,152 @@
+//
+//  CPDFTextAnnotation+PDFListView.swift
+//  PDF Master
+//
+//  Created by tangchao on 2023/10/9.
+//
+
+import Foundation
+
+@objc extension CPDFTextAnnotation {
+    convenience init(PDFListViewNoteWith document: CPDFDocument) {
+        self.init(document: document)
+        if let model = CPDFAnnotationModel(annotationType: .anchored) {
+            self.color = model.color()
+            self.opacity = model.opacity()
+            self.setIconType(model.anchoredIconType())
+        }
+    }
+    
+    override func isMovable() -> Bool {
+        return true
+    }
+    
+    override func resizeHandleForPoint(_ point: NSPoint, scaleFactor: CGFloat) -> CRectEdges {
+        if let offsetNum = CPDFListViewConfig.defaultManager().annotationBorderOffset {
+            let rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect(self.bounds), CGFloat(-(offsetNum.floatValue)), CGFloat(-(offsetNum.floatValue))))
+            return CPDFListViewResizeHandleForPointFromRect(point, rect, 8.0 / scaleFactor)
+        }
+        return CRectEdges(rawValue: 0)
+    }
+    
+    class func annotationImage(annotationModel: CPDFAnnotationModel) -> NSImage? {
+        var imageName = "note_note_bg"
+        var baseImageName = "note_note"
+        let bounds = annotationModel.annotationImageBounds()
+        var image = NSImage(size: bounds.size)
+        
+        switch annotationModel.anchoredIconType() {
+        case .comment:
+            imageName = "note_comment_bg"
+            baseImageName = "note_comment"
+        case .key:
+            imageName = "note_key_bg"
+            baseImageName = "note_key"
+        case .note:
+            imageName = "note_note_bg"
+            baseImageName = "note_note"
+        case .help:
+            imageName = "note_help_bg"
+            baseImageName = "note_help"
+        case .newParagraph:
+            imageName = "note_newparagraph_bg"
+            baseImageName = "note_newparagraph"
+        case .paragraph:
+            imageName = "note_paragraph_bg"
+            baseImageName = "note_paragraph"
+        case .insert:
+            imageName = "note_insert_bg"
+            baseImageName = "note_insert"
+        default:
+            break
+        }
+        
+        let baseImage = NSImage(named: imageName)
+        let frameImage = NSImage(named: baseImageName)
+        let color = annotationModel.color().withAlphaComponent(annotationModel.opacity())
+        
+        if (baseImage != nil && frameImage != nil) {
+            image = NSImage.colorWithImage(baseImage: baseImage!, frameImage: frameImage!, withColor: color)
+        } else {
+            image.lockFocus()
+            NSGraphicsContext.current?.imageInterpolation = .high
+            let context = NSGraphicsContext.current?.cgContext
+            
+            if let color = annotationModel.color()?.withAlphaComponent(1.0) {
+                context?.setFillColor(color.cgColor)
+            } else {
+                context?.setFillColor(red: 1.0, green: 1.0, blue: 0.0, alpha: 1.0)
+            }
+            context?.setStrokeColor(red: 0, green: 0, blue: 0, alpha: 1.0)
+            
+            // Draw outer boxes.
+            let width = 1.0
+            let size = 4.0
+            var outerRect1 = CGRectInset(bounds, 0, 0)
+            outerRect1.origin.y += size
+            outerRect1.size.height -= size
+            var outerRect2 = outerRect1
+            outerRect2.origin.x += size
+            outerRect2.origin.y -= size
+            outerRect2.size.width = size
+            outerRect2.size.height = size
+
+            KMContextSetLineWidth(context!, width)
+            KMContextMoveToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMinY(outerRect1))
+            KMContextAddLineToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMaxY(outerRect1))
+            KMContextAddLineToPoint(context, CGRectGetMaxX(outerRect1), CGRectGetMaxY(outerRect1))
+            KMContextAddLineToPoint(context, CGRectGetMaxX(outerRect1), CGRectGetMinY(outerRect1))
+            KMContextAddLineToPoint(context, CGRectGetMaxX(outerRect2), CGRectGetMaxY(outerRect2))
+            KMContextAddLineToPoint(context, CGRectGetMidX(outerRect2), CGRectGetMinY(outerRect2))
+            KMContextAddLineToPoint(context, CGRectGetMinX(outerRect2), CGRectGetMaxY(outerRect2))
+            KMContextAddLineToPoint(context, CGRectGetMinX(outerRect1), CGRectGetMinY(outerRect1))
+            KMContextDrawPath(context, .fillStroke)
+            
+            // Draw inner lines.
+            let count = 3
+            let xDelta = 2.0
+            let yDelta = outerRect1.size.height / CGFloat((count + 1))
+
+            var lineRect = outerRect1
+            lineRect.origin.x += xDelta
+            lineRect.size.width -= 2*xDelta
+
+            for i in 0 ..< count {
+                let y = CGRectGetMaxY(lineRect) - yDelta * CGFloat((i + 1))
+                KMContextMoveToPoint(context, CGRectGetMinX(lineRect), y)
+                KMContextAddLineToPoint(context, CGRectGetMaxX(lineRect), y)
+                KMContextStrokePath(context)
+            }
+            image.unlockFocus()
+        }
+        return image
+    }
+    
+    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)
+        KMContextSaveGState(context);
+        let color = NSColor(red: 82.0/255.0, green: 102.0/255.0, blue: 204.0/255.0, alpha: 1.0).cgColor
+        if(isHover) {
+            var length: [CGFloat] = [5.0, 5.0]
+            KMContextSetLineDash(context, 0, length, 2)
+            KMContextStrokeRectWithWidth(context, CGRectInset(NSRectToCGRect(rect), 0,0), lineWidth)
+        } else {
+            KMContextStrokeRectWithWidth(context, CGRectInset(NSRectToCGRect(rect), 0, 0), lineWidth)
+        }
+        KMContextSetStrokeColorWithColor(context, color)
+        KMContextRestoreGState(context)
+    }
+    
+    private static var _text_keys: Set<AnyHashable>?
+    override func keysForValuesToObserveForUndo() -> Set<AnyHashable>! {
+        if (CPDFTextAnnotation._text_keys == nil) {
+            CPDFTextAnnotation._text_keys = super.keysForValuesToObserveForUndo()
+            _ = CPDFTextAnnotation._text_keys?.insert(CPDFAnnotationIconTypeKey)
+        }
+        return CPDFTextAnnotation._text_keys
+    }
+}

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

@@ -17,7 +17,6 @@
 #import "CPDFAnnotationModel.h"
 #import "ComPDFUIConfig.h"
 
-#import "CPDFTextAnnotation+PDFListView.h"
 #import "CPDFMarkupAnnotation+PDFListView.h"
 #import "CPDFWidgetAnnotation+PDFListView.h"
 #import "CPDFTextWidgetAnnotation+PDFListView.h"