hokusai-zero 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/Gemfile.lock +0 -2
  4. data/README.md +1 -1
  5. data/ast/src/core/ast.c +3 -11
  6. data/ast/src/core/hml.c +214 -40
  7. data/ast/src/core/hml.h +1 -0
  8. data/ast/src/core/input.h +0 -1
  9. data/ast/src/core/log.c +87 -0
  10. data/ast/src/core/log.h +41 -0
  11. data/ast/src/core/util.c +23 -23
  12. data/ast/src/core/util.h +7 -7
  13. data/ast/test/parser.c +1 -0
  14. data/ext/extconf.rb +6 -6
  15. data/hokusai.gemspec +1 -2
  16. data/ui/examples/drag.rb +154 -0
  17. data/ui/examples/embedded.rb +58 -0
  18. data/ui/examples/forum/file.rb +1 -1
  19. data/ui/examples/forum/post.rb +0 -1
  20. data/ui/examples/forum.rb +7 -7
  21. data/ui/examples/game.rb +143 -0
  22. data/ui/examples/keyboard.rb +47 -0
  23. data/ui/examples/overlay.rb +233 -0
  24. data/ui/examples/provider.rb +56 -0
  25. data/ui/examples/shader/test.rb +155 -0
  26. data/ui/examples/shader.rb +100 -0
  27. data/ui/examples/spreadsheet.rb +12 -11
  28. data/ui/examples/wiki.rb +82 -0
  29. data/ui/lib/lib_hokusai.rb +43 -24
  30. data/ui/spec/hokusai/e2e/client_spec.rb +0 -1
  31. data/ui/spec/hokusai/e2e/keyboard_spec.rb +52 -0
  32. data/ui/spec/spec_helper.rb +1 -1
  33. data/ui/src/hokusai/assets/arrow-down-line.png +0 -0
  34. data/ui/src/hokusai/assets/arrow-down-wide-line.png +0 -0
  35. data/ui/src/hokusai/assets/icons/outline/arrow-big-up.svg +19 -0
  36. data/ui/src/hokusai/assets/icons/outline/backspace.svg +20 -0
  37. data/ui/src/hokusai/automation/driver_commands/base.rb +2 -8
  38. data/ui/src/hokusai/automation/driver_commands/trigger_keyboard.rb +3 -6
  39. data/ui/src/hokusai/automation/driver_commands/trigger_mouse.rb +12 -5
  40. data/ui/src/hokusai/automation/server.rb +2 -3
  41. data/ui/src/hokusai/backends/raylib/config.rb +2 -1
  42. data/ui/src/hokusai/backends/raylib/font.rb +55 -4
  43. data/ui/src/hokusai/backends/raylib.rb +199 -36
  44. data/ui/src/hokusai/backends/sdl2/config.rb +9 -6
  45. data/ui/src/hokusai/backends/sdl2/font.rb +3 -1
  46. data/ui/src/hokusai/backends/sdl2.rb +188 -93
  47. data/ui/src/hokusai/blocks/color_picker.rb +1080 -0
  48. data/ui/src/hokusai/blocks/dynamic.rb +2 -0
  49. data/ui/src/hokusai/blocks/input.rb +2 -2
  50. data/ui/src/hokusai/blocks/keyboard.rb +249 -0
  51. data/ui/src/hokusai/blocks/panel.rb +2 -0
  52. data/ui/src/hokusai/blocks/scrollbar.rb +7 -0
  53. data/ui/src/hokusai/blocks/selectable.rb +1 -0
  54. data/ui/src/hokusai/blocks/shader_begin.rb +22 -0
  55. data/ui/src/hokusai/blocks/shader_end.rb +12 -0
  56. data/ui/src/hokusai/blocks/slider.rb +139 -0
  57. data/ui/src/hokusai/blocks/text_stream.rb +130 -0
  58. data/ui/src/hokusai/blocks/texture.rb +23 -0
  59. data/ui/src/hokusai/blocks/translation.rb +91 -0
  60. data/ui/src/hokusai/commands/rect.rb +12 -3
  61. data/ui/src/hokusai/commands/rotation.rb +21 -0
  62. data/ui/src/hokusai/commands/scale.rb +20 -0
  63. data/ui/src/hokusai/commands/shader.rb +33 -0
  64. data/ui/src/hokusai/commands/texture.rb +26 -0
  65. data/ui/src/hokusai/commands/translation.rb +20 -0
  66. data/ui/src/hokusai/commands.rb +49 -3
  67. data/ui/src/hokusai/event.rb +2 -1
  68. data/ui/src/hokusai/events/keyboard.rb +11 -18
  69. data/ui/src/hokusai/events/mouse.rb +10 -8
  70. data/ui/src/hokusai/events/touch.rb +62 -0
  71. data/ui/src/hokusai/meta.rb +13 -6
  72. data/ui/src/hokusai/mounting/loop_entry.rb +4 -4
  73. data/ui/src/hokusai/mounting/update_entry.rb +5 -6
  74. data/ui/src/hokusai/painter.rb +31 -8
  75. data/ui/src/hokusai/types/display.rb +155 -0
  76. data/ui/src/hokusai/types/keyboard.rb +168 -0
  77. data/ui/src/hokusai/types/mouse.rb +36 -0
  78. data/ui/src/hokusai/types/primitives.rb +56 -0
  79. data/ui/src/hokusai/types/touch.rb +181 -0
  80. data/ui/src/hokusai/types.rb +20 -244
  81. data/ui/src/hokusai/util/selection.rb +28 -7
  82. data/ui/src/hokusai/util/wrap_stream.rb +268 -0
  83. data/ui/src/hokusai.rb +72 -35
  84. data/xmake.lua +2 -1
  85. metadata +39 -22
  86. data/ui/src/hokusai/assets/chevron-down.svg +0 -1
