Revision: 15157
          http://sourceforge.net/p/skim-app/code/15157
Author:   hofman
Date:     2025-05-04 21:25:51 +0000 (Sun, 04 May 2025)
Log Message:
-----------
enerate image for tool tip with a slight delay, so itdoesnot happen when just 
moving over a link

Modified Paths:
--------------
    trunk/SKImageToolTipWindow.h
    trunk/SKImageToolTipWindow.m

Modified: trunk/SKImageToolTipWindow.h
===================================================================
--- trunk/SKImageToolTipWindow.h        2025-05-04 16:39:51 UTC (rev 15156)
+++ trunk/SKImageToolTipWindow.h        2025-05-04 21:25:51 UTC (rev 15157)
@@ -45,6 +45,7 @@
 @interface SKImageToolTipWindow : SKAnimatedBorderlessWindow {
     id <SKImageToolTipContext> context;
     NSPoint point;
+    CGFloat scale;
     NSImageView *imageView;
     NSImage *image;
     BOOL shouldShow;

Modified: trunk/SKImageToolTipWindow.m
===================================================================
--- trunk/SKImageToolTipWindow.m        2025-05-04 16:39:51 UTC (rev 15156)
+++ trunk/SKImageToolTipWindow.m        2025-05-04 21:25:51 UTC (rev 15157)
@@ -50,6 +50,7 @@
 #define AUTO_HIDE_TIME_INTERVAL 10.0
 #define DEFAULT_SHOW_DELAY      1.5
 #define ALT_SHOW_DELAY          0.2
+#define GENERATE_DELAY          0.1
 #define WINDOW_LEVEL            ((NSWindowLevel)104)
 #define DEFAULT_SCALE           -2.0
 
@@ -159,22 +160,40 @@
         [self show];
 }
 
+- (void)generateImage {
+    id <SKImageToolTipContext> aContext = context;
+    CGFloat backingScale = [[NSScreen mainScreen] backingScaleFactor];
+    NSNumber *usedScaleNumber = [[NSUserDefaults standardUserDefaults] 
objectForKey:SKToolTipScaleKey];
+    CGFloat usedScale = [usedScaleNumber 
respondsToSelector:@selector(doubleValue)] ? [usedScaleNumber doubleValue] : 
DEFAULT_SCALE;
+    if (usedScale <= 0.0)
+        usedScale = usedScale < 0.0 ? fmin(scale, -usedScale) : scale;
+    
+    dispatch_async([[self class] imageQueue], ^{
+        
+        NSImage *anImage = [aContext toolTipImageWithScale:usedScale 
backingScale:backingScale];
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            
+            // check if another image is enerated or we are fading out
+            if (aContext == context) {
+                image = anImage;
+                if (image == nil)
+                    [self fadeOut];
+                else if (shouldShow)
+                    [self show];
+            }
+            
+        });
+        
+    });
+}
+
 - (void)stopAnimation {
     [super stopAnimation];
+    [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(generateImage) object:nil];
     [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(showDelayed) object:nil];
 }
 
-static inline CGFloat toolTipScale(CGFloat scale) {
-    NSNumber *usedScaleNumber = [[NSUserDefaults standardUserDefaults] 
objectForKey:SKToolTipScaleKey];
-    CGFloat usedScale = [usedScaleNumber 
respondsToSelector:@selector(doubleValue)] ? [usedScaleNumber doubleValue] : 
DEFAULT_SCALE;
-    if (usedScale > 0.0)
-        return usedScale;
-    else if (usedScale < 0.0)
-        return fmin(scale, -usedScale);
-    else
-        return scale;
-}
-
 - (void)showForImageContext:(id <SKImageToolTipContext>)aContext 
scale:(CGFloat)aScale atPoint:(NSPoint)aPoint {
     point = aPoint;
     
@@ -182,30 +201,11 @@
         [self stopAnimation];
         
         context = aContext;
+        scale = aScale;
         image = nil;
         shouldShow = NO;
         
-        CGFloat backingScale = [[NSScreen mainScreen] backingScaleFactor];
-        
-        dispatch_async([[self class] imageQueue], ^{
-            
-            NSImage *anImage = [aContext 
toolTipImageWithScale:toolTipScale(aScale) backingScale:backingScale];
-            
-            dispatch_async(dispatch_get_main_queue(), ^{
-                
-                // check if another image is enerated or we are fading out
-                if (aContext == context) {
-                    image = anImage;
-                    if (image == nil)
-                        [self fadeOut];
-                    else if (shouldShow)
-                        [self show];
-                }
-                
-            });
-            
-        });
-        
+        [self performSelector:@selector(generateImage) withObject:nil 
afterDelay:GENERATE_DELAY];
         [self performSelector:@selector(showDelayed) withObject:nil 
afterDelay:[self isVisible] ? ALT_SHOW_DELAY : DEFAULT_SHOW_DELAY];
     }
 }

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