123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- //
- // 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
|