Ken Thomases : winemac: Add WineApplication methods to convert from Cocoa to Win32 coordinate space .
Alexandre Julliard
julliard at winehq.org
Thu Feb 7 14:07:23 CST 2013
Module: wine
Branch: master
Commit: 6289a612ae6bbe0fcd07d7a3c8ff802db10fc5c6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6289a612ae6bbe0fcd07d7a3c8ff802db10fc5c6
Author: Ken Thomases <ken at codeweavers.com>
Date: Wed Feb 6 19:32:22 2013 -0600
winemac: Add WineApplication methods to convert from Cocoa to Win32 coordinate space.
Cocoa coordinate space has its origin in the lower left of the primary screen
and y increases up.
---
dlls/winemac.drv/cocoa_app.h | 3 +++
dlls/winemac.drv/cocoa_app.m | 31 +++++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.h b/dlls/winemac.drv/cocoa_app.h
index 2ccaec9..1166087 100644
--- a/dlls/winemac.drv/cocoa_app.h
+++ b/dlls/winemac.drv/cocoa_app.h
@@ -43,6 +43,9 @@
CGEventSourceKeyboardType keyboardType;
NSEvent* lastFlagsChanged;
+
+ CGFloat primaryScreenHeight;
+ BOOL primaryScreenHeightValid;
}
@property (nonatomic) CGEventSourceKeyboardType keyboardType;
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m
index 3853ec9..ae2353b 100644
--- a/dlls/winemac.drv/cocoa_app.m
+++ b/dlls/winemac.drv/cocoa_app.m
@@ -225,6 +225,32 @@ int macdrv_err_on;
}
}
+ - (CGFloat) primaryScreenHeight
+ {
+ if (!primaryScreenHeightValid)
+ {
+ NSArray* screens = [NSScreen screens];
+ if ([screens count])
+ {
+ primaryScreenHeight = NSHeight([[screens objectAtIndex:0] frame]);
+ primaryScreenHeightValid = TRUE;
+ }
+ else
+ return 1280; /* arbitrary value */
+ }
+
+ return primaryScreenHeight;
+ }
+
+ - (NSPoint) flippedMouseLocation:(NSPoint)point
+ {
+ /* This relies on the fact that Cocoa's mouse location points are
+ actually off by one (precisely because they were flipped from
+ Quartz screen coordinates using this same technique). */
+ point.y = [self primaryScreenHeight] - point.y;
+ return point;
+ }
+
/*
* ---------- NSApplication method overrides ----------
@@ -241,6 +267,11 @@ int macdrv_err_on;
/*
* ---------- NSApplicationDelegate methods ----------
*/
+ - (void)applicationDidChangeScreenParameters:(NSNotification *)notification
+ {
+ primaryScreenHeightValid = FALSE;
+ }
+
- (void)applicationDidResignActive:(NSNotification *)notification
{
macdrv_event event;
More information about the wine-cvs
mailing list