Initial commit.
This commit is contained in:
117
window.odin
Normal file
117
window.odin
Normal file
@@ -0,0 +1,117 @@
|
||||
package window
|
||||
|
||||
import "core:fmt"
|
||||
Window :: struct {
|
||||
title: string,
|
||||
width, height: u16,
|
||||
|
||||
backend: Backend_Info,
|
||||
}
|
||||
|
||||
Event :: union {
|
||||
Event_Quit,
|
||||
Event_Key,
|
||||
Event_Resize,
|
||||
}
|
||||
|
||||
Event_Quit :: struct {}
|
||||
|
||||
Event_Key_State :: enum {
|
||||
Down,
|
||||
Up,
|
||||
}
|
||||
Virtual_Key :: enum {
|
||||
Unknown,
|
||||
|
||||
Number_0, Number_1, Number_2, Number_3, Number_4, Number_5, Number_6, Number_7, Number_8, Number_9,
|
||||
|
||||
Letter_A, Letter_B, Letter_C, Letter_D, Letter_E, Letter_F, Letter_G, Letter_H, Letter_I, Letter_J,
|
||||
Letter_K, Letter_L, Letter_M, Letter_N, Letter_O, Letter_P, Letter_Q, Letter_R, Letter_S, Letter_T,
|
||||
Letter_U, Letter_V, Letter_W, Letter_X, Letter_Y, Letter_Z,
|
||||
|
||||
Space, Enter, Escape, Tab, Backspace, CapsLock,
|
||||
Shift, Control, Alt,
|
||||
Arrow_Up, Arrow_Down, Arrow_Left, Arrow_Right,
|
||||
}
|
||||
Event_Key :: struct {
|
||||
virtual_key: Virtual_Key,
|
||||
state: Event_Key_State,
|
||||
}
|
||||
Event_Resize :: struct {
|
||||
old_width, old_height: u16,
|
||||
new_width, new_height: u16,
|
||||
}
|
||||
|
||||
create :: proc(width, height: u16) -> (^Window, bool) {
|
||||
assert(width > 0 && height > 0)
|
||||
|
||||
w := new(Window)
|
||||
w.width = width
|
||||
w.height = height
|
||||
|
||||
when ODIN_OS == .Windows {
|
||||
if !init_window_windows(w) {
|
||||
free(w)
|
||||
return nil, false
|
||||
}
|
||||
}
|
||||
else {
|
||||
#assert(false, "Missing implementation for 'create'.")
|
||||
}
|
||||
|
||||
set_title(w, "Window")
|
||||
|
||||
return w, true
|
||||
}
|
||||
|
||||
set_title :: proc(window: ^Window, title: string) {
|
||||
assert(window != nil)
|
||||
|
||||
window.title = title
|
||||
|
||||
when ODIN_OS == .Windows {
|
||||
set_title_windows(window)
|
||||
}
|
||||
else {
|
||||
#assert(false, "Missing implementation for 'set_title'.")
|
||||
}
|
||||
}
|
||||
|
||||
get_pointer_to_surface :: proc(window: ^Window) -> rawptr {
|
||||
when ODIN_OS == .Windows {
|
||||
// fmt.printfln("HWND: %v.", window.backend.hwnd)
|
||||
return window.backend.hwnd
|
||||
}
|
||||
else {
|
||||
#assert(false, "Missing implementation for 'get_pointer_to_surface'.")
|
||||
}
|
||||
}
|
||||
|
||||
update :: proc(window: ^Window, out_event: ^Event) -> bool {
|
||||
assert(window != nil)
|
||||
|
||||
event: Event
|
||||
when ODIN_OS == .Windows {
|
||||
event = update_windows(window)
|
||||
}
|
||||
else {
|
||||
#assert(false, "Missing implementation for 'set_title'.")
|
||||
}
|
||||
|
||||
out_event^ = event
|
||||
|
||||
if out_event^ == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
destroy :: proc(window: ^Window) {
|
||||
assert(window != nil)
|
||||
|
||||
destroy_windows(window)
|
||||
|
||||
free(window)
|
||||
window^ = {}
|
||||
}
|
||||
Reference in New Issue
Block a user