+++ /dev/null
-
-#private_file events :: package js_events
-
-Key_Count :: 256
-
-Key_State :: enum (u8) {
- Up;
- Down;
- Just_Up;
- Just_Down;
-}
-
-Key_Handler :: struct {
- state : [Key_Count] Key_State;
-}
-
-key_handler_notify :: (use handler: ^Key_Handler, event: ^events.KeyboardEvent) {
- transition_table :: Key_State.[
- /* KeyUp */ /* KeyDown */
- /* Up */ .Up, .Just_Down,
- /* Down */ .Just_Up, .Down,
- /* Just_Up */ .Up, .Just_Down,
- /* Just_Down */ .Just_Up, .Down,
- ]
-
- event_idx := 0 if event.kind == .KeyUp else 1;
-
- state[event.keycode] = transition_table[cast(i32) state[event.keycode] * 2 + event_idx];
-}
-
-key_handler_is_down :: (use handler: ^Key_Handler, keycode: u32) -> bool {
- ks := state[keycode];
- return ks == .Down || ks == .Just_Down;
-}
-
-key_handler_is_up :: (use handler: ^Key_Handler, keycode: u32) -> bool {
- ks := state[keycode];
- return ks == .Up || ks == .Just_Up;
-}
-
-key_handler_just_down :: (use handler: ^Key_Handler, keycode: u32) -> bool {
- ks := state[keycode];
- return ks == .Just_Down;
-}
-
-key_handler_just_up :: (use handler: ^Key_Handler, keycode: u32) -> bool {
- ks := state[keycode];
- return ks == .Just_Up;
-}
#private_file ui :: package ui
#private_file config :: package config
-keys : Key_Handler;
-
search_buffer: string.String_Buffer;
background_tile_texture : gfx.Texture;
had_event = true;
switch event.kind {
case .MouseDown do switch event.mouse.button {
- case .Left do ui.button_pressed(.Left);
- case .Right do ui.button_pressed(.Right);
+ case .Left do ui.button_pressed(.Left);
+ case .Right do ui.button_pressed(.Right);
+ case .Middle do ui.button_pressed(.Middle);
}
case .MouseUp do switch event.mouse.button {
- case .Left do ui.button_released(.Left);
- case .Right do ui.button_released(.Right);
+ case .Left do ui.button_released(.Left);
+ case .Right do ui.button_released(.Right);
+ case .Middle do ui.button_released(.Middle);
}
case .MouseMove do ui.update_mouse_position(~~ event.mouse.pos_x, ~~ event.mouse.pos_y);
+ case .MouseWheel do switch event.mouse.button {
+ case .WheelUp do ui.button_pressed(.WheelUp);
+ case .WheelDown do ui.button_pressed(.WheelDown);
+ }
+
case .KeyDown, .KeyUp {
- modifiers : ui.Keyboard_State.Key_State.Modifiers;
+ modifiers : ui.Keyboard_State.Key_Event.Modifiers;
if event.keyboard.modifiers & .CTRL do modifiers |= .CTRL;
if event.keyboard.modifiers & .ALT do modifiers |= .ALT;
if event.keyboard.modifiers & .META do modifiers |= .META;
} else {
ui.key_up(event.keyboard.keycode, modifiers); @KeycodeIsWrong // see above
}
-
- key_handler_notify(^keys, ^event.keyboard);
}
case .Resize {
}
update :: (dt: f32) {
- speed :: 400.0f;
- scale_speed :: 0.02f;
-
- transform := gfx.global_renderer->get_transform();
- if key_handler_is_down(^keys, 38) do transform.translation.y += speed * dt;
- if key_handler_is_down(^keys, 40) do transform.translation.y -= speed * dt;
- if key_handler_is_down(^keys, 39) do transform.translation.x -= speed * dt;
- if key_handler_is_down(^keys, 37) do transform.translation.x += speed * dt;
- if key_handler_is_down(^keys, 187) {
- bx: f32 = (transform.translation.x - ~~(window_width / 2)) / transform.scale.x;
- by: f32 = (transform.translation.y - ~~(window_height / 2)) / transform.scale.y;
-
- transform.scale.x *= 1 + scale_speed;
- transform.scale.y *= 1 + scale_speed;
-
- transform.translation.x = bx * transform.scale.x + ~~(window_width / 2);
- transform.translation.y = by * transform.scale.y + ~~(window_height / 2);
- }
- if key_handler_is_down(^keys, 189) {
- bx: f32 = (transform.translation.x - ~~(window_width / 2)) / transform.scale.x;
- by: f32 = (transform.translation.y - ~~(window_height / 2)) / transform.scale.y;
-
- transform.scale.x /= 1 + scale_speed;
- transform.scale.y /= 1 + scale_speed;
-
- transform.translation.x = bx * transform.scale.x + ~~(window_width / 2);
- transform.translation.y = by * transform.scale.y + ~~(window_height / 2);
- }
-}
-
-push_state :: () -> Iterator(u8) {
- next :: (done: ^bool) -> (u8, bool) {
- *done = !*done;
- if *done do return 0, false;
-
- gfx.push_matrix();
-
- return 0, true;
- }
-
- close :: (_: rawptr) {
- gfx.pop_matrix();
- }
-
- done := new(bool);
- *done = true;
-
- return .{ done, next, close };
}
draw :: () {
gl.clear(gl.COLOR_BUFFER_BIT);
window_rectangle := ui.Rectangle.{ 0, 0, ~~window_width, ~~window_height };
+ menu_bar, main_area := ui.Flow.split_horizontal(window_rectangle, top_height=32);
- // m_pos := gfx.global_renderer->to_world_coordinates(.{ ui.mouse_state.x, ui.mouse_state.y });
- // gfx.rect(.{ m_pos.x - 10, m_pos.y - 10 }, .{ 720, 720 }, color=config.Colors.primary_dark);
- // gfx.push_scissor(m_pos.x, m_pos.y, 700, 700);
+ ui.scrollable_area_start(main_area);
draw_background_lines(~~window_width, ~~window_height, line_color=config.Colors.background);
- random.set_seed(32185);
- for i: 100 {
- x := cast(f32) random.between(0, 4000);
- y := cast(f32) random.between(0, 4000);
- w := cast(f32) random.between(100, 400);
- h := cast(f32) random.between(100, 400);
- gfx.rect(.{ x+2, y+2 }, .{ w, h }, color=config.Colors.primary_dark);
- gfx.rect(.{ x, y }, .{ w, h }, color=config.Colors.primary);
- }
+ ui.button(.{ 200, 300, 500, 400 }, "Test Button");
+ ui.textbox(.{ 200, 400, 500, 450 }, ^search_buffer);
- // gfx.pop_scissor();
+ ui.scrollable_area_end();
{
gfx.push_matrix();
defer gfx.pop_matrix();
gfx.identity();
- draw_menu_bar(window_rectangle);
+ draw_menu_bar(^menu_bar);
}
gfx.flush();
- ui.clear_buttons();
+ ui.end_frame();
}
#private_file
-draw_menu_bar :: (window_rectangle: ui.Rectangle) {
- menu_bar, _ := ui.Flow.split_horizontal(window_rectangle, top_height=32);
-
+draw_menu_bar :: (menu_bar_: ^ui.Rectangle) {
+ menu_bar := *menu_bar_;
ui.draw_rect(menu_bar, color=config.Colors.background);
menu_button_theme := ui.default_button_theme;
button_rect, menu_bar = ui.Flow.split_vertical(menu_bar, left_width=100);
ui.button(button_rect, "Help", theme=^menu_button_theme);
- search_rect: ui.Rectangle;
- menu_bar, search_rect = ui.Flow.split_vertical(menu_bar, right_width=300);
+ _, search_rect := ui.Flow.split_vertical(menu_bar, right_width=300);
ui.textbox(search_rect, ^search_buffer, theme=^menu_textbox_theme);
}