data/ui/src/hokusai.rb CHANGED
@@ -13,45 +13,12 @@ require_relative './hokusai/event'
13
13
  require_relative './hokusai/painter'
14
14
  require_relative './hokusai/util/selection'
15
15
  require_relative './hokusai/util/piece_table'
16
- require_relative './hokusai/blocks/empty'
17
- require_relative './hokusai/blocks/vblock'
18
- require_relative './hokusai/blocks/hblock'
19
- require_relative './hokusai/blocks/label'
20
- require_relative './hokusai/blocks/rect'
21
- require_relative './hokusai/blocks/button'
22
- require_relative './hokusai/blocks/circle'
23
- require_relative './hokusai/blocks/checkbox'
24
- require_relative './hokusai/blocks/scissor_begin'
25
- require_relative './hokusai/blocks/scissor_end'
26
- require_relative './hokusai/blocks/clipped'
27
- require_relative './hokusai/blocks/cursor'
28
- require_relative './hokusai/blocks/image'
29
- require_relative './hokusai/blocks/svg'
30
- require_relative './hokusai/blocks/toggle'
31
- require_relative './hokusai/blocks/scrollbar'
32
- require_relative './hokusai/blocks/dynamic'
33
- require_relative './hokusai/blocks/panel'
34
- require_relative './hokusai/blocks/text'
35
- require_relative './hokusai/blocks/selectable'
36
- require_relative './hokusai/blocks/input'
37
- require_relative './hokusai/blocks/variable'
38
- require_relative './hokusai/blocks/titlebar/osx'
39
- require_relative './hokusai/blocks/modal'
40
- require_relative './hokusai/blocks/dropdown'
41
-
42
- require "concurrent"
16
+ require_relative './hokusai/util/wrap_stream'
43
17
 
44
18
  # A backend agnostic library for authoring
45
19
  # desktop applications
46
20
  # @author skinnyjames
47
21
  module Hokusai
48
- ThreadPool = Concurrent::ThreadPoolExecutor.new(
49
- min_threads: 5,
50
- max_threads: 5,
51
- max_queue: 20,
52
- fallback_policy: :caller_runs
53
- )
54
-
55
22
  SHADER_UNIFORM_FLOAT = 0 # Shader uniform type: float
56
23
  SHADER_UNIFORM_VEC2 = 1 # Shader uniform type: vec2 (2 float)
57
24
  SHADER_UNIFORM_VEC3 = 2 # Shader uniform type: vec3 (3 float)
@@ -65,6 +32,10 @@ module Hokusai
65
32
  SHADER_UNIFORM_UIVEC3 = 10 # Shader uniform type: uivec3 (3 unsigned int)
66
33
  SHADER_UNIFORM_UIVEC4 = 11 # Shader uniform type: uivec4 (4 unsigned int)
67
34
 
35
+ def self.asset(path)
36
+ "#{ASSETS_FOLDER}/#{path}"
37
+ end
38
+
68
39
  # Access the font registry
