hokusai-zero 0.2.6.pre.pinephone6 → 0.2.6

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +2 -0
  4. data/README.md +1 -1
  5. data/ast/src/core/input.h +1 -0
  6. data/ast/src/core/util.c +23 -23
  7. data/ast/src/core/util.h +7 -7
  8. data/ext/extconf.rb +3 -3
  9. data/hokusai.gemspec +2 -1
  10. data/ui/examples/counter.rb +1 -2
  11. data/ui/examples/forum/file.rb +1 -1
  12. data/ui/examples/forum/post.rb +1 -0
  13. data/ui/examples/forum.rb +7 -7
  14. data/ui/examples/spreadsheet.rb +0 -1
  15. data/ui/examples/tic_tac_toe.rb +6 -6
  16. data/ui/lib/lib_hokusai.rb +24 -25
  17. data/ui/spec/spec_helper.rb +1 -1
  18. data/ui/src/hokusai/assets/chevron-down.svg +1 -0
  19. data/ui/src/hokusai/automation/driver_commands/base.rb +8 -2
  20. data/ui/src/hokusai/automation/driver_commands/trigger_keyboard.rb +6 -3
  21. data/ui/src/hokusai/automation/driver_commands/trigger_mouse.rb +5 -12
  22. data/ui/src/hokusai/automation/server.rb +3 -2
  23. data/ui/src/hokusai/backends/raylib/config.rb +1 -2
  24. data/ui/src/hokusai/backends/raylib/font.rb +3 -24
  25. data/ui/src/hokusai/backends/raylib.rb +36 -167
  26. data/ui/src/hokusai/backends/sdl2/config.rb +6 -9
  27. data/ui/src/hokusai/backends/sdl2/font.rb +1 -3
  28. data/ui/src/hokusai/backends/sdl2.rb +93 -188
  29. data/ui/src/hokusai/blocks/input.rb +2 -2
  30. data/ui/src/hokusai/commands/rect.rb +3 -12
  31. data/ui/src/hokusai/commands.rb +0 -22
  32. data/ui/src/hokusai/event.rb +1 -2
  33. data/ui/src/hokusai/events/keyboard.rb +18 -11
  34. data/ui/src/hokusai/events/mouse.rb +8 -10
  35. data/ui/src/hokusai/mounting/loop_entry.rb +1 -1
  36. data/ui/src/hokusai/painter.rb +8 -31
  37. data/ui/src/hokusai/types.rb +244 -20
  38. data/ui/src/hokusai.rb +35 -61
  39. data/xmake.lua +1 -1
  40. metadata +22 -32
  41. data/ui/examples/drag.rb +0 -154
  42. data/ui/examples/embedded.rb +0 -58
  43. data/ui/examples/game.rb +0 -143
  44. data/ui/examples/keyboard.rb +0 -47
  45. data/ui/examples/overlay.rb +0 -233
  46. data/ui/examples/provider.rb +0 -56
  47. data/ui/examples/shader/test.rb +0 -155
  48. data/ui/examples/shader.rb +0 -100
  49. data/ui/examples/wiki.rb +0 -82
  50. data/ui/spec/hokusai/e2e/keyboard_spec.rb +0 -52
  51. data/ui/src/hokusai/assets/arrow-down-line.png +0 -0
  52. data/ui/src/hokusai/assets/arrow-down-wide-line.png +0 -0
  53. data/ui/src/hokusai/assets/icons/outline/arrow-big-up.svg +0 -19
  54. data/ui/src/hokusai/assets/icons/outline/backspace.svg +0 -20
  55. data/ui/src/hokusai/blocks/color_picker.rb +0 -1080
  56. data/ui/src/hokusai/blocks/keyboard.rb +0 -249
  57. data/ui/src/hokusai/blocks/shader_begin.rb +0 -22
  58. data/ui/src/hokusai/blocks/shader_end.rb +0 -12
  59. data/ui/src/hokusai/blocks/slider.rb +0 -139
  60. data/ui/src/hokusai/blocks/texture.rb +0 -23
  61. data/ui/src/hokusai/commands/shader.rb +0 -33
  62. data/ui/src/hokusai/commands/texture.rb +0 -26
  63. data/ui/src/hokusai/events/touch.rb +0 -62
  64. data/ui/src/hokusai/types/display.rb +0 -151
  65. data/ui/src/hokusai/types/keyboard.rb +0 -168
  66. data/ui/src/hokusai/types/mouse.rb +0 -36
  67. data/ui/src/hokusai/types/primitives.rb +0 -56
  68. data/ui/src/hokusai/types/touch.rb +0 -181
  69. data/ui/src/hokusai/util/wrap_stream.rb +0 -193
@@ -1,155 +0,0 @@
1
- require_relative "../../src/hokusai"
2
- require_relative "../../src/hokusai/backends/raylib"
3
- require "date"
4
-
5
- class ShaderWrapper < Hokusai::Block
6
- template <<~EOF
7
- [template]
8
- shader_begin {
9
- @mousemove="update_value"
10
- :vertex_shader="vertex_shader"
11
- :uniforms="uniforms"
12
- }
13
- slot
14
- shader_end
15
- EOF
16
-
17
- uses(
18
- shader_begin: Hokusai::Blocks::ShaderBegin,
19
- shader_end: Hokusai::Blocks::ShaderEnd,
20
- texture: Hokusai::Blocks::Texture
21
- )
22
-
23
- def update_value(event)
24
- @pos = (event.pos.x + event.pos.y) / 1000
25
- end
26
-
27
- def uniforms
28
- return unless @start && @pos
29
- done = Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
- elapsed = (done - @start).round(3)
31
-
32
- {
33
- millis: [elapsed / 2, Hokusai::SHADER_UNIFORM_FLOAT]
34
- }
35
- end
36
-
37
- def on_mounted
38
- @start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
39
- end
40
-
41
- def fragment_shader
42
- <<-EOF
43
- #version 330
44
- in vec4 fragColor;
45
- out vec4 finalColor;
46
-
47
- void main() {
48
- finalColor = fragColor; //vec4(0., 1., 0., 1.);
49
- }
50
- EOF
51
- end
52
-
53
- def vertex_shader
54
- <<-EOF
55
- #version 330
56
- in vec3 vertexPosition;
57
- in vec2 vertexTexCoord;
58
- in vec4 vertexColor;
59
-
60
- uniform mat4 mvp;
61
- uniform float millis;
62
-
63
- out vec2 fragTexCoord;
64
- out vec4 fragColor;
65
-
66
- void main() {
67
- fragTexCoord = vertexTexCoord;
68
- fragColor = vertexColor;
69
- vec4 position = mvp * vec4(vertexPosition, 1.);
70
-
71
- position.x += sin(millis + position.y * 8) / 8;
72
- gl_Position = position;
73
- }
74
- EOF
75
- end
76
-
77
- def render(canvas)
78
- canvas.vertical = true
79
- @x = canvas.x
80
-
81
- yield canvas
82
- end
83
- end
84
-
85
- class ShaderTest < Hokusai::Block
86
- style <<~EOF
87
- [style]
88
- circleStyle {
89
- color: rgb(47, 112, 106);
90
- }
91
-
92
- textStyle {
93
- content: "Whoa, coool dude.";
94
- size: 15.0;
95
- }
96
- EOF
97
-
98
- template <<~EOF
99
- [template]
100
- vblock
101
- [if="pickered"]
102
- picker
103
- [else]
104
- vblock
105
- hblock { @click="set_pickered" }
106
- empty
107
- hblock
108
- hblock
109
- empty
110
- hblock
111
- wrapper
112
- image { :source="addy_png" :width="500" :height="400" }
113
- text { ...textStyle }
114
- circle {
115
- :radius="50.0"
116
- ...circleStyle
117
- }
118
- hblock
119
- empty
120
- hblock
121
- empty
122
- EOF
123
-
124
- uses(
125
- wrapper: ShaderWrapper,
126
- picker: Hokusai::Blocks::ColorPicker,
127
- image: Hokusai::Blocks::Image,
128
- text: Hokusai::Blocks::Text,
129
- circle: Hokusai::Blocks::Circle,
130
- vblock: Hokusai::Blocks::Vblock,
131
- hblock: Hokusai::Blocks::Hblock,
132
- empty: Hokusai::Blocks::Empty
133
- )
134
-
135
- attr_accessor :pickered
136
-
137
- def set_pickered(event)
138
- self.pickered = true
139
- end
140
-
141
- def addy_png
142
- "#{__dir__}/../assets/addy.png"
143
- end
144
- end
145
-
146
-
147
- Hokusai::Backends::RaylibBackend.run(ShaderTest) do |config|
148
- config.width = 900
149
- config.height = 800
150
- config.after_load do
151
- font = Hokusai::Backends::RaylibBackend::Font.from("#{__dir__}/assets/Inter-Regular.ttf")
152
- Hokusai.fonts.register "inter", font
153
- Hokusai.fonts.activate "inter"
154
- end
155
- end
@@ -1,100 +0,0 @@
1
- require_relative "../src/hokusai"
2
- require_relative "../src/hokusai/backends/raylib"
3
-
4
- class ShaderExample < Hokusai::Block
5
- style <<~EOF
6
- [style]
7
- textureThing {
8
- width: 500;
9
- height: 900;
10
- scale: 100.0;
11
- }
12
- EOF
13
-
14
- template <<~EOF
15
- [template]
16
- colorpicker
17
- shader_begin {
18
- @mousemove="change_rotation"
19
- @click="switch_color"
20
- :fragment_shader="fragment_shader"
21
- :uniforms="uniforms"
22
- }
23
- texture {
24
- ...textureThing
25
- :rotation="rotate"
26
- }
27
- shader_end
28
- EOF
29
-
30
- uses(
31
- colorpicker: Hokusai::Blocks::ColorPicker,
32
- shader_begin: Hokusai::Blocks::ShaderBegin,
33
- shader_end: Hokusai::Blocks::ShaderEnd,
34
- texture: Hokusai::Blocks::Texture,
35
- rect: Hokusai::Blocks::Rect,
36
- vblock: Hokusai::Blocks::Vblock
37
- )
38
-
39
- attr_reader :rotate
40
-
41
- def initialize(**args)
42
- @color = [1.0, 0.0, 0.0, 1.0]
43
- @position = [0.0, 100.0, 0.0, 1.0]
44
-
45
- super
46
- end
47
-
48
- def change_rotation(event)
49
- @rotate = event.delta[:y]
50
- end
51
-
52
- def switch_color(event)
53
- @color = [
54
- [0.3, 0.3, 0.3, 1.0],
55
- [0.0, 1.0, 0.0, 1.0],
56
- [0.0, 0.0, 1.0, 1.0]
57
- ].sample
58
- end
59
-
60
- # def move_mouse(event)
61
- # @position[0] = [0.0, 0.3, 0.6, 0.9, 1.0].sample
62
- # end
63
-
64
- def vertex_shader
65
- <<-EOF
66
- #version 330 core
67
-
68
- uniform vec4 position;
69
-
70
- void main() {
71
- gl_Position = position;
72
- }
73
- EOF
74
- end
75
-
76
- def fragment_shader
77
- <<-EOF
78
- #version 330 core
79
-
80
- in vec4 position;
81
- out vec4 FragColor;
82
-
83
- uniform vec4 color;
84
-
85
- void main() {
86
- FragColor = color;
87
- }
88
- EOF
89
- end
90
-
91
- def uniforms
92
- [
93
- ["color", @color, Hokusai::SHADER_UNIFORM_VEC4]
94
- ]
95
- end
96
- end
97
-
98
- Hokusai::Backends::RaylibBackend.run(ShaderExample) do |config|
99
- config.background = Raylib::BLUE
100
- end
data/ui/examples/wiki.rb DELETED
@@ -1,82 +0,0 @@
1
- require "wikipedia"
2
- require_relative "../src/hokusai"
3
- require_relative "../src/hokusai/backends/raylib"
4
-
5
- module Wiki
6
- class Widget < Hokusai::Block
7
- style <<-EOF
8
- [style]
9
- wikiStyle {
10
- color: rgb(49, 49, 49);
11
- size: 20;
12
- markdown: true;
13
- padding: padding(5.0, 10.0, 5.0, 10.0);
14
- }
15
- search {
16
- height: 45;
17
- background: rgb(239, 243, 255);
18
- }
19
- EOF
20
- template <<-EOF
21
- [template]
22
- selectable
23
- vblock
24
- vblock {
25
- ...search
26
- }
27
- label {
28
- content="Search by Term"
29
- }
30
- input {
31
- size="25"
32
- @change="update_term"
33
- }
34
- [if="summary"]
35
- panel
36
- text {
37
- @selected="handle_selected"
38
- :content="summary"
39
- ...wikiStyle
40
- }
41
- EOF
42
-
43
- uses(
44
- selectable: Hokusai::Blocks::Selectable,
45
- vblock: Hokusai::Blocks::Vblock,
46
- text: Hokusai::Blocks::Text,
47
- label: Hokusai::Blocks::Label,
48
- input: Hokusai::Blocks::Input,
49
- panel: Hokusai::Blocks::Panel,
50
- )
51
-
52
- attr_reader :summary
53
-
54
- def update_term(term)
55
- page = Wikipedia.find(term)
56
-
57
- @summary = <<~EOF
58
- **[#{term}](#{page.fullurl})**
59
-
60
- #{page.summary}
61
- EOF
62
-
63
- @summary
64
- end
65
-
66
- def handle_selected(start, stop)
67
- pp [start, stop]
68
- end
69
- end
70
- end
71
-
72
- Hokusai::Backends::RaylibBackend.run(Wiki::Widget) do |config|
73
- config.after_load do
74
- font = Hokusai::Backends::RaylibBackend::Font.from_ext("#{__dir__}/assets/Inter-Regular.ttf", 160)
75
- Hokusai.fonts.register "inter", font
76
- Hokusai.fonts.activate "inter"
77
- end
78
-
79
- config.width = 500
80
- config.height = 500
81
- config.title = "Wiki Widget"
82
- end
@@ -1,52 +0,0 @@
1
- # describe Hokusai::Automation::Client do
2
- # let(:keyboard) do
3
- # klass = Class.new(Hokusai::Block) do
4
- # template <<~EOF
5
- # [template]
6
- # vblock
7
- # text#display {
8
- # @keypress="update_content"
9
- # :content="content" size="90"
10
- # }
11
- # keyboard{ :automatic="true" }
12
- # EOF
13
-
14
- # uses(
15
- # text: Hokusai::Blocks::Text,
16
- # keyboard: Hokusai::Blocks::Keyboard
17
- # )
18
-
19
- # attr_accessor :content
20
-
21
- # def update_content(event)
22
- # self.content << event.char
23
- # end
24
-
25
- # def initialize(**args)
26
- # @content = ""
27
-
28
- # super(**args)
29
- # end
30
- # end
31
-
32
- # klass
33
- # end
34
-
35
- # def click_key(client, key)
36
- # client.block("keyboard.#{key}").click
37
- # end
38
-
39
- # it "client works" do
40
- # with_app(keyboard) do |client, app|
41
- # display = client.block("#display")
42
-
43
- # expect(display.prop("content")).to eq("")
44
-
45
- # "hello world".split("").each do |key|
46
- # click_key(client, key)
47
- # end
48
-
49
- # expect(display.prop("content")).to eq("hello world")
50
- # end
51
- # end
52
- # end
@@ -1,19 +0,0 @@
1
- <!--
2
- tags: [direction, north]
3
- category: Arrows
4
- version: "1.37"
5
- unicode: "eddd"
6
- -->
7
- <svg
8
- xmlns="http://www.w3.org/2000/svg"
9
- width="24"
10
- height="24"
11
- viewBox="0 0 24 24"
12
- fill="none"
13
- stroke="white"
14
- stroke-width="2"
15
- stroke-linecap="round"
16
- stroke-linejoin="round"
17
- >
18
- <path d="M9 20v-8h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v8a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z" />
19
- </svg>
@@ -1,20 +0,0 @@
1
- <!--
2
- category: Text
3
- tags: [delete, remove, eliminate]
4
- version: "1.0"
5
- unicode: "ea2d"
6
- -->
7
- <svg
8
- xmlns="http://www.w3.org/2000/svg"
9
- width="24"
10
- height="24"
11
- viewBox="0 0 24 24"
12
- fill="none"
13
- stroke="white"
14
- stroke-width="2"
15
- stroke-linecap="round"
16
- stroke-linejoin="round"
17
- >
18
- <path d="M20 6a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-11l-5 -5a1.5 1.5 0 0 1 0 -2l5 -5z" />
19
- <path d="M12 10l4 4m0 -4l-4 4" />
20
- </svg>