glimmer-dsl-libui 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +111 -10
- data/VERSION +1 -1
- data/examples/font_button.rb +18 -0
- data/examples/meta_example.rb +4 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/font_button_proxy.rb +48 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 709fb51692fedecbca6438b288711c2fb7f3a71cb5ce5f5f16e1a5c9629bc5fb
|
4
|
+
data.tar.gz: 2706858ead6f7bf47f042be22cc40b0546706de8c4c7cfbfdf7457aeb007fa3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b501a86cf85fb6b1c488580b76336765cf1d2fbdf864edf16e3587bba80710a900a05186e0c9e3f67a667ab64fbaf3ebcf1ec54c4ebbfb8e41ddd7b77f93555
|
7
|
+
data.tar.gz: 5e1f94ad2479f71d54a163d69d6c266eac9f361909e3c305e04afc073c882178ac1dba80fbc9927a7037a93593000eb469e0c7a9e0342003ced8cf349ddfd6ae
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.0.10
|
4
|
+
|
5
|
+
- Support examples/font_button.rb
|
6
|
+
- Support `font_button` control
|
7
|
+
- Add File -> Quit menu item to examples/meta_example.rb
|
8
|
+
- Glimmer Style Guide added to README.md
|
9
|
+
|
3
10
|
## 0.0.9
|
4
11
|
|
5
12
|
- Build a meta-example (example of examples)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.0.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.0.10
|
2
2
|
## Prerequisite-Free Ruby Desktop Development GUI Library
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
4
|
[![Maintainability](https://api.codeclimate.com/v1/badges/ce2853efdbecf6ebdc73/maintainability)](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
|
@@ -6,17 +6,17 @@
|
|
6
6
|
|
7
7
|
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [LibUI](https://github.com/kojix2/LibUI) is a prerequisite-free Ruby desktop development GUI library. No need to pre-install any prerequisites. Just install the gem and have platform-independent native GUI that just works!
|
8
8
|
|
9
|
-
[LibUI](https://github.com/kojix2/LibUI) is a thin [Ruby](https://www.ruby-lang.org/en/) wrapper around [libui](https://github.com/andlabs/libui), a relatively new C GUI library that renders native
|
9
|
+
[LibUI](https://github.com/kojix2/LibUI) is a thin [Ruby](https://www.ruby-lang.org/en/) wrapper around [libui](https://github.com/andlabs/libui), a relatively new C GUI library that renders native controls on every platform (similar to [SWT](https://www.eclipse.org/swt/), but without the heavy weight of the [Java Virtual Machine](https://www.java.com/en/)).
|
10
10
|
|
11
11
|
The main trade-off in using [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) as opposed to [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) or [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk) is the fact that [SWT](https://www.eclipse.org/swt/) and [Tk](https://www.tcl.tk/) are more mature than mid-alpha [libui](https://github.com/andlabs/libui) as GUI toolkits. Still, if there is only a need to build a small simple application, [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) could be a good convenient choice due to having zero prerequisites beyond the dependencies included in the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui). Also, just like [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk), its apps start instantly and have a small memory footprint. [LibUI](https://github.com/kojix2/LibUI) is a promising new GUI toolkit that might prove quite worthy in the future.
|
12
12
|
|
13
13
|
[Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) aims to provide a DSL similar to the [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) to enable more productive desktop development in Ruby with:
|
14
|
-
- Declarative DSL syntax that visually maps to the GUI
|
14
|
+
- Declarative DSL syntax that visually maps to the GUI control hierarchy
|
15
15
|
- Convention over configuration via smart defaults and automation of low-level details
|
16
16
|
- Requiring the least amount of syntax possible to build GUI
|
17
17
|
- Bidirectional Data-Binding to declaratively wire and automatically synchronize GUI with Business Models
|
18
|
-
- Custom
|
19
|
-
- Scaffolding for new custom
|
18
|
+
- Custom Control support
|
19
|
+
- Scaffolding for new custom controls, apps, and gems
|
20
20
|
- Native-Executable packaging on Mac, Windows, and Linux.
|
21
21
|
|
22
22
|
Example:
|
@@ -43,7 +43,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
43
43
|
|
44
44
|
## Table of Contents
|
45
45
|
|
46
|
-
- [Glimmer DSL for LibUI 0.0.
|
46
|
+
- [Glimmer DSL for LibUI 0.0.10](#-glimmer-dsl-for-libui-0010)
|
47
47
|
- [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
|
48
48
|
- [Usage](#usage)
|
49
49
|
- [API](#api)
|
@@ -54,6 +54,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
54
54
|
- [Extra Operations](#extra-operations)
|
55
55
|
- [Smart Defaults and Conventions](#smart-defaults-and-conventions)
|
56
56
|
- [Original API](#original-api)
|
57
|
+
- [Glimmer Style Guide](#glimmer-style-guide)
|
57
58
|
- [Girb (Glimmer IRB)](#girb-glimmer-irb)
|
58
59
|
- [Examples](#examples)
|
59
60
|
- [Basic Window](#basic-window)
|
@@ -62,6 +63,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
62
63
|
- [Simple Notepad](#simple-notepad)
|
63
64
|
- [Midi Player](#midi-player)
|
64
65
|
- [Control Gallery](#control-gallery)
|
66
|
+
- [Font Button](#font-button)
|
65
67
|
- [Contributing to glimmer-dsl-libui](#contributing-to-glimmer-dsl-libui)
|
66
68
|
- [Help](#help)
|
67
69
|
- [Issues](#issues)
|
@@ -76,9 +78,9 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
76
78
|
|
77
79
|
The Glimmer GUI DSL provides object-oriented declarative hierarchical syntax for [LibUI](https://github.com/kojix2/LibUI) that:
|
78
80
|
- Supports smart defaults (e.g. automatic `on_closing` listener that quits `window`)
|
79
|
-
- Automates wiring of
|
81
|
+
- Automates wiring of controls (e.g. `button` is automatically set as child of `window`)
|
80
82
|
- Hides lower-level details (e.g. `LibUI.main` loop is started automatically when triggering `show` on `window`)
|
81
|
-
- Nests
|
83
|
+
- Nests controls according to their visual hierarchy
|
82
84
|
- Requires the minimum amount of syntax needed to describe an app's GUI
|
83
85
|
|
84
86
|
The Glimmer GUI DSL follows these simple concepts in mapping from [LibUI](https://github.com/kojix2/LibUI) syntax:
|
@@ -149,7 +151,7 @@ gem install glimmer-dsl-libui
|
|
149
151
|
Or install via Bundler `Gemfile`:
|
150
152
|
|
151
153
|
```ruby
|
152
|
-
gem 'glimmer-dsl-libui', '~> 0.0.
|
154
|
+
gem 'glimmer-dsl-libui', '~> 0.0.10'
|
153
155
|
```
|
154
156
|
|
155
157
|
Add `require 'glimmer-dsl-libui'` at the top, and then `include Glimmer` into the top-level main object for testing or into an actual class for serious usage.
|
@@ -213,7 +215,7 @@ Control(Args) | Properties | Listeners
|
|
213
215
|
`date_time_picker` | `time` (`LibUI::FFI::TM`) | `on_changed`
|
214
216
|
`editable_combobox` | `items` (`Array` of `String`), `text` (`String`) | `on_changed`
|
215
217
|
`entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
|
216
|
-
`font_button` | `font` (`
|
218
|
+
`font_button` | `font` [read-only] (`Hash` of keys: `:family`, `:size`, `:weight`, `:italic`, `:stretch`) | `on_changed`
|
217
219
|
`group(text as String)` | `margined` (Boolean), `title` (`String`) | None
|
218
220
|
`horizontal_box` | `padded` (Boolean) | None
|
219
221
|
`horizontal_separator` | None | None
|
@@ -276,12 +278,22 @@ Control(Args) | Properties | Listeners
|
|
276
278
|
- All boolean property readers return `true` or `false` in Ruby instead of the [libui](https://github.com/andlabs/libui) original `0` or `1` in C.
|
277
279
|
- All boolean property writers accept `true`/`false` in addition to `1`/`0` in Ruby
|
278
280
|
- All string property readers return a `String` object in Ruby instead of the [libui](https://github.com/andlabs/libui) Fiddle pointer object.
|
281
|
+
- Automatically allocate font descriptors upon instantiating `font_button` controls and free font descriptors when destorying `font_button` controls
|
279
282
|
|
280
283
|
### Original API
|
281
284
|
|
282
285
|
To learn more about the [LibUI](https://github.com/kojix2/LibUI) API exposed through [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui),
|
283
286
|
check out the [libui C headers](https://github.com/andlabs/libui/blob/master/ui.h)
|
284
287
|
|
288
|
+
## Glimmer Style Guide
|
289
|
+
|
290
|
+
- Control arguments are always wrapped inside parentheses
|
291
|
+
- Control blocks are always declared with curly braces to clearly visualize hierarchical view code and separate from logic code
|
292
|
+
- Control property declarations always have arguments and never take a block
|
293
|
+
- Control property arguments are never wrapped inside parentheses
|
294
|
+
- Control listeners are always declared starting with on_ prefix and affixing listener event method name afterwards in underscored lowercase form. Their multi-line blocks have a `do; end` style.
|
295
|
+
- Pure logic multi-line blocks that do not constitute GUI DSL view elements have `do; end` style to clearly separate logic code from view code.
|
296
|
+
|
285
297
|
## Girb (Glimmer IRB)
|
286
298
|
|
287
299
|
You can run the `girb` command (`bin/girb` if you cloned the project locally):
|
@@ -346,6 +358,10 @@ class MetaExample
|
|
346
358
|
end
|
347
359
|
|
348
360
|
def launch
|
361
|
+
menu('File') {
|
362
|
+
quit_menu_item
|
363
|
+
}
|
364
|
+
|
349
365
|
window('Meta-Example', 700, 500) { |w|
|
350
366
|
margined true
|
351
367
|
|
@@ -1324,6 +1340,91 @@ MAIN_WINDOW = window('Control Gallery', 600, 500) {
|
|
1324
1340
|
MAIN_WINDOW.show
|
1325
1341
|
```
|
1326
1342
|
|
1343
|
+
### Font Button
|
1344
|
+
|
1345
|
+
[examples/font_button.rb](examples/font_button.rb)
|
1346
|
+
|
1347
|
+
Run with this command from the root of the project if you cloned the project:
|
1348
|
+
|
1349
|
+
```
|
1350
|
+
ruby -r './lib/glimmer-dsl-libui' examples/font_button.rb
|
1351
|
+
```
|
1352
|
+
|
1353
|
+
Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
|
1354
|
+
|
1355
|
+
```
|
1356
|
+
ruby -r glimmer-dsl-libui -e "require 'examples/font_button'"
|
1357
|
+
```
|
1358
|
+
|
1359
|
+
Mac
|
1360
|
+
|
1361
|
+
![glimmer-dsl-libui-mac-font-button.png](images/glimmer-dsl-libui-mac-font-button.png)
|
1362
|
+
![glimmer-dsl-libui-mac-font-button-selection.png](images/glimmer-dsl-libui-mac-font-button-selection.png)
|
1363
|
+
|
1364
|
+
Linux
|
1365
|
+
|
1366
|
+
![glimmer-dsl-libui-linux-font-button.png](images/glimmer-dsl-libui-linux-font-button.png)
|
1367
|
+
![glimmer-dsl-libui-linux-font-button-selection.png](images/glimmer-dsl-libui-linux-font-button-selection.png)
|
1368
|
+
|
1369
|
+
[LibUI](https://github.com/kojix2/LibUI) Original Version:
|
1370
|
+
|
1371
|
+
```ruby
|
1372
|
+
require 'libui'
|
1373
|
+
|
1374
|
+
UI = LibUI
|
1375
|
+
|
1376
|
+
UI.init
|
1377
|
+
|
1378
|
+
main_window = UI.new_window('hello world', 300, 200, 1)
|
1379
|
+
|
1380
|
+
font_button = UI.new_font_button
|
1381
|
+
font_descriptor = UI::FFI::FontDescriptor.malloc
|
1382
|
+
UI.font_button_on_changed(font_button) do
|
1383
|
+
UI.font_button_font(font_button, font_descriptor)
|
1384
|
+
p family: font_descriptor.Family.to_s,
|
1385
|
+
size: font_descriptor.Size,
|
1386
|
+
weight: font_descriptor.Weight,
|
1387
|
+
italic: font_descriptor.Italic,
|
1388
|
+
stretch: font_descriptor.Stretch
|
1389
|
+
end
|
1390
|
+
|
1391
|
+
UI.window_on_closing(main_window) do
|
1392
|
+
puts 'Bye Bye'
|
1393
|
+
UI.control_destroy(main_window)
|
1394
|
+
UI.quit
|
1395
|
+
0
|
1396
|
+
end
|
1397
|
+
|
1398
|
+
UI.window_set_child(main_window, font_button)
|
1399
|
+
UI.control_show(main_window)
|
1400
|
+
|
1401
|
+
UI.main
|
1402
|
+
UI.quit
|
1403
|
+
|
1404
|
+
```
|
1405
|
+
|
1406
|
+
[Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
|
1407
|
+
|
1408
|
+
```ruby
|
1409
|
+
require 'glimmer-dsl-libui'
|
1410
|
+
|
1411
|
+
include Glimmer
|
1412
|
+
|
1413
|
+
window('hello world', 300, 200) {
|
1414
|
+
font_button { |fb|
|
1415
|
+
on_changed do
|
1416
|
+
font_descriptor = fb.font
|
1417
|
+
p font_descriptor
|
1418
|
+
end
|
1419
|
+
}
|
1420
|
+
|
1421
|
+
on_closing do
|
1422
|
+
puts 'Bye Bye'
|
1423
|
+
end
|
1424
|
+
}.show
|
1425
|
+
|
1426
|
+
```
|
1427
|
+
|
1327
1428
|
## Contributing to glimmer-dsl-libui
|
1328
1429
|
|
1329
1430
|
- Check out the latest master to make sure the feature hasn't been
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.10
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
|
5
|
+
include Glimmer
|
6
|
+
|
7
|
+
window('hello world', 300, 200) {
|
8
|
+
font_button { |fb|
|
9
|
+
on_changed do
|
10
|
+
font_descriptor = fb.font
|
11
|
+
p font_descriptor
|
12
|
+
end
|
13
|
+
}
|
14
|
+
|
15
|
+
on_closing do
|
16
|
+
puts 'Bye Bye'
|
17
|
+
end
|
18
|
+
}.show
|
data/examples/meta_example.rb
CHANGED
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (c) 2021 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'glimmer/libui/control_proxy'
|
23
|
+
|
24
|
+
module Glimmer
|
25
|
+
module LibUI
|
26
|
+
# Proxy for LibUI font button objects
|
27
|
+
#
|
28
|
+
# Follows the Proxy Design Pattern
|
29
|
+
class FontButtonProxy < ControlProxy
|
30
|
+
def font
|
31
|
+
@font_descriptor ||= ::LibUI::FFI::FontDescriptor.malloc
|
32
|
+
::LibUI.font_button_font(@libui, @font_descriptor)
|
33
|
+
{
|
34
|
+
family: @font_descriptor.Family.to_s,
|
35
|
+
size: @font_descriptor.Size,
|
36
|
+
weight: @font_descriptor.Weight,
|
37
|
+
italic: @font_descriptor.Italic,
|
38
|
+
stretch: @font_descriptor.Stretch
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def destroy
|
43
|
+
::LibUI.free_font_button_font(@font_descriptor) unless @font_descriptor.nil?
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- examples/basic_window.rb
|
166
166
|
- examples/basic_window2.rb
|
167
167
|
- examples/control_gallery.rb
|
168
|
+
- examples/font_button.rb
|
168
169
|
- examples/meta_example.rb
|
169
170
|
- examples/midi_player.rb
|
170
171
|
- examples/simple_notepad.rb
|
@@ -186,6 +187,7 @@ files:
|
|
186
187
|
- lib/glimmer/libui/date_picker_proxy.rb
|
187
188
|
- lib/glimmer/libui/date_time_picker_proxy.rb
|
188
189
|
- lib/glimmer/libui/editable_combobox_proxy.rb
|
190
|
+
- lib/glimmer/libui/font_button_proxy.rb
|
189
191
|
- lib/glimmer/libui/group_proxy.rb
|
190
192
|
- lib/glimmer/libui/horizontal_box_proxy.rb
|
191
193
|
- lib/glimmer/libui/menu_item_proxy.rb
|