Fix mouse interaction when hovering GUI
This commit is contained in:
parent
29f2abc7b5
commit
6741e0ae9b
2 changed files with 19 additions and 15 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
[Window][Debug##Default]
|
[Window][Debug##Default]
|
||||||
Pos=60,60
|
Pos=38,60
|
||||||
Size=400,400
|
Size=400,400
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
|
|
@ -9,8 +9,8 @@ Size=550,680
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Hi there]
|
[Window][Hi there]
|
||||||
Pos=77,92
|
Pos=158,190
|
||||||
Size=450,349
|
Size=422,452
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Table][0xC9935533,3]
|
[Table][0xC9935533,3]
|
||||||
|
|
|
||||||
28
main.cpp
28
main.cpp
|
|
@ -386,6 +386,7 @@ int main([[maybe_unused]]int argc, [[maybe_unused]]char **argv)
|
||||||
double cursor_y;
|
double cursor_y;
|
||||||
camera_t the_camera;
|
camera_t the_camera;
|
||||||
bool mouse_pressed;
|
bool mouse_pressed;
|
||||||
|
bool mouse_over_gui;
|
||||||
|
|
||||||
the_camera.position = glm::vec3(0.0f, 0.0f, 1.0f);
|
the_camera.position = glm::vec3(0.0f, 0.0f, 1.0f);
|
||||||
the_camera.size = glm::vec2(1.0f, 1.0f);
|
the_camera.size = glm::vec2(1.0f, 1.0f);
|
||||||
|
|
@ -425,13 +426,24 @@ int main([[maybe_unused]]int argc, [[maybe_unused]]char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
mouse_pressed = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS;
|
mouse_pressed = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS;
|
||||||
|
mouse_over_gui = ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem);
|
||||||
|
|
||||||
|
cursor_dx = cursor_x;
|
||||||
|
cursor_dy = cursor_y;
|
||||||
|
|
||||||
|
glfwGetCursorPos(window, &cursor_x, &cursor_y);
|
||||||
|
|
||||||
|
cursor_dx -= cursor_x;
|
||||||
|
cursor_dy -= cursor_y;
|
||||||
|
|
||||||
// Mouse movement
|
// Mouse movement
|
||||||
if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS)
|
if (!mouse_over_gui && glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS)
|
||||||
{
|
{
|
||||||
|
fprintf(stdout, "Moving camera by %f %f\n", cursor_dx, cursor_dx);
|
||||||
// mouse delta!
|
// mouse delta!
|
||||||
the_camera.position.x += cursor_dx;
|
the_camera.position.x += cursor_dx * the_camera.size.x/window_width;
|
||||||
the_camera.position.y += cursor_dy;
|
// The Y coord is inverted
|
||||||
|
the_camera.position.y -= cursor_dy * the_camera.size.y/window_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (the_camera.size.x < 0.1)
|
if (the_camera.size.x < 0.1)
|
||||||
|
|
@ -439,14 +451,6 @@ int main([[maybe_unused]]int argc, [[maybe_unused]]char **argv)
|
||||||
if (the_camera.size.y < 0.1)
|
if (the_camera.size.y < 0.1)
|
||||||
the_camera.size.y = 0.1;
|
the_camera.size.y = 0.1;
|
||||||
|
|
||||||
|
|
||||||
cursor_dx = cursor_x;
|
|
||||||
cursor_dy = cursor_y;
|
|
||||||
|
|
||||||
cursor_dx -= cursor_x;
|
|
||||||
cursor_dy -= cursor_y;
|
|
||||||
glfwGetCursorPos(window, &cursor_x, &cursor_y);
|
|
||||||
|
|
||||||
/* Rendering */
|
/* Rendering */
|
||||||
glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
|
glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
@ -475,7 +479,7 @@ int main([[maybe_unused]]int argc, [[maybe_unused]]char **argv)
|
||||||
for (int j = 0; j < grid.columns; j++)
|
for (int j = 0; j < grid.columns; j++)
|
||||||
{
|
{
|
||||||
int idx = i * grid.columns + j;
|
int idx = i * grid.columns + j;
|
||||||
if (inside_hex(&grid.hexes[idx], cursor_world)) // draw hovered hex differently
|
if (!mouse_over_gui && inside_hex(&grid.hexes[idx], cursor_world)) // draw hovered hex differently
|
||||||
{
|
{
|
||||||
hovered_hex = i * grid.columns + j;
|
hovered_hex = i * grid.columns + j;
|
||||||
if (mouse_pressed)
|
if (mouse_pressed)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue