Revision: 12419 http://sourceforge.net/p/skim-app/code/12419 Author: hofman Date: 2021-09-28 14:24:03 +0000 (Tue, 28 Sep 2021) Log Message: ----------- Get scrollview for pdfview from subview of the proper class, the documentView may not exist, and calling it may even lead to a crash, for instance from initWithCoder:
Modified Paths: -------------- trunk/NSGraphics_SKExtensions.h trunk/NSGraphics_SKExtensions.m trunk/PDFView_SKExtensions.m trunk/SKCompatibility.h trunk/SKImageToolTipWindow.m trunk/SKPDFView.m trunk/SKSecondaryPDFView.m trunk/SKSnapshotPDFView.m trunk/SKStringConstants.h trunk/SKStringConstants.m Modified: trunk/NSGraphics_SKExtensions.h =================================================================== --- trunk/NSGraphics_SKExtensions.h 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/NSGraphics_SKExtensions.h 2021-09-28 14:24:03 UTC (rev 12419) @@ -44,7 +44,7 @@ extern void SKSetHasDefaultAppearance(id object); extern void SKRunWithAppearance(id object, void (^code)(void)); -void SKRunWithLightAppearance(void (^code)(void)); +extern void SKRunWithLightAppearance(void (^code)(void)); #pragma mark - @@ -53,4 +53,8 @@ #pragma mark - -void SKDrawTextFieldBezel(NSRect rect, NSView *controlView); +extern void SKDrawTextFieldBezel(NSRect rect, NSView *controlView); + +#pragma mark - + +extern NSArray *SKColorInvertFilters(void); Modified: trunk/NSGraphics_SKExtensions.m =================================================================== --- trunk/NSGraphics_SKExtensions.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/NSGraphics_SKExtensions.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -39,6 +39,7 @@ #import "NSGraphics_SKExtensions.h" #import "NSGeometry_SKExtensions.h" #import "NSColor_SKExtensions.h" +#import <Quartz/Quartz.h> #if SDK_BEFORE(10_14) @@ -179,3 +180,16 @@ [cell drawWithFrame:rect inView:controlView]; [cell setControlView:nil]; } + +#pragma mark - + +extern NSArray *SKColorInvertFilters(void) { + NSArray *filters; + if (SKHasDarkAppearance(NSApp)) { + filters = [NSArray arrayWithObjects:[CIFilter filterWithName:@"CIColorInvert"], [CIFilter filterWithName:@"CIHueAdjust"], nil]; + [[filters lastObject] setValue:[NSNumber numberWithDouble:M_PI] forKey:kCIInputAngleKey]; + } else { + filters = [NSArray array]; + } + return filters; +} Modified: trunk/PDFView_SKExtensions.m =================================================================== --- trunk/PDFView_SKExtensions.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/PDFView_SKExtensions.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -274,7 +274,7 @@ } - (NSScrollView *)scrollView { - return [[self documentView] enclosingScrollView] ?: [self descendantOfClass:[NSScrollView class]]; + return [self descendantOfClass:[NSScrollView class]]; } - (void)setNeedsDisplayInRect:(NSRect)rect ofPage:(PDFPage *)page { Modified: trunk/SKCompatibility.h =================================================================== --- trunk/SKCompatibility.h 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKCompatibility.h 2021-09-28 14:24:03 UTC (rev 12419) @@ -227,3 +227,11 @@ #endif +#if SDK_BEFORE(10_14) + +@interface NSView (SKMojaveExtensions) +- (void)viewDidChangeEffectiveAppearance; +@end + +#endif + Modified: trunk/SKImageToolTipWindow.m =================================================================== --- trunk/SKImageToolTipWindow.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKImageToolTipWindow.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -39,6 +39,9 @@ #import "SKImageToolTipWindow.h" #import "NSGeometry_SKExtensions.h" #import "NSScreen_SKExtensions.h" +#import "SKStringConstants.h" +#import "NSColor_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define WINDOW_OFFSET 18.0 #define ALPHA_VALUE 0.95 @@ -113,18 +116,24 @@ if (isOpaque) { if ([backgroundView window]) [self setContentView:[[[NSView alloc] init] autorelease]]; - } else if ([backgroundView window] == nil) { - if (backgroundView == nil) { - backgroundView = [[NSVisualEffectView alloc] init]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[self contentView] setContentFilters:SKColorInvertFilters()]; + } else { + if ([backgroundView window] == nil) { + if (backgroundView == nil) { + backgroundView = [[NSVisualEffectView alloc] init]; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpartial-availability" - [backgroundView setMaterial:NSVisualEffectMaterialToolTip]; + [backgroundView setMaterial:NSVisualEffectMaterialToolTip]; #pragma clang diagnostic push - [backgroundView setState:NSVisualEffectStateActive]; - [backgroundView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [self setOpaque:NO]; + [backgroundView setState:NSVisualEffectStateActive]; + [backgroundView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [self setOpaque:NO]; + } + [self setContentView:backgroundView]; } - [self setContentView:backgroundView]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[self contentView] setContentFilters:[NSArray array]]; } } else if (isOpaque) { [self setBackgroundColor:[NSColor whiteColor]]; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKPDFView.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -251,12 +251,6 @@ @end -#if DEPLOYMENT_BEFORE(10_14) -@interface NSView (SKMojaveExtensions) -- (void)viewDidChangeEffectiveAppearance; -@end -#endif - #pragma mark - @implementation SKPDFView @@ -351,6 +345,9 @@ SKSetHasDefaultAppearance(self); SKSetHasLightAppearance([[self scrollView] contentView]); [self handleScrollerStyleChangedNotification:nil]; + + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; } - (id)initWithFrame:(NSRect)frameRect { @@ -3088,6 +3085,21 @@ return NO; } +#pragma mark Dark mode + +- (void)viewDidChangeEffectiveAppearance { + [super viewDidChangeEffectiveAppearance]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) { + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; + if (loupeWindow) { + NSView *loupeView = [loupeWindow contentView]; + if (RUNNING_AFTER(10_13)) + loupeView = [[loupeView subviews] firstObject] ?: loupeView; + [[[[loupeView layer] sublayers] firstObject] setFilters:SKColorInvertFilters()]; + } + } +} + #pragma mark Menu validation - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { @@ -3242,6 +3254,8 @@ if (wantsAdded) [[self window] addChildWindow:overlay ordered:NSWindowAbove]; } + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [layer setFilters:SKColorInvertFilters()]; return overlay; } Modified: trunk/SKSecondaryPDFView.m =================================================================== --- trunk/SKSecondaryPDFView.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKSecondaryPDFView.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -104,6 +104,9 @@ SKSetHasLightAppearance([[self scrollView] contentView]); [self handleScrollerStyleChangedNotification:nil]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScrollerStyleChangedNotification:) name:NSPreferredScrollerStyleDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePageChangedNotification:) @@ -162,6 +165,12 @@ name:PDFDocumentDidUnlockNotification object:document]; } +- (void)viewDidChangeEffectiveAppearance { + [super viewDidChangeEffectiveAppearance]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; +} + #pragma mark Popup buttons - (void)reloadPagePopUpButton { Modified: trunk/SKSnapshotPDFView.m =================================================================== --- trunk/SKSnapshotPDFView.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKSnapshotPDFView.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -103,6 +103,9 @@ SKSetHasLightAppearance([[self scrollView] contentView]); [self handleScrollerStyleChangedNotification:nil]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScrollerStyleChangedNotification:) name:NSPreferredScrollerStyleDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePDFViewFrameChangedNotification:) @@ -267,6 +270,12 @@ [super setDelegate:newDelegate]; } +- (void)viewDidChangeEffectiveAppearance { + [super viewDidChangeEffectiveAppearance]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:SKInvertColorsInDarkModeKey]) + [[[self scrollView] contentView] setContentFilters:SKColorInvertFilters()]; +} + - (void)handlePDFViewFrameChangedNotification:(NSNotification *)notification { if ([self autoFits]) { NSView *clipView = [[self scrollView] contentView]; Modified: trunk/SKStringConstants.h =================================================================== --- trunk/SKStringConstants.h 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKStringConstants.h 2021-09-28 14:24:03 UTC (rev 12419) @@ -141,3 +141,4 @@ extern NSString *SKDisplayNoteBoundsKey; extern NSString *SKDisplayPageBoundsKey; extern NSString *SKDisableHistoryHighlightsKey; +extern NSString *SKInvertColorsInDarkModeKey; Modified: trunk/SKStringConstants.m =================================================================== --- trunk/SKStringConstants.m 2021-09-23 15:07:17 UTC (rev 12418) +++ trunk/SKStringConstants.m 2021-09-28 14:24:03 UTC (rev 12419) @@ -142,3 +142,4 @@ NSString *SKDisplayNoteBoundsKey = @"SKDisplayNoteBounds"; NSString *SKDisplayPageBoundsKey = @"SKDisplayPageBounds"; NSString *SKDisableHistoryHighlightsKey = @"SKDisableHistoryHighlights"; +NSString *SKInvertColorsInDarkModeKey = @"SKInvertColorsInDarkMode"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit