libui 0.1.2.pre-arm64-darwin → 0.2.0-arm64-darwin
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.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +108 -70
- data/lib/libui/error.rb +10 -0
- data/lib/libui/ffi.rb +18 -4
- data/lib/libui/fiddle_patch.rb +9 -1
- data/lib/libui/libui_base.rb +6 -4
- data/lib/libui/version.rb +1 -1
- data/lib/libui.rb +56 -13
- data/vendor/README.md +20 -6
- data/vendor/libui.arm64.dylib +0 -0
- metadata +23 -12
- data/vendor/libui.dylib +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8260a14f6b52f63fc4e436bdd22a8aff20a797b2566b0b50fbcf6afe5e81d6ac
|
4
|
+
data.tar.gz: 06c8a83b35a689befc754471ddc3b0458432db5cfae224043807d06e546dc075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 957fdfe74e7db5f84054af4c54bbe057c5d15681c7aa0cb033b938f42f0add05efd674b8fab39c2a1669490f4d45b4b58da90b2bb4eab70a46c341bcd17e4f9b
|
7
|
+
data.tar.gz: fb9d0618abcd661a57bbbda176c277fb59d1ba8ad44535d221dcd8ecb5b74653f55c0699e0d0dd0dab3cc9b281233bef6e946d0e8bd314b226dbab00cde355bb
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,34 +1,47 @@
|
|
1
1
|
# LibUI
|
2
2
|
|
3
|
-
](https://github.com/kojix2/LibUI/actions/workflows/test.yml)
|
4
4
|
[](https://badge.fury.io/rb/libui)
|
5
5
|
<a href="https://github.com/AndyObtiva/glimmer-dsl-libui"><img alt="glimmer-dsl-libui" src="https://github.com/AndyObtiva/glimmer/blob/master/images/glimmer-logo-hi-res.svg" width="50" height="50" align="right"></a>
|
6
|
+
[](https://github.com/kojix2/libui-ng/actions/workflows/pre-build.yml)
|
7
|
+
[](https://tokei.kojix2.net/github/kojix2/LibUI)
|
6
8
|
|
7
|
-
LibUI is a Ruby wrapper for libui
|
9
|
+
LibUI is a Ruby wrapper for libui family.
|
8
10
|
|
9
11
|
:rocket: [libui-ng](https://github.com/libui-ng/libui-ng) - A cross-platform portable GUI library
|
10
12
|
|
11
|
-
:
|
13
|
+
:wrench: [libui-dev](https://github.com/petabyt/libui-dev) - Native UI library for C - with some extras
|
14
|
+
|
15
|
+
:radio_button: [libui](https://github.com/andlabs/libui) - Original version by andlabs.
|
12
16
|
|
13
17
|
## Installation
|
14
18
|
|
19
|
+
It is recommended to use libui-ng, via the --pre commandline flag:
|
20
|
+
|
21
|
+
```sh
|
22
|
+
gem install libui --pre # libui-ng; this will fetch libui-0.1.3.pre-x86_64-linux.gem
|
23
|
+
```
|
24
|
+
|
25
|
+
If for some reason you would like to install the slightly older libui-0.1.2.gem release, issue:
|
26
|
+
|
15
27
|
```sh
|
16
28
|
gem install libui
|
17
29
|
```
|
18
30
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
31
|
+
- The gem package includes the libui-ng shared library for Windows, Mac, and Linux.
|
32
|
+
- Namely `libui.dll`, `libui.dylib`, or `libui.so`.
|
33
|
+
- No dependencies required.
|
34
|
+
- The libui gem uses the standard Ruby library [Fiddle](https://github.com/ruby/fiddle) to call C functions.
|
35
|
+
|
36
|
+
| Windows | Mac | Linux |
|
37
|
+
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
38
|
+
| <img src="https://user-images.githubusercontent.com/5798442/103118046-900ea780-46b0-11eb-81fc-32626762e4df.png"> | <img src="https://user-images.githubusercontent.com/5798442/103118059-99980f80-46b0-11eb-9d12-324ec4d297c9.png"> | <img src="https://user-images.githubusercontent.com/5798442/103118068-a0bf1d80-46b0-11eb-8c5c-3bdcc3dcfb26.png"> |
|
23
39
|
|
24
|
-
|
25
|
-
|---------|-----|-------|
|
26
|
-
|<img src="https://user-images.githubusercontent.com/5798442/103118046-900ea780-46b0-11eb-81fc-32626762e4df.png">|<img src="https://user-images.githubusercontent.com/5798442/103118059-99980f80-46b0-11eb-9d12-324ec4d297c9.png">|<img src="https://user-images.githubusercontent.com/5798442/103118068-a0bf1d80-46b0-11eb-8c5c-3bdcc3dcfb26.png">|
|
40
|
+
Notes:
|
27
41
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
* [Raspberry Pi](https://www.raspberrypi.com/) and other platform users will need to compile C libui. See [Development](#development).
|
42
|
+
- If you are using the 32-bit (x86) version of Ruby, you need to download the 32-bit (x86) native dll. See the [Development](#development) section.
|
43
|
+
- On Windows, libui may not work due to missing DLLs. In that case, you need to install [Visual C++ Redistributable](https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist). See ([#48](https://github.com/kojix2/LibUI/issues/48))
|
44
|
+
- Users with [Raspberry Pi](https://www.raspberrypi.com/) or other platforms will need to compile the C libui library. See the [Development](#development) section.
|
32
45
|
|
33
46
|
## Usage
|
34
47
|
|
@@ -49,9 +62,8 @@ end
|
|
49
62
|
|
50
63
|
UI.window_on_closing(main_window) do
|
51
64
|
puts 'Bye Bye'
|
52
|
-
UI.control_destroy(main_window)
|
53
65
|
UI.quit
|
54
|
-
|
66
|
+
1
|
55
67
|
end
|
56
68
|
|
57
69
|
UI.window_set_child(main_window, button)
|
@@ -61,30 +73,30 @@ UI.main
|
|
61
73
|
UI.quit
|
62
74
|
```
|
63
75
|
|
64
|
-
|
76
|
+
For more examples, see the [examples](https://github.com/kojix2/libui/tree/main/examples) directory.
|
65
77
|
|
66
78
|
### General Rules
|
67
79
|
|
68
|
-
Compared to original libui written in C
|
80
|
+
Compared to the original libui library written in C:
|
69
81
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
82
|
+
- Method names use snake_case.
|
83
|
+
- The last argument can be omitted if it's nil.
|
84
|
+
- A block can be passed as a callback.
|
85
|
+
- The block will be converted to a Proc object and added as the last argument.
|
86
|
+
- The last argument can still be omitted when nil.
|
75
87
|
|
76
88
|
You can use [the documentation for libui's Go bindings](https://pkg.go.dev/github.com/andlabs/ui) as a reference.
|
77
89
|
|
78
90
|
### DSLs for LibUI
|
79
91
|
|
80
|
-
LibUI is
|
92
|
+
LibUI is not object-oriented because it is a thin Ruby wrapper (binding) for the procedural C libui library, mirroring its API structure.
|
81
93
|
|
82
|
-
|
94
|
+
To build actual applications, it is recommended to use a DSL for LibUI, as they enable writing object-oriented code the Ruby way (instead of procedural code the C way):
|
83
95
|
|
84
|
-
|
85
|
-
|
96
|
+
- [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui)
|
97
|
+
- [libui_paradise](https://rubygems.org/gems/libui_paradise)
|
86
98
|
|
87
|
-
###
|
99
|
+
### Working with fiddle pointers
|
88
100
|
|
89
101
|
```ruby
|
90
102
|
require 'libui'
|
@@ -92,7 +104,7 @@ UI = LibUI
|
|
92
104
|
UI.init
|
93
105
|
```
|
94
106
|
|
95
|
-
|
107
|
+
To convert a pointer to a string:
|
96
108
|
|
97
109
|
```ruby
|
98
110
|
label = UI.new_label("Ruby")
|
@@ -100,12 +112,12 @@ p pointer = UI.label_text(label) # #<Fiddle::Pointer>
|
|
100
112
|
p pointer.to_s # Ruby
|
101
113
|
```
|
102
114
|
|
103
|
-
If you need to use C structs, you can do the following
|
115
|
+
If you need to use C structs, you can do the following:
|
104
116
|
|
105
117
|
```ruby
|
106
118
|
font_button = UI.new_font_button
|
107
119
|
|
108
|
-
# Allocate memory
|
120
|
+
# Allocate memory
|
109
121
|
font_descriptor = UI::FFI::FontDescriptor.malloc
|
110
122
|
font_descriptor.to_ptr.free = Fiddle::RUBY_FREE
|
111
123
|
# font_descriptor = UI::FFI::FontDescriptor.malloc(Fiddle::RUBY_FREE) # fiddle 1.0.1 or higher
|
@@ -120,26 +132,25 @@ UI.font_button_on_changed(font_button) do
|
|
120
132
|
end
|
121
133
|
```
|
122
134
|
|
123
|
-
|
124
|
-
|
125
|
-
`Fiddle::Closure::BlockCaller` or `Fiddle::Closure`.
|
126
|
-
|
127
|
-
If the function object is collected, memory will be freed
|
128
|
-
and a segmentation violation will occur when the callback is invoked.
|
135
|
+
- Callbacks
|
136
|
+
- In Ruby/Fiddle, a C callback function is written as an object of
|
137
|
+
`Fiddle::Closure::BlockCaller` or `Fiddle::Closure`.
|
138
|
+
Be careful about Ruby's garbage collection - if the function object is collected, memory will be freed resulting in a segmentation violation when the callback is invoked.
|
129
139
|
|
130
140
|
```ruby
|
131
|
-
# to a local variable to prevent it from being collected by GC.
|
141
|
+
# Assign to a local variable to prevent it from being collected by GC.
|
132
142
|
handler.MouseEvent = (c1 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
133
143
|
handler.MouseCrossed = (c2 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
134
144
|
handler.DragBroken = (c3 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
135
145
|
```
|
136
146
|
|
137
|
-
###
|
147
|
+
### Creating a Windows executable (.exe) with OCRA
|
138
148
|
|
139
|
-
OCRA (One-Click Ruby Application) builds Windows executables from Ruby source code.
|
140
|
-
* https://github.com/larsch/ocra/
|
149
|
+
OCRA (One-Click Ruby Application) builds Windows executables from Ruby source code.
|
141
150
|
|
142
|
-
|
151
|
+
- https://github.com/larsch/ocra/
|
152
|
+
|
153
|
+
To build an exe with Ocra, include 3 DLLs from the ruby_builtin_dlls folder:
|
143
154
|
|
144
155
|
```sh
|
145
156
|
ocra examples/control_gallery.rb ^
|
@@ -149,7 +160,7 @@ ocra examples/control_gallery.rb ^
|
|
149
160
|
--gem-all=fiddle ^
|
150
161
|
```
|
151
162
|
|
152
|
-
Add additional options below if necessary
|
163
|
+
Add additional options below if necessary:
|
153
164
|
|
154
165
|
```sh
|
155
166
|
--window ^
|
@@ -162,59 +173,86 @@ Add additional options below if necessary.
|
|
162
173
|
|
163
174
|
## Development
|
164
175
|
|
165
|
-
LibUI is not object-oriented, but it provides high portability with a minimal implementation.
|
166
|
-
|
167
176
|
```sh
|
168
177
|
git clone https://github.com/kojix2/libui
|
169
178
|
cd libui
|
170
179
|
bundle install
|
171
|
-
bundle exec rake vendor:
|
180
|
+
bundle exec rake vendor:auto
|
172
181
|
bundle exec rake test
|
173
182
|
```
|
174
183
|
|
175
|
-
|
184
|
+
### Pre-built shared libraries for libui-ng
|
176
185
|
|
177
|
-
|
186
|
+
Download pre-built libui-ng shared libraries (per your current platform):
|
178
187
|
|
188
|
+
```sh
|
189
|
+
bundle exec rake vendor:auto
|
190
|
+
```
|
191
|
+
|
192
|
+
Clean downloaded vendor files (keeps `vendor/{LICENSE,README}.md`):
|
193
|
+
|
194
|
+
```sh
|
195
|
+
bundle exec rake vendor:clean
|
179
196
|
```
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
197
|
+
|
198
|
+
### Using your own libui build
|
199
|
+
|
200
|
+
If you build libui-ng yourself, set `LIBUIDIR` to the directory containing the compiled `.so/.dylib/.dll` so LibUI can load it. You may also replace files under `vendor/` with your build if preferred. See [#46](https://github.com/kojix2/LibUI/issues/46#issuecomment-1041575792).
|
201
|
+
|
202
|
+
### Publishing gems
|
203
|
+
|
204
|
+
#### Automated Publishing
|
205
|
+
|
206
|
+
Push a version tag to automatically publish platform-specific gems:
|
207
|
+
|
208
|
+
```sh
|
209
|
+
git tag v0.1.3
|
210
|
+
git push origin v0.1.3
|
188
211
|
```
|
189
212
|
|
190
|
-
|
213
|
+
Requires `RUBYGEMS_API_KEY` repository secret with scoped API key.
|
191
214
|
|
192
|
-
|
215
|
+
#### Manual Publishing
|
193
216
|
|
194
|
-
|
217
|
+
```sh
|
218
|
+
ls vendor # check the vendor directory
|
219
|
+
rm -rf pkg # remove previously built gems
|
220
|
+
rake build_platform # build gems
|
221
|
+
|
222
|
+
# Check the contents of the gem
|
223
|
+
find pkg -name *.gem -exec sh -c "echo; echo \# {}; tar -O -f {} -x data.tar.gz | tar zt" \;
|
195
224
|
|
196
|
-
|
225
|
+
rake release_platform # publish gems
|
226
|
+
```
|
197
227
|
|
198
228
|
### libui or libui-ng
|
199
229
|
|
200
|
-
|
201
|
-
|
230
|
+
- From version 0.1.X, we plan to support only libui-ng/libui-ng.
|
231
|
+
- Version 0.0.X only supports andlabs/libui.
|
202
232
|
|
203
233
|
## Contributing
|
204
234
|
|
205
|
-
Would you like to
|
206
|
-
|
207
|
-
|
208
|
-
|
235
|
+
Would you like to contribute to LibUI?
|
236
|
+
|
237
|
+
- Please feel free to send us your [pull requests](https://github.com/kojix2/libui/pulls).
|
238
|
+
- Small corrections, such as typo fixes, are appreciated.
|
239
|
+
- Did you find any bugs? Submit them in the [issues](https://github.com/kojix2/LibUI/issues) section!
|
240
|
+
|
241
|
+
Do you need commit rights?
|
242
|
+
|
243
|
+
- If you need commit rights to my repository or want to get admin rights and take over the project, please feel free to contact @kojix2.
|
244
|
+
- Many OSS projects become abandoned because only the founder has commit rights to the original repository.
|
245
|
+
|
246
|
+
Support libui-ng development
|
209
247
|
|
210
|
-
|
211
|
-
|
248
|
+
- Contributing to the development of libui-ng is a contribution to the entire libui community, including Ruby's LibUI.
|
249
|
+
- For example, it would be easier to release LibUI in Ruby if libui-ng could be built easily and official shared libraries could be distributed.
|
212
250
|
|
213
|
-
##
|
251
|
+
## Acknowledgements
|
214
252
|
|
215
253
|
This project is inspired by libui-ruby.
|
216
254
|
|
217
|
-
|
255
|
+
- https://github.com/jamescook/libui-ruby
|
218
256
|
|
219
257
|
While libui-ruby uses [Ruby-FFI](https://github.com/ffi/ffi), this gem uses [Fiddle](https://github.com/ruby/fiddle).
|
220
258
|
|
data/lib/libui/error.rb
ADDED
data/lib/libui/ffi.rb
CHANGED
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'fiddle/import'
|
2
2
|
require_relative 'fiddle_patch'
|
3
|
+
require_relative 'error'
|
3
4
|
|
4
5
|
module LibUI
|
6
|
+
|
5
7
|
module FFI
|
6
8
|
extend Fiddle::Importer
|
7
9
|
extend FiddlePatch
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
raise
|
11
|
+
if LibUI.ffi_lib.nil?
|
12
|
+
raise LibraryNotFoundError, 'Could not find libui shared library. LibUI.ffi_lib is nil.'
|
13
|
+
elsif !File.exist?(LibUI.ffi_lib)
|
14
|
+
raise LibraryNotFoundError, "Could not find libui shared library: #{LibUI.ffi_lib}"
|
15
|
+
else
|
16
|
+
begin
|
17
|
+
dlload LibUI.ffi_lib
|
18
|
+
rescue LoadError
|
19
|
+
raise LibraryLoadError, "Could not load libui shared library: #{LibUI.ffi_lib}"
|
20
|
+
end
|
13
21
|
end
|
14
22
|
|
15
23
|
class << self
|
@@ -18,6 +26,8 @@ module LibUI
|
|
18
26
|
def try_extern(signature, *opts)
|
19
27
|
extern(signature, *opts)
|
20
28
|
rescue StandardError => e
|
29
|
+
# Do not raise error when the function is not found
|
30
|
+
# because some functions may not be available on older versions of libui.
|
21
31
|
warn "#{e.class.name}: #{e.message}"
|
22
32
|
end
|
23
33
|
|
@@ -27,6 +37,7 @@ module LibUI
|
|
27
37
|
end
|
28
38
|
|
29
39
|
typealias('uint32_t', 'unsigned int')
|
40
|
+
typealias('uint64_t', 'unsigned long long')
|
30
41
|
|
31
42
|
InitOptions = struct [
|
32
43
|
'size_t Size'
|
@@ -89,6 +100,9 @@ module LibUI
|
|
89
100
|
|
90
101
|
try_extern 'char *uiWindowTitle(uiWindow *w)'
|
91
102
|
try_extern 'void uiWindowSetTitle(uiWindow *w, const char *title)'
|
103
|
+
try_extern 'void uiWindowPosition(uiWindow *w, int *x, int *y)'
|
104
|
+
try_extern 'void uiWindowSetPosition(uiWindow *w, int x, int y)'
|
105
|
+
try_extern 'void uiWindowOnPositionChanged(uiWindow *w, void (*f)(uiWindow *sender, void *senderData), void *data)'
|
92
106
|
try_extern 'void uiWindowContentSize(uiWindow *w, int *width, int *height)'
|
93
107
|
try_extern 'void uiWindowSetContentSize(uiWindow *w, int width, int height)'
|
94
108
|
try_extern 'int uiWindowFullscreen(uiWindow *w)'
|
data/lib/libui/fiddle_patch.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
module LibUI
|
2
|
+
# This module overrides Fiddle's mtehods
|
3
|
+
# - Fiddle::Importer#extern
|
4
|
+
# - Fiddle::CParser#parse_signature
|
5
|
+
# Original methods are in
|
6
|
+
# - https://github.com/ruby/fiddle/blob/master/lib/fiddle/import.rb
|
7
|
+
# - https://github.com/ruby/fiddle/blob/master/lib/fiddle/cparser.rb
|
8
|
+
# These changes add the ability to parse the signatures of functions given as arguments.
|
9
|
+
|
2
10
|
module FiddlePatch
|
3
11
|
def parse_signature(signature, tymap = nil)
|
4
12
|
tymap ||= {}
|
@@ -8,7 +16,7 @@ module LibUI
|
|
8
16
|
when /^([\w\*\s]+[*\s])(\w+)\((.*?)\);?$/
|
9
17
|
[parse_ctype(Regexp.last_match(1).strip, tymap), Regexp.last_match(2), Regexp.last_match(3)]
|
10
18
|
else
|
11
|
-
raise("can't
|
19
|
+
raise("can't parse the function prototype: #{signature}")
|
12
20
|
end
|
13
21
|
symname = func
|
14
22
|
callback_argument_types = {} # Added
|
data/lib/libui/libui_base.rb
CHANGED
@@ -25,11 +25,13 @@ module LibUI
|
|
25
25
|
# Protect from GC
|
26
26
|
# by giving the owner object a reference to the callback.
|
27
27
|
# See https://github.com/kojix2/LibUI/issues/8
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
receiver = args.first
|
29
|
+
owner = if idx == 0 || # UI.queue_main{}
|
30
|
+
receiver.nil? ||
|
31
|
+
(receiver.respond_to?(:frozen?) && receiver.frozen?) # UI.timer(100) {}
|
32
|
+
LibUIBase # keep a reference on an internal module to avoid GC
|
31
33
|
else
|
32
|
-
|
34
|
+
receiver # receiver object holds the callback
|
33
35
|
end
|
34
36
|
if owner.instance_variable_defined?(:@callbacks)
|
35
37
|
owner.instance_variable_get(:@callbacks) << callback
|
data/lib/libui/version.rb
CHANGED
data/lib/libui.rb
CHANGED
@@ -1,21 +1,39 @@
|
|
1
1
|
require_relative 'libui/version'
|
2
2
|
require_relative 'libui/utils'
|
3
|
+
require_relative 'libui/error'
|
3
4
|
require 'rbconfig'
|
4
5
|
|
5
6
|
module LibUI
|
6
|
-
class Error < StandardError; end
|
7
|
-
|
8
7
|
class << self
|
9
8
|
attr_accessor :ffi_lib
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
host_cpu = case RbConfig::CONFIG['host_cpu']
|
12
|
+
when /i\d86/
|
13
|
+
'x86'
|
14
|
+
else
|
15
|
+
RbConfig::CONFIG['host_cpu']
|
16
|
+
end
|
17
|
+
|
18
|
+
lib_name = [
|
19
|
+
# For libui-ng shared libraries compiled with (rake vendor:build)
|
20
|
+
"libui.#{RbConfig::CONFIG['host_cpu']}.#{RbConfig::CONFIG['SOEXT']}",
|
21
|
+
# For libui-ng shared library downloaded from RubyGems.org
|
22
|
+
"libui.#{host_cpu}.#{RbConfig::CONFIG['SOEXT']}",
|
23
|
+
# For backward compatibility or manual compilation of libui-ng
|
24
|
+
"libui.#{RbConfig::CONFIG['SOEXT']}"
|
25
|
+
]
|
26
|
+
|
27
|
+
self.ffi_lib = \
|
28
|
+
if ENV['LIBUIDIR'] && !ENV['LIBUIDIR'].empty?
|
29
|
+
lib_name.lazy
|
30
|
+
.map { |name| File.expand_path(name, ENV['LIBUIDIR']) }
|
31
|
+
.find { |path| File.exist?(path) }
|
32
|
+
else
|
33
|
+
lib_name.lazy
|
34
|
+
.map { |name| File.expand_path("../vendor/#{name}", __dir__) }
|
35
|
+
.find { |path| File.exist?(path) }
|
36
|
+
end
|
19
37
|
|
20
38
|
require_relative 'libui/ffi'
|
21
39
|
require_relative 'libui/libui_base'
|
@@ -24,17 +42,42 @@ module LibUI
|
|
24
42
|
|
25
43
|
class << self
|
26
44
|
def init(opt = nil)
|
45
|
+
# Allocate uiInitOptions if not provided
|
27
46
|
unless opt
|
28
47
|
opt = FFI::InitOptions.malloc
|
29
48
|
opt.to_ptr.free = Fiddle::RUBY_FREE
|
49
|
+
opt.Size = FFI::InitOptions.size
|
30
50
|
end
|
31
|
-
i = super(opt)
|
32
|
-
return if i.size.zero?
|
33
51
|
|
34
|
-
|
35
|
-
|
52
|
+
err_ptr = super(opt) # uiInit returns const char* error or NULL on success
|
53
|
+
return nil if err_ptr.null?
|
54
|
+
|
55
|
+
# Convert C string to Ruby string and free the error string per API contract
|
56
|
+
err_msg = err_ptr.to_s
|
57
|
+
free_init_error(err_ptr)
|
58
|
+
warn err_msg
|
59
|
+
nil
|
36
60
|
end
|
37
61
|
|
62
|
+
# Gets the window position.
|
63
|
+
# Coordinates are measured from the top left corner of the screen.
|
64
|
+
# @param w [Fiddle::Pointer] Pointer of uiWindow instance.
|
65
|
+
# @return [Array] position of the window. [x, y]
|
66
|
+
# @note This method may return inaccurate or dummy values on Unix platforms.
|
67
|
+
|
68
|
+
def window_position(w)
|
69
|
+
x_ptr = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
|
70
|
+
y_ptr = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
|
71
|
+
super(w, x_ptr, y_ptr)
|
72
|
+
x = x_ptr[0, Fiddle::SIZEOF_INT].unpack1('i*')
|
73
|
+
y = y_ptr[0, Fiddle::SIZEOF_INT].unpack1('i*')
|
74
|
+
[x, y]
|
75
|
+
end
|
76
|
+
|
77
|
+
# FIXME: This is a workaround for a old version of Fiddle.
|
78
|
+
# Fiddle 1.1.2 and above should be able to handle one character string.
|
79
|
+
# See https://github.com/ruby/fiddle/issues/96
|
80
|
+
|
38
81
|
def open_type_features_add(otf, a, b, c, d, value)
|
39
82
|
a, b, c, d = [a, b, c, d].map { |s| s.is_a?(String) ? s.ord : s }
|
40
83
|
super(otf, a, b, c, d, value)
|
data/vendor/README.md
CHANGED
@@ -68,6 +68,16 @@ For the sake of completeness, I should note that the default value of `--layout`
|
|
68
68
|
|
69
69
|
Backends other than `ninja` should work, but are untested by me.
|
70
70
|
|
71
|
+
## Testing
|
72
|
+
|
73
|
+
### Automated Unit Tests
|
74
|
+
|
75
|
+
Run the included unit tests via `meson test -C build`. Alternatively you can also run the `unit` executable manually.
|
76
|
+
|
77
|
+
### Manual Testing Suite
|
78
|
+
|
79
|
+
Run the manual quality assurance test suite via `qa` and follow the instructions laid out within.
|
80
|
+
|
71
81
|
## Installation
|
72
82
|
|
73
83
|
Meson also supports installing from source; if you use Ninja, just do
|
@@ -82,9 +92,13 @@ When running `meson`, the `--prefix` option will set the installation prefix. [T
|
|
82
92
|
|
83
93
|
Can be built from AUR: https://aur.archlinux.org/packages/libui-ng-git/
|
84
94
|
|
85
|
-
## Documentation
|
95
|
+
## Documentation [WIP]
|
96
|
+
|
97
|
+
[API](https://libui-ng.github.io/libui-ng/), check the [modules](https://libui-ng.github.io/libui-ng/modules.html) section for an overview of (nearly all) uiControls.
|
98
|
+
|
99
|
+
Consult the `ui.h` comments for the uiControls missing in the docs.
|
86
100
|
|
87
|
-
|
101
|
+
Check the `examples` directory for fully fledged examples. Check out the `tests` directory and subdirectories for more real world usage.
|
88
102
|
|
89
103
|
## Language Bindings
|
90
104
|
|
@@ -96,7 +110,7 @@ Language | Bindings
|
|
96
110
|
--- | ---
|
97
111
|
C++ | [libui-cpp](https://github.com/billyquith/libui-cpp), [cpp-libui-qtlike](https://github.com/aoloe/cpp-libui-qtlike)
|
98
112
|
C# / .NET Framework | [LibUI.Binding](https://github.com/NattyNarwhal/LibUI.Binding)
|
99
|
-
C# / .NET Core | [DevZH.UI](https://github.com/noliar/DevZH.UI), [SharpUI](https://github.com/benpye/sharpui/)
|
113
|
+
C# / .NET Core | [DevZH.UI](https://github.com/noliar/DevZH.UI), [SharpUI](https://github.com/benpye/sharpui/)
|
100
114
|
CHICKEN Scheme | [wasamasa/libui](https://github.com/wasamasa/libui)
|
101
115
|
Common Lisp | [jinwoo/cl-ui](https://github.com/jinwoo/cl-ui)
|
102
116
|
Crystal | [libui.cr](https://github.com/Fusion/libui.cr), [hedron](https://github.com/Qwerp-Derp/hedron), [iu](https://github.com/grkek/iu)
|
@@ -109,13 +123,13 @@ JavaScript/Node.js | [libui-node](https://github.com/parro-it/libui-node), [libu
|
|
109
123
|
Julia | [Libui.jl](https://github.com/joa-quim/Libui.jl)
|
110
124
|
Kotlin | [kotlin-libui](https://github.com/msink/kotlin-libui)
|
111
125
|
Lua | [libuilua](https://github.com/zevv/libuilua), [libui-lua](https://github.com/mdombroski/libui-lua), [lui](http://tset.de/lui/index.html), [lui](https://github.com/zhaozg/lui)
|
112
|
-
Nim | [ui](https://github.com/nim-lang/ui)
|
126
|
+
Nim | [ui](https://github.com/nim-lang/ui), [uing](https://github.com/neroist/uing)
|
113
127
|
Perl6 | [perl6-libui](https://github.com/Garland-g/perl6-libui)
|
114
|
-
PHP | [ui](https://github.com/krakjoe/ui)
|
128
|
+
PHP | [ui](https://github.com/krakjoe/ui), [Ardillo](https://github.com/ardillo-php/ext)
|
115
129
|
Python | [pylibui](https://github.com/joaoventura/pylibui)
|
116
130
|
Ring | [RingLibui](https://github.com/ring-lang/ring/tree/master/extensions/ringlibui)
|
117
131
|
Ruby | [libui-ruby](https://github.com/jamescook/libui-ruby), [LibUI](https://github.com/kojix2/libui), [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui)
|
118
|
-
Rust | [libui-ng-sys](https://github.com/norepimorphism/libui-ng-sys), [boing](https://github.com/norepimorphism/boing), [libui-rs](https://github.com/rust-native-ui/libui-rs)
|
132
|
+
Rust | [libui-ng-sys](https://github.com/norepimorphism/libui-ng-sys), [boing](https://github.com/norepimorphism/boing), [libui-rs](https://github.com/rust-native-ui/libui-rs), [libui](https://github.com/libui-rs/libui)
|
119
133
|
Scala | [scalaui](https://github.com/lolgab/scalaui)
|
120
134
|
Swift | [libui-swift](https://github.com/sclukey/libui-swift)
|
121
135
|
|
Binary file
|
metadata
CHANGED
@@ -1,16 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: arm64-darwin
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: fiddle
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
14
26
|
email:
|
15
27
|
- 2xijok@gmail.com
|
16
28
|
executables: []
|
@@ -20,6 +32,7 @@ files:
|
|
20
32
|
- LICENSE.txt
|
21
33
|
- README.md
|
22
34
|
- lib/libui.rb
|
35
|
+
- lib/libui/error.rb
|
23
36
|
- lib/libui/ffi.rb
|
24
37
|
- lib/libui/fiddle_patch.rb
|
25
38
|
- lib/libui/libui_base.rb
|
@@ -27,12 +40,11 @@ files:
|
|
27
40
|
- lib/libui/version.rb
|
28
41
|
- vendor/LICENSE.md
|
29
42
|
- vendor/README.md
|
30
|
-
- vendor/libui.dylib
|
43
|
+
- vendor/libui.arm64.dylib
|
31
44
|
homepage: https://github.com/kojix2/libui
|
32
45
|
licenses:
|
33
46
|
- MIT
|
34
47
|
metadata: {}
|
35
|
-
post_install_message:
|
36
48
|
rdoc_options: []
|
37
49
|
require_paths:
|
38
50
|
- lib
|
@@ -40,15 +52,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
40
52
|
requirements:
|
41
53
|
- - ">="
|
42
54
|
- !ruby/object:Gem::Version
|
43
|
-
version: '2.
|
55
|
+
version: '2.6'
|
44
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
57
|
requirements:
|
46
|
-
- - "
|
58
|
+
- - ">="
|
47
59
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
60
|
+
version: '0'
|
49
61
|
requirements: []
|
50
|
-
rubygems_version: 3.
|
51
|
-
signing_key:
|
62
|
+
rubygems_version: 3.6.9
|
52
63
|
specification_version: 4
|
53
64
|
summary: Ruby bindings to libui
|
54
65
|
test_files: []
|
data/vendor/libui.dylib
DELETED
Binary file
|