glimmer-dsl-libui 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e20f859c1f0147fbdcdfe39d0caf2a284c922f0fd62d848e01a1ac6e6c05b6ee
4
- data.tar.gz: a7cdd076d22cfeeb5675780c4f918364fac9f1207aa7d890ed1104effcb1ab3b
3
+ metadata.gz: 186c49fc28b9767289f398563e727a564aec12ccadee63ef1ef8b8337b186c34
4
+ data.tar.gz: 45b1ea94ca10b26f52146270c40cd4cf43567ff8142aecda6b1f46c528418882
5
5
  SHA512:
6
- metadata.gz: abe17c4c1f3a398cf3e318a68e8502ab8c657e55e80f90c9ecaa5980e16494732a970e023421d9b5bf39908ab06360458fa3cff08776879b701912c00cf86fab
7
- data.tar.gz: 5c7224ebd340795677d51673fc1d6f477f4db15134ce683f4dc16f3b29c070cc34eedf748b4ffd81c41fec22e95beeac50c34ab0263826591baf420f111592f4
6
+ metadata.gz: 253f2335dc985e7e25481f27fb78d78b9ce2a77b1c86cbd513c1e3d289d6204155e72512cbb72994329d905e4906bdf7905e3e070487d19c22605092ce249a70
7
+ data.tar.gz: 33633220d46d61a1428c9e0cfad06ea6a0706a44bc537006802f4f24210bbb415a04c7332c4f7fd020e1fb68adce28edf81946ea88eb4652a44fce847725c5fe
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.5.5
4
+
5
+ - Upgrade to libui 0.0.15 (with official Mac ARM64 support)
6
+ - Update [README](/README.md) with [Area Animation](/README.md#area-animation) `spinner` custom control
7
+
3
8
  ## 0.5.4
4
9
 
5
10
  - Support `figure` `bounding_box` (minx, miny, width, height), `contain?` method (checking if shape contains point inside) and `include?` method (checking on outline if stroked and inside if filled?)
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.5.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.5.5
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
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@@ -24,8 +24,6 @@ The main trade-off in using [Glimmer DSL for LibUI](https://rubygems.org/gems/gl
24
24
  - [Far Future Plan] Scaffolding for new custom controls, apps, and gems
25
25
  - [Far Future Plan] Native-Executable packaging on Mac, Windows, and Linux.
26
26
 
27
- Note that currently, [LibUI](https://github.com/kojix2/LibUI) only includes x86_64 binaries out of the box, but there are plans to include ARM64/AARCH64 binaries too in the future.
28
-
29
27
  Hello, World!
30
28
 
31
29
  ```ruby
@@ -338,7 +336,7 @@ DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs
338
336
  [Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)](https://github.com/AndyObtiva/glimmer-dsl-swt) | Mac / Windows / Linux | Yes | Yes (Canvas Shape DSL) | Very Mature / Scaffolding / Native Executable Packaging / Custom Widgets | Slow JRuby Startup Time / Heavy Memory Footprint | Java / JRuby
339
337
  [Glimmer DSL for Opal (Pure Ruby Web GUI and Auto-Webifier of Desktop Apps)](https://github.com/AndyObtiva/glimmer-dsl-opal) | All Web Browsers | No | Yes (Canvas Shape DSL) | Simpler than All JavaScript Technologies / Auto-Webify Desktop Apps | Setup Process / Only Rails 5 Support for Now | Rails
340
338
  [Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-libui) | Mac / Windows / Linux | Yes | Yes (Area API) | Fast Startup Time / Light Memory Footprint | LibUI is an Incomplete Mid-Alpha Only | None Other Than MRI Ruby
341
- [Glimmer DSL for Tk (MRI Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-tk) | Mac / Windows / Linux | Some Native-Themed Widgets (Not Truly Native) | Yes (Canvas) | Fast Startup Time / Light Memory Footprint | Widgets Do Not Look Truly Native, Espcially on Linux | ActiveTcl / MRI Ruby
339
+ [Glimmer DSL for Tk (Ruby Tk Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-tk) | Mac / Windows / Linux | Some Native-Themed Widgets (Not Truly Native) | Yes (Canvas) | Fast Startup Time / Light Memory Footprint | Complicated Setup / Widgets Do Not Look Truly Native, Espcially on Linux | ActiveTcl / MRI Ruby
342
340
  [Glimmer DSL for GTK (Ruby-GNOME Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-gtk) | Mac / Windows / Linux | Only on Linux | Yes (Cairo) | Complete Access to GNOME Features on Linux (Forte) | Not Native on Mac and Windows | None Other Than MRI Ruby on Linux / Brew Packages on Mac / MSYS & MING Toolchains on Windows / MRI Ruby
343
341
  [Glimmer DSL for FX (FOX Toolkit Ruby Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-fx) | Mac (requires XQuartz) / Windows / Linux | No | Yes (Canvas) | No Prerequisites on Windows (Forte Since Binaries Are Included Out of The Box) | Widgets Do Not Look Native / Mac Usage Obtrusively Starts XQuartz | None Other Than MRI Ruby on Windows / XQuarts on Mac / MRI Ruby
344
342
  [Glimmer DSL for JFX (JRuby JavaFX Desktop Development GUI Library)](https://github.com/AndyObtiva/glimmer-dsl-jfx) | Mac / Windows / Linux | No | Yes (javafx.scene.shape and javafx.scene.canvas) | Rich in Custom Widgets | Slow JRuby Startup Time / Heavy Memory Footprint / Widgets Do Not Look Native | Java / JRuby / JavaFX SDK
@@ -370,6 +368,7 @@ DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs
370
368
  - [Area Listeners](#area-listeners)
371
369
  - [Area Methods/Attributes](#area-methods-attributes)
372
370
  - [Area Transform Matrix](#area-transform-matrix)
371
+ - [Area Animation](#area-animation)
373
372
  - [Smart Defaults and Conventions](#smart-defaults-and-conventions)
374
373
  - [Custom Keywords](#custom-keywords)
375
374
  - [Observer Pattern](#observer-pattern)
@@ -452,10 +451,68 @@ The Glimmer GUI DSL provides object-oriented declarative hierarchical syntax for
452
451
  - Requires the minimum amount of syntax needed to describe an app's GUI
453
452
 
454
453
  The Glimmer GUI DSL follows these simple concepts in mapping from [LibUI](https://github.com/kojix2/LibUI) syntax:
455
- - **Keyword(args)**: [LibUI](https://github.com/kojix2/LibUI) controls may be declared by lower-case underscored name (aka keyword) (e.g. `window` or `button`). Behind the scenes, they are represented by keyword methods that map to corresponding `LibUI.new_keyword` methods receiving args (e.g. `window('hello world', 300, 200, true)`).
456
- - **Content Block** (Properties/Listeners/Controls): Any keyword may be optionally followed by a Ruby curly-brace multi-line content block containing properties (attributes), listeners, and/or nested controls (e.g. `window {title 'hello world'; on_closing {puts 'Bye'}; button('greet')}`). Content block optionally receives one arg representing the control (e.g. `button('greet') {|b| on_clicked { puts b.text}}`)
457
- - **Property**: Control properties may be declared inside keyword blocks with lower-case underscored name followed by property value args (e.g. `title "hello world"` inside `group`). Behind the scenes, properties correspond to `LibUI.control_set_property` methods.
458
- - **Listener**: Control listeners may be declared inside keyword blocks with listener lower-case underscored name beginning with `on_` and receiving required block handler (e.g. `on_clicked {puts 'clicked'}` inside `button`). Optionally, the listener block can receive an arg representing the control (e.g. `on_clicked {|btn| puts btn.text}`). Behind the scenes, listeners correspond to `LibUI.control_on_event` methods.
454
+
455
+ **Keyword(args)**: [LibUI](https://github.com/kojix2/LibUI) controls may be declared by lower-case underscored name (aka keyword from list of [supported keywords](#supported-keywords)) (e.g. `window` or `button`). Behind the scenes, they are represented by keyword methods that map to corresponding `LibUI.new_keyword` methods receiving args (e.g. `window('hello world', 300, 200, true)`).
456
+
457
+ **Content Block** (Properties/Listeners/Controls): Any keyword may be optionally followed by a Ruby curly-brace multi-line content block containing properties (attributes), listeners, and/or nested controls.
458
+
459
+ Example:
460
+
461
+ ```ruby
462
+ window {
463
+ title 'hello world' # property
464
+
465
+ on_closing do # listener (always has a do; end block to signify logic)
466
+ puts 'Bye'
467
+ end
468
+
469
+ button('greet') { # nested control
470
+ on_clicked do
471
+ puts 'hello world'
472
+ end
473
+ }
474
+ }
475
+ ```
476
+
477
+ Content block optionally receives one arg representing the controll
478
+
479
+ Example:
480
+
481
+ ```ruby
482
+ button('greet') { |b|
483
+ on_clicked do
484
+ puts b.text
485
+ end
486
+ }
487
+ ```
488
+
489
+ **Property**: Control properties may be declared inside keyword blocks with lower-case underscored name followed by property value args (e.g. `title "hello world"` inside `group`). Behind the scenes, properties correspond to `LibUI.control_set_property` methods.
490
+
491
+ **Listener**: Control listeners may be declared inside keyword blocks with listener lower-case underscored name beginning with `on_` and receiving required block handler (always followed by a `do; end` style block to signify logic).
492
+
493
+ Example:
494
+
495
+ ```ruby
496
+ button('click') {
497
+ on_clicked do
498
+ puts 'clicked'
499
+ end
500
+ }
501
+ ```
502
+
503
+ Optionally, the listener block can receive an arg representing the control.
504
+
505
+ ```ruby
506
+ button('click') {
507
+ on_clicked do |btn|
508
+ puts btn.text
509
+ end
510
+ }
511
+ ```
512
+
513
+ Behind the scenes, listeners correspond to `LibUI.control_on_event` methods.
514
+
515
+ **Method**: Controls have methods that invoke certain operations on them. For example, `window` has a `#show` method that shows the window GUI. More methods are mentioned under [API](#api)
459
516
 
460
517
  Example of an app written in [LibUI](https://github.com/kojix2/LibUI)'s procedural imperative syntax:
461
518
 
@@ -519,7 +576,7 @@ gem install glimmer-dsl-libui
519
576
  Or install via Bundler `Gemfile`:
520
577
 
521
578
  ```ruby
522
- gem 'glimmer-dsl-libui', '~> 0.5.4'
579
+ gem 'glimmer-dsl-libui', '~> 0.5.5'
523
580
  ```
524
581
 
525
582
  Test that installation worked by running the [Meta-Example](#examples):
@@ -1404,6 +1461,92 @@ You can set a `matrix`/`transform` on `area` directly to conveniently apply to a
1404
1461
 
1405
1462
  Note that `area`, `path`, and nested shapes are all truly declarative, meaning they do not care about the ordering of calls to `fill`, `stroke`, and `transform`. Furthermore, any transform that is applied is reversed at the end of the block, so you never have to worry about the ordering of `transform` calls among different paths. You simply set a transform on the `path`s that need it and it is guaranteed to be called before all its content is drawn, and then undone afterwards to avoid affecting later paths. Matrix `transform` can be set on an entire `area` too, applying to all nested `path`s.
1406
1463
 
1464
+ #### Area Animation
1465
+
1466
+ If you need to animate `area` vector graphics, you just have to use the [`Glimmer::LibUI::timer`](#libui-operations) method along with making changes to shape attributes.
1467
+
1468
+ Spinner example that has a fully customizable method-based custom control called `spinner`, which is destroyed if you click on it (you may copy/paste in [`girb`](#girb-glimmer-irb)):
1469
+
1470
+ ```ruby
1471
+ require 'glimmer-dsl-libui'
1472
+
1473
+ class SpinnerExample
1474
+ include Glimmer
1475
+
1476
+ SIZE = 120
1477
+
1478
+ def initialize
1479
+ create_gui
1480
+ end
1481
+
1482
+ def launch
1483
+ @main_window.show
1484
+ end
1485
+
1486
+ def create_gui
1487
+ @main_window = window {
1488
+ title 'Spinner'
1489
+ content_size SIZE*2, SIZE*2
1490
+
1491
+ horizontal_box {
1492
+ padded false
1493
+
1494
+ vertical_box {
1495
+ padded false
1496
+
1497
+ spinner(size: SIZE)
1498
+ spinner(size: SIZE, fill_color: [42, 153, 214])
1499
+ }
1500
+
1501
+ vertical_box {
1502
+ padded false
1503
+
1504
+ spinner(size: SIZE/2.0, fill_color: :orange)
1505
+ spinner(size: SIZE/2.0, fill_color: {x0: 0, y0: 0, x1: SIZE/2.0, y1: SIZE/2.0, stops: [{pos: 0.25, r: 204, g: 102, b: 204}, {pos: 1, r: 2, g: 2, b: 254}]})
1506
+ spinner(size: SIZE/2.0, fill_color: :green, unfilled_color: :yellow)
1507
+ spinner(size: SIZE/2.0, fill_color: :white, unfilled_color: :gray, background_color: :black)
1508
+ }
1509
+ }
1510
+ }
1511
+ end
1512
+
1513
+ def spinner(size: 40.0, fill_color: :gray, background_color: :white, unfilled_color: {r: 243, g: 243, b: 243}, donut_percentage: 0.25)
1514
+ arc1 = arc2 = nil
1515
+ area { |the_area|
1516
+ rectangle(0, 0, size, size) {
1517
+ fill background_color
1518
+ }
1519
+ circle(size/2.0, size/2.0, size/2.0) {
1520
+ fill fill_color
1521
+ }
1522
+ arc1 = arc(size/2.0, size/2.0, size/2.0, 0, 180) {
1523
+ fill unfilled_color
1524
+ }
1525
+ arc2 = arc(size/2.0, size/2.0, size/2.0, 90, 180) {
1526
+ fill unfilled_color
1527
+ }
1528
+ circle(size/2.0, size/2.0, (size/2.0)*(1.0 - donut_percentage)) {
1529
+ fill background_color
1530
+ }
1531
+
1532
+ on_mouse_up do
1533
+ the_area.destroy
1534
+ end
1535
+ }.tap do
1536
+ Glimmer::LibUI.timer(0.05) do
1537
+ delta = 10
1538
+ arc1.start_angle += delta
1539
+ arc2.start_angle += delta
1540
+ end
1541
+ end
1542
+ end
1543
+ end
1544
+
1545
+ SpinnerExample.new.launch
1546
+ ```
1547
+
1548
+ ![mac spinner](/images/glimmer-dsl-libui-mac-spinner.gif)
1549
+
1407
1550
  ### Smart Defaults and Conventions
1408
1551
 
1409
1552
  - `horizontal_box`, `vertical_box`, `grid`, and `form` controls have `padded` as `true` upon instantiation to ensure more user-friendly GUI by default
@@ -1868,6 +2011,7 @@ Learn more from data-binding usage in [Login](#login) (4 data-binding versions),
1868
2011
  - There is no proper way to destroy `grid` children due to [libui](https://github.com/andlabs/libui) not offering any API for deleting them from `grid` (no `grid_delete` similar to `box_delete` for `horizontal_box` and `vertical_box`).
1869
2012
  - `table` `checkbox_column` checkbox editing only works on Linux and Windows (not Mac) due to a current limitation in [libui](https://github.com/andlabs/ui/issues/357).
1870
2013
  - `table` `checkbox_text_column` checkbox editing only works on Linux (not Mac or Windows) due to a current limitation in [libui](https://github.com/andlabs/ui/issues/357).
2014
+ - `checkbox` only supports obtaining the `checked` property, but not updating it due to a current limitation in [libui](https://github.com/andlabs/libui).
1871
2015
  - `text` `align` property seems not to work on the Mac ([libui](https://github.com/andlabs/libui) has an [issue](https://github.com/andlabs/libui/pull/407) about it)
1872
2016
  - `text` `string` `background` does not work on Windows due to an [issue in libui](https://github.com/andlabs/libui/issues/347).
1873
2017
  - `table` `progress_bar` column on Windows cannot be updated with a positive value if it started initially with `-1` (it ignores update to avoid crashing due to an issue in [libui](https://github.com/andlabs/libui) on Windows.
@@ -1875,6 +2019,7 @@ Learn more from data-binding usage in [Login](#login) (4 data-binding versions),
1875
2019
  - It seems that [libui](https://github.com/andlabs/libui) does not support nesting multiple `area` controls under a `grid` as only the first one shows up in that scenario. To workaround that limitation, use a `vertical_box` with nested `horizontal_box`s instead to include multiple `area`s in a GUI.
1876
2020
  - As per the code of [examples/basic_transform.rb](#basic-transform), Windows requires different ordering of transforms than Mac and Linux.
1877
2021
  - `scrolling_area#scroll_to` does not seem to work on Windows and Linux, but works fine on Mac
2022
+ - When creating/showing a window other than the main window and then closing the secondary window, the entire app closes. This is a current limitation to the windowing system that should be fixed with [child window support](https://github.com/andlabs/libui/issues/137) in [libui](https://github.com/andlabs/libui)
1878
2023
 
1879
2024
  ### Original API
1880
2025
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.4
1
+ 0.5.5
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-libui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-20 00:00:00.000000000 Z
11
+ date: 2022-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 0.0.14
81
+ version: 0.0.15
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 0.0.14
88
+ version: 0.0.15
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: chunky_png
91
91
  requirement: !ruby/object:Gem::Requirement