소스 검색

JS wheel event

Karl Zylinski 2 달 전
부모
커밋
8e60a70482
3개의 변경된 파일20개의 추가작업 그리고 1개의 파일을 삭제
  1. 2 1
      TODO.md
  2. 9 0
      examples/mouse/mouse.odin
  3. 9 0
      window_js.odin

+ 2 - 1
TODO.md

@@ -5,7 +5,8 @@ x Complete JS window impl
 X Fix render target drawing on gl and webgl
 / Make text rendering look good
 	- its better now, but I think I need to rewrite fontstash (my own "fontcache" or something)
-- Figure out what to do with the delta time stuff, built in or separate?
+X Figure out what to do with the delta time stuff, built in or separate?
+- make a good color palette
 - Look into webgl performance (bunnymark)
 - Understand texture format choices in webgl and gl backend and fix anything that is wrong
 

+ 9 - 0
examples/mouse/mouse.odin

@@ -2,11 +2,14 @@ package karl2d_gamepad_example
 
 import k2 "../.."
 import "core:log"
+import "core:fmt"
 
 init :: proc() {
 	k2.init(1000, 600, "Karl2D Mouse Demo")
 }
 
+wheel: f32
+
 step :: proc() -> bool {
 	k2.new_frame()
 	k2.process_events()
@@ -51,6 +54,12 @@ step :: proc() -> bool {
 	k2.draw_circle(middle_pos, 10, middle_color)
 	k2.draw_circle(right_pos, 10, right_color)
 
+	wheel += k2.get_mouse_wheel_delta()
+
+	wheel_msg := fmt.tprintf("Wheel: %.1f", wheel)
+	wheel_msg_width := k2.measure_text(wheel_msg, 20).x
+	k2.draw_text(wheel_msg, pos + {-wheel_msg_width/2, 70}, 20, k2.WHITE)
+
 	k2.present()
 	free_all(context.temp_allocator)
 	return !k2.shutdown_wanted()

+ 9 - 0
window_js.odin

@@ -60,6 +60,7 @@ js_init :: proc(
 	add_canvas_event_listener(.Mouse_Move, js_event_mouse_move)
 	add_canvas_event_listener(.Mouse_Down, js_event_mouse_down)
 	add_canvas_event_listener(.Mouse_Up, js_event_mouse_up)
+	add_canvas_event_listener(.Wheel, js_event_mouse_wheel)
 
 	add_window_event_listener(.Key_Down, js_event_key_down)
 	add_window_event_listener(.Key_Up, js_event_key_up)
@@ -125,6 +126,14 @@ js_event_mouse_up :: proc(e: js.Event) {
 	})
 }
 
+js_event_mouse_wheel :: proc(e: js.Event) {
+	append(&s.events, Window_Event_Mouse_Wheel {
+		// Not the best way, but how would we know what the wheel deltaMode really represents? If it
+		// is in pixels, how much "scroll" does that equal to?
+		delta = f32(e.wheel.delta.y > 0 ? -1 : 1),
+	})
+}
+
 add_canvas_event_listener :: proc(evt: js.Event_Kind, callback: proc(e: js.Event)) {
 	js.add_event_listener(
 		s.canvas_id,