libui 0.1.0.pre.0-x64-mingw

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6afdc39b9b17286a83bf0ee286cb3f466d502e5a283b166bb5391b92def721ea
4
+ data.tar.gz: b389949a718e22246810afb79038f46021033075ee645c1e2fe2f5fdfe534dc9
5
+ SHA512:
6
+ metadata.gz: f36725afa36ee846cea413f143d49caeef5fcc514d2f13b66ed0b36b3601cc2f7dc431a0cec297074fc74cdcea6e77b64894e932f433e8d3526ca18890de9c4a
7
+ data.tar.gz: eddb9b622beff687db36bfbe96e66870baf1850def4f44eb6ed0fe1060180586442ee4ddf8824b20cf3923abf79e0f8d73c980dd638c0ffdae0c6642e5de1e43
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 kojix2
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # LibUI
2
+
3
+ ![build](https://github.com/kojix2/libui/workflows/build/badge.svg)
4
+ [![Gem Version](https://badge.fury.io/rb/libui.svg)](https://badge.fury.io/rb/libui)
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
+
7
+ LibUI is a Ruby wrapper for libui and libui-ng.
8
+
9
+ :rocket: [libui-ng](https://github.com/libui-ng/libui-ng) - A cross-platform portable GUI library
10
+
11
+ :radio_button: [libui](https://github.com/andlabs/libui) - Original version by andlabs
12
+
13
+ ## Installation
14
+
15
+ ```sh
16
+ gem install libui
17
+ ```
18
+
19
+ * The gem package contains the [official release](https://github.com/andlabs/libui/releases/tag/alpha4.1) of the libui shared library versions 4.1 for Windows, Mac, and Linux.
20
+ * Namely `libui.dll`, `libui.dylib`, and `libui.so` (only 1.8MB in total).
21
+ * No dependency
22
+ * The libui gem uses the standard Ruby library [Fiddle](https://github.com/ruby/fiddle) to call C functions.
23
+
24
+ | Windows | Mac | Linux |
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">|
27
+
28
+ Note:
29
+ * If you are using the 32-bit (x86) version of Ruby, you need to download the 32-bit (x86) native dll. See [Development](#development).
30
+ * 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))
31
+ * [Raspberry Pi](https://www.raspberrypi.com/) and other platform users will need to compile C libui. See [Development](#development).
32
+
33
+ ## Usage
34
+
35
+ ```ruby
36
+ require 'libui'
37
+
38
+ UI = LibUI
39
+
40
+ UI.init
41
+
42
+ main_window = UI.new_window('hello world', 200, 100, 1)
43
+
44
+ button = UI.new_button('Button')
45
+
46
+ UI.button_on_clicked(button) do
47
+ UI.msg_box(main_window, 'Information', 'You clicked the button')
48
+ end
49
+
50
+ UI.window_on_closing(main_window) do
51
+ puts 'Bye Bye'
52
+ UI.control_destroy(main_window)
53
+ UI.quit
54
+ 0
55
+ end
56
+
57
+ UI.window_set_child(main_window, button)
58
+ UI.control_show(main_window)
59
+
60
+ UI.main
61
+ UI.quit
62
+ ```
63
+
64
+ See [examples](https://github.com/kojix2/libui/tree/main/examples) directory.
65
+
66
+ ### General Rules
67
+
68
+ Compared to original libui written in C,
69
+
70
+ * The method names are snake_case.
71
+ * If the last argument is nil, it can be omitted.
72
+ * You can pass a block as a callback.
73
+ * The block will be converted to a Proc object and added to the last argument.
74
+ * Even in that case, it is possible to omit the last argument when nil.
75
+
76
+ You can use [the documentation for libui's Go bindings](https://pkg.go.dev/github.com/andlabs/ui) as a reference.
77
+
78
+ ### DSLs for LibUI
79
+
80
+ LibUI is intentionally not object-oriented because it is a thin Ruby wrapper (binding) for the procedural C libui library, so it mirrors its API structure.
81
+
82
+ It is recommended that you build actual applications using a DSL for LibUI because DSLs enable writing object-oriented code the Ruby way (instead of procedural code the C way):
83
+
84
+ * [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui)
85
+ * [libui_paradise](https://rubygems.org/gems/libui_paradise)
86
+
87
+ ### How to use fiddle pointers?
88
+
89
+ ```ruby
90
+ require 'libui'
91
+ UI = LibUI
92
+ UI.init
93
+ ```
94
+
95
+ Convert a pointer to a string.
96
+
97
+ ```ruby
98
+ label = UI.new_label("Ruby")
99
+ p pointer = UI.label_text(label) # #<Fiddle::Pointer>
100
+ p pointer.to_s # Ruby
101
+ ```
102
+
103
+ If you need to use C structs, you can do the following.
104
+
105
+ ```ruby
106
+ font_button = UI.new_font_button
107
+
108
+ # Allocate memory
109
+ font_descriptor = UI::FFI::FontDescriptor.malloc
110
+ font_descriptor.to_ptr.free = Fiddle::RUBY_FREE
111
+ # font_descriptor = UI::FFI::FontDescriptor.malloc(Fiddle::RUBY_FREE) # fiddle 1.0.1 or higher
112
+
113
+ UI.font_button_on_changed(font_button) do
114
+ UI.font_button_font(font_button, font_descriptor)
115
+ p family: font_descriptor.Family.to_s,
116
+ size: font_descriptor.Size,
117
+ weight: font_descriptor.Weight,
118
+ italic: font_descriptor.Italic,
119
+ stretch: font_descriptor.Stretch
120
+ end
121
+ ```
122
+
123
+ * Callbacks
124
+ * In Ruby/Fiddle, a C callback function is written as an object of
125
+ `Fiddle::Closure::BlockCaller` or `Fiddle::Closure`.
126
+ In this case, you need to be careful about Ruby's garbage collection.
127
+ If the function object is collected, memory will be freed
128
+ and a segmentation violation will occur when the callback is invoked.
129
+
130
+ ```ruby
131
+ # to a local variable to prevent it from being collected by GC.
132
+ handler.MouseEvent = (c1 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
133
+ handler.MouseCrossed = (c2 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
134
+ handler.DragBroken = (c3 = Fiddle::Closure::BlockCaller.new(0, [0]) {})
135
+ ```
136
+
137
+ ### How to create an executable (.exe) on Windows
138
+
139
+ OCRA (One-Click Ruby Application) builds Windows executables from Ruby source code.
140
+ * https://github.com/larsch/ocra/
141
+
142
+ In order to build a exe with Ocra, include 3 DLLs from ruby_builtin_dlls folder:
143
+
144
+ ```sh
145
+ ocra examples/control_gallery.rb ^
146
+ --dll ruby_builtin_dlls/libssp-0.dll ^
147
+ --dll ruby_builtin_dlls/libgmp-10.dll ^
148
+ --dll ruby_builtin_dlls/libffi-7.dll ^
149
+ --gem-all=fiddle ^
150
+ ```
151
+
152
+ Add additional options below if necessary.
153
+
154
+ ```sh
155
+ --window ^
156
+ --add-all-core ^
157
+ --chdir-first ^
158
+ --icon assets\app.ico ^
159
+ --verbose ^
160
+ --output out\gallery.exe
161
+ ```
162
+
163
+ ## Development
164
+
165
+ LibUI is not object-oriented, but it provides high portability with a minimal implementation.
166
+
167
+ ```sh
168
+ git clone https://github.com/kojix2/libui
169
+ cd libui
170
+ bundle install
171
+ bundle exec rake vendor:default # download shared libraries for all platforms
172
+ bundle exec rake test
173
+ ```
174
+
175
+ You can use the following rake tasks to download the shared library required for your platform.
176
+
177
+ `rake -T`
178
+
179
+ ```
180
+ rake vendor:default # Downlaod [linux_x64, mac_arm, windows_x64] to vendor directory
181
+ rake vendor:linux_x64 # Download libui.so for Linux to vendor directory
182
+ rake vendor:linux_x86 # Download libui.so for Linux to vendor directory
183
+ rake vendor:mac_arm # Download libui.dylib for Mac to vendor directory (universal binary)
184
+ rake vendor:mac_x64 # Download libui.dylib for Mac to vendor directory
185
+ rake vendor:windows_x64 # Download libui.dll for Windows to vendor directory
186
+ rake vendor:windows_x86 # Download libui.dll for Windows to vendor directory
187
+ ```
188
+
189
+ For example, If you are using a 32-bit (x86) version of Ruby on Windows, type `rake vendor:windows_x86`.
190
+
191
+ ### Use C libui compiled from source code
192
+
193
+ You can compile C libui from source code on your platform and tell ruby LibUI where to find the shared libraries. Set environment variable `LIBUIDIR` to specify the path to the shared library. (See [#46](https://github.com/kojix2/LibUI/issues/46#issuecomment-1041575792)). This is especially useful on platforms where the LibUI gem does not provide shared library, such as the ARM architecture (used in devices like Raspberry Pi).
194
+
195
+ Another simple approach is to replace the shared libraries in the gem vendor directory with the ones you have compiled.
196
+
197
+ ### libui-ng
198
+
199
+ Version 0.0.X only supports libui. From version 0.1.X, we plan to support only libui-ng.
200
+
201
+ [libui-ng](https://github.com/libui-ng/libui-ng) is the successor project to libui. Rake tasks are available to build or download libui-ng shared libraries.
202
+
203
+ ```
204
+ rake libui-ng:build[hash] # Build libui-ng latest master [commit hash]
205
+ rake libui-ng:mac # Download latest dev build for Mac to vendor directory
206
+ rake libui-ng:ubuntu_x64 # Download latest dev build for Ubuntu to vendor directory
207
+ ```
208
+
209
+ ```
210
+ rake install
211
+ ```
212
+
213
+ ## Contributing
214
+
215
+ Would you like to add your commits to libui?
216
+ * Please feel free to send us your [pull requests](https://github.com/kojix2/libui/pulls).
217
+ * Small corrections, such as typo fixes, are appreciated.
218
+ * Did you find any bugs? Enter in the [issues](https://github.com/kojix2/LibUI/issues) section!
219
+
220
+ I have seen many OSS projects abandoned. The main reason is that no one has the right to commit to the original repository, except the founder.
221
+ Do you need commit rights to my repository? Do you want to get admin rights and take over the project? If so, please feel free to contact me @kojix2.
222
+
223
+ ## Acknowledgement
224
+
225
+ This project is inspired by libui-ruby.
226
+
227
+ * https://github.com/jamescook/libui-ruby
228
+
229
+ While libui-ruby uses [Ruby-FFI](https://github.com/ffi/ffi), this gem uses [Fiddle](https://github.com/ruby/fiddle).
230
+
231
+ ## License
232
+
233
+ [MIT License](https://opensource.org/licenses/MIT).