glimmer-dsl-libui 0.2.15 → 0.2.19

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.
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.2.15
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.2.19
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)
@@ -28,7 +28,16 @@ include Glimmer
28
28
  window('hello world').show
29
29
  ```
30
30
 
31
+ Mac
32
+
31
33
  ![glimmer-dsl-libui-mac-basic-window.png](images/glimmer-dsl-libui-mac-basic-window.png)
34
+
35
+ Windows
36
+
37
+ ![glimmer-dsl-libui-windows-basic-window.png](images/glimmer-dsl-libui-windows-basic-window.png)
38
+
39
+ Linux
40
+
32
41
  ![glimmer-dsl-libui-linux-basic-window.png](images/glimmer-dsl-libui-linux-basic-window.png)
33
42
 
34
43
  Basic Table Progress Bar
@@ -68,7 +77,16 @@ window('Task Progress', 300, 200) {
68
77
  }.show
69
78
  ```
70
79
 
80
+ Mac
81
+
71
82
  ![glimmer-dsl-libui-mac-basic-table-progress-bar.png](images/glimmer-dsl-libui-mac-basic-table-progress-bar.png)
83
+
84
+ Windows
85
+
86
+ ![glimmer-dsl-libui-windows-basic-table-progress-bar.png](images/glimmer-dsl-libui-windows-basic-table-progress-bar.png)
87
+
88
+ Linux
89
+
72
90
  ![glimmer-dsl-libui-linux-basic-table-progress-bar.png](images/glimmer-dsl-libui-linux-basic-table-progress-bar.png)
73
91
 
74
92
  Area Gallery
@@ -94,31 +112,24 @@ window('Area Gallery', 400, 400) {
94
112
  fill x0: 10, y0: 10, x1: 350, y1: 350, stops: [{pos: 0.25, r: 204, g: 102, b: 204}, {pos: 0.75, r: 102, g: 102, b: 204}]
95
113
  }
96
114
  path { # declarative stable path
97
- figure(100, 100) {
98
- line(100, 400)
99
- line(400, 100)
100
- line(400, 400)
101
-
102
- closed true
103
- }
104
-
115
+ polygon(100, 100, 100, 400, 400, 100, 400, 400)
116
+
105
117
  fill r: 202, g: 102, b: 104, a: 0.5
106
118
  stroke r: 0, g: 0, b: 0
107
119
  }
108
120
  path { # declarative stable path
109
- figure(0, 0) {
110
- bezier(200, 100, 100, 200, 400, 100)
111
- bezier(300, 100, 100, 300, 100, 400)
112
- bezier(100, 300, 300, 100, 400, 400)
113
-
114
- closed true
115
- }
121
+ polybezier(0, 0, 200, 100, 100, 200, 400, 100, 300, 100, 100, 300, 100, 400, 100, 300, 300, 100, 400, 400)
116
122
 
117
123
  fill r: 202, g: 102, b: 204, a: 0.5
118
124
  stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
119
125
  }
120
126
  path { # declarative stable path
121
- arc(400, 220, 180, 90, 90, false)
127
+ polyline(100, 100, 400, 100, 100, 400, 400, 400, 0, 0)
128
+
129
+ stroke r: 0, g: 0, b: 0, thickness: 2
130
+ }
131
+ path { # declarative stable path
132
+ arc(404, 216, 190, 90, 90, false)
122
133
 
123
134
  # radial gradient (has an outer_radius in addition to x0, y0, x1, y1, and stops)
124
135
  fill outer_radius: 90, x0: 0, y0: 0, x1: 500, y1: 500, stops: [{pos: 0.25, r: 102, g: 102, b: 204, a: 0.5}, {pos: 0.75, r: 204, g: 102, b: 204}]
@@ -130,9 +141,9 @@ window('Area Gallery', 400, 400) {
130
141
  fill r: 202, g: 102, b: 204, a: 0.5
131
142
  stroke r: 0, g: 0, b: 0, thickness: 2
132
143
  }
133
- text(160, 40, 100) { # x, y, width
144
+ text(161, 40, 100) { # x, y, width
134
145
  string('Area Gallery') {
135
- font family: 'Times', size: 14
146
+ font family: 'Arial', size: 14
136
147
  color :black
137
148
  }
138
149
  }
@@ -188,7 +199,16 @@ window('Area Gallery', 400, 400) {
188
199
  }.show
189
200
  ```
190
201
 
202
+ Mac
203
+
191
204
  ![glimmer-dsl-libui-mac-area-gallery.png](images/glimmer-dsl-libui-mac-area-gallery.png)
205
+
206
+ Windows
207
+
208
+ ![glimmer-dsl-libui-windows-area-gallery.png](images/glimmer-dsl-libui-windows-area-gallery.png)
209
+
210
+ Linux
211
+
192
212
  ![glimmer-dsl-libui-linux-area-gallery.png](images/glimmer-dsl-libui-linux-area-gallery.png)
193
213
 
194
214
  [Check Out Many More Examples Over Here!](#examples)
@@ -257,6 +277,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
257
277
  - [Basic Draw Text](#basic-draw-text)
258
278
  - [Custom Draw Text](#custom-draw-text)
259
279
  - [Method-Based Custom Keyword](#method-based-custom-keyword)
280
+ - [Tetris](#tetris)
260
281
  - [Applications](#applications)
261
282
  - [Manga2PDF](#manga2pdf)
262
283
  - [Befunge98 GUI](#befunge98-gui)
@@ -349,7 +370,7 @@ gem install glimmer-dsl-libui
349
370
  Or install via Bundler `Gemfile`:
350
371
 
351
372
  ```ruby
352
- gem 'glimmer-dsl-libui', '~> 0.2.15'
373
+ gem 'glimmer-dsl-libui', '~> 0.2.19'
353
374
  ```
354
375
 
355
376
  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.
@@ -425,7 +446,7 @@ These are all the supported keywords. Note that some keywords do not represent c
425
446
  Keyword(Args) | Properties | Listeners
426
447
  ------------- | ---------- | ---------
427
448
  `about_menu_item` | None | `on_clicked`
428
- `area` | None | `on_draw(area_draw_params)`, `on_mouse_event(area_mouse_event)`, `on_mouse_down(area_mouse_event)`, `on_mouse_up(area_mouse_event)`, `on_mouse_drag_started(area_mouse_event)`, `on_mouse_dragged(area_mouse_event)`, `on_mouse_dropped(area_mouse_event)`, `on_mouse_entered`, `on_mouse_exited`, `on_key_event(area_key_event)`, `on_key_down(area_key_event)`, `on_key_up(area_key_event)`
449
+ `area` | `auto_draw_enabled` | `on_draw(area_draw_params)`, `on_mouse_event(area_mouse_event)`, `on_mouse_down(area_mouse_event)`, `on_mouse_up(area_mouse_event)`, `on_mouse_drag_started(area_mouse_event)`, `on_mouse_dragged(area_mouse_event)`, `on_mouse_dropped(area_mouse_event)`, `on_mouse_entered`, `on_mouse_exited`, `on_key_event(area_key_event)`, `on_key_down(area_key_event)`, `on_key_up(area_key_event)`
429
450
  `arc(x_center as Numeric, y_center as Numeric, radius as Numeric, start_angle as Numeric, sweep as Numeric, is_negative as Boolean)` | `x_center` (`Numeric`), `y_center` (`Numeric`), `radius` (`Numeric`), `start_angle` (`Numeric`), `sweep` (`Numeric`), `is_negative` (Boolean) | None
430
451
  `background_color_column(name as String)` | None | None
431
452
  `bezier(c1_x as Numeric, c1_y as Numeric, c2_x as Numeric, c2_y as Numeric, end_x as Numeric, end_y as Numeric)` | `c1_x` (`Numeric`), `c1_y` (`Numeric`), `c2_x` (`Numeric`), `c2_y` (`Numeric`), `end_x` (`Numeric`), `end_y` (`Numeric`) | None
@@ -466,6 +487,9 @@ Keyword(Args) | Properties | Listeners
466
487
  `non_wrapping_multiline_entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
467
488
  `password_entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
468
489
  `path(draw_fill_mode = :winding)` | `fill` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, hex, or [X11](https://en.wikipedia.org/wiki/X11_color_names) color), `stroke` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, hex, or [X11](https://en.wikipedia.org/wiki/X11_color_names) color), `:cap` as (`:round`, `:square`, `:flat`), `:join` as (`:miter`, `:round`, `:bevel`), `:thickness` as `Numeric`, `:miter_limit` as `Numeric`, `:dashes` as `Array` of `Numeric` ) | None
490
+ `polygon(point_array as Array of Arrays of Numeric or Array of Numeric)` | `point_array` (`Array of Arrays of Numeric or Array of Numeric`) | None
491
+ `polyline(point_array as Array of Arrays of Numeric or Array of Numeric)` | `point_array` (`Array of Arrays of Numeric or Array of Numeric`) | None
492
+ `polybezier(point_array as Array of Arrays of Numeric or Array of Numeric)` | `point_array` (`Array of Arrays of Numeric or Array of Numeric`) | None
469
493
  `preferences_menu_item` | None | `on_clicked`
470
494
  `progress_bar` | `value` (`Numeric`) | None
471
495
  `progress_bar_column(name as String)` | None | None
@@ -717,6 +741,9 @@ Available nested `path` shapes:
717
741
  - `arc(x_center as Numeric, y_center as Numeric, radius as Numeric, start_angle as Numeric, sweep as Numeric, is_negative as Boolean)`
718
742
  - `line(x as Numeric, y as Numeric)`
719
743
  - `bezier(c1_x as Numeric, c1_y as Numeric, c2_x as Numeric, c2_y as Numeric, end_x as Numeric, end_y as Numeric)`
744
+ - `polygon(point_array as Array of Arrays of Numeric or Array of Numeric)`: closed figure of lines; can receive points as [[x1, y1], [x2, y2], ...] or [x1, y1, x2, y2, ...]
745
+ - `polyline(point_array as Array of Arrays of Numeric or Array of Numeric)`: open figure of lines; can receive points as [[x1, y1], [x2, y2], ...] or [x1, y1, x2, y2, ...]
746
+ - `polybezier(point_array as Array of Arrays of Numeric or Array of Numeric)`: open figure of beziers; can receive points as [[start_x1, start_y1], [c1_x2, c1_y2, c2_x2, c2_y2, end_x2, end_y2], [c1_x3, c1_y3, c2_x3, c2_y3, end_x3, end_y3], ...] or [start_x1, start_y1, c1_x2, c1_y2, c2_x2, c2_y2, end_x2, end_y2, c1_x3, c1_y3, c2_x3, c2_y3, end_x3, end_y3, ...]
720
747
  - `figure(x=nil as Numeric, y=nil as Numeric)` (composite that can contain other shapes) (can set `closed true` to connect last point to first point automatically)
721
748
 
722
749
  Check [examples/area_gallery.rb](#area-gallery) for an overiew of all `path` shapes.
@@ -771,6 +798,12 @@ Note that when nesting an `area` directly underneath `window` (without a layout
771
798
 
772
799
  To redraw an `area`, you may call the `#queue_redraw_all` method, or simply `#redraw`.
773
800
 
801
+ `area` has the following Glimmer-added API methods/attributes:
802
+ - `request_auto_redraw`: requests auto redraw upon changes to nested stable `path` or shapes
803
+ - `pause_auto_redraw`: pause auto redraw upon changes to nested stable `path` or shapes (useful to avoid too many micro-change redraws, to group all redraws as one after many micro-changes)
804
+ - `resume_auto_redraw`: resume auto redraw upon changes to nested stable `path` or shapes
805
+ - `auto_redraw_enabled`/`auto_redraw_enabled?`/`auto_redraw_enabled=`: an attribute to disable/enable auto redraw on an `area` upon changes to nested stable `path` or shapes
806
+
774
807
  A transform `matrix` can be set on a path by building a `matrix(m11 = nil, m12 = nil, m21 = nil, m22 = nil, m31 = nil, m32 = nil) {operations}` proxy object and then setting via `transform` property, or alternatively by building and setting the matrix in one call to `transform(m11 = nil, m12 = nil, m21 = nil, m22 = nil, m31 = nil, m32 = nil) {operations}` passing it the matrix arguments and/or content operations.
775
808
 
776
809
  When instantiating a `matrix` object, it always starts with identity matrix.
@@ -1046,10 +1079,10 @@ window('Method-Based Custom Keyword') {
1046
1079
  - `table` `checkbox_column` and `checkbox_text_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).
1047
1080
  - `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)
1048
1081
  - `text` `string` `background` does not work on Windows due to an [issue in libui](https://github.com/andlabs/libui/issues/347).
1049
- - `arc` shape does not work on Windows unless a figure is started due to implementation of [libui](https://github.com/andlabs/libui).
1050
1082
  - `table` controls on Windows intentionally get an extra empty row at the end because if any row were to be deleted for the first time, double-deletion happens due to an issue in [libui](https://github.com/andlabs/libui) on Windows.
1051
1083
  - `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.
1052
1084
  - 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.
1085
+ - As per the code of [examples/basic_transform.rb](#basic-transform), Windows requires different ordering of transforms than Mac and Linux.
1053
1086
 
1054
1087
  ### Original API
1055
1088
 
@@ -1101,6 +1134,10 @@ Mac
1101
1134
 
1102
1135
  ![glimmer-dsl-libui-mac-meta-example.png](images/glimmer-dsl-libui-mac-meta-example.png)
1103
1136
 
1137
+ Windows
1138
+
1139
+ ![glimmer-dsl-libui-windows-meta-example.png](images/glimmer-dsl-libui-windows-meta-example.png)
1140
+
1104
1141
  Linux
1105
1142
 
1106
1143
  ![glimmer-dsl-libui-linux-meta-example.png](images/glimmer-dsl-libui-linux-meta-example.png)
@@ -1265,6 +1302,10 @@ Mac
1265
1302
 
1266
1303
  ![glimmer-dsl-libui-mac-basic-window.png](images/glimmer-dsl-libui-mac-basic-window.png)
1267
1304
 
1305
+ Windows
1306
+
1307
+ ![glimmer-dsl-libui-windows-basic-window.png](images/glimmer-dsl-libui-windows-basic-window.png)
1308
+
1268
1309
  Linux
1269
1310
 
1270
1311
  ![glimmer-dsl-libui-linux-basic-window.png](images/glimmer-dsl-libui-linux-basic-window.png)
@@ -1345,6 +1386,11 @@ Mac
1345
1386
  ![glimmer-dsl-libui-mac-basic-button.png](images/glimmer-dsl-libui-mac-basic-button.png)
1346
1387
  ![glimmer-dsl-libui-mac-basic-button-msg-box.png](images/glimmer-dsl-libui-mac-basic-button-msg-box.png)
1347
1388
 
1389
+ Windows
1390
+
1391
+ ![glimmer-dsl-libui-windows-basic-button.png](images/glimmer-dsl-libui-windows-basic-button.png)
1392
+ ![glimmer-dsl-libui-windows-basic-button-msg-box.png](images/glimmer-dsl-libui-windows-basic-button-msg-box.png)
1393
+
1348
1394
  Linux
1349
1395
 
1350
1396
  ![glimmer-dsl-libui-linux-basic-button.png](images/glimmer-dsl-libui-linux-basic-button.png)
@@ -1422,6 +1468,11 @@ Mac
1422
1468
  ![glimmer-dsl-libui-mac-basic-entry.png](images/glimmer-dsl-libui-mac-basic-entry.png)
1423
1469
  ![glimmer-dsl-libui-mac-basic-entry-msg-box.png](images/glimmer-dsl-libui-mac-basic-entry-msg-box.png)
1424
1470
 
1471
+ Windows
1472
+
1473
+ ![glimmer-dsl-libui-windows-basic-entry.png](images/glimmer-dsl-libui-windows-basic-entry.png)
1474
+ ![glimmer-dsl-libui-windows-basic-entry-msg-box.png](images/glimmer-dsl-libui-windows-basic-entry-msg-box.png)
1475
+
1425
1476
  Linux
1426
1477
 
1427
1478
  ![glimmer-dsl-libui-linux-basic-entry.png](images/glimmer-dsl-libui-linux-basic-entry.png)
@@ -1522,6 +1573,10 @@ Mac
1522
1573
 
1523
1574
  ![glimmer-dsl-libui-mac-simple-notepad.png](images/glimmer-dsl-libui-mac-simple-notepad.png)
1524
1575
 
1576
+ Windows
1577
+
1578
+ ![glimmer-dsl-libui-windows-simple-notepad.png](images/glimmer-dsl-libui-windows-simple-notepad.png)
1579
+
1525
1580
  Linux
1526
1581
 
1527
1582
  ![glimmer-dsl-libui-linux-simple-notepad.png](images/glimmer-dsl-libui-linux-simple-notepad.png)
@@ -1595,6 +1650,11 @@ Mac
1595
1650
  ![glimmer-dsl-libui-mac-midi-player.png](images/glimmer-dsl-libui-mac-midi-player.png)
1596
1651
  ![glimmer-dsl-libui-mac-midi-player-msg-box.png](images/glimmer-dsl-libui-mac-midi-player-msg-box.png)
1597
1652
 
1653
+ Windows
1654
+
1655
+ ![glimmer-dsl-libui-windows-midi-player.png](images/glimmer-dsl-libui-windows-midi-player.png)
1656
+ ![glimmer-dsl-libui-windows-midi-player-msg-box.png](images/glimmer-dsl-libui-windows-midi-player-msg-box.png)
1657
+
1598
1658
  Linux
1599
1659
 
1600
1660
  ![glimmer-dsl-libui-linux-midi-player.png](images/glimmer-dsl-libui-linux-midi-player.png)
@@ -1812,6 +1872,10 @@ Mac
1812
1872
 
1813
1873
  ![glimmer-dsl-libui-mac-control-gallery.png](images/glimmer-dsl-libui-mac-control-gallery.png)
1814
1874
 
1875
+ Windows
1876
+
1877
+ ![glimmer-dsl-libui-windows-control-gallery.png](images/glimmer-dsl-libui-windows-control-gallery.png)
1878
+
1815
1879
  Linux
1816
1880
 
1817
1881
  ![glimmer-dsl-libui-linux-control-gallery.png](images/glimmer-dsl-libui-linux-control-gallery.png)
@@ -2203,6 +2267,11 @@ Mac
2203
2267
  ![glimmer-dsl-libui-mac-font-button.png](images/glimmer-dsl-libui-mac-font-button.png)
2204
2268
  ![glimmer-dsl-libui-mac-font-button-selection.png](images/glimmer-dsl-libui-mac-font-button-selection.png)
2205
2269
 
2270
+ Windows
2271
+
2272
+ ![glimmer-dsl-libui-windows-font-button.png](images/glimmer-dsl-libui-windows-font-button.png)
2273
+ ![glimmer-dsl-libui-windows-font-button-selection.png](images/glimmer-dsl-libui-windows-font-button-selection.png)
2274
+
2206
2275
  Linux
2207
2276
 
2208
2277
  ![glimmer-dsl-libui-linux-font-button.png](images/glimmer-dsl-libui-linux-font-button.png)
@@ -2287,6 +2356,11 @@ Mac
2287
2356
  ![glimmer-dsl-libui-mac-color-button.png](images/glimmer-dsl-libui-mac-color-button.png)
2288
2357
  ![glimmer-dsl-libui-mac-color-button-selection.png](images/glimmer-dsl-libui-mac-color-button-selection.png)
2289
2358
 
2359
+ Windows
2360
+
2361
+ ![glimmer-dsl-libui-windows-color-button.png](images/glimmer-dsl-libui-windows-color-button.png)
2362
+ ![glimmer-dsl-libui-windows-color-button-selection.png](images/glimmer-dsl-libui-windows-color-button-selection.png)
2363
+
2290
2364
  Linux
2291
2365
 
2292
2366
  ![glimmer-dsl-libui-linux-color-button.png](images/glimmer-dsl-libui-linux-color-button.png)
@@ -2299,7 +2373,7 @@ require 'glimmer-dsl-libui'
2299
2373
 
2300
2374
  include Glimmer
2301
2375
 
2302
- window('color button', 230) {
2376
+ window('color button', 240) {
2303
2377
  color_button { |cb|
2304
2378
  color :blue
2305
2379
 
@@ -2331,6 +2405,10 @@ Mac
2331
2405
 
2332
2406
  ![glimmer-dsl-libui-mac-date-time-picker.png](images/glimmer-dsl-libui-mac-date-time-picker.png)
2333
2407
 
2408
+ Windows
2409
+
2410
+ ![glimmer-dsl-libui-windows-date-time-picker.png](images/glimmer-dsl-libui-windows-date-time-picker.png)
2411
+
2334
2412
  Linux
2335
2413
 
2336
2414
  ![glimmer-dsl-libui-linux-date-time-picker.png](images/glimmer-dsl-libui-linux-date-time-picker.png)
@@ -2423,6 +2501,12 @@ Mac
2423
2501
  ![glimmer-dsl-libui-mac-grid-expand.png](images/glimmer-dsl-libui-mac-grid-expand.png)
2424
2502
  ![glimmer-dsl-libui-mac-grid-align.png](images/glimmer-dsl-libui-mac-grid-align.png)
2425
2503
 
2504
+ Windows
2505
+
2506
+ ![glimmer-dsl-libui-windows-grid-span.png](images/glimmer-dsl-libui-windows-grid-span.png)
2507
+ ![glimmer-dsl-libui-windows-grid-expand.png](images/glimmer-dsl-libui-windows-grid-expand.png)
2508
+ ![glimmer-dsl-libui-windows-grid-align.png](images/glimmer-dsl-libui-windows-grid-align.png)
2509
+
2426
2510
  Linux
2427
2511
 
2428
2512
  ![glimmer-dsl-libui-linux-grid-span.png](images/glimmer-dsl-libui-linux-grid-span.png)
@@ -2561,6 +2645,11 @@ Mac
2561
2645
  ![glimmer-dsl-libui-mac-form.png](images/glimmer-dsl-libui-mac-form.png)
2562
2646
  ![glimmer-dsl-libui-mac-form-msg-box.png](images/glimmer-dsl-libui-mac-form-msg-box.png)
2563
2647
 
2648
+ Windows
2649
+
2650
+ ![glimmer-dsl-libui-windows-form.png](images/glimmer-dsl-libui-windows-form.png)
2651
+ ![glimmer-dsl-libui-windows-form-msg-box.png](images/glimmer-dsl-libui-windows-form-msg-box.png)
2652
+
2564
2653
  Linux
2565
2654
 
2566
2655
  ![glimmer-dsl-libui-linux-form.png](images/glimmer-dsl-libui-linux-form.png)
@@ -2626,6 +2715,10 @@ Mac
2626
2715
 
2627
2716
  ![glimmer-dsl-libui-mac-basic-table.png](images/glimmer-dsl-libui-mac-basic-table.png)
2628
2717
 
2718
+ Windows
2719
+
2720
+ ![glimmer-dsl-libui-windows-basic-table.png](images/glimmer-dsl-libui-windows-basic-table.png)
2721
+
2629
2722
  Linux
2630
2723
 
2631
2724
  ![glimmer-dsl-libui-linux-basic-table.png](images/glimmer-dsl-libui-linux-basic-table.png)
@@ -2748,6 +2841,12 @@ Mac
2748
2841
  ![glimmer-dsl-libui-mac-editable-table-editing.png](images/glimmer-dsl-libui-mac-editable-table-editing.png)
2749
2842
  ![glimmer-dsl-libui-mac-editable-table-edited.png](images/glimmer-dsl-libui-mac-editable-table-edited.png)
2750
2843
 
2844
+ Windows
2845
+
2846
+ ![glimmer-dsl-libui-windows-editable-table.png](images/glimmer-dsl-libui-windows-editable-table.png)
2847
+ ![glimmer-dsl-libui-windows-editable-table-editing.png](images/glimmer-dsl-libui-windows-editable-table-editing.png)
2848
+ ![glimmer-dsl-libui-windows-editable-table-edited.png](images/glimmer-dsl-libui-windows-editable-table-edited.png)
2849
+
2751
2850
  Linux
2752
2851
 
2753
2852
  ![glimmer-dsl-libui-linux-editable-table.png](images/glimmer-dsl-libui-linux-editable-table.png)
@@ -2815,6 +2914,11 @@ Mac
2815
2914
  ![glimmer-dsl-libui-mac-editable-column-table-editing.png](images/glimmer-dsl-libui-mac-editable-column-table-editing.png)
2816
2915
  ![glimmer-dsl-libui-mac-editable-column-table-edited.png](images/glimmer-dsl-libui-mac-editable-column-table-edited.png)
2817
2916
 
2917
+ Windows
2918
+
2919
+ ![glimmer-dsl-libui-windows-editable-column-table-editing.png](images/glimmer-dsl-libui-windows-editable-column-table-editing.png)
2920
+ ![glimmer-dsl-libui-windows-editable-column-table-edited.png](images/glimmer-dsl-libui-windows-editable-column-table-edited.png)
2921
+
2818
2922
  Linux
2819
2923
 
2820
2924
  ![glimmer-dsl-libui-linux-editable-column-table-editing.png](images/glimmer-dsl-libui-linux-editable-column-table-editing.png)
@@ -2882,6 +2986,10 @@ Mac
2882
2986
 
2883
2987
  ![glimmer-dsl-libui-mac-basic-table-image.png](images/glimmer-dsl-libui-mac-basic-table-image.png)
2884
2988
 
2989
+ Windows
2990
+
2991
+ ![glimmer-dsl-libui-windows-basic-table-image.png](images/glimmer-dsl-libui-windows-basic-table-image.png)
2992
+
2885
2993
  Linux
2886
2994
 
2887
2995
  ![glimmer-dsl-libui-linux-basic-table-image.png](images/glimmer-dsl-libui-linux-basic-table-image.png)
@@ -3040,6 +3148,10 @@ Mac
3040
3148
 
3041
3149
  ![glimmer-dsl-libui-mac-basic-table-image-text.png](images/glimmer-dsl-libui-mac-basic-table-image-text.png)
3042
3150
 
3151
+ Windows
3152
+
3153
+ ![glimmer-dsl-libui-windows-basic-table-image-text.png](images/glimmer-dsl-libui-windows-basic-table-image-text.png)
3154
+
3043
3155
  Linux
3044
3156
 
3045
3157
  ![glimmer-dsl-libui-linux-basic-table-image-text.png](images/glimmer-dsl-libui-linux-basic-table-image-text.png)
@@ -3111,6 +3223,11 @@ Mac
3111
3223
  ![glimmer-dsl-libui-mac-basic-table-button.png](images/glimmer-dsl-libui-mac-basic-table-button.png)
3112
3224
  ![glimmer-dsl-libui-mac-basic-table-button-deleted.png](images/glimmer-dsl-libui-mac-basic-table-button-deleted.png)
3113
3225
 
3226
+ Windows
3227
+
3228
+ ![glimmer-dsl-libui-windows-basic-table-button.png](images/glimmer-dsl-libui-windows-basic-table-button.png)
3229
+ ![glimmer-dsl-libui-windows-basic-table-button-deleted.png](images/glimmer-dsl-libui-windows-basic-table-button-deleted.png)
3230
+
3114
3231
  Linux
3115
3232
 
3116
3233
  ![glimmer-dsl-libui-linux-basic-table-button.png](images/glimmer-dsl-libui-linux-basic-table-button.png)
@@ -3172,6 +3289,10 @@ Mac
3172
3289
 
3173
3290
  ![glimmer-dsl-libui-mac-basic-table-checkbox.png](images/glimmer-dsl-libui-mac-basic-table-checkbox.png)
3174
3291
 
3292
+ Windows
3293
+
3294
+ ![glimmer-dsl-libui-windows-basic-table-checkbox.png](images/glimmer-dsl-libui-windows-basic-table-checkbox.png)
3295
+
3175
3296
  Linux
3176
3297
 
3177
3298
  ![glimmer-dsl-libui-linux-basic-table-checkbox.png](images/glimmer-dsl-libui-linux-basic-table-checkbox.png)
@@ -3224,6 +3345,10 @@ Mac
3224
3345
 
3225
3346
  ![glimmer-dsl-libui-mac-basic-table-checkbox-text.png](images/glimmer-dsl-libui-mac-basic-table-checkbox-text.png)
3226
3347
 
3348
+ Windows
3349
+
3350
+ ![glimmer-dsl-libui-windows-basic-table-checkbox-text.png](images/glimmer-dsl-libui-windows-basic-table-checkbox-text.png)
3351
+
3227
3352
  Linux
3228
3353
 
3229
3354
  ![glimmer-dsl-libui-linux-basic-table-checkbox-text.png](images/glimmer-dsl-libui-linux-basic-table-checkbox-text.png)
@@ -3276,6 +3401,10 @@ Mac
3276
3401
 
3277
3402
  ![glimmer-dsl-libui-mac-basic-table-progress-bar.png](images/glimmer-dsl-libui-mac-basic-table-progress-bar.png)
3278
3403
 
3404
+ Windows
3405
+
3406
+ ![glimmer-dsl-libui-windows-basic-table-progress-bar.png](images/glimmer-dsl-libui-windows-basic-table-progress-bar.png)
3407
+
3279
3408
  Linux
3280
3409
 
3281
3410
  ![glimmer-dsl-libui-linux-basic-table-progress-bar.png](images/glimmer-dsl-libui-linux-basic-table-progress-bar.png)
@@ -3343,6 +3472,10 @@ Mac
3343
3472
 
3344
3473
  ![glimmer-dsl-libui-mac-basic-table-color.png](images/glimmer-dsl-libui-mac-basic-table-color.png)
3345
3474
 
3475
+ Windows
3476
+
3477
+ ![glimmer-dsl-libui-windows-basic-table-color.png](images/glimmer-dsl-libui-windows-basic-table-color.png)
3478
+
3346
3479
  Linux
3347
3480
 
3348
3481
  ![glimmer-dsl-libui-linux-basic-table-color.png](images/glimmer-dsl-libui-linux-basic-table-color.png)
@@ -3411,6 +3544,12 @@ Mac
3411
3544
  ![glimmer-dsl-libui-mac-form-table-contact-entered.png](images/glimmer-dsl-libui-mac-form-table-contact-entered.png)
3412
3545
  ![glimmer-dsl-libui-mac-form-table-filtered.png](images/glimmer-dsl-libui-mac-form-table-filtered.png)
3413
3546
 
3547
+ Windows
3548
+
3549
+ ![glimmer-dsl-libui-windows-form-table.png](images/glimmer-dsl-libui-windows-form-table.png)
3550
+ ![glimmer-dsl-libui-windows-form-table-contact-entered.png](images/glimmer-dsl-libui-windows-form-table-contact-entered.png)
3551
+ ![glimmer-dsl-libui-windows-form-table-filtered.png](images/glimmer-dsl-libui-windows-form-table-filtered.png)
3552
+
3414
3553
  Linux
3415
3554
 
3416
3555
  ![glimmer-dsl-libui-linux-form-table.png](images/glimmer-dsl-libui-linux-form-table.png)
@@ -3531,6 +3670,10 @@ Mac
3531
3670
 
3532
3671
  ![glimmer-dsl-libui-mac-basic-area.png](images/glimmer-dsl-libui-mac-basic-area.png)
3533
3672
 
3673
+ Windows
3674
+
3675
+ ![glimmer-dsl-libui-windows-basic-area.png](images/glimmer-dsl-libui-windows-basic-area.png)
3676
+
3534
3677
  Linux
3535
3678
 
3536
3679
  ![glimmer-dsl-libui-linux-basic-area.png](images/glimmer-dsl-libui-linux-basic-area.png)
@@ -3654,6 +3797,11 @@ Mac
3654
3797
  ![glimmer-dsl-libui-mac-dynamic-area.png](images/glimmer-dsl-libui-mac-dynamic-area.png)
3655
3798
  ![glimmer-dsl-libui-mac-dynamic-area-updated.png](images/glimmer-dsl-libui-mac-dynamic-area-updated.png)
3656
3799
 
3800
+ Windows
3801
+
3802
+ ![glimmer-dsl-libui-windows-dynamic-area.png](images/glimmer-dsl-libui-windows-dynamic-area.png)
3803
+ ![glimmer-dsl-libui-windows-dynamic-area-updated.png](images/glimmer-dsl-libui-windows-dynamic-area-updated.png)
3804
+
3657
3805
  Linux
3658
3806
 
3659
3807
  ![glimmer-dsl-libui-linux-dynamic-area.png](images/glimmer-dsl-libui-linux-dynamic-area.png)
@@ -3885,6 +4033,10 @@ Mac
3885
4033
 
3886
4034
  ![glimmer-dsl-libui-mac-area-gallery.png](images/glimmer-dsl-libui-mac-area-gallery.png)
3887
4035
 
4036
+ Windows
4037
+
4038
+ ![glimmer-dsl-libui-windows-area-gallery.png](images/glimmer-dsl-libui-windows-area-gallery.png)
4039
+
3888
4040
  Linux
3889
4041
 
3890
4042
  ![glimmer-dsl-libui-linux-area-gallery.png](images/glimmer-dsl-libui-linux-area-gallery.png)
@@ -3912,31 +4064,24 @@ window('Area Gallery', 400, 400) {
3912
4064
  fill x0: 10, y0: 10, x1: 350, y1: 350, stops: [{pos: 0.25, r: 204, g: 102, b: 204}, {pos: 0.75, r: 102, g: 102, b: 204}]
3913
4065
  }
3914
4066
  path { # declarative stable path
3915
- figure(100, 100) {
3916
- line(100, 400)
3917
- line(400, 100)
3918
- line(400, 400)
3919
-
3920
- closed true
3921
- }
3922
-
4067
+ polygon(100, 100, 100, 400, 400, 100, 400, 400)
4068
+
3923
4069
  fill r: 202, g: 102, b: 104, a: 0.5
3924
4070
  stroke r: 0, g: 0, b: 0
3925
4071
  }
3926
4072
  path { # declarative stable path
3927
- figure(0, 0) {
3928
- bezier(200, 100, 100, 200, 400, 100)
3929
- bezier(300, 100, 100, 300, 100, 400)
3930
- bezier(100, 300, 300, 100, 400, 400)
3931
-
3932
- closed true
3933
- }
4073
+ polybezier(0, 0, 200, 100, 100, 200, 400, 100, 300, 100, 100, 300, 100, 400, 100, 300, 300, 100, 400, 400)
3934
4074
 
3935
4075
  fill r: 202, g: 102, b: 204, a: 0.5
3936
4076
  stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
3937
4077
  }
3938
4078
  path { # declarative stable path
3939
- arc(400, 220, 180, 90, 90, false)
4079
+ polyline(100, 100, 400, 100, 100, 400, 400, 400, 0, 0)
4080
+
4081
+ stroke r: 0, g: 0, b: 0, thickness: 2
4082
+ }
4083
+ path { # declarative stable path
4084
+ arc(404, 216, 190, 90, 90, false)
3940
4085
 
3941
4086
  # radial gradient (has an outer_radius in addition to x0, y0, x1, y1, and stops)
3942
4087
  fill outer_radius: 90, x0: 0, y0: 0, x1: 500, y1: 500, stops: [{pos: 0.25, r: 102, g: 102, b: 204, a: 0.5}, {pos: 0.75, r: 204, g: 102, b: 204}]
@@ -3948,9 +4093,9 @@ window('Area Gallery', 400, 400) {
3948
4093
  fill r: 202, g: 102, b: 204, a: 0.5
3949
4094
  stroke r: 0, g: 0, b: 0, thickness: 2
3950
4095
  }
3951
- text(160, 40, 100) { # x, y, width
4096
+ text(161, 40, 100) { # x, y, width
3952
4097
  string('Area Gallery') {
3953
- font family: 'Times', size: 14
4098
+ font family: 'Arial', size: 14
3954
4099
  color :black
3955
4100
  }
3956
4101
  }
@@ -4099,18 +4244,42 @@ window('Area Gallery', 400, 400) {
4099
4244
  end_x 400
4100
4245
  end_y 400
4101
4246
  }
4102
-
4103
- closed true
4104
4247
  }
4105
4248
 
4106
4249
  fill r: 202, g: 102, b: 204, a: 0.5
4107
4250
  stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
4108
4251
  }
4252
+ path { # declarative stable path
4253
+ polyline(100, 100, 400, 100, 100, 400, 400, 400, 0, 0)
4254
+ figure {
4255
+ x 100
4256
+ y 100
4257
+
4258
+ line {
4259
+ x 400
4260
+ y 100
4261
+ }
4262
+ line {
4263
+ x 100
4264
+ y 400
4265
+ }
4266
+ line {
4267
+ x 400
4268
+ y 400
4269
+ }
4270
+ line {
4271
+ x 0
4272
+ y 0
4273
+ }
4274
+ }
4275
+
4276
+ stroke r: 0, g: 0, b: 0, thickness: 2
4277
+ }
4109
4278
  path { # declarative stable path
4110
4279
  arc {
4111
- x_center 400
4112
- y_center 220
4113
- radius 180
4280
+ x_center 404
4281
+ y_center 216
4282
+ radius 190
4114
4283
  start_angle 90
4115
4284
  sweep 90
4116
4285
  is_negative false
@@ -4131,12 +4300,12 @@ window('Area Gallery', 400, 400) {
4131
4300
  stroke r: 0, g: 0, b: 0, thickness: 2
4132
4301
  }
4133
4302
  text {
4134
- x 160
4303
+ x 161
4135
4304
  y 40
4136
4305
  width 100
4137
4306
 
4138
4307
  string {
4139
- font family: 'Times', size: 14
4308
+ font family: 'Arial', size: 14
4140
4309
  color :black
4141
4310
 
4142
4311
  'Area Gallery'
@@ -4207,42 +4376,35 @@ window('Area Gallery', 400, 400) {
4207
4376
  path { # a dynamic path is added semi-declaratively inside on_draw block
4208
4377
  square(0, 0, 100)
4209
4378
  square(100, 100, 400)
4210
-
4379
+
4211
4380
  fill r: 102, g: 102, b: 204
4212
4381
  }
4213
4382
  path { # a dynamic path is added semi-declaratively inside on_draw block
4214
4383
  rectangle(0, 100, 100, 400)
4215
4384
  rectangle(100, 0, 400, 100)
4216
-
4385
+
4217
4386
  # linear gradient (has x0, y0, x1, y1, and stops)
4218
4387
  fill x0: 10, y0: 10, x1: 350, y1: 350, stops: [{pos: 0.25, r: 204, g: 102, b: 204}, {pos: 0.75, r: 102, g: 102, b: 204}]
4219
4388
  }
4220
4389
  path { # a dynamic path is added semi-declaratively inside on_draw block
4221
- figure(100, 100) {
4222
- line(100, 400)
4223
- line(400, 100)
4224
- line(400, 400)
4225
-
4226
- closed true
4227
- }
4228
-
4390
+ polygon(100, 100, 100, 400, 400, 100, 400, 400)
4391
+
4229
4392
  fill r: 202, g: 102, b: 104, a: 0.5
4230
4393
  stroke r: 0, g: 0, b: 0
4231
4394
  }
4232
4395
  path { # a dynamic path is added semi-declaratively inside on_draw block
4233
- figure(0, 0) {
4234
- bezier(200, 100, 100, 200, 400, 100)
4235
- bezier(300, 100, 100, 300, 100, 400)
4236
- bezier(100, 300, 300, 100, 400, 400)
4237
-
4238
- closed true
4239
- }
4240
-
4396
+ polybezier(0, 0, 200, 100, 100, 200, 400, 100, 300, 100, 100, 300, 100, 400, 100, 300, 300, 100, 400, 400)
4397
+
4241
4398
  fill r: 202, g: 102, b: 204, a: 0.5
4242
4399
  stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
4243
4400
  }
4244
4401
  path { # a dynamic path is added semi-declaratively inside on_draw block
4245
- arc(400, 220, 180, 90, 90, false)
4402
+ polyline(100, 100, 400, 100, 100, 400, 400, 400, 0, 0)
4403
+
4404
+ stroke r: 0, g: 0, b: 0, thickness: 2
4405
+ }
4406
+ path { # a dynamic path is added semi-declaratively inside on_draw block
4407
+ arc(404, 216, 190, 90, 90, false)
4246
4408
 
4247
4409
  # radial gradient (has an outer_radius in addition to x0, y0, x1, y1, and stops)
4248
4410
  fill outer_radius: 90, x0: 0, y0: 0, x1: 500, y1: 500, stops: [{pos: 0.25, r: 102, g: 102, b: 204, a: 0.5}, {pos: 0.75, r: 204, g: 102, b: 204}]
@@ -4254,9 +4416,9 @@ window('Area Gallery', 400, 400) {
4254
4416
  fill r: 202, g: 102, b: 204, a: 0.5
4255
4417
  stroke r: 0, g: 0, b: 0, thickness: 2
4256
4418
  }
4257
- text(160, 40, 100) { # x, y, width
4419
+ text(161, 40, 100) { # x, y, width
4258
4420
  string('Area Gallery') {
4259
- font family: 'Times', size: 14
4421
+ font family: 'Arial', size: 14
4260
4422
  color :black
4261
4423
  }
4262
4424
  }
@@ -4371,10 +4533,10 @@ window('Area Gallery', 400, 400) {
4371
4533
  x 400
4372
4534
  y 400
4373
4535
  }
4374
-
4536
+
4375
4537
  closed true
4376
4538
  }
4377
-
4539
+
4378
4540
  fill r: 202, g: 102, b: 104, a: 0.5
4379
4541
  stroke r: 0, g: 0, b: 0
4380
4542
  }
@@ -4407,18 +4569,42 @@ window('Area Gallery', 400, 400) {
4407
4569
  end_x 400
4408
4570
  end_y 400
4409
4571
  }
4410
-
4411
- closed true
4412
4572
  }
4413
-
4573
+
4414
4574
  fill r: 202, g: 102, b: 204, a: 0.5
4415
4575
  stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
4416
4576
  }
4577
+ path { # a dynamic path is added semi-declaratively inside on_draw block
4578
+ polyline(100, 100, 400, 100, 100, 400, 400, 400, 0, 0)
4579
+ figure {
4580
+ x 100
4581
+ y 100
4582
+
4583
+ line {
4584
+ x 400
4585
+ y 100
4586
+ }
4587
+ line {
4588
+ x 100
4589
+ y 400
4590
+ }
4591
+ line {
4592
+ x 400
4593
+ y 400
4594
+ }
4595
+ line {
4596
+ x 0
4597
+ y 0
4598
+ }
4599
+ }
4600
+
4601
+ stroke r: 0, g: 0, b: 0, thickness: 2
4602
+ }
4417
4603
  path { # a dynamic path is added semi-declaratively inside on_draw block
4418
4604
  arc {
4419
- x_center 400
4420
- y_center 220
4421
- radius 180
4605
+ x_center 404
4606
+ y_center 216
4607
+ radius 190
4422
4608
  start_angle 90
4423
4609
  sweep 90
4424
4610
  is_negative false
@@ -4439,12 +4625,12 @@ window('Area Gallery', 400, 400) {
4439
4625
  stroke r: 0, g: 0, b: 0, thickness: 2
4440
4626
  }
4441
4627
  text {
4442
- x 160
4628
+ x 161
4443
4629
  y 40
4444
4630
  width 100
4445
4631
 
4446
4632
  string {
4447
- font family: 'Times', size: 14
4633
+ font family: 'Arial', size: 14
4448
4634
  color :black
4449
4635
 
4450
4636
  'Area Gallery'
@@ -4523,6 +4709,10 @@ Mac
4523
4709
 
4524
4710
  ![glimmer-dsl-libui-mac-histogram.png](images/glimmer-dsl-libui-mac-histogram.png)
4525
4711
 
4712
+ Windows
4713
+
4714
+ ![glimmer-dsl-libui-windows-histogram.png](images/glimmer-dsl-libui-windows-histogram.png)
4715
+
4526
4716
  Linux
4527
4717
 
4528
4718
  ![glimmer-dsl-libui-linux-histogram.png](images/glimmer-dsl-libui-linux-histogram.png)
@@ -4757,20 +4947,13 @@ end
4757
4947
 
4758
4948
  # method-based custom control representing a graph path
4759
4949
  def graph_path(width, height, should_extend, &block)
4760
- locations = point_locations(width, height)
4950
+ locations = point_locations(width, height).flatten
4761
4951
  path {
4762
- first_location = locations[0] # x and y
4763
- figure(first_location[0], first_location[1]) {
4764
- locations.each do |loc|
4765
- line(loc[0], loc[1])
4766
- end
4767
- if should_extend
4768
- line(width, height)
4769
- line(0, height)
4770
-
4771
- closed true
4772
- end
4773
- }
4952
+ if should_extend
4953
+ polygon(locations + [width, height, 0, height])
4954
+ else
4955
+ polyline(locations)
4956
+ end
4774
4957
 
4775
4958
  # apply a transform to the coordinate space for this path so (0, 0) is the top-left corner of the graph
4776
4959
  transform {
@@ -4864,6 +5047,10 @@ Mac
4864
5047
 
4865
5048
  ![glimmer-dsl-libui-mac-basic-transform.png](images/glimmer-dsl-libui-mac-basic-transform.png)
4866
5049
 
5050
+ Windows
5051
+
5052
+ ![glimmer-dsl-libui-windows-basic-transform.png](images/glimmer-dsl-libui-windows-basic-transform.png)
5053
+
4867
5054
  Linux
4868
5055
 
4869
5056
  ![glimmer-dsl-libui-linux-basic-transform.png](images/glimmer-dsl-libui-linux-basic-transform.png)
@@ -4921,6 +5108,11 @@ Mac
4921
5108
  ![glimmer-dsl-libui-mac-login.png](images/glimmer-dsl-libui-mac-login.png)
4922
5109
  ![glimmer-dsl-libui-mac-login-logged-in.png](images/glimmer-dsl-libui-mac-login-logged-in.png)
4923
5110
 
5111
+ Windows
5112
+
5113
+ ![glimmer-dsl-libui-windows-login.png](images/glimmer-dsl-libui-windows-login.png)
5114
+ ![glimmer-dsl-libui-windows-login-logged-in.png](images/glimmer-dsl-libui-windows-login-logged-in.png)
5115
+
4924
5116
  Linux
4925
5117
 
4926
5118
  ![glimmer-dsl-libui-linux-login.png](images/glimmer-dsl-libui-linux-login.png)
@@ -4997,6 +5189,11 @@ Mac
4997
5189
  ![glimmer-dsl-libui-mac-timer.png](images/glimmer-dsl-libui-mac-timer.png)
4998
5190
  ![glimmer-dsl-libui-mac-timer-in-progress.png](images/glimmer-dsl-libui-mac-timer-in-progress.png)
4999
5191
 
5192
+ Windows
5193
+
5194
+ ![glimmer-dsl-libui-windows-timer.png](images/glimmer-dsl-libui-windows-timer.png)
5195
+ ![glimmer-dsl-libui-windows-timer-in-progress.png](images/glimmer-dsl-libui-windows-timer-in-progress.png)
5196
+
5000
5197
  Linux
5001
5198
 
5002
5199
  ![glimmer-dsl-libui-linux-timer.png](images/glimmer-dsl-libui-linux-timer.png)
@@ -5162,6 +5359,12 @@ Mac
5162
5359
  ![glimmer-dsl-libui-mac-color-the-circles-lost.png](images/glimmer-dsl-libui-mac-color-the-circles-lost.png)
5163
5360
  ![glimmer-dsl-libui-mac-color-the-circles-won.png](images/glimmer-dsl-libui-mac-color-the-circles-won.png)
5164
5361
 
5362
+ Windows
5363
+
5364
+ ![glimmer-dsl-libui-windows-color-the-circles.png](images/glimmer-dsl-libui-windows-color-the-circles.png)
5365
+ ![glimmer-dsl-libui-windows-color-the-circles-lost.png](images/glimmer-dsl-libui-windows-color-the-circles-lost.png)
5366
+ ![glimmer-dsl-libui-windows-color-the-circles-won.png](images/glimmer-dsl-libui-windows-color-the-circles-won.png)
5367
+
5165
5368
  Linux
5166
5369
 
5167
5370
  ![glimmer-dsl-libui-linux-color-the-circles.png](images/glimmer-dsl-libui-linux-color-the-circles.png)
@@ -5413,6 +5616,10 @@ Mac
5413
5616
 
5414
5617
  ![glimmer-dsl-libui-mac-basic-draw-text.png](images/glimmer-dsl-libui-mac-basic-draw-text.png)
5415
5618
 
5619
+ Windows
5620
+
5621
+ ![glimmer-dsl-libui-windows-basic-draw-text.png](images/glimmer-dsl-libui-windows-basic-draw-text.png)
5622
+
5416
5623
  Linux
5417
5624
 
5418
5625
  ![glimmer-dsl-libui-linux-basic-draw-text.png](images/glimmer-dsl-libui-linux-basic-draw-text.png)
@@ -5696,6 +5903,11 @@ Mac
5696
5903
  ![glimmer-dsl-libui-mac-custom-draw-text.png](images/glimmer-dsl-libui-mac-custom-draw-text.png)
5697
5904
  ![glimmer-dsl-libui-mac-custom-draw-text-changed.png](images/glimmer-dsl-libui-mac-custom-draw-text-changed.png)
5698
5905
 
5906
+ Windows
5907
+
5908
+ ![glimmer-dsl-libui-windows-custom-draw-text.png](images/glimmer-dsl-libui-windows-custom-draw-text.png)
5909
+ ![glimmer-dsl-libui-windows-custom-draw-text-changed.png](images/glimmer-dsl-libui-windows-custom-draw-text-changed.png)
5910
+
5699
5911
  Linux
5700
5912
 
5701
5913
  ![glimmer-dsl-libui-linux-custom-draw-text.png](images/glimmer-dsl-libui-linux-custom-draw-text.png)
@@ -5910,6 +6122,10 @@ Mac
5910
6122
 
5911
6123
  ![glimmer-dsl-libui-mac-method-based-custom-keyword.png](images/glimmer-dsl-libui-mac-method-based-custom-keyword.png)
5912
6124
 
6125
+ Windows
6126
+
6127
+ ![glimmer-dsl-libui-windows-method-based-custom-keyword.png](images/glimmer-dsl-libui-windows-method-based-custom-keyword.png)
6128
+
5913
6129
  Linux
5914
6130
 
5915
6131
  ![glimmer-dsl-libui-linux-method-based-custom-keyword.png](images/glimmer-dsl-libui-linux-method-based-custom-keyword.png)
@@ -6016,6 +6232,295 @@ window('Method-Based Custom Keyword') {
6016
6232
  }.show
6017
6233
  ```
6018
6234
 
6235
+ ### Tetris
6236
+
6237
+ [examples/tetris.rb](examples/tetris.rb)
6238
+
6239
+ Run with this command from the root of the project if you cloned the project:
6240
+
6241
+ ```
6242
+ ruby -r './lib/glimmer-dsl-libui' examples/tetris.rb
6243
+ ```
6244
+
6245
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
6246
+
6247
+ ```
6248
+ ruby -r glimmer-dsl-libui -e "require 'examples/tetris'"
6249
+ ```
6250
+
6251
+ Mac
6252
+
6253
+ ![glimmer-dsl-libui-mac-tetris.png](images/glimmer-dsl-libui-mac-tetris.png)
6254
+
6255
+ ![glimmer-dsl-libui-mac-tetris-game-over.png](images/glimmer-dsl-libui-mac-tetris-game-over.png)
6256
+
6257
+ New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
6258
+
6259
+ ```ruby
6260
+ require 'glimmer-dsl-libui'
6261
+
6262
+ require_relative 'tetris/model/game'
6263
+
6264
+ class Tetris
6265
+ include Glimmer
6266
+
6267
+ BLOCK_SIZE = 25
6268
+ BEVEL_CONSTANT = 20
6269
+ COLOR_GRAY = {r: 192, g: 192, b: 192}
6270
+
6271
+ attr_reader :game
6272
+
6273
+ def initialize
6274
+ @game = Model::Game.new
6275
+ end
6276
+
6277
+ def launch
6278
+ create_gui
6279
+ register_observers
6280
+ @game.start!
6281
+ @main_window.show
6282
+ end
6283
+
6284
+ def create_gui
6285
+ @main_window = window('Glimmer Tetris') {
6286
+ content_size Model::Game::PLAYFIELD_WIDTH * BLOCK_SIZE, Model::Game::PLAYFIELD_HEIGHT * BLOCK_SIZE + 98
6287
+
6288
+ vertical_box {
6289
+ label { # filler
6290
+ stretchy false
6291
+ }
6292
+
6293
+ score_board(block_size: BLOCK_SIZE) {
6294
+ stretchy false
6295
+ }
6296
+
6297
+ @playfield_blocks = playfield(playfield_width: Model::Game::PLAYFIELD_WIDTH, playfield_height: Model::Game::PLAYFIELD_HEIGHT, block_size: BLOCK_SIZE)
6298
+ }
6299
+ }
6300
+ end
6301
+
6302
+ def register_observers
6303
+ Glimmer::DataBinding::Observer.proc do |game_over|
6304
+ if game_over
6305
+ show_game_over_dialog
6306
+ else
6307
+ start_moving_tetrominos_down
6308
+ end
6309
+ end.observe(@game, :game_over)
6310
+
6311
+ Model::Game::PLAYFIELD_HEIGHT.times do |row|
6312
+ Model::Game::PLAYFIELD_WIDTH.times do |column|
6313
+ Glimmer::DataBinding::Observer.proc do |new_color|
6314
+ Glimmer::LibUI.queue_main do
6315
+ color = Glimmer::LibUI.interpret_color(new_color)
6316
+ block = @playfield_blocks[row][column]
6317
+ block[:background_square].fill = color
6318
+ block[:top_bevel_edge].fill = {r: color[:r] + 4*BEVEL_CONSTANT, g: color[:g] + 4*BEVEL_CONSTANT, b: color[:b] + 4*BEVEL_CONSTANT}
6319
+ block[:right_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6320
+ block[:bottom_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6321
+ block[:left_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6322
+ block[:border_square].stroke = new_color == Model::Block::COLOR_CLEAR ? COLOR_GRAY : color
6323
+ end
6324
+ end.observe(@game.playfield[row][column], :color)
6325
+ end
6326
+ end
6327
+
6328
+ Model::Game::PREVIEW_PLAYFIELD_HEIGHT.times do |row|
6329
+ Model::Game::PREVIEW_PLAYFIELD_WIDTH.times do |column|
6330
+ Glimmer::DataBinding::Observer.proc do |new_color|
6331
+ Glimmer::LibUI.queue_main do
6332
+ color = Glimmer::LibUI.interpret_color(new_color)
6333
+ block = @preview_playfield_blocks[row][column]
6334
+ block[:background_square].fill = color
6335
+ block[:top_bevel_edge].fill = {r: color[:r] + 4*BEVEL_CONSTANT, g: color[:g] + 4*BEVEL_CONSTANT, b: color[:b] + 4*BEVEL_CONSTANT}
6336
+ block[:right_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6337
+ block[:bottom_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6338
+ block[:left_bevel_edge].fill = {r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT}
6339
+ block[:border_square].stroke = new_color == Model::Block::COLOR_CLEAR ? COLOR_GRAY : color
6340
+ end
6341
+ end.observe(@game.preview_playfield[row][column], :color)
6342
+ end
6343
+ end
6344
+
6345
+ Glimmer::DataBinding::Observer.proc do |new_score|
6346
+ Glimmer::LibUI.queue_main do
6347
+ @score_label.text = new_score.to_s
6348
+ end
6349
+ end.observe(@game, :score)
6350
+
6351
+ Glimmer::DataBinding::Observer.proc do |new_lines|
6352
+ Glimmer::LibUI.queue_main do
6353
+ @lines_label.text = new_lines.to_s
6354
+ end
6355
+ end.observe(@game, :lines)
6356
+
6357
+ Glimmer::DataBinding::Observer.proc do |new_level|
6358
+ Glimmer::LibUI.queue_main do
6359
+ @level_label.text = new_level.to_s
6360
+ end
6361
+ end.observe(@game, :level)
6362
+ end
6363
+
6364
+ def playfield(playfield_width: , playfield_height: , block_size: , &extra_content)
6365
+ blocks = []
6366
+ vertical_box {
6367
+ padded false
6368
+
6369
+ playfield_height.times.map do |row|
6370
+ blocks << []
6371
+ horizontal_box {
6372
+ padded false
6373
+
6374
+ playfield_width.times.map do |column|
6375
+ blocks.last << block(row: row, column: column, block_size: block_size)
6376
+ end
6377
+ }
6378
+ end
6379
+
6380
+ extra_content&.call
6381
+ }
6382
+ blocks
6383
+ end
6384
+
6385
+ def block(row: , column: , block_size: , &extra_content)
6386
+ block = {}
6387
+ bevel_pixel_size = 0.16 * block_size.to_f
6388
+ color = Glimmer::LibUI.interpret_color(Model::Block::COLOR_CLEAR)
6389
+ area {
6390
+ block[:background_square] = path {
6391
+ square(0, 0, block_size)
6392
+
6393
+ fill color
6394
+ }
6395
+ block[:top_bevel_edge] = path {
6396
+ polygon(0, 0, block_size, 0, block_size - bevel_pixel_size, bevel_pixel_size, bevel_pixel_size, bevel_pixel_size)
6397
+
6398
+ fill r: color[:r] + 4*BEVEL_CONSTANT, g: color[:g] + 4*BEVEL_CONSTANT, b: color[:b] + 4*BEVEL_CONSTANT
6399
+ }
6400
+ block[:right_bevel_edge] = path {
6401
+ polygon(block_size, 0, block_size - bevel_pixel_size, bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size, block_size, block_size)
6402
+
6403
+ fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
6404
+ }
6405
+ block[:bottom_bevel_edge] = path {
6406
+ polygon(block_size, block_size, 0, block_size, bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size)
6407
+
6408
+ fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
6409
+ }
6410
+ block[:left_bevel_edge] = path {
6411
+ polygon(0, 0, 0, block_size, bevel_pixel_size, block_size - bevel_pixel_size, bevel_pixel_size, bevel_pixel_size)
6412
+
6413
+ fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
6414
+ }
6415
+ block[:border_square] = path {
6416
+ square(0, 0, block_size)
6417
+
6418
+ stroke COLOR_GRAY
6419
+ }
6420
+
6421
+ on_key_down do |key_event|
6422
+ case key_event
6423
+ in ext_key: :down
6424
+ game.down!
6425
+ in key: ' '
6426
+ game.down!(instant: true)
6427
+ in ext_key: :up
6428
+ case game.up_arrow_action
6429
+ when :instant_down
6430
+ game.down!(instant: true)
6431
+ when :rotate_right
6432
+ game.rotate!(:right)
6433
+ when :rotate_left
6434
+ game.rotate!(:left)
6435
+ end
6436
+ in ext_key: :left
6437
+ game.left!
6438
+ in ext_key: :right
6439
+ game.right!
6440
+ in modifier: :shift
6441
+ game.rotate!(:right)
6442
+ in modifier: :control
6443
+ game.rotate!(:left)
6444
+ else
6445
+ # Do Nothing
6446
+ end
6447
+ end
6448
+
6449
+ extra_content&.call
6450
+ }
6451
+ block
6452
+ end
6453
+
6454
+ def score_board(block_size: , &extra_content)
6455
+ vertical_box {
6456
+ horizontal_box {
6457
+ label # filler
6458
+ @preview_playfield_blocks = playfield(playfield_width: Model::Game::PREVIEW_PLAYFIELD_WIDTH, playfield_height: Model::Game::PREVIEW_PLAYFIELD_HEIGHT, block_size: block_size)
6459
+ label # filler
6460
+ }
6461
+
6462
+ horizontal_box {
6463
+ label # filler
6464
+ grid {
6465
+ stretchy false
6466
+
6467
+ label('Score') {
6468
+ left 0
6469
+ top 0
6470
+ halign :fill
6471
+ }
6472
+ @score_label = label {
6473
+ left 0
6474
+ top 1
6475
+ halign :center
6476
+ }
6477
+
6478
+ label('Lines') {
6479
+ left 1
6480
+ top 0
6481
+ halign :fill
6482
+ }
6483
+ @lines_label = label {
6484
+ left 1
6485
+ top 1
6486
+ halign :center
6487
+ }
6488
+
6489
+ label('Level') {
6490
+ left 2
6491
+ top 0
6492
+ halign :fill
6493
+ }
6494
+ @level_label = label {
6495
+ left 2
6496
+ top 1
6497
+ halign :center
6498
+ }
6499
+ }
6500
+ label # filler
6501
+ }
6502
+
6503
+ extra_content&.call
6504
+ }
6505
+ end
6506
+
6507
+ def start_moving_tetrominos_down
6508
+ Glimmer::LibUI.timer(@game.delay) do
6509
+ @game.down! if !@game.game_over? && !@game.paused?
6510
+ end
6511
+ end
6512
+
6513
+ def show_game_over_dialog
6514
+ Glimmer::LibUI.queue_main do
6515
+ msg_box('Game Over', "Score: #{@game.high_scores.first.score}\nLines: #{@game.high_scores.first.lines}\nLevel: #{@game.high_scores.first.level}")
6516
+ @game.restart!
6517
+ end
6518
+ end
6519
+ end
6520
+
6521
+ Tetris.new.launch
6522
+ ```
6523
+
6019
6524
  ## Applications
6020
6525
 
6021
6526
  Here are some applications built with [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui)