@ -19,6 +19,7 @@
static GLFWwindow * window ;
static GLuint fontTex ;
static bool mousePressed [ 2 ] = { false , false } ;
static ImVec2 mousePosScale ( 1.0f , 1.0f ) ;
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
@ -112,6 +113,12 @@ static void glfw_error_callback(int error, const char* description)
fputs ( description , stderr ) ;
}
static void glfw_mouse_button_callback ( GLFWwindow * window , int button , int action , int mods )
{
if ( action = = GLFW_PRESS & & button > = 0 & & button < 2 )
mousePressed [ button ] = true ;
}
static void glfw_scroll_callback ( GLFWwindow * window , double xoffset , double yoffset )
{
ImGuiIO & io = ImGui : : GetIO ( ) ;
@ -147,6 +154,7 @@ void InitGL()
window = glfwCreateWindow ( 1280 , 720 , " ImGui OpenGL example " , NULL , NULL ) ;
glfwMakeContextCurrent ( window ) ;
glfwSetKeyCallback ( window , glfw_key_callback ) ;
glfwSetMouseButtonCallback ( window , glfw_mouse_button_callback ) ;
glfwSetScrollCallback ( window , glfw_scroll_callback ) ;
glfwSetCharCallback ( window , glfw_char_callback ) ;
@ -244,8 +252,8 @@ void UpdateImGui()
double mouse_x , mouse_y ;
glfwGetCursorPos ( window , & mouse_x , & mouse_y ) ;
io . MousePos = ImVec2 ( ( float ) mouse_x * mousePosScale . x , ( float ) mouse_y * mousePosScale . y ) ; // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
io . MouseDown [ 0 ] = glfwGetMouseButton( window , GLFW_MOUSE_BUTTON_LEFT ) ! = 0 ;
io . MouseDown [ 1 ] = glfwGetMouseButton( window , GLFW_MOUSE_BUTTON_RIGHT ) ! = 0 ;
io . MouseDown [ 0 ] = mousePressed[ 0 ] | | glfwGetMouseButton( window , GLFW_MOUSE_BUTTON_LEFT ) ! = 0 ; // If a mouse press event came, always pass it, so we don't miss click-release events that are shorted than our frame.
io . MouseDown [ 1 ] = mousePressed[ 1 ] | | glfwGetMouseButton( window , GLFW_MOUSE_BUTTON_RIGHT ) ! = 0 ;
// Start the frame
ImGui : : NewFrame ( ) ;
@ -260,6 +268,7 @@ int main(int argc, char** argv)
while ( ! glfwWindowShouldClose ( window ) )
{
ImGuiIO & io = ImGui : : GetIO ( ) ;
mousePressed [ 0 ] = mousePressed [ 1 ] = false ;
io . MouseWheel = 0 ;
glfwPollEvents ( ) ;
UpdateImGui ( ) ;