mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
macos: handle point conversion on older macOS
On older systems, the availability of some methods seem to be incorrect based on Apple documentation. This works around the issue by using the rect conversion on older systems.
This commit is contained in:
parent
77feb51b9c
commit
28a6f0df05
@ -466,7 +466,7 @@
|
|||||||
|
|
||||||
inTrackManualResize = YES;
|
inTrackManualResize = YES;
|
||||||
|
|
||||||
mouse_location = [self convertPointToScreen:[self mouseLocationOutsideOfEventStream]];
|
mouse_location = convert_nspoint_to_screen (self, [self mouseLocationOutsideOfEventStream]);
|
||||||
mdx = initialResizeLocation.x - mouse_location.x;
|
mdx = initialResizeLocation.x - mouse_location.x;
|
||||||
mdy = initialResizeLocation.y - mouse_location.y;
|
mdy = initialResizeLocation.y - mouse_location.y;
|
||||||
|
|
||||||
@ -588,7 +588,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
initialResizeFrame = [self frame];
|
initialResizeFrame = [self frame];
|
||||||
initialResizeLocation = [self convertPointToScreen:[self mouseLocationOutsideOfEventStream]];
|
initialResizeLocation = convert_nspoint_to_screen (self, [self mouseLocationOutsideOfEventStream]);
|
||||||
}
|
}
|
||||||
|
|
||||||
-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
|
-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
|
||||||
|
@ -700,7 +700,7 @@ get_surface_point_from_screen_point (GdkSurface *surface,
|
|||||||
NSPoint point;
|
NSPoint point;
|
||||||
|
|
||||||
nswindow = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (surface));
|
nswindow = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (surface));
|
||||||
point = [nswindow convertPointFromScreen:screen_point];
|
point = convert_nspoint_from_screen (nswindow, screen_point);
|
||||||
|
|
||||||
*x = point.x;
|
*x = point.x;
|
||||||
*y = surface->height - point.y;
|
*y = surface->height - point.y;
|
||||||
@ -821,7 +821,7 @@ get_surface_from_ns_event (GdkMacosDisplay *self,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*screen_point = [(GdkMacosWindow *)[nsevent window] convertPointToScreen:point];
|
*screen_point = convert_nspoint_to_screen ([nsevent window], point);
|
||||||
*x = point.x;
|
*x = point.x;
|
||||||
*y = surface->height - point.y;
|
*y = surface->height - point.y;
|
||||||
}
|
}
|
||||||
|
@ -40,5 +40,36 @@ struct _GdkPoint
|
|||||||
};
|
};
|
||||||
typedef struct _GdkPoint GdkPoint;
|
typedef struct _GdkPoint GdkPoint;
|
||||||
|
|
||||||
|
static inline NSPoint
|
||||||
|
convert_nspoint_from_screen (NSWindow *window,
|
||||||
|
NSPoint point)
|
||||||
|
{
|
||||||
|
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_15_AND_LATER
|
||||||
|
return [window convertPointFromScreen:point];
|
||||||
|
#else
|
||||||
|
/* Apple documentation claims that convertPointFromScreen is available
|
||||||
|
* on 10.12+. However, that doesn't seem to be the case when using it.
|
||||||
|
* Instead, we'll just use it on modern 10.15 systems and fallback to
|
||||||
|
* converting using rects on older systems.
|
||||||
|
*/
|
||||||
|
return [window convertRectFromScreen:NSMakeRect (point.x, point.y, 0, 0)].origin;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline NSPoint
|
||||||
|
convert_nspoint_to_screen (NSWindow *window,
|
||||||
|
NSPoint point)
|
||||||
|
{
|
||||||
|
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_15_AND_LATER
|
||||||
|
return [window convertPointToScreen:point];
|
||||||
|
#else
|
||||||
|
/* Apple documentation claims that convertPointToScreen is available
|
||||||
|
* on 10.12+. However, that doesn't seem to be the case when using it.
|
||||||
|
* Instead, we'll just use it on modern 10.15 systems and fallback to
|
||||||
|
* converting using rects on older systems.
|
||||||
|
*/
|
||||||
|
return [window convertRectToScreen:NSMakeRect (point.x, point.y, 0, 0)].origin;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __GDK_MACOS_UTILS_PRIVATE_H__ */
|
#endif /* __GDK_MACOS_UTILS_PRIVATE_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user