Hej potrzebuje pomocy napisałem kod który średnio działa. Chodzi o to aby okno GLWF zmieniało swoją pozycję, po kliknięciu na górną cześć okna. Tak jak to jest w innych aplikacjach typu chrome,Discord, nazwet CMD
Tylko że ja nie chcę w mojej aplikacji paska dekoracyjnego { glfwWindowHint(GLFW_DECORATED, 0); }
problem polega na tym:
1. okno jakby migocze
2.kursor myszy się "ślizga" bo oknie aplikacji
Chcę aby to działało jak na pasku dekoracyjnym, aby mysz się przyczepiała do okna i zmieniało odpowiednio pozycję okna
Tutaj mój kod
void ChangePos(GLFWwindow* window)
{
static ImVec2 lastMousePos;
static ImVec2 lastWindowPos;
static bool isDraggingWindow = false;
static ImVec2 windowDragPos;
ImVec2 currentMousePos = ImGui::GetMousePos();
bool isWindowHovered = ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
if (ImGui::IsMouseDown(ImGuiMouseButton_Left) && (currentMousePos.y <= 110 || isWindowHovered)) {
if (!isDraggingWindow) {
isDraggingWindow = true;
windowDragPos = currentMousePos;
int windowPosX, windowPosY;
glfwGetWindowPos(window, &windowPosX, &windowPosY);
lastWindowPos.x = windowPosX;
lastWindowPos.y = windowPosY;
}
}
else {
isDraggingWindow = false;
}
if (isDraggingWindow) {
ImVec2 mouseDelta = currentMousePos - windowDragPos;
ImVec2 newWindowPos = lastWindowPos + mouseDelta;
glfwMakeContextCurrent(window);
glfwSetWindowPos(window, (int)newWindowPos.x, (int)newWindowPos.y);
lastWindowPos = newWindowPos;
windowDragPos = currentMousePos;
}
}
Napisałem jeszcze na szybko callback ale na nic
void cursor_enter_callback(GLFWwindow* window, int entered)
{
if (entered) {
glfwSetCursor(window, glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR));
}
else {
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
}
}
void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
{
static double lastX = xpos;
static double lastY = ypos;
static bool isDragging = false;
if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS && !isDragging && (ypos <= 110 || ImGui::IsWindowHovered())) {
isDragging = true;
lastX = xpos;
lastY = ypos;
}
if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_RELEASE) {
isDragging = false;
}
if (isDragging) {
int winX, winY;
glfwGetWindowPos(window, &winX, &winY);
glfwSetWindowPos(window, winX + (xpos - lastX), winY + (ypos - lastY));
lastX = xpos;
lastY = ypos;
}
}