add framebufferSize callback (FFI scaffolding and creating new variant of input_message type but don't react to this message in a meaningful way yet)
This commit is contained in:
@@ -159,6 +159,7 @@ extern "C" {
|
|||||||
|
|
||||||
MLLIB_PUBLIC(void mltonMouseMoveCallback (Real32 x0, Real32 x1);)
|
MLLIB_PUBLIC(void mltonMouseMoveCallback (Real32 x0, Real32 x1);)
|
||||||
MLLIB_PUBLIC(void mltonMouseClickCallback (Int32 x0, Int32 x1);)
|
MLLIB_PUBLIC(void mltonMouseClickCallback (Int32 x0, Int32 x1);)
|
||||||
|
MLLIB_PUBLIC(void mltonFramebufferSizeCallback (Int32 x0, Int32 x1);)
|
||||||
|
|
||||||
#undef MLLIB_PRIVATE
|
#undef MLLIB_PRIVATE
|
||||||
#undef MLLIB_PUBLIC
|
#undef MLLIB_PUBLIC
|
||||||
|
|||||||
@@ -10,16 +10,21 @@ void mouseMoveCallback(GLFWwindow *window, double xpos, double ypos) {
|
|||||||
mltonMouseMoveCallback((float)xpos, (float)ypos);
|
mltonMouseMoveCallback((float)xpos, (float)ypos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseClickCallback(GLFWwindow *window, int button, int action, int mods) {
|
// Call this from MLton to register callback with GLFW.
|
||||||
mltonMouseClickCallback(button, action);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call this from MLton to register key callback with GLFW.
|
|
||||||
void setMouseMoveCallback(GLFWwindow *window) {
|
void setMouseMoveCallback(GLFWwindow *window) {
|
||||||
glfwSetCursorPosCallback(window, mouseMoveCallback);
|
glfwSetCursorPosCallback(window, mouseMoveCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mouseClickCallback(GLFWwindow *window, int button, int action, int mods) {
|
||||||
|
mltonMouseClickCallback(button, action);
|
||||||
|
}
|
||||||
void setMouseClickCallback(GLFWwindow *window) {
|
void setMouseClickCallback(GLFWwindow *window) {
|
||||||
glfwSetMouseButtonCallback(window, mouseClickCallback);
|
glfwSetMouseButtonCallback(window, mouseClickCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void framebufferSizeCallback(GLFWwindow *window, int width, int height) {
|
||||||
|
mltonFramebufferSizeCallback(width, height);
|
||||||
|
}
|
||||||
|
void setFramebufferSizeCallback(GLFWwindow *window, int width, int height) {
|
||||||
|
glfwSetFramebufferSizeCallback(window, framebufferSizeCallback);
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,9 +11,13 @@ struct
|
|||||||
|
|
||||||
val exportMouseClickCallback =
|
val exportMouseClickCallback =
|
||||||
_export "mltonMouseClickCallback" public : (int * int -> unit) -> unit;
|
_export "mltonMouseClickCallback" public : (int * int -> unit) -> unit;
|
||||||
|
|
||||||
val setMouseClickCallback = _import "setMouseClickCallback" public reentrant : window -> unit;
|
val setMouseClickCallback = _import "setMouseClickCallback" public reentrant : window -> unit;
|
||||||
|
|
||||||
|
val exportFramebufferSizeCallback =
|
||||||
|
_export "mltonFramebufferSizeCallback" public : (int * int -> unit) -> unit;
|
||||||
|
val setFramebufferSizeCallback =
|
||||||
|
_import "setFramebufferSizeCallback" public reentrant : window -> unit;
|
||||||
|
|
||||||
(* Constants for mouse input. *)
|
(* Constants for mouse input. *)
|
||||||
val (MOUSE_PRESSED, _) =
|
val (MOUSE_PRESSED, _) =
|
||||||
_symbol "MOUSE_PRESSED" public : ( unit -> int ) * ( int -> unit );
|
_symbol "MOUSE_PRESSED" public : ( unit -> int ) * ( int -> unit );
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ struct
|
|||||||
in
|
in
|
||||||
(model, drawMsg, mouseX, mouseY)
|
(model, drawMsg, mouseX, mouseY)
|
||||||
end
|
end
|
||||||
| MUSE_LEFT_CLICK =>
|
| MOUSE_LEFT_CLICK =>
|
||||||
let
|
let
|
||||||
val (buttonVec, hpos, vpos) = getClickPos
|
val (buttonVec, hpos, vpos) = getClickPos
|
||||||
(#clickPoints model, mouseX, mouseY, 0.0, 0.0, 1.0)
|
(#clickPoints model, mouseX, mouseY, 0.0, 0.0, 1.0)
|
||||||
@@ -205,5 +205,11 @@ struct
|
|||||||
else
|
else
|
||||||
(model, NO_DRAW, mouseX, mouseY)
|
(model, NO_DRAW, mouseX, mouseY)
|
||||||
end
|
end
|
||||||
|
| RESIZE_WINDOW {width, height} =>
|
||||||
|
let
|
||||||
|
val _ = print "resized window \n"
|
||||||
|
in
|
||||||
|
(model, NO_DRAW, mouseX, mouseY)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ struct
|
|||||||
else
|
else
|
||||||
()
|
()
|
||||||
|
|
||||||
|
fun framebufferSizeCallback mailbox (width, height) =
|
||||||
|
let val _ = Gles3.viewport (width, height)
|
||||||
|
in Mailbox.send (mailbox, RESIZE_WINDOW {width = width, height = height})
|
||||||
|
end
|
||||||
|
|
||||||
fun registerCallbacks (window, inputMailbox) =
|
fun registerCallbacks (window, inputMailbox) =
|
||||||
let
|
let
|
||||||
val mouseMoveCallback = mouseMoveCallback inputMailbox
|
val mouseMoveCallback = mouseMoveCallback inputMailbox
|
||||||
@@ -24,6 +29,10 @@ struct
|
|||||||
val mouseClickCallback = mouseClickCallback inputMailbox
|
val mouseClickCallback = mouseClickCallback inputMailbox
|
||||||
val _ = Input.exportMouseClickCallback mouseClickCallback
|
val _ = Input.exportMouseClickCallback mouseClickCallback
|
||||||
val _ = Input.setMouseClickCallback window
|
val _ = Input.setMouseClickCallback window
|
||||||
|
|
||||||
|
val resizeCallback = framebufferSizeCallback inputMailbox
|
||||||
|
val _ = Input.exportFramebufferSizeCallback resizeCallback
|
||||||
|
val _ = Input.setFramebufferSizeCallback window
|
||||||
in
|
in
|
||||||
()
|
()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ sig
|
|||||||
MOUSE_MOVE of {x: Real32.real, y: Real32.real}
|
MOUSE_MOVE of {x: Real32.real, y: Real32.real}
|
||||||
| MOUSE_LEFT_CLICK
|
| MOUSE_LEFT_CLICK
|
||||||
| MOUSE_LEFT_RELEASE
|
| MOUSE_LEFT_RELEASE
|
||||||
|
| RESIZE_WINDOW of {width: int, height: int}
|
||||||
end
|
end
|
||||||
|
|
||||||
structure InputMessage :> INPUT_MESSAGE =
|
structure InputMessage :> INPUT_MESSAGE =
|
||||||
@@ -12,4 +13,5 @@ struct
|
|||||||
MOUSE_MOVE of {x: Real32.real, y: Real32.real}
|
MOUSE_MOVE of {x: Real32.real, y: Real32.real}
|
||||||
| MOUSE_LEFT_CLICK
|
| MOUSE_LEFT_CLICK
|
||||||
| MOUSE_LEFT_RELEASE
|
| MOUSE_LEFT_RELEASE
|
||||||
|
| RESIZE_WINDOW of {width: int, height: int}
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user