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

Reply via email to