Render text as you type

This commit is contained in:
Joseph Ferano 2024-09-06 10:17:37 +07:00
parent 4f1714b0f5
commit 93ec09351a

View File

@ -91,7 +91,7 @@ sdl_init :: proc() -> (ok: bool) {
process_input :: proc() {
e: sdl.Event
state.buffer_dirty = true
state.buffer_dirty = false
for sdl.PollEvent(&e) {
#partial switch(e.type) {
@ -106,6 +106,10 @@ process_input :: proc() {
state.buffer_dirty = true
fmt.println("Key Pressed: BACKSPACE")
}
case .TEXTINPUT:
key := string(cstring(raw_data(e.text.text[:])))
strings.write_string(&ctx.buffer_text.builder, key)
state.buffer_dirty = true
}
}
}
@ -116,11 +120,12 @@ update :: proc() {
color := sdl.Color{ 0, 0, 0, 255}
str := strings.to_cstring(&ctx.buffer_text.builder)
ctx.text_surface = ttf.RenderText_Blended(ctx.font, str, color);
ctx.text_surface = ttf.RenderUTF8_Blended(ctx.font, str, color);
if (ctx.text_surface == nil) {
log.errorf(sdl.GetErrorString())
os.exit(1)
}
ctx.ftex = sdl.CreateTextureFromSurface(ctx.renderer, ctx.text_surface);
}
}
@ -128,12 +133,13 @@ draw :: proc() {
sdl.SetRenderDrawColor(ctx.renderer, 250, 250, 250, 0xff)
sdl.RenderClear(ctx.renderer)
ctx.ftex = sdl.CreateTextureFromSurface(ctx.renderer, ctx.text_surface);
src := sdl.Rect { 0, 0, ctx.text_surface.w, ctx.text_surface.h }
dest := sdl.Rect { 0, 0, ctx.text_surface.w, ctx.text_surface.h }
sdl.RenderCopy(ctx.renderer, ctx.ftex, &src, &dest)
if ctx.ftex != nil {
src := sdl.Rect { 0, 0, ctx.text_surface.w, ctx.text_surface.h }
dest := sdl.Rect { 0, 0, ctx.text_surface.w, ctx.text_surface.h }
sdl.RenderCopy(ctx.renderer, ctx.ftex, &src, &dest)
}
sdl.RenderPresent(ctx.renderer)
}