package miaou-core
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Miaou core/widgets (no drivers, no SDL)
Install
dune-project
Dependency
Authors
Maintainers
Sources
v0.5.2.tar.gz
md5=60a3b9f181f24572a06a9492532bfdda
sha512=fcc35a275066be2900e6201782faf47503076fa4640f08cf78067835a6f447b74613009e55b2ac799adb7ca46f1bffa261fc5971753f2cc3c6bef327511c7ef6
doc/src/miaou_widgets_display/sdl_chart_context.ml.html
Source file sdl_chart_context.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116(*****************************************************************************) (* *) (* SPDX-License-Identifier: MIT *) (* Copyright (c) 2025 Nomadic Labs <contact@nomadic-labs.com> *) (* Copyright (c) 2026 Mathias Bourgoin <mathias.bourgoin@atacama.tech> *) (* *) (*****************************************************************************) (* Global SDL rendering context for chart widgets This allows chart widgets to detect SDL availability and render directly without changing the PAGE_SIG interface or creating circular dependencies. We store SDL types as abstract values to avoid hard tsdl dependency here. The SDL driver and chart rendering code will cast appropriately. *) type sdl_context = { renderer_obj : Obj.t; (* Tsdl.Sdl.renderer *) font_obj : Obj.t; (* Tsdl_ttf.Ttf.font *) char_w : int; char_h : int; mutable y_offset : int; enabled : bool; (* Set to false during transitions to avoid duplicate rendering *) cols : int; (* Terminal width in columns *) frame_id : int; (* Increments each frame *) } let current_context : sdl_context option ref = ref None let frame_counter = ref 0 let set_context_obj ~renderer ~font ~char_w ~char_h ~y_offset ~cols ?(enabled = true) () = incr frame_counter ; current_context := Some { renderer_obj = Obj.repr renderer [@allow_forbidden "SDL objects stored without tsdl dependency"]; font_obj = Obj.repr font [@allow_forbidden "SDL objects stored without tsdl dependency"]; char_w; char_h; y_offset; enabled; cols; frame_id = !frame_counter; } let clear_context () = current_context := None let get_context () = match !current_context with | Some ctx when ctx.enabled -> Some ctx | _ -> None (* Extract renderer from context - caller must cast *) let get_renderer ctx = Obj.obj ctx.renderer_obj [@allow_forbidden "recover typed SDL renderer"] let get_font ctx = Obj.obj ctx.font_obj [@allow_forbidden "recover typed SDL font"] let get_frame_id ctx = ctx.frame_id (* Abstract SDL operations - registered by SDL driver at runtime. This allows widgets to perform SDL operations without compile-time tsdl dependency. All types are abstract (using Obj.t) to avoid importing tsdl. *) module Sdl_ops = struct (* Function references - set by SDL driver when loaded *) let create_texture_ref : (Obj.t -> int -> int -> Obj.t option) ref = ref (fun _ _ _ -> None) let set_render_target_ref : (Obj.t -> Obj.t option -> unit) ref = ref (fun _ _ -> ()) let set_render_draw_color_ref : (Obj.t -> int -> int -> int -> int -> unit) ref = ref (fun _ _ _ _ _ -> ()) let render_fill_rect_ref : (Obj.t -> int -> int -> int -> int -> unit) ref = ref (fun _ _ _ _ _ -> ()) let render_copy_ref : (Obj.t -> Obj.t -> int -> int -> int -> int -> unit) ref = ref (fun _ _ _ _ _ _ -> ()) (* Public accessors *) let create_texture renderer w h = !create_texture_ref renderer w h let set_render_target renderer target = !set_render_target_ref renderer target let set_render_draw_color renderer r g b a = !set_render_draw_color_ref renderer r g b a let render_fill_rect renderer x y w h = !render_fill_rect_ref renderer x y w h let render_copy renderer texture x y w h = !render_copy_ref renderer texture x y w h (* Registration functions - called by SDL driver *) let register_create_texture f = create_texture_ref := f let register_set_render_target f = set_render_target_ref := f let register_set_render_draw_color f = set_render_draw_color_ref := f let register_render_fill_rect f = render_fill_rect_ref := f let register_render_copy f = render_copy_ref := f end [@@@enforce_exempt] (* non-widget module *)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>