consume events in RGFW loop. (Next: react to input events.)

This commit is contained in:
2026-01-23 11:13:33 +00:00
parent b4573441fb
commit a89bb8fa5f
6 changed files with 43 additions and 7 deletions

View File

@@ -28,6 +28,10 @@ void swapBuffers(RGFW_window* window) {
RGFW_window_swapBuffers_OpenGL(window);
}
void writeClipboard(char* string, int stringSize) {
RGFW_writeClipboard(string, stringSize);
}
// OpenGL constants used below
unsigned int VERTEX_SHADER = GL_VERTEX_SHADER;
unsigned int FRAGMENT_SHADER = GL_FRAGMENT_SHADER;

View File

@@ -11,4 +11,6 @@ struct
_import "shouldCloseWindow" public : window -> bool;
val swapBuffers =
_import "swapBuffers" public : window -> unit;
val writeClipboard =
_import "writeClipboard" public : string * int -> unit;
end

View File

@@ -1,7 +1,5 @@
structure GlfwLoop =
struct
open DrawMsg
fun yank (window, str) =
let
(* print when text is yanked
@@ -16,6 +14,8 @@ struct
fun consumeEvent (drawState, window, msg) =
let
open DrawMsg
val {textVertexBuffer, textProgram, textDrawLength = _, ...} = drawState
in
case msg of

View File

@@ -1,6 +1,34 @@
structure RgfwLoop =
struct
fun loop (window, app) =
fun yank string =
Rgfw.writeClipboard (string, String.size string)
fun consumeEvent (drawState, window, msg) =
let
open DrawMsg
val {textVertexBuffer, textProgram, textDrawLength = _, ...} = drawState
in
case msg of
DRAW_TEXT textVec => GlDraw.uploadText (drawState, textVec)
| YANK str => (yank str; drawState)
end
fun consumeEventsLoop (pos, msgVec, drawState, window) =
if pos = Vector.length msgVec then
drawState
else
let
val msg = Vector.sub (msgVec, pos)
val drawState = consumeEvent (drawState, window, msg)
in
consumeEventsLoop (pos + 1, msgVec, drawState, window)
end
fun consumeEvents (drawState, window) =
consumeEventsLoop (0, DrawMailbox.getMessagesAndClear (), drawState, window)
fun loop (window, app, drawState) =
if Rgfw.shouldCloseWindow window then
Rgfw.closeWindow window
else
@@ -10,9 +38,10 @@ struct
val app = Updater.update app
val () = GlDraw.draw drawState
val () = Rgfw.swapBuffers window
in
loop (window, app)
loop (window, app, drawState)
end
local
@@ -46,9 +75,11 @@ struct
val io = TextIO.openIn "temp.txt"
val lineGap = ioToLineGap (io, LineGap.empty)
val _ = TextIO.closeIn io
val app = AppType.init (lineGap, 1920, 1080, Time.now ())
val drawState = GlDraw.create ()
in
loop (window, app)
loop (window, app, drawState)
end
end

BIN
shf-rgfw

Binary file not shown.

View File

@@ -1,7 +1,6 @@
# To-do list
- Bind functions from RGFW (alternative back-end/window library) and have an option to use it
- Add key callbacks, resize callbacks, etc.
- Consume msgs stores in app
- Add callbacks so we can react to events. (Start by adding key callbacks.)
- Bind gamepad functions from GLFW
- Modify deletion functions to use `PersistentVector.delete`
- Implement 'yj' motion and add tests for it