I’m working on GdkQuartz to bring it up to date with the rest of Gdk. I’m 
starting with GdkDisplay and GdkMonitor mostly because of 
<https://gitlab.gnome.org/GNOME/gtk/issues/1312>. This question may also bear 
upon https://gitlab.gnome.org/GNOME/gtk/issues/1029 
<https://gitlab.gnome.org/GNOME/gtk/issues/1029> as well as other pointer 
coordinate issues some users have reported on downstream applications.

Under the old GdkScreen regime Gdk had a “root window” with 0,0 in the upper 
left corner of the upper-left-most monitor and all point values are unsigned, 
increasing down and to the right. Quartz uses a different coordinate system 
with the origin at the bottom-left corner of the “primary” monitor with point 
values increasing up and to the right. Monitors placed below or to the left of 
the “primary” monitor will have negative coordinates. gdkscreen-quartz and 
gdkwindow-quartz have conversion code to create a fake root window and to 
translate between the two coordinate systems.

The new GdkDisplay/GdkMonitor regime does away with the root window and 
introduces gdk_display_get_monitor_at_point and 
gdk_display_get_monitor_at_window that iterate over the list of active monitors 
testing for whether the coordinates of the point or window lie inside each 
monitor’s work area. That’s great, it’s similar to the way Quartz works... but 
are there any assumptions made about coordinates that need translation between 
Gdk and Quartz?

John Ralls

gtk-devel-list mailing list

Reply via email to