mirror of
https://github.com/encounter/SDL.git
synced 2025-12-21 18:59:15 +00:00
Introduces Cocoa_GetWindowDisplayIndex. This enable a proper management for dpi when switching between retina and non-retina displays.
This commit is contained in:
committed by
Sam Lantinga
parent
c39df2fb0c
commit
76afb8583b
@@ -103,6 +103,7 @@ Cocoa_CreateDevice(int devindex)
|
||||
device->SetWindowGammaRamp = Cocoa_SetWindowGammaRamp;
|
||||
device->GetWindowGammaRamp = Cocoa_GetWindowGammaRamp;
|
||||
device->GetWindowICCProfile = Cocoa_GetWindowICCProfile;
|
||||
device->GetWindowDisplayIndex = Cocoa_GetWindowDisplayIndex;
|
||||
device->SetWindowMouseRect = Cocoa_SetWindowMouseRect;
|
||||
device->SetWindowMouseGrab = Cocoa_SetWindowMouseGrab;
|
||||
device->SetWindowKeyboardGrab = Cocoa_SetWindowKeyboardGrab;
|
||||
|
||||
@@ -153,6 +153,7 @@ extern void Cocoa_SetWindowAlwaysOnTop(_THIS, SDL_Window * window, SDL_bool on_t
|
||||
extern void Cocoa_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen);
|
||||
extern int Cocoa_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp);
|
||||
extern void* Cocoa_GetWindowICCProfile(_THIS, SDL_Window * window, size_t * size);
|
||||
extern int Cocoa_GetWindowDisplayIndex(_THIS, SDL_Window * window);
|
||||
extern int Cocoa_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp);
|
||||
extern void Cocoa_SetWindowMouseRect(_THIS, SDL_Window * window);
|
||||
extern void Cocoa_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed);
|
||||
|
||||
@@ -2197,6 +2197,36 @@ Cocoa_GetWindowICCProfile(_THIS, SDL_Window * window, size_t * size)
|
||||
return retIccProfileData;
|
||||
}
|
||||
|
||||
int Cocoa_GetWindowDisplayIndex(_THIS, SDL_Window * window){
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
|
||||
/* Not recognized via CHECK_WINDOW_MAGIC */
|
||||
if (data == NULL){
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Considering that we already have the display coordinates in which the window is placed (described via displayframe)
|
||||
instead of checking in which display the window is placed, we should check which SDL display matches the display described
|
||||
via displayframe.
|
||||
*/
|
||||
CGRect displayframe = data->nswindow.screen.frame;
|
||||
SDL_Point display_center;
|
||||
SDL_Rect sdl_display_rect;
|
||||
|
||||
display_center.x = displayframe.origin.x + displayframe.size.width / 2;
|
||||
display_center.y = displayframe.origin.y + displayframe.size.height / 2;
|
||||
|
||||
for (int i = 0; i < SDL_GetNumVideoDisplays(); i++){
|
||||
SDL_GetDisplayBounds(i, &sdl_display_rect);
|
||||
if (SDL_EnclosePoints(&display_center, 1, &sdl_display_rect, NULL)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
SDL_SetError("Couldn't find the display where the window is attached to.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
Cocoa_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user