69
40
  #
70
41
  # @return [Hokusai::FontRegistry]
@@ -166,4 +137,70 @@ module Hokusai
166
137
  def self.set_mouse_cursor(type)
167
138
  @on_set_mouse_cursor&.call(type)
168
139
  end
169
- end
140
+
141
+ def self.on_copy(&block)
142
+ @on_copy = block
143
+ end
144
+
145
+ def self.copy(text)
146
+ @on_copy&.call(text)
147
+ end
148
+
149
+ # Mobile support
150
+ def self.on_show_keyboard(&block)
151
+ @on_show_keyboard = block
152
+ end
153
+
154
+ def self.show_keyboard
155
+ @on_show_keyboard&.call
156
+ end
157
+
158
+ def self.on_hide_keyboard(&block)
159
+ @on_hide_keyboard = block
160
+ end
161
+
162
+ def self.hide_keyboard
163
+ @on_hide_keyboard&.call
164
+ end
165
+
166
+ def self.on_keyboard_visible(&block)
167
+ @on_keyboard_visible = block
168
+ end
169
+
170
+ def self.keyboard_visible?
171
+ @on_keyboard_visible&.call
172
+ end
173
+ end
174
+
175
+ require_relative './hokusai/blocks/empty'
176
+ require_relative './hokusai/blocks/vblock'
177
+ require_relative './hokusai/blocks/hblock'
178
+ require_relative './hokusai/blocks/label'
179
+ require_relative './hokusai/blocks/rect'
180
+ require_relative './hokusai/blocks/button'
181
+ require_relative './hokusai/blocks/circle'
182
+ require_relative './hokusai/blocks/checkbox'
183
+ require_relative './hokusai/blocks/scissor_begin'
184
+ require_relative './hokusai/blocks/scissor_end'
185
+ require_relative './hokusai/blocks/clipped'
186
+ require_relative './hokusai/blocks/cursor'
187
+ require_relative './hokusai/blocks/image'
188
+ require_relative './hokusai/blocks/svg'
189
+ require_relative './hokusai/blocks/toggle'
190
+ require_relative './hokusai/blocks/scrollbar'
191
+ require_relative './hokusai/blocks/dynamic'
192
+ require_relative './hokusai/blocks/panel'
193
+ require_relative './hokusai/blocks/text'
194
+ require_relative './hokusai/blocks/selectable'
195
+ require_relative './hokusai/blocks/input'
196
+ require_relative './hokusai/blocks/variable'
197
+ require_relative './hokusai/blocks/titlebar/osx'
198
+ require_relative './hokusai/blocks/modal'
199
+ require_relative './hokusai/blocks/dropdown'
200
+ require_relative './hokusai/blocks/shader_begin'
201
+ require_relative './hokusai/blocks/shader_end'
202
+ require_relative './hokusai/blocks/texture'
203
+ require_relative './hokusai/blocks/color_picker'
204
+ require_relative './hokusai/blocks/keyboard'
205
+ require_relative './hokusai/blocks/translation'
206
+ require_relative './hokusai/blocks/text_stream'
data/xmake.lua CHANGED
@@ -119,6 +119,7 @@ target("hokusai")
119
119
  add_links("$(projectdir)/vendor/lib/libtree-sitter.a")
120
120
  add_links("$(projectdir)/vendor/lib/libmd4c.a")
121
121
  add_files(
122
+ "ast/src/core/log.c",
122
123
  "ast/src/core/hml.c",
123
124
  "ast/src/core/ast.c",
124
125
  "ast/src/core/style.c",
@@ -159,7 +160,7 @@ target("test-ast")
159
160
  )
160
161
  -- add_cflags("-Wall -Werror")
161
162
  after_build(function(target)
162
- os.exec("./%s -t markdown", target:targetfile())
163
+ os.exec("./%s -t input", target:targetfile())
163
164
  -- os.exec("leaks -atExit -- %s", target:targetfile())
164
165
  end)
165
166
  target_end()
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hokusai-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - skinnyjames
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-06-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ffi
@@ -24,20 +23,6 @@ dependencies:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
25
  version: '1.16'
27
- - !ruby/object:Gem::Dependency
28
- name: concurrent-ruby
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 1.3.4
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 1.3.4
41
26
  - !ruby/object:Gem::Dependency
42
27
  name: raylib-bindings
43
28
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +79,6 @@ dependencies:
94
79
  - - ">="
