Revision: 2817
          http://skim-app.svn.sourceforge.net/skim-app/?rev=2817&view=rev
Author:   hofman
Date:     2007-09-03 12:33:17 -0700 (Mon, 03 Sep 2007)

Log Message:
-----------
Show hover window on screen for mouse location, which may not be the main 
screen.

Modified Paths:
--------------
    trunk/SKPDFHoverWindow.m

Modified: trunk/SKPDFHoverWindow.m
===================================================================
--- trunk/SKPDFHoverWindow.m    2007-09-03 17:52:53 UTC (rev 2816)
+++ trunk/SKPDFHoverWindow.m    2007-09-03 19:33:17 UTC (rev 2817)
@@ -50,6 +50,11 @@
 #define TEXT_MARGIN_Y   2.0
 #define ALPHA_VALUE     0.95
 
[EMAIL PROTECTED] NSScreen (SKExtensions)
++ (NSScreen *)screenForPoint:(NSPoint)point;
[EMAIL PROTECTED]
+
+
 @implementation SKPDFHoverWindow
 
 + (id)sharedHoverWindow {
@@ -291,7 +296,7 @@
         
         contentRect.size = [image size];
         contentRect.origin.y -= NSHeight(contentRect);
-        contentRect = SKConstrainRect(contentRect, [[NSScreen mainScreen] 
visibleFrame]);
+        contentRect = SKConstrainRect(contentRect, [[NSScreen 
screenForPoint:thePoint] visibleFrame]);
         [self setFrame:[self frameRectForContentRect:contentRect] display:NO];
         
         [[imageView enclosingScrollView] setBackgroundColor:color];
@@ -375,3 +380,51 @@
 }
 
 @end
+
+
+static inline float SKSquaredDistanceFromPointToRect(NSPoint point, NSRect 
rect) {
+    float dx, dy;
+
+    if (point.x < NSMinX(rect))
+        dx = NSMinX(rect) - point.x;
+    else if (point.x > NSMaxX(rect))
+        dx = point.x - NSMaxX(rect);
+    else
+        dx = 0.0;
+
+    if (point.y < NSMinY(rect))
+        dy = NSMinY(rect) - point.y;
+    else if (point.y > NSMaxY(rect))
+        dy = point.y - NSMaxY(rect);
+    else
+        dy = 0.0;
+    
+    return dx * dx + dy * dy;
+}
+
+
[EMAIL PROTECTED] NSScreen (SKExtensions)
+
++ (NSScreen *)screenForPoint:(NSPoint)point {
+    NSEnumerator *screenEnum = [[NSScreen screens] objectEnumerator];
+    NSScreen *aScreen;
+    NSScreen *screen = nil;
+    float distanceSquared = FLT_MAX;
+    
+    while (aScreen = [screenEnum nextObject]) {
+        NSRect frame = [aScreen frame];
+        
+        if (NSPointInRect(point, frame))
+            return aScreen;
+        
+        float aDistanceSquared = SKSquaredDistanceFromPointToRect(point, 
frame);
+        if (aDistanceSquared < distanceSquared) {
+            distanceSquared = aDistanceSquared;
+            screen = aScreen;
+        }
+    }
+    
+    return screen;
+}
+
[EMAIL PROTECTED]


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to