From fe400c14878fb3063bb7af9286cd05efe8e2397d Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Sun, 21 Apr 2013 10:59:57 +0700 Subject: [PATCH] Disable font smoothing for dark themes If you wish to always have font smoothing enabled you can run: defaults write com.macromates.TextMate.preview fontSmoothing 1 Setting the value to 0 causes it to always be disabled and deleting the key (or setting it to 2) has it disabled only for dark themes. --- Frameworks/OakTextView/src/OakTextView.h | 8 ++++++++ Frameworks/OakTextView/src/OakTextView.mm | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/Frameworks/OakTextView/src/OakTextView.h b/Frameworks/OakTextView/src/OakTextView.h index 0feb542c..3c86bfc9 100644 --- a/Frameworks/OakTextView/src/OakTextView.h +++ b/Frameworks/OakTextView/src/OakTextView.h @@ -14,6 +14,13 @@ namespace bundles { struct item_t; typedef std::shared_ptr item_ptr; } enum folding_state_t { kFoldingNone, kFoldingTop, kFoldingCollapsed, kFoldingBottom }; +enum OTVFontSmoothing : NSUInteger +{ + OTVFontSmoothingDisabled = 0, + OTVFontSmoothingEnabled = 1, + OTVFontSmoothingAuto = 2, +}; + @protocol OakTextViewDelegate @optional - (NSString*)scopeAttributes; @@ -27,6 +34,7 @@ PUBLIC @interface OakTextView : OakView @property (nonatomic) NSCursor* ibeamCursor; @property (nonatomic) NSFont* font; @property (nonatomic) BOOL antiAlias; +@property (nonatomic) OTVFontSmoothing fontSmoothing; @property (nonatomic) size_t tabSize; @property (nonatomic) BOOL showInvisibles; @property (nonatomic) BOOL softWrap; diff --git a/Frameworks/OakTextView/src/OakTextView.mm b/Frameworks/OakTextView/src/OakTextView.mm index 2855857f..d9b99fab 100644 --- a/Frameworks/OakTextView/src/OakTextView.mm +++ b/Frameworks/OakTextView/src/OakTextView.mm @@ -47,6 +47,7 @@ OAK_DEBUG_VAR(OakTextView_Macros); int32_t const NSWrapColumnWindowWidth = 0; int32_t const NSWrapColumnAskUser = -1; +NSString* const kUserDefaultsFontSmoothingKey = @"fontSmoothing"; NSString* const kUserDefaultsDisableAntiAliasKey = @"disableAntiAlias"; NSString* const kUserDefaultsDisableTypingPairsKey = @"disableTypingPairs"; NSString* const kUserDefaultsScrollPastEndKey = @"scrollPastEnd"; @@ -517,6 +518,7 @@ static std::string shell_quote (std::vector paths) _showInvisibles = settings.get(kSettingsShowInvisiblesKey, false); _scrollPastEnd = [[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsScrollPastEndKey]; _antiAlias = ![[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsDisableAntiAliasKey]; + _fontSmoothing = (OTVFontSmoothing)[[NSUserDefaults standardUserDefaults] integerForKey:kUserDefaultsFontSmoothingKey]; spellingDotImage = [NSImage imageNamed:@"SpellingDot" inSameBundleAsClass:[self class]]; foldingDotsImage = [NSImage imageNamed:@"FoldingDots" inSameBundleAsClass:[self class]]; @@ -700,6 +702,8 @@ doScroll: CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; if(!self.antiAlias) CGContextSetShouldAntialias(context, false); + if(self.fontSmoothing == OTVFontSmoothingAuto && theme->is_dark() || self.fontSmoothing == OTVFontSmoothingDisabled) + CGContextSetShouldSmoothFonts(context, false); NSImage* pdfImage = foldingDotsImage; auto foldingDotsFactory = [&pdfImage](double width, double height) -> CGImageRef @@ -1187,6 +1191,10 @@ static void update_menu_key_equivalents (NSMenu* menu, action_to_key_t const& ac } update_menu_key_equivalents([NSApp mainMenu], actionToKey); + + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ + kUserDefaultsFontSmoothingKey : @(OTVFontSmoothingAuto), + }]; } [NSApp registerServicesMenuSendTypes:@[ NSStringPboardType ] returnTypes:@[ NSStringPboardType ]]; @@ -2792,6 +2800,7 @@ static char const* kOakMenuItemTitle = "OakMenuItemTitle"; - (void)userDefaultsDidChange:(id)sender { self.antiAlias = ![[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsDisableAntiAliasKey]; + self.fontSmoothing = (OTVFontSmoothing)[[NSUserDefaults standardUserDefaults] integerForKey:kUserDefaultsFontSmoothingKey]; self.scrollPastEnd = [[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultsScrollPastEndKey]; }