95
80
  - !ruby/object:Gem::Version
96
81
  version: '0'
97
- description:
98
82
  email: zero@skinnyjames.net
99
83
  executables: []
100
84
  extensions:
@@ -119,6 +103,8 @@ files:
119
103
  - ast/src/core/hml.h
120
104
  - ast/src/core/input.c
121
105
  - ast/src/core/input.h
106
+ - ast/src/core/log.c
107
+ - ast/src/core/log.h
122
108
  - ast/src/core/style.c
123
109
  - ast/src/core/style.h
124
110
  - ast/src/core/text.c
@@ -181,17 +167,26 @@ files:
181
167
  - ui/examples/buddy.rb
182
168
  - ui/examples/clock.rb
183
169
  - ui/examples/counter.rb
170
+ - ui/examples/drag.rb
184
171
  - ui/examples/dynamic.rb
172
+ - ui/examples/embedded.rb
185
173
  - ui/examples/foobar.rb
186
174
  - ui/examples/forum.rb
187
175
  - ui/examples/forum/file.rb
188
176
  - ui/examples/forum/music.rb
189
177
  - ui/examples/forum/post.rb
178
+ - ui/examples/game.rb
179
+ - ui/examples/keyboard.rb
180
+ - ui/examples/overlay.rb
181
+ - ui/examples/provider.rb
182
+ - ui/examples/shader.rb
183
+ - ui/examples/shader/test.rb
190
184
  - ui/examples/spreadsheet.rb
191
185
  - ui/examples/spreadsheet/csv.rb
192
186
  - ui/examples/stock.rb
193
187
  - ui/examples/stock_decider/option.rb
194
188
  - ui/examples/tic_tac_toe.rb
189
+ - ui/examples/wiki.rb
195
190
  - ui/lib/lib_hokusai.rb
196
191
  - ui/spec/hokusai/ast_spec.rb
197
192
  - ui/spec/hokusai/automation/keys_transcoder_spec.rb
@@ -200,6 +195,7 @@ files:
200
195
  - ui/spec/hokusai/diff_spec.rb
201
196
  - ui/spec/hokusai/directives_spec.rb
202
197
  - ui/spec/hokusai/e2e/client_spec.rb
198
+ - ui/spec/hokusai/e2e/keyboard_spec.rb
203
199
  - ui/spec/hokusai/e2e/meta_spec.rb
204
200
  - ui/spec/hokusai/providers_spec.rb
205
201
  - ui/spec/hokusai/publisher_spec.rb
@@ -208,9 +204,12 @@ files:
208
204
  - ui/spec/hokusai_spec.rb
209
205
  - ui/spec/spec_helper.rb
210
206
  - ui/src/hokusai.rb
207
+ - ui/src/hokusai/assets/arrow-down-line.png
208
+ - ui/src/hokusai/assets/arrow-down-wide-line.png
211
209
  - ui/src/hokusai/assets/arrow-drop-down-line.png
212
- - ui/src/hokusai/assets/chevron-down.svg
213
210
  - ui/src/hokusai/assets/close-large-line.png
211
+ - ui/src/hokusai/assets/icons/outline/arrow-big-up.svg
212
+ - ui/src/hokusai/assets/icons/outline/backspace.svg
214
213
  - ui/src/hokusai/ast.rb
215
214
  - ui/src/hokusai/automation.rb
216
215
  - ui/src/hokusai/automation/client.rb
@@ -242,6 +241,7 @@ files:
242
241
  - ui/src/hokusai/blocks/checkbox.rb
243
242
  - ui/src/hokusai/blocks/circle.rb
244
243
  - ui/src/hokusai/blocks/clipped.rb
244
+ - ui/src/hokusai/blocks/color_picker.rb
245
245
  - ui/src/hokusai/blocks/cursor.rb
246
246
  - ui/src/hokusai/blocks/dropdown.rb
247
247
  - ui/src/hokusai/blocks/dynamic.rb
@@ -249,6 +249,7 @@ files:
249
249
  - ui/src/hokusai/blocks/hblock.rb
250
250
  - ui/src/hokusai/blocks/image.rb
251
251
  - ui/src/hokusai/blocks/input.rb
252
+ - ui/src/hokusai/blocks/keyboard.rb
252
253
  - ui/src/hokusai/blocks/label.rb
253
254
  - ui/src/hokusai/blocks/modal.rb
