瀏覽代碼

【OCToSwift】KMPDFSignatureTextView

lizhe 1 年之前
父節點
當前提交
08d9ffd6d1

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

@@ -19,9 +19,6 @@
 		8931683A296E436B0073EA59 /* KMSignatureWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316829296E436A0073EA59 /* KMSignatureWindowController.m */; };
 		8931683B296E436B0073EA59 /* KMSignatureWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316829296E436A0073EA59 /* KMSignatureWindowController.m */; };
 		8931683C296E436B0073EA59 /* KMSignatureWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316829296E436A0073EA59 /* KMSignatureWindowController.m */; };
-		8931683D296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8931682A296E436A0073EA59 /* KMPDFSignatureTextView.m */; };
-		8931683E296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8931682A296E436A0073EA59 /* KMPDFSignatureTextView.m */; };
-		8931683F296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8931682A296E436A0073EA59 /* KMPDFSignatureTextView.m */; };
 		89316843296E436B0073EA59 /* KMDrawView.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316831296E436B0073EA59 /* KMDrawView.m */; };
 		89316844296E436B0073EA59 /* KMDrawView.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316831296E436B0073EA59 /* KMDrawView.m */; };
 		89316845296E436B0073EA59 /* KMDrawView.m in Sources */ = {isa = PBXBuildFile; fileRef = 89316831296E436B0073EA59 /* KMDrawView.m */; };
@@ -1858,6 +1855,9 @@
 		ADDEEA5E2AD39DC500EF675D /* KMSignatureManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA5D2AD39DC500EF675D /* KMSignatureManager.swift */; };
 		ADDEEA5F2AD39DC500EF675D /* KMSignatureManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA5D2AD39DC500EF675D /* KMSignatureManager.swift */; };
 		ADDEEA602AD39DC500EF675D /* KMSignatureManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA5D2AD39DC500EF675D /* KMSignatureManager.swift */; };
+		ADDEEA622AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA612AD3A6E700EF675D /* KMPDFSignatureTextView.swift */; };
+		ADDEEA632AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA612AD3A6E700EF675D /* KMPDFSignatureTextView.swift */; };
+		ADDEEA642AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDEEA612AD3A6E700EF675D /* KMPDFSignatureTextView.swift */; };
 		ADE3C19F29A3894900793B13 /* KMSearchTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE3C19E29A3894900793B13 /* KMSearchTableRowView.swift */; };
 		ADE3C1A029A3894900793B13 /* KMSearchTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE3C19E29A3894900793B13 /* KMSearchTableRowView.swift */; };
 		ADE3C1A129A3894900793B13 /* KMSearchTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE3C19E29A3894900793B13 /* KMSearchTableRowView.swift */; };
