From 8c36246dca57728a0d0ad592897eb08107a83a1a Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Tue, 4 Aug 2020 06:32:19 -0400 Subject: [PATCH] Add encoding. --- Headers/AppKit/NSTextFinder.h | 12 ++++----- Source/GSTextFinder.h | 3 ++- Source/NSTextFinder.m | 51 ++++++++++++++++++++++++++++++----- Source/NSTextView.m | 9 +++++++ 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/Headers/AppKit/NSTextFinder.h b/Headers/AppKit/NSTextFinder.h index ae845d343..5254f8d62 100644 --- a/Headers/AppKit/NSTextFinder.h +++ b/Headers/AppKit/NSTextFinder.h @@ -69,6 +69,7 @@ enum typedef NSInteger NSTextFinderMatchingType; typedef NSString* NSPasteboardTypeTextFinderOptionKey; + APPKIT_EXPORT NSPasteboardTypeTextFinderOptionKey const NSTextFinderCaseInsensitiveKey; APPKIT_EXPORT NSPasteboardTypeTextFinderOptionKey const NSTextFinderMatchingTypeKey; @@ -76,7 +77,11 @@ APPKIT_EXPORT NSPasteboardTypeTextFinderOptionKey const NSTextFinderMatchingType { IBOutlet id _client; IBOutlet id _findBarContainer; + BOOL _findIndicatorNeedsUpdate; + BOOL _incrementalSearchingEnabled; + BOOL _incrementalSearchingShouldDimContentView; + NSArray *_incrementalMatchRanges; } // Validating and performing @@ -89,7 +94,7 @@ APPKIT_EXPORT NSPasteboardTypeTextFinderOptionKey const NSTextFinderMatchingType - (void) setClient: (id) client; - (id) findBarContainer; - (void) setFindBarContainer: (id) findBarContainer; -- (BOOL) findIndicatodNeedsUpdate; +- (BOOL) findIndicatorNeedsUpdate; - (void) setFindIndicatorNeedsUpdate: (BOOL)flag; - (BOOL) isIncrementalSearchingEnabled; - (void) setIncrementalSearchingEnabled: (BOOL)flag; @@ -112,17 +117,12 @@ APPKIT_EXPORT NSPasteboardTypeTextFinderOptionKey const NSTextFinderMatchingType - (BOOL) isSelectable; - (BOOL) allowsMultipleSelection; - (BOOL) isEditable; - - (NSString *) string; - - (NSString *) stringAtIndex: (NSUInteger)characterIndex effectiveRange: (NSRangePointer)outRange endsWithSearchBoundary: (BOOL *)outFlag; - - (NSUInteger) stringLength; - - (NSRange) firstSelectedRange; - - (NSArray *) selectedRanges; - (void) setSelectedRanges: (NSArray *)ranges; - (void) scrollRangeToVisible:(NSRange)range; diff --git a/Source/GSTextFinder.h b/Source/GSTextFinder.h index 74580194c..d13d15bba 100644 --- a/Source/GSTextFinder.h +++ b/Source/GSTextFinder.h @@ -31,6 +31,7 @@ #define _GS_TEXT_FINDER_H #import +#import "AppKit/NSTextFinder.h" @class NSString; @class NSButton; @@ -38,7 +39,7 @@ @class NSPanel; @class NSTextField; -@interface GSTextFinder : NSObject +@interface GSTextFinder : NSTextFinder { // local attributes NSString *findString; diff --git a/Source/NSTextFinder.m b/Source/NSTextFinder.m index 98d37ae6b..0c94ad915 100644 --- a/Source/NSTextFinder.m +++ b/Source/NSTextFinder.m @@ -23,10 +23,12 @@ */ #import +#import #import "AppKit/NSTextFinder.h" @implementation NSTextFinder + // Validating and performing - (void)performAction:(NSTextFinderAction)op { @@ -60,36 +62,39 @@ { } -- (BOOL) findIndicatodNeedsUpdate +- (BOOL) findIndicatorNeedsUpdate { - return NO; + return _findIndicatorNeedsUpdate; } - (void) setFindIndicatorNeedsUpdate: (BOOL)flag { + _findIndicatorNeedsUpdate = flag; } - (BOOL) isIncrementalSearchingEnabled { - return NO; + return _incrementalSearchingEnabled; } - (void) setIncrementalSearchingEnabled: (BOOL)flag { + _incrementalSearchingEnabled = flag; } - (BOOL) incrementalSearchingShouldDimContentView { - return NO; + return _incrementalSearchingShouldDimContentView; } - (void) setIncrementalSearchingShouldDimContentView: (BOOL)flag { + _incrementalSearchingShouldDimContentView = flag; } - (NSArray *) incrementalMatchRanges { - return nil; + return _incrementalMatchRanges; } + (void) drawIncrementalMatchHighlightInRect: (NSRect)rect @@ -98,12 +103,46 @@ - (void) noteClientStringWillChange { + // nothing... } // NSCoding... - (instancetype) initWithCoder: (NSCoder *)coder { - return [super init]; + self = [super init]; + if (self != nil) + { + if ([coder allowsKeyedCoding]) + { + if ([coder containsValueForKey: @"NSFindIndicatorNeedsUpdate"]) + { + _findIndicatorNeedsUpdate = [coder decodeBoolForKey: @"NSFindIndicatorNeedsUpdate"]; + } + if ([coder containsValueForKey: @"NSIncrementalSearchingEnabled"]) + { + _incrementalSearchingEnabled = [coder decodeBoolForKey: @"NSIncrementalSearchingEnabled"]; + } + if ([coder containsValueForKey: @"NSIncrementalSearchingShouldDimContentView"]) + { + _incrementalSearchingShouldDimContentView = [coder decodeBoolForKey: @"NSIncrementalSearchingShouldDimContentView"]; + } + if ([coder containsValueForKey: @"NSIncrementalMatchRanges"]) + { + ASSIGN(_incrementalMatchRanges, [coder decodeObjectForKey: @"NSIncrementalMatchRanges"]); + } + } + else + { + [coder decodeValueOfObjCType: @encode(BOOL) + at: &_findIndicatorNeedsUpdate]; + [coder decodeValueOfObjCType: @encode(BOOL) + at: &_incrementalSearchingEnabled]; + [coder decodeValueOfObjCType: @encode(BOOL) + at: &_incrementalSearchingShouldDimContentView]; + ASSIGN(_incrementalMatchRanges, [coder decodeObject]); + } + } + return self; } - (void) encodeWithCoder: (NSCoder *)coder diff --git a/Source/NSTextView.m b/Source/NSTextView.m index 102e5b269..428b8aae9 100644 --- a/Source/NSTextView.m +++ b/Source/NSTextView.m @@ -6158,6 +6158,15 @@ configuation! */ - (void) drawCharactersInRange: (NSRange)range forContentView: (NSView *)view { + NSArray *rectsArray = [self rectsForCharacterRange: range]; + NSAttributedString *charactersInRange = [[self string] substringWithRange: range]; + NSValue *v = [rectsArray objectAtIndex: 0]; + NSRect rect = [v rectValue]; + + [charactersInRange drawWithRect: rect + options: 0 + attributes: nil + context: nil]; } @end