254
255
  - ui/src/hokusai/blocks/panel.rb
@@ -257,10 +258,16 @@ files:
257
258
  - ui/src/hokusai/blocks/scissor_end.rb
258
259
  - ui/src/hokusai/blocks/scrollbar.rb
259
260
  - ui/src/hokusai/blocks/selectable.rb
261
+ - ui/src/hokusai/blocks/shader_begin.rb
262
+ - ui/src/hokusai/blocks/shader_end.rb
263
+ - ui/src/hokusai/blocks/slider.rb
260
264
  - ui/src/hokusai/blocks/svg.rb
261
265
  - ui/src/hokusai/blocks/text.rb
266
+ - ui/src/hokusai/blocks/text_stream.rb
267
+ - ui/src/hokusai/blocks/texture.rb
262
268
  - ui/src/hokusai/blocks/titlebar/osx.rb
263
269
  - ui/src/hokusai/blocks/toggle.rb
270
+ - ui/src/hokusai/blocks/translation.rb
264
271
  - ui/src/hokusai/blocks/variable.rb
265
272
  - ui/src/hokusai/blocks/vblock.rb
266
273
  - ui/src/hokusai/commands.rb
@@ -268,13 +275,19 @@ files:
268
275
  - ui/src/hokusai/commands/circle.rb
269
276
  - ui/src/hokusai/commands/image.rb
270
277
  - ui/src/hokusai/commands/rect.rb
278
+ - ui/src/hokusai/commands/rotation.rb
279
+ - ui/src/hokusai/commands/scale.rb
271
280
  - ui/src/hokusai/commands/scissor.rb
281
+ - ui/src/hokusai/commands/shader.rb
272
282
  - ui/src/hokusai/commands/text.rb
283
+ - ui/src/hokusai/commands/texture.rb
284
+ - ui/src/hokusai/commands/translation.rb
273
285
  - ui/src/hokusai/diff.rb
274
286
  - ui/src/hokusai/error.rb
275
287
  - ui/src/hokusai/event.rb
276
288
  - ui/src/hokusai/events/keyboard.rb
277
289
  - ui/src/hokusai/events/mouse.rb
290
+ - ui/src/hokusai/events/touch.rb
278
291
  - ui/src/hokusai/font.rb
279
292
  - ui/src/hokusai/meta.rb
280
293
  - ui/src/hokusai/mounting/loop_entry.rb
@@ -286,9 +299,15 @@ files:
286
299
  - ui/src/hokusai/publisher.rb
287
300
  - ui/src/hokusai/style.rb
288
301
  - ui/src/hokusai/types.rb
302
+ - ui/src/hokusai/types/display.rb
303
+ - ui/src/hokusai/types/keyboard.rb
304
+ - ui/src/hokusai/types/mouse.rb
305
+ - ui/src/hokusai/types/primitives.rb
306
+ - ui/src/hokusai/types/touch.rb
289
307
  - ui/src/hokusai/util/clamping_iterator.rb
290
308
  - ui/src/hokusai/util/piece_table.rb
291
309
  - ui/src/hokusai/util/selection.rb
310
+ - ui/src/hokusai/util/wrap_stream.rb
292
311
  - ui/vendor/.gitkeep
293
312
  - vendor/.gitkeep
294
313
  - xmake.lua
@@ -297,7 +316,6 @@ licenses:
297
316
  - MIT
298
317
  metadata:
299
318
  source_code_uri: https://codeberg.org/skinnyjames/hokusai
300
- post_install_message:
301
319
  rdoc_options: []
302
320
  require_paths:
303
321
  - ui/src
@@ -312,8 +330,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
312
330
  - !ruby/object:Gem::Version
313
331
  version: '0'
314
332
  requirements: []
315
- rubygems_version: 3.5.22
316
- signing_key:
333
+ rubygems_version: 3.6.7
317
334
  specification_version: 4
318
335
  summary: A Ruby library for writing GUI applications
319
336
  test_files: []
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><title>finite-icons</title><path d="M13.60851,6.08611L8.35425,11.339,3.06908,6.05389a0.5,0.5,0,0,1,0-.70711l0.539-.539a0.5,0.5,0,0,1,.70711,0l4.03907,4.039L12.36249,4.8399a0.5,0.5,0,0,1,.70705.00006l0.539,0.539A0.5,0.5,0,0,1,13.60851,6.08611Z" fill="#231f20"/></svg>