SDL2 использует глобальную систему координат экрана. Каждое устройство отображения имеет свои границы внутри этого координатного пространства. Следующий пример помещает окно на втором устройстве отображения:
// enumerate displays
int displays = SDL_GetNumVideoDisplays();
assert(displays > 1); // assume we have secondary monitor
// get display bounds for all displays
vector<SDL_Rect> displayBounds;
for(int i = 0; i < displays; i++) {
displayBounds.push_back(SDL_Rect());
SDL_GetDisplayBounds(i, &displayBounds.back());
}
// window of dimensions 500 * 500 offset 100 pixels on secondary monitor
int x = displayBounds[ 1 ].x + 100;
int y = displayBounds[ 1 ].y + 100;
int w = 500;
int h = 500;
// so now x and y are on secondary display
SDL_Window * window = SDL_CreateWindow("title", x, y, w, h, FLAGS...);
Глядя на определение SDL_WINDOWPOS_CENTERED
в SDL_video.h
мы видим, она определяется как
#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0)
, чтобы мы могли также использовать макрос SDL_WINDOWPOS_CENTERED_DISPLAY(n)
где n
это индекс отображения.
Обновление для Windows 10 - DPI масштабирование проблема
Похоже, что это действительно ошибка с SDL2 и изменения масштаба DPI в Windows (т.е. текст масштаба).
Вот два отчета об ошибках, относящихся к проблеме. Они оба по-прежнему остаются нерешенными.
https://bugzilla.libsdl.org/show_bug.cgi?id=3433
https://bugzilla.libsdl.org/show_bug.cgi?id=2713
Потенциальное решение
Я уверен, что ОП может использовать API WIN32, чтобы определить масштаб точек на дюйм, для scale != 100%
, а затем скорректировать границы от этого.
Я хотел бы прокомментировать исходный вопрос, чтобы ответить на ваш вопрос, но у меня пока нет этой привилегии. Моя догадка меняет ** текстовую шкалу ** в Windows 10 влияет на координату экрана с SDL каким-то образом. У меня была другая, но связанная с этим проблема, пока я не понял, как использовать SDL2 с дисплеем Retina для Mac. (Retina использует масштабирование). Я предлагаю вам попробовать следующий эксперимент: вывести границы экрана и проверить, изменяются ли они при изменении настройки шкалы текста под Windows 10. –
Возможно, это может быть ошибка с SDL2. Вы искали других, имеющих тот же опыт, в Windows 10? –
Если мое предположение верно, все позиции экрана будут умножены на 1,25 в результате 125% текстовой шкалы. –