libui 0.0.8 → 0.0.9
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/README.md +63 -16
- data/lib/libui/utils.rb +1 -1
- data/lib/libui/version.rb +1 -1
- data/lib/libui.rb +10 -15
- data/vendor/libui.so +0 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbb5362886495f17bf74055bf1ad4cbc96bb7f0e4518e8db0b18f9572559adf2
|
4
|
+
data.tar.gz: 19040d301c6cb135a3e5ef1270f211f48f007f02ec3e5fe7edcbc3be03f275da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27a0c320d8592b2e6a6531b66ed0de3a83a3f606058d16469af530d0633a02d2d13e848e5ca4dd8d6c184015449a2ba56b4eb6c7e63ede1ccb7bfa6d447b5f1b
|
7
|
+
data.tar.gz: '033190ef229e3f567db9c7a7d338da4107072a6120e79c928a5e03dffcca922ffe75ac76f631fda810133cd6316d6af55ea234eb3fce214540fe1e92fd7d6eaf'
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|

|
4
4
|
[](https://badge.fury.io/rb/libui)
|
5
5
|
|
6
|
-
:radio_button: [libui](https://github.com/andlabs/libui) - a portable GUI library -for Ruby
|
6
|
+
:radio_button: [libui](https://github.com/andlabs/libui) - a portable GUI library - for Ruby
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -20,25 +20,29 @@ gem install libui
|
|
20
20
|
|---------|-----|-------|
|
21
21
|
|<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">|
|
22
22
|
|
23
|
+
Note: If you are using the 32-bit (x86) version of Ruby, you need to download the 32-bit (x86) native dll. See [Development](#development).
|
24
|
+
|
23
25
|
## Usage
|
24
26
|
|
25
27
|
```ruby
|
26
28
|
require 'libui'
|
29
|
+
|
27
30
|
UI = LibUI
|
28
31
|
|
29
32
|
UI.init
|
30
33
|
|
31
|
-
main_window = UI.new_window('hello world',
|
32
|
-
UI.window_on_closing(main_window) do
|
33
|
-
puts 'Bye Bye'
|
34
|
-
UI.control_destroy(main_window)
|
35
|
-
UI.quit
|
36
|
-
0
|
37
|
-
end
|
34
|
+
main_window = UI.new_window('hello world', 200, 100, 1)
|
38
35
|
|
39
36
|
button = UI.new_button('Button')
|
37
|
+
|
40
38
|
UI.button_on_clicked(button) do
|
41
39
|
UI.msg_box(main_window, 'Information', 'You clicked the button')
|
40
|
+
end
|
41
|
+
|
42
|
+
UI.window_on_closing(main_window) do
|
43
|
+
puts 'Bye Bye'
|
44
|
+
UI.control_destroy(main_window)
|
45
|
+
UI.quit
|
42
46
|
0
|
43
47
|
end
|
44
48
|
|
@@ -58,7 +62,6 @@ Compared to original libui written in C,
|
|
58
62
|
* The method names are snake_case.
|
59
63
|
* If the last argument is nil, it can be omitted.
|
60
64
|
* You can pass a block as a callback.
|
61
|
-
* Please return 0 explicitly in the block.
|
62
65
|
* The block will be converted to a Proc object and added to the last argument.
|
63
66
|
* Even in that case, it is possible to omit the last argument nil.
|
64
67
|
|
@@ -101,35 +104,79 @@ UI.font_button_on_changed(font_button) do
|
|
101
104
|
end
|
102
105
|
```
|
103
106
|
|
107
|
+
* Callbacks
|
108
|
+
* In Ruby/Fiddle, C callback function is written as an object of
|
109
|
+
`Fiddle::Closure::BlockCaller` or `Fiddle::Closure`.
|
110
|
+
In this case, you need to be careful about Ruby's garbage collection.
|
111
|
+
If the function object is collected, memory will be freed
|
112
|
+
and a segmentation violation will occur when the callback is invoked.
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
# to a local variable to prevent it from being collected by GC.
|
116
|
+
handler.MouseEvent = (c1 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
117
|
+
handler.MouseCrossed = (c2 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
118
|
+
handler.DragBroken = (c3 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
|
119
|
+
```
|
120
|
+
|
104
121
|
### How to create an executable (.exe) on Windows
|
105
122
|
|
106
123
|
OCRA (One-Click Ruby Application) builds Windows executables from Ruby source code.
|
107
124
|
* https://github.com/larsch/ocra/
|
108
125
|
|
126
|
+
In order to build a exe with Ocra, include 3 DLLs from ruby_builtin_dlls folder:
|
127
|
+
|
128
|
+
```sh
|
129
|
+
ocra examples/control_gallery.rb ^
|
130
|
+
--dll ruby_builtin_dlls/libssp-0.dll ^
|
131
|
+
--dll ruby_builtin_dlls/libgmp-10.dll ^
|
132
|
+
--dll ruby_builtin_dlls/libffi-7.dll ^
|
133
|
+
--gem-all=fiddle ^
|
134
|
+
```
|
135
|
+
|
136
|
+
Add additional options below if necessary.
|
137
|
+
|
138
|
+
```sh
|
139
|
+
--window ^
|
140
|
+
--add-all-core ^
|
141
|
+
--chdir-first ^
|
142
|
+
--icon assets\app.ico ^
|
143
|
+
--verbose ^
|
144
|
+
--output out\gallery.exe
|
145
|
+
```
|
146
|
+
|
109
147
|
## Development
|
110
148
|
|
111
149
|
```sh
|
112
150
|
git clone https://github.com/kojix2/libui
|
113
151
|
cd libui
|
114
152
|
bundle install
|
115
|
-
bundle exec rake vendor:all
|
153
|
+
bundle exec rake vendor:all_x64 # download shared libraries for all platforms
|
116
154
|
bundle exec rake test
|
117
155
|
```
|
118
156
|
|
119
|
-
|
157
|
+
You can use the following rake tasks to download the shared library required for your platform.
|
120
158
|
|
121
159
|
`rake -T`
|
122
160
|
|
123
161
|
```
|
124
|
-
rake vendor:
|
125
|
-
rake vendor:
|
126
|
-
rake vendor:
|
127
|
-
rake vendor:
|
162
|
+
rake vendor:all_x64 # Download libui.so, libui.dylib, and libui.dll to...
|
163
|
+
rake vendor:linux_x64 # Download libui.so for Linux to vendor directory
|
164
|
+
rake vendor:linux_x86 # Download libui.so for Linux to vendor directory
|
165
|
+
rake vendor:mac_x64 # Download libui.dylib for Mac to vendor directory
|
166
|
+
rake vendor:windows_x64 # Download libui.dll for Windows to vendor directory
|
167
|
+
rake vendor:windows_x86 # Download libui.dll for Windows to vendor directory
|
128
168
|
```
|
129
169
|
|
170
|
+
For example, If you are using a 32-bit (x86) version of Ruby on Windows, type `rake vendor:windows_x86`.
|
171
|
+
|
172
|
+
Or Set environment variable `LIBUIDIR` to specify the path to the shared library.
|
173
|
+
|
130
174
|
## Contributing
|
131
175
|
|
132
|
-
|
176
|
+
Would you like to add your commits to libui?
|
177
|
+
* Please feel free to send us your [pull requests](https://github.com/kojix2/libui/pulls).
|
178
|
+
* Small corrections, such as typofixes, are appreciated.
|
179
|
+
* Did you find any bugs? Write it in the [issues](https://github.com/kojix2/LibUI/issue) section!
|
133
180
|
|
134
181
|
## Acknowledgement
|
135
182
|
|
data/lib/libui/utils.rb
CHANGED
@@ -8,7 +8,7 @@ module LibUI
|
|
8
8
|
# Converting camel case to underscore case in ruby
|
9
9
|
# https://stackoverflow.com/questions/1509915/converting-camel-case-to-underscore-case-in-ruby#1509939
|
10
10
|
def underscore(str)
|
11
|
-
str.gsub(/::/, '/')
|
11
|
+
str.gsub(/::/, '/') # Maybe we don't need it.
|
12
12
|
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
13
13
|
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
14
14
|
.tr('-', '_')
|
data/lib/libui/version.rb
CHANGED
data/lib/libui.rb
CHANGED
@@ -10,14 +10,7 @@ module LibUI
|
|
10
10
|
attr_accessor :ffi_lib
|
11
11
|
end
|
12
12
|
|
13
|
-
lib_name =
|
14
|
-
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
15
|
-
'libui.dll'
|
16
|
-
when /darwin|mac os/
|
17
|
-
'libui.dylib'
|
18
|
-
else
|
19
|
-
'libui.so'
|
20
|
-
end
|
13
|
+
lib_name = "libui.#{RbConfig::CONFIG["SOEXT"]}"
|
21
14
|
|
22
15
|
self.ffi_lib = if ENV['LIBUIDIR'] && !ENV['LIBUIDIR'].empty?
|
23
16
|
File.expand_path(lib_name, ENV['LIBUIDIR'])
|
@@ -47,9 +40,11 @@ module LibUI
|
|
47
40
|
# Protect from GC
|
48
41
|
# See https://github.com/kojix2/LibUI/issues/8
|
49
42
|
receiver = args[0]
|
50
|
-
|
51
|
-
|
52
|
-
|
43
|
+
if receiver.instance_variable_defined?(:@callbacks)
|
44
|
+
receiver.instance_variable_get(:@callbacks) << callback
|
45
|
+
else
|
46
|
+
receiver.instance_variable_set(:@callbacks, [callback])
|
47
|
+
end
|
53
48
|
callback
|
54
49
|
else
|
55
50
|
arg
|
@@ -67,10 +62,10 @@ module LibUI
|
|
67
62
|
module CustomMethods
|
68
63
|
def init(opt = FFI::InitOptions.malloc)
|
69
64
|
i = super(opt)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
65
|
+
return if i.size.zero?
|
66
|
+
|
67
|
+
warn 'error'
|
68
|
+
warn UI.free_init_error(init)
|
74
69
|
end
|
75
70
|
end
|
76
71
|
|
data/vendor/libui.so
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
requirements: []
|
120
|
-
rubygems_version: 3.
|
120
|
+
rubygems_version: 3.2.22
|
121
121
|
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: Ruby bindings to libui
|