another barely working text rendering scheme
This commit is contained in:
73
boot_js.ml
73
boot_js.ml
@ -60,21 +60,24 @@ let request_animation_frame () =
|
||||
in
|
||||
t
|
||||
|
||||
let request_render canvas webgl_ctx vg
|
||||
(render : NVG.t -> ?time:float -> Gg.p2 -> Gg.p2 Lwt.t) =
|
||||
request_animation_frame () >>= fun time ->
|
||||
webgl_ctx##clear
|
||||
(webgl_ctx##._COLOR_BUFFER_BIT_
|
||||
lor webgl_ctx##._DEPTH_BUFFER_BIT_
|
||||
lor webgl_ctx##._STENCIL_BUFFER_BIT_);
|
||||
let device_ratio = Dom_html.window##.devicePixelRatio in
|
||||
NVG.begin_frame vg ~width:canvas##.width ~height:canvas##.height
|
||||
~device_ratio;
|
||||
NVG.Transform.scale vg ~x:device_ratio ~y:device_ratio;
|
||||
render vg ~time Gg.P2.o >>= fun _p ->
|
||||
(* Logs.debug (fun m -> m "Drawing finished at point: %a" Gg.V2.pp p); *)
|
||||
NVG.end_frame vg;
|
||||
Lwt.return_unit
|
||||
let render_stream canvas webgl_ctx vg
|
||||
(render : NVG.t -> ?time:float -> Gg.p2 -> Human.I.t -> unit) :
|
||||
Human.I.t Lwt_stream.t -> unit Lwt.t =
|
||||
Lwt_stream.iter_n (fun i ->
|
||||
request_animation_frame () >>= fun time ->
|
||||
webgl_ctx##clear
|
||||
(webgl_ctx##._COLOR_BUFFER_BIT_
|
||||
lor webgl_ctx##._DEPTH_BUFFER_BIT_
|
||||
lor webgl_ctx##._STENCIL_BUFFER_BIT_);
|
||||
let device_ratio = Dom_html.window##.devicePixelRatio in
|
||||
NVG.begin_frame vg ~width:canvas##.width ~height:canvas##.height
|
||||
~device_ratio;
|
||||
NVG.Transform.scale vg ~x:device_ratio ~y:device_ratio;
|
||||
render vg ~time Gg.P2.o i;
|
||||
NVG.end_frame vg;
|
||||
Lwt.return_unit)
|
||||
|
||||
open Human
|
||||
|
||||
let _ =
|
||||
let canvas =
|
||||
@ -83,24 +86,28 @@ let _ =
|
||||
let webgl_ctx = webgl_initialize canvas in
|
||||
let vg = graphv_initialize webgl_ctx in
|
||||
let open Js_of_ocaml_lwt.Lwt_js_events in
|
||||
let page_var = Lwd.var Human.Panel.Ui.empty in
|
||||
let root =
|
||||
Lwd_utils.pack Nottui.Ui.pack_x
|
||||
[ Lwd.pure @@ Nottui_widgets.string "hello daddy" ]
|
||||
in
|
||||
|
||||
let events, push_event = Lwt_stream.create () in
|
||||
let images =
|
||||
Human.Nottui_lwt.render vg
|
||||
~size:(Gg.P2.v canvas##.width canvas##.height)
|
||||
events root
|
||||
in
|
||||
async (fun () ->
|
||||
Human.Panel.Ui.boot_page >>= fun page ->
|
||||
Lwd.set page_var page;
|
||||
let render = Human.Panel.Ui.renderer page_var in
|
||||
request_render canvas webgl_ctx vg render >>= fun () ->
|
||||
buffered_loop
|
||||
(make_event Dom_html.Event.keydown)
|
||||
Dom_html.document
|
||||
Human.(
|
||||
fun ev _ ->
|
||||
Lwd.set page_var
|
||||
(Panel.Ui.handle_event (Lwd.peek page_var)
|
||||
(Event_js.evt_of_jskey `Press ev));
|
||||
request_render canvas webgl_ctx vg render))
|
||||
render_stream canvas webgl_ctx vg
|
||||
(fun vg ?(time = 0.) p i ->
|
||||
Log.debug (fun m ->
|
||||
m "Drawing image: p=%a n=%a" Gg.V2.pp p I.Draw.pp i);
|
||||
|
||||
(* Dom_html.document##.onkeydown
|
||||
:= Dom.handler (fun (evt : Dom_html.keyboardEvent Js.t) ->
|
||||
render (Human.Event_js.evt_of_jskey `Press evt) ;
|
||||
Js._false ) *)
|
||||
let p' = I.Draw.node vg A.dark p i in
|
||||
Logs.debug (fun m ->
|
||||
m "Drawing finished: p'=%a" Gg.V2.pp p'))
|
||||
images);
|
||||
buffered_loop (make_event Dom_html.Event.keydown) Dom_html.document
|
||||
(fun ev _ ->
|
||||
Lwt.return
|
||||
@@ push_event (Some (`Key (Event_js.evt_of_jskey ev))))
|
||||
|
||||
Reference in New Issue
Block a user