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