Я пытаюсь сделать приложение с окном без полей в SDL2.
Я реализовал перемещение и изменение размера с помощью drag. Перемещение работает отлично. Изменение размера путем перетаскивания нижней и правой границ также отлично работает.
Изменение размера, перетаскивая верхнюю и левую границы, отлично работает, но имеет косметическую ошибку.
В принципе, если я перетаскиваю левую границу, правая сторона окна делает небольшие прыжки (возможно, 1-2 пикселя), когда я его перемещаю. Перетаскивание с верхней границы приводит к тому, что дно совершает небольшие прыжки. Когда я останавливаю перетаскивание окна, всегда находится в правильном положении, но эта ошибка делает ее очень неэлегантной.
Ошибка существует в Linux (несколько WM/DE) и Windows. Я не тестировал OS X.
Я использую SDL_SetWindowPosition
и SDL_SetWindowSize
. Я пробовал обходить SDL и использовать XMoveResizeWindow
, но он вызывает ту же ошибку.
Хотя я бы предпочел не обойти SDL, я был бы готов использовать Xlib и/или WinAPI, если мне нужно.
Вот фрагмент моего кода:
// mousePos is initialized to current mouse pos
// newWindowSize initilized to current window size
// newWindowPos initialized to current window position
// mWindowResizeOffset variable is where the mouse grabbed the window
// omitted code for right and bottom borders because the bug doesn't exist there
// Logic for the top border is the same
if (mLeftBorderGrabbed)
{
newWindowPos.x = mousePos.x - mWindowResizeOffset.x;
newWindowSize.x += windowPos.x - newWindowPos.x;
}
SDL_SetWindowPosition(mInternalWindow, newWindowPos.x, newWindowPos.y);
SDL_SetWindowSize(mInternalWindow, newWindowSize.x, newWindowSize.y);