package raygui

  1. Overview
  2. Docs

Source file functions.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
include Raygui_c.Types
include Raygui_c.Functions

let to_struct a = (a : 'a Raylib.ctyp :> 'a Ctypes.structure)

(* coercion with the ptr type did not work :( *)
let to_struct_ptr a = Ctypes.( !@ ) a |> to_struct |> Ctypes.addr
(* let to_struct_ptr a =
 *   (a : 'a Raylib.ctyp Raylib.ptr :> 'a Ctypes.structure Raylib.ptr) *)

let set_font fnt = _set_font @@ to_struct fnt
let get_font () = Raylib.to_ctyp @@ _get_font ()
let window_box bx = _window_box @@ to_struct bx
let group_box bx = _group_box @@ to_struct bx
let line bx = _line @@ to_struct bx
let panel bx = _panel @@ to_struct bx

let scroll_panel a b c =
  _scroll_panel (to_struct a) (to_struct b) (to_struct_ptr c) |> Raylib.to_ctyp

let label bx = _label @@ to_struct bx
let button bx = _button @@ to_struct bx
let label_button bx = _label_button @@ to_struct bx
let toggle rct = _toggle @@ to_struct rct
let toggle_group rct = _toggle_group @@ to_struct rct
let check_box rct = _check_box @@ to_struct rct
let combo_box rct = _combo_box @@ to_struct rct

let dropdown_box rct labels vl edit =
  let vl_ptr = Raylib.ptr_of_int vl in
  let rt = _dropdown_box (to_struct rct) labels vl_ptr edit in
  (Ctypes.(!@vl_ptr), rt)

let spinner rct label vl ~min ~max edit =
  let vl_ptr = Raylib.ptr_of_int vl in
  let rt = _spinner (to_struct rct) label vl_ptr min max edit in
  (Ctypes.(!@vl_ptr), rt)

let value_box rct label vl ~min ~max edit =
  let vl_ptr = Raylib.ptr_of_int vl in
  let rt = _value_box (to_struct rct) label vl_ptr min max edit in
  (Ctypes.(!@vl_ptr), rt)

let carray_of_string str =
  (* Two null bytes to have room for a new character *)
  let len = String.length str in
  let open Ctypes in
  let arr = CArray.make char (len + 2) in
  String.iteri (CArray.set arr) str;
  CArray.set arr len '\x00';
  CArray.set arr (len + 1) '\x00';
  arr

let text_box rct txt state =
  let open Ctypes in
  let str_arr = CArray.of_string txt in
  let rt =
    _text_box (to_struct rct) (CArray.start str_arr)
      (CArray.length str_arr + 1)
      state
  in
  let str =
    Ctypes.string_from_ptr (CArray.start str_arr)
      ~length:(CArray.length str_arr)
  in
  let str =
    match String.index_opt str '\x00' with
    | Some last -> String.sub str 0 last
    | None -> str
  in
  (str, rt)

let text_box_multi rct txt state =
  let open Ctypes in
  let str_arr = CArray.of_string txt in
  let rt =
    _text_box_multi (to_struct rct) (CArray.start str_arr)
      (CArray.length str_arr + 1)
      state
  in
  let str =
    Ctypes.string_from_ptr (CArray.start str_arr)
      ~length:(CArray.length str_arr)
  in
  let str =
    match String.index_opt str '\x00' with
    | Some last -> String.sub str 0 last
    | None -> str
  in
  (str, rt)

let slider rct label txt value ~min ~max =
  _slider (to_struct rct) label txt value min max

let slider_bar rct label txt value ~min ~max =
  _slider_bar (to_struct rct) label txt value min max

let progress_bar rct label txt value ~min ~max =
  _progress_bar (to_struct rct) label txt value min max

let status_bar rct = _status_bar @@ to_struct rct
let dummy_rec rct = _dummy_rec @@ to_struct rct
let scroll_bar rct value ~min ~max = _scroll_bar (to_struct rct) value min max
let grid rct b c = _grid (to_struct rct) b c |> Raylib.to_ctyp

let list_view rct label index active =
  let vl_ptr = Raylib.ptr_of_int index in
  let active = _list_view (to_struct rct) label vl_ptr active in
  (active, Ctypes.(!@vl_ptr))

let list_view_ex rct strings focus index active =
  let open Ctypes in
  let str_arr = CArray.of_list Ctypes.string strings in
  let focus_ptr = Raylib.ptr_of_int focus in
  let index_ptr = Raylib.ptr_of_int index in
  let active =
    _list_view_ex (to_struct rct) (CArray.start str_arr) (List.length strings)
      focus_ptr index_ptr active
  in
  (active, !@focus_ptr, !@index_ptr)

let message_box rct = _message_box @@ to_struct rct

let text_input_box rct title message buttons text =
  let open Ctypes in
  let str_arr = CArray.of_string text in
  let rt =
    _text_input_box (to_struct rct) title message buttons (CArray.start str_arr)
  in
  (String.init (CArray.length str_arr) (CArray.unsafe_get str_arr), rt)

let color_picker rct col =
  _color_picker (to_struct rct) (to_struct col) |> Raylib.to_ctyp

let color_panel rct col =
  _color_panel (to_struct rct) (to_struct col) |> Raylib.to_ctyp

let color_bar_alpha rct = _color_bar_alpha @@ to_struct rct
let color_bar_hue rct = _color_bar_hue @@ to_struct rct
OCaml

Innovation. Community. Security.