@@ -3516,14 +3516,12 @@
 		89316821296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMSignatureAnnotationViewController.xib; sourceTree = "<group>"; };
 		89316828296E436A0073EA59 /* NSImage+CustomImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSImage+CustomImage.m"; sourceTree = "<group>"; };
 		89316829296E436A0073EA59 /* KMSignatureWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMSignatureWindowController.m; sourceTree = "<group>"; };
-		8931682A296E436A0073EA59 /* KMPDFSignatureTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFSignatureTextView.m; sourceTree = "<group>"; };
 		8931682B296E436A0073EA59 /* NSImage+CustomImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSImage+CustomImage.h"; sourceTree = "<group>"; };
 		8931682D296E436A0073EA59 /* KMPDFSignatureImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFSignatureImageView.h; sourceTree = "<group>"; };
 		8931682F296E436B0073EA59 /* KMSignatureWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMSignatureWindowController.h; sourceTree = "<group>"; };
 		89316831296E436B0073EA59 /* KMDrawView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDrawView.m; sourceTree = "<group>"; };
 		89316832296E436B0073EA59 /* KMPDFSignatureImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFSignatureImageView.m; sourceTree = "<group>"; };
 		89316833296E436B0073EA59 /* KMDrawView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDrawView.h; sourceTree = "<group>"; };
-		89316834296E436B0073EA59 /* KMPDFSignatureTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFSignatureTextView.h; sourceTree = "<group>"; };
 		89316836296E436B0073EA59 /* KMSignatureWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMSignatureWindowController.xib; sourceTree = "<group>"; };
 		8931684F296E45CA0073EA59 /* KMImageAccessoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMImageAccessoryController.h; sourceTree = "<group>"; };
 		89316850296E45CA0073EA59 /* KMImageAccessoryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMImageAccessoryController.m; sourceTree = "<group>"; };
@@ -4217,6 +4215,7 @@
 		ADDEEA482AD38BDB00EF675D /* KMSignatureHelpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSignatureHelpViewController.swift; sourceTree = "<group>"; };
 		ADDEEA592AD399BB00EF675D /* KMSignature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSignature.swift; sourceTree = "<group>"; };
 		ADDEEA5D2AD39DC500EF675D /* KMSignatureManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSignatureManager.swift; sourceTree = "<group>"; };
+		ADDEEA612AD3A6E700EF675D /* KMPDFSignatureTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFSignatureTextView.swift; sourceTree = "<group>"; };
 		ADE3C19E29A3894900793B13 /* KMSearchTableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMSearchTableRowView.swift; sourceTree = "<group>"; };
 		ADE3C1A929A4779E00793B13 /* KMPrintAccessoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintAccessoryController.swift; sourceTree = "<group>"; };
 		ADE3C1AA29A4779E00793B13 /* KMPrintAccessoryController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPrintAccessoryController.xib; sourceTree = "<group>"; };
@@ -5045,8 +5044,7 @@
 				89316831296E436B0073EA59 /* KMDrawView.m */,
 				8931682D296E436A0073EA59 /* KMPDFSignatureImageView.h */,
 				89316832296E436B0073EA59 /* KMPDFSignatureImageView.m */,
-				89316834296E436B0073EA59 /* KMPDFSignatureTextView.h */,
-				8931682A296E436A0073EA59 /* KMPDFSignatureTextView.m */,
+				ADDEEA612AD3A6E700EF675D /* KMPDFSignatureTextView.swift */,
 				ADDEEA592AD399BB00EF675D /* KMSignature.swift */,
 				ADDEEA5D2AD39DC500EF675D /* KMSignatureManager.swift */,
 				8931682F296E436B0073EA59 /* KMSignatureWindowController.h */,
@@ -10881,7 +10879,6 @@
 				89316846296E436B0073EA59 /* KMPDFSignatureImageView.m in Sources */,
 				ADD272D029B9CFD30032B5D6 /* KMLightNoNetworkView.swift in Sources */,
 				9F1F82CA292F6CF90092C4B4 /* KMPDFInsertPageWindow.swift in Sources */,
-				8931683D296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */,
 				9FBA0EE128FEC253001117AF /* KMProductPromotionViewController.swift in Sources */,
 				BB3A81B32AC2BCBC006FC66C /* KMPageSizeTool.swift in Sources */,
 				AD9527BE295294E20039D2BC /* KMPrintPageModel.swift in Sources */,
@@ -11222,6 +11219,7 @@
 				9F0CB4DD2986554D00007028 /* KMDesignToken+HorizontalPadding.swift in Sources */,
 				BB9695AD29BDA41700FD68D3 /* SKWindowController.m in Sources */,
 				ADCB98D92924774F00B51A03 /* KMBatchProcessingOrderTableCell.swift in Sources */,
+				ADDEEA622AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				BB146FED299DC0D100784A6A /* GTLRBatchResult.m in Sources */,
 				9F8539C629430AC400DF644E /* KMToolbarRightView.swift in Sources */,
 				ADE8BC3B29F9458700570F89 /* KMRecommondManager.m in Sources */,
@@ -11685,7 +11683,6 @@
 				89316847296E436B0073EA59 /* KMPDFSignatureImageView.m in Sources */,
 				BB49ECF7293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9F1FE4EB29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
-				8931683E296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */,
 				BBFE6E762930E53000142C01 /* KMMergePopoverViewController.swift in Sources */,
 				ADD1B6BC29420B4A00C3FFF7 /* KMPrintPreviewView.swift in Sources */,
 				AD0FA4F129A8580D00EDEB50 /* KMComparativeTableView.swift in Sources */,
@@ -11714,6 +11711,7 @@
 				9F1FE4A629406E4700E952CA /* CTToolbarView.m in Sources */,
 				BB162E9C295073B50088E9D1 /* KMWatermarkManager.swift in Sources */,
 				BBD1F79D296FF7A600343885 /* KMPageEditSplitSettingModel.swift in Sources */,
+				ADDEEA632AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				BB9807FE29CA93D400BEEB81 /* WelcomeWindowController.m in Sources */,
 				9FCFEC892AD0EF9900EAD2CB /* KMPopMenuButton.swift in Sources */,
 				BB6DD81929348A00001F0544 /* KMSecureEncryptComboBoxCellView.swift in Sources */,
@@ -12187,6 +12185,7 @@
 				ADBC17512A2991F700959CEE /* KMPurchaseManager.swift in Sources */,
 				BB6DD823293497B6001F0544 /* KMSecureEncryptModel.swift in Sources */,
 				89D2D2E0294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
+				ADDEEA642AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				9FAAA334290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
 				89752DF82938A236003FF08E /* PublicKey.swift in Sources */,
 				9F1FE4D429406E4700E952CA /* CTTabView.m in Sources */,
@@ -12593,7 +12592,6 @@
 				9F3D819029A22AD90087B5AD /* Date+KMExtensions.swift in Sources */,
 				ADC075E3298766D9006C752F /* KMBatchConverPDFImageView.swift in Sources */,
 				BB897222294AF9080045787C /* KMWatermarkAdjectiveTopBarView.swift in Sources */,
-				8931683F296E436B0073EA59 /* KMPDFSignatureTextView.m in Sources */,
 				9F8DDF362924DA6B006CDC73 /* KMPDFToolsCollectionView.swift in Sources */,
 				ADF9ED3129A8507400C4A943 /* KMAccountInfoView.swift in Sources */,
 				ADB2D6FB294882AE0029D2B3 /* KMTextFieldStepperView.swift in Sources */,

+ 0 - 29
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMPDFSignatureTextView.h

@@ -1,29 +0,0 @@
-//
-//  KMPDFSignatureTextView.h
-//  PDF Reader
-//
-//  Created by 丁林圭 on 2018/6/8.
-//  Copyright © 2018年 Kdan Mobile. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-@protocol KMChangeSignatureTextDelegate <NSObject>
-@optional
-- (void)changeSignatureText:(BOOL)isTure;
-
-@end
-
-
-@interface KMPDFSignatureTextView : NSView
-
-@property (nonatomic,retain) NSColor * keyboardColor;
-@property (nonatomic,retain) NSString * fontName;
-@property (nonatomic,assign) id<KMChangeSignatureTextDelegate> delegate;
-
-- (NSImage *)signatureImage;
-
-- (void)clearImage;
-
-@property (nonatomic,copy) void (^changeSignatureTextCallback) (BOOL isTure);
-
-@end

+ 0 - 218
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMPDFSignatureTextView.m

@@ -1,218 +0,0 @@
-//
-//  KMPDFSignatureTextView.m
-//  PDF Reader
-//
-//  Created by 丁林圭 on 2018/6/8.
-//  Copyright © 2018年 Kdan Mobile. All rights reserved.
-//
-
-#import "KMPDFSignatureTextView.h"
-#import "NSImage+CustomImage.h"
-
-#define kKMSignayureTextMaxFontSize 28.0
-#define kKMSignayureTextMaxWidth 300
-#define kKMSignayureTextEdgeOffset 5
-
-#pragma mark KMVerticallyCenteredSecureTextFieldCell
-
-@interface KMVerticallyCenteredSecureTextFieldCell : NSTextFieldCell
-@end
-@implementation KMVerticallyCenteredSecureTextFieldCell
-
-- (NSRect)adjustedFrameToVerticallyCenterText:(NSRect)frame
-{
-//    NSInteger offset = floor((NSHeight(frame)/2 - ([[self font] ascender] + [[self font] descender])));
-    NSInteger offset = floor((NSHeight(frame)/2 - ([[self font] ascender])));
-    return NSInsetRect(frame, 0.0, offset);
-}
-- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)editor delegate:(id)delegate event:(NSEvent *)event
-{
-    [super editWithFrame:[self adjustedFrameToVerticallyCenterText:aRect] inView:controlView editor:editor delegate:delegate event:event];
-}
-- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)editor delegate:(id)delegate start:(NSInteger)start length:(NSInteger)length
-{
-    [super selectWithFrame:[self adjustedFrameToVerticallyCenterText:aRect] inView:controlView editor:editor delegate:delegate start:start length:length];
-}
-- (void)drawInteriorWithFrame:(NSRect)frame inView:(NSView *)view
-{
-    [super drawInteriorWithFrame:
-    [self adjustedFrameToVerticallyCenterText:frame] inView:view];
-}
-
-@end
-
-@interface KMSignayureTextField : NSTextField
-
-@property (nonatomic, retain) NSColor *originalTextColor;
-@end
-
-
-@implementation KMSignayureTextField
-
-- (void)addSubview:(NSView *)view {
-    [super addSubview:view];
-    NSView * view1  =  view.subviews.firstObject;
-    if ([view1 isKindOfClass:[NSTextView class]]) {
-        NSTextView * textview = (NSTextView *)view1;
-        [textview setInsertionPointColor:[NSColor colorWithRed:102.0/255.0 green:102.0/255.0 blue:102.0/255.0 alpha:1.0]];
-    }
-}
-
-@end
-
-
-@interface KMPDFSignatureTextView()
-
-@property (nonatomic) IBOutlet KMSignayureTextField *nameTextFiled;
-
-@property (assign) IBOutlet NSLayoutConstraint *labelWidthLayoutConstraint;
-
-@property (nonatomic) IBOutlet NSBox *verticalLineBox;
-
-@end
-
-@implementation KMPDFSignatureTextView
-
-- (id)initWithFrame:(NSRect)frameRect
-{
-    if (self = [super initWithFrame:frameRect])
-    {
-        self.keyboardColor = [NSColor colorWithDeviceRed:0 green:0 blue:0 alpha:1];
-        
-        self.wantsLayer = YES;
-        self.layer.borderWidth = 1.0;
-        self.layer.borderColor =[NSColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.05].CGColor;
-        self.layer.backgroundColor = [NSColor colorWithRed:1 green:1 blue:1 alpha:0.9].CGColor;
-
-    }
-    return self;
-}
-
--(void)awakeFromNib
-{
-    [super awakeFromNib];
-    
-//    NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
-//    paragraphStyle.alignment = NSTextAlignmentCenter;
-//
-//    NSAttributedString *att = [[[NSAttributedString alloc] initWithString:NSLocalizedString(@"Sign Here",nil) attributes:@{NSForegroundColorAttributeName:[KMAppearance KMColor_Layout_H2],NSFontAttributeName:[NSFont systemFontOfSize:14.0],                                NSParagraphStyleAttributeName:paragraphStyle}] autorelease];
-//
-//    [self.nameTextFiled.cell setPlaceholderAttributedString:att];
-    self.nameTextFiled.placeholderString = NSLocalizedString(@"Sign Here",nil);
-    self.nameTextFiled.font = [NSFont systemFontOfSize:14.0];
-    [self.verticalLineBox setFillColor:[NSColor blackColor]];
-}
-
-#pragma mark - Public Method
-- (void)clearImage
-{
-    self.nameTextFiled.stringValue = @"";
-    self.nameTextFiled.font = [NSFont systemFontOfSize:14.0];
-    if (self.changeSignatureTextCallback) {
-        self.changeSignatureTextCallback(NO);
-    }
-    
-}
-
-- (NSImage *)signatureImage
-{
-    CGRect rect = CGRectZero;
-    NSString * string = self.nameTextFiled.stringValue?:@"";
-    CGSize size = [self sizeOfString:string witFontSize:self.nameTextFiled.font];
-    
-    if (size.width == 0) {
-        return nil;
-    } else {
-        rect = CGRectMake(kKMSignayureTextEdgeOffset,kKMSignayureTextEdgeOffset, size.width, size.height);
-    }
-
-    NSImage *image = [[NSImage alloc] initWithSize:CGSizeMake(size.width + kKMSignayureTextEdgeOffset* 2, size.height + kKMSignayureTextEdgeOffset* 2)];
-    [image lockFocus];
-    
-    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
-    [dictionary setObject:self.nameTextFiled.font forKey:NSFontAttributeName];
-    [dictionary setObject:self.keyboardColor forKey:NSForegroundColorAttributeName];
-    [string drawInRect:rect withAttributes:dictionary];
-    
-    [image unlockFocus];
-    return image;
-}
-
-- (void)setKeyboardColor:(NSColor *)keyboardColor
-{
-    _keyboardColor = keyboardColor;
-    self.nameTextFiled.textColor = keyboardColor;
-}
-
-- (void)setFontName:(NSString *)fontName
-{
-    _fontName = fontName;
-    CGFloat fontSize = 14.0;
-    if (self.nameTextFiled.stringValue.length > 0) {
-        fontSize = kKMSignayureTextMaxFontSize;
-    }
-    NSFont * maxFont = [NSFont fontWithName:_fontName size:fontSize];
-    CGSize size = [self sizeOfString:self.nameTextFiled.stringValue witFontSize:maxFont];
-    
-    CGFloat width = size.width + kKMSignayureTextEdgeOffset * 2;
-    CGFloat scanel = 1.0;
-    
-    scanel = MIN(kKMSignayureTextMaxWidth/width, 60.0/(size.height + 2));
-    
-    NSFont* font = [NSFont fontWithName:_fontName size:fontSize];
-    self.nameTextFiled.font = font;
-}
-
-#pragma mark - NSTextFieldDelegate
-- (void)controlTextDidChange:(NSNotification *)obj
-{
-    NSTextField *textField = (NSTextField*)[obj object];
-    if (textField == self.nameTextFiled) {
-        NSString *string = textField.stringValue.length > 0 ? textField.stringValue : nil;
-        CGFloat fontSize = 14.0;
-        if (string) {
-            fontSize = kKMSignayureTextMaxFontSize;
-        }
-        NSFont * maxFont = [NSFont fontWithName:_fontName size:fontSize];
-        CGSize size = [self sizeOfString:string witFontSize:maxFont];
-        
-        CGFloat width = size.width + kKMSignayureTextEdgeOffset * 2;
-        CGFloat scanel = 1.0;
-        
-        scanel = MIN((self.bounds.size.width - 30)/width, 60.0/(size.height + 2));
-        
-        if (width >= 100) {
-            self.labelWidthLayoutConstraint.constant = width;
-        }
-        NSFont* font = [NSFont fontWithName:_fontName size:fontSize];
-        self.nameTextFiled.font = font;
-        
-        BOOL isTure = textField.stringValue.length > 0 ? YES : NO;
-        if (self.changeSignatureTextCallback) {
-            self.changeSignatureTextCallback(isTure);
-        }
-        if([self.delegate respondsToSelector:@selector(changeSignatureText:)]) {
-            [self.delegate changeSignatureText:isTure];
-        }
-    }
-}
-
-- (NSSize)sizeOfString:(NSString *)string witFontSize:(NSFont *)font
-{
-    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
-    [dictionary setObject:font forKey:NSFontAttributeName];
-    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
-    [style setAlignment:NSCenterTextAlignment];
-    [dictionary setObject:style forKey:NSParagraphStyleAttributeName];
-    
-    CGSize size = [string boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT)
-                                       options:NSStringDrawingUsesLineFragmentOrigin
-                                    attributes:dictionary].size;
-    
-    return size;
-}
-
-@end
-
-
-

+ 173 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMPDFSignatureTextView.swift

@@ -0,0 +1,173 @@
+import Cocoa
+
+
+private let kKMSignayureTextMaxFontSize: CGFloat = 28.0
+private let kKMSignayureTextMaxWidth: CGFloat = 300
+private let kKMSignayureTextEdgeOffset: CGFloat = 5
+
+@objcMembers class KMVerticallyCenteredSecureTextFieldCell: NSTextFieldCell {
+    func adjustedFrame(toVerticallyCenterText rect: NSRect) -> NSRect {
+        let offset = floor((rect.size.height / 2 - (font!.ascender)))
+        return rect.insetBy(dx: 0.0, dy: offset)
+    }
+
+    override func edit(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate delegateObj: Any?, event: NSEvent?) {
+        super.edit(withFrame: adjustedFrame(toVerticallyCenterText: rect), in: controlView, editor: textObj, delegate: delegateObj, event: event)
+    }
+
+    override func select(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate delegateObj: Any?, start selStart: Int, length selLength: Int) {
+        super.select(withFrame: adjustedFrame(toVerticallyCenterText: rect), in: controlView, editor: textObj, delegate: delegateObj, start: selStart, length: selLength)
+    }
+
+    override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
+        super.drawInterior(withFrame: adjustedFrame(toVerticallyCenterText: cellFrame), in: controlView)
+    }
+}
+
+@objcMembers class KMSignayureTextField: NSTextField {
+    var originalTextColor: NSColor?
+
+    override func addSubview(_ view: NSView) {
+        super.addSubview(view)
+        if let view1 = view.subviews.first as? NSTextView {
+            let textview = view1
+            textview.insertionPointColor = NSColor(red: 102.0 / 255.0, green: 102.0 / 255.0, blue: 102.0 / 255.0, alpha: 1.0)
+        }
+    }
+}
+
+@objc protocol KMChangeSignatureTextDelegate: NSObjectProtocol {
+    func changeSignatureText(_ isTrue: Bool)
+}
+
+@objcMembers class KMPDFSignatureTextView: NSView, NSTextFieldDelegate {
+    @IBOutlet var nameTextFiled: KMSignayureTextField!
+    @IBOutlet var labelWidthLayoutConstraint: NSLayoutConstraint!
+    @IBOutlet var verticalLineBox: NSBox!
+    
+    var keyboardColor: NSColor = NSColor(red: 0, green: 0, blue: 0, alpha: 1) {
+        didSet {
+            self.nameTextFiled.textColor = keyboardColor
+        }
+    }
+    var fontName: String = "" {
+        didSet {
+            var fontSize: CGFloat = 14.0
+            if !self.nameTextFiled.stringValue.isEmpty {
+                fontSize = kKMSignayureTextMaxFontSize
+            }
+            if let maxFont = NSFont(name: fontName, size: fontSize) {
+                let size = sizeOfString(self.nameTextFiled.stringValue, withFontSize: maxFont)
+                
+                var width = size.width + kKMSignayureTextEdgeOffset * 2
+                var scale: CGFloat = 1.0
+                
+                scale = min(kKMSignayureTextMaxWidth / width, 60.0 / (size.height + 2))
+                
+                if width >= 100 {
+                    self.labelWidthLayoutConstraint.constant = width
+                }
+                
+                if let font = NSFont(name: fontName, size: fontSize) {
+                    self.nameTextFiled.font = font
+                }
+                
+                let isTrue = !self.nameTextFiled.stringValue.isEmpty
+                if let callback = self.changeSignatureTextCallback {
+                    callback(isTrue)
+                }
+                
+                if let delegate = self.delegate {
+                    delegate.changeSignatureText(isTrue)
+                }
+            }
+        }
+    }
+
+    var changeSignatureTextCallback: ((Bool) -> Void)?
+    weak var delegate: KMChangeSignatureTextDelegate?
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.nameTextFiled.placeholderString = NSLocalizedString("Sign Here", comment: "")
+        self.nameTextFiled.font = NSFont.systemFont(ofSize: 14.0)
+        self.verticalLineBox.fillColor = NSColor.black
+    }
+
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+        // Custom drawing code here
+    }
+    
+    func clearImage() {
+        self.nameTextFiled.stringValue = ""
+        self.nameTextFiled.font = NSFont.systemFont(ofSize: 14.0)
+        if let callback = self.changeSignatureTextCallback {
+            callback(false)
+        }
+    }
+    
+    func signatureImage() -> NSImage? {
+        var rect = CGRect.zero
+        let string = self.nameTextFiled.stringValue.isEmpty ? "" : self.nameTextFiled.stringValue
+        let size = sizeOfString(string, withFontSize: self.nameTextFiled.font!)
+        
+        if size.width == 0 {
+            return nil
+        } else {
+            rect = CGRect(x: kKMSignayureTextEdgeOffset, y: kKMSignayureTextEdgeOffset, width: size.width, height: size.height)
+        }
+
+        let image = NSImage(size: CGSize(width: size.width + kKMSignayureTextEdgeOffset * 2, height: size.height + kKMSignayureTextEdgeOffset * 2))
+        image.lockFocus()
+        
+        var dictionary = [NSAttributedString.Key: Any]()
+        dictionary[NSAttributedString.Key.font] = self.nameTextFiled.font
+        dictionary[NSAttributedString.Key.foregroundColor] = self.keyboardColor
+        string.draw(in: rect, withAttributes: dictionary)
+        
+        image.unlockFocus()
+        return image
+    }
+    
+    func sizeOfString(_ string: String, withFontSize font: NSFont) -> CGSize {
+        let dictionary: [NSAttributedString.Key: Any] = [
+            NSAttributedString.Key.font: font,
+            NSAttributedString.Key.paragraphStyle: NSParagraphStyle.default
+        ]
+        let size = string.boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: dictionary).size
+        return size
+    }
+    
+    func controlTextDidChange(_ obj: Notification) {
+        if let textField = obj.object as? NSTextField, textField == self.nameTextFiled {
+            let string = textField.stringValue.isEmpty ? nil : textField.stringValue
+            var fontSize: CGFloat = 14.0
+            if string != nil {
+                fontSize = kKMSignayureTextMaxFontSize
+            }
+            if let maxFont = NSFont(name: self.fontName, size: fontSize) {
+                let size = sizeOfString(string ?? "", withFontSize: maxFont)
+                
+                let width = size.width + kKMSignayureTextEdgeOffset * 2
+                var scale: CGFloat = 1.0
+                
+                scale = min((self.bounds.size.width - 30) / width, 60.0 / (size.height + 2))
+                
+                if width >= 100 {
+                    self.labelWidthLayoutConstraint.constant = width
+                }
+                if let font = NSFont(name: self.fontName, size: fontSize) {
+                    self.nameTextFiled.font = font
+                }
+                let isTrue = !textField.stringValue.isEmpty
+                if let callback = self.changeSignatureTextCallback {
+                    callback(isTrue)
+                }
+                if let delegate = self.delegate {
+                    delegate.changeSignatureText(isTrue)
+                }
+            }
+        }
+    }
+}

+ 1 - 2
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMSignatureWindowController.m

@@ -10,7 +10,6 @@
 #import "KMDrawView.h"
 #import "NSImage+CustomImage.h"
 #import "KMPDFSignatureImageView.h"
-#import "KMPDFSignatureTextView.h"
 #import "KMPopUpButton.h"
 #import "CPDFListView.h"
 #import <PDF_Master-Swift.h>
@@ -166,7 +165,7 @@ static NSMutableArray * recentlyFonts;
 
 static KMSignatureWindowController *windowController_signature;
 
-@interface KMSignatureWindowController () <KMDrawViewDelegate,KMChangeSignatureTextDelegate, KMSelectPopButtonDelegate>
+@interface KMSignatureWindowController () <KMDrawViewDelegate, KMSelectPopButtonDelegate, KMChangeSignatureTextDelegate>
 
 @property (weak) IBOutlet NSButton    *cancelBtton;
 @property (weak) IBOutlet NSButton    *applyButton;

+ 6 - 6
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMSigntureViewItem.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -29,14 +29,14 @@
                         </imageView>
                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="o7x-9r-sOc">
                             <rect key="frame" x="186" y="22" width="30" height="30"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="30" id="Yqs-7z-DBZ"/>
-                                <constraint firstAttribute="height" constant="30" id="qBR-rC-TAe"/>
-                            </constraints>
                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="KMImageNamePropertybarDeleteStamp" imagePosition="only" alignment="center" state="on" imageScaling="proportionallyDown" inset="2" id="Ila-Cl-Vdj">
                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                 <font key="font" metaFont="system"/>
                             </buttonCell>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="30" id="Yqs-7z-DBZ"/>
+                                <constraint firstAttribute="height" constant="30" id="qBR-rC-TAe"/>
+                            </constraints>
                         </button>
                     </subviews>
                     <constraints>