glimmer-dsl-libui 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -4
- data/README.md +47 -3
- data/VERSION +1 -1
- data/examples/custom_draw_text.rb +1 -1
- data/examples/custom_draw_text2.rb +1 -1
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/attributed_string.rb +20 -0
- data/lib/glimmer/libui/control_proxy/open_type_features_proxy.rb +53 -0
- data/lib/glimmer/libui/control_proxy/open_type_tag_proxy.rb +59 -0
- data/lib/glimmer/libui/control_proxy/text_proxy.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c673025a7a4676538178064f6fb3db7c98eb35f2c2b8c0bf7eb75627d4810309
|
4
|
+
data.tar.gz: b3c7a7c67edc0566e542cbdad854a5340cba70c61ac36611a5279095b7710248
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49254ae087358b968b0479dd4ccc1909e03e532e8ad3671432dedd96079d7487f9fb7bdfd3f3f20edd53475389e0553b4676f7fceacd04b130444914254afcd9
|
7
|
+
data.tar.gz: f40187fed7f069bf214c16b287b87848e9815a79c72ddb78dd47f9df567d40ceef432dc800ba74ee7247d6f1a0a32e81b65d863e860f2ccec7ea6c20d11a97eb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.2.6
|
4
|
+
|
5
|
+
- Support `string` control property: `open_type_features`
|
6
|
+
- Auto-free attributed string objects from memory
|
7
|
+
|
3
8
|
## 0.2.5
|
4
9
|
|
5
10
|
- Support attributed `string` `underline_color` property (built-in enum symbols and custom color)
|
@@ -8,9 +13,9 @@
|
|
8
13
|
|
9
14
|
- Support examples/custom_draw_text.rb
|
10
15
|
- Support stable `text` control nestable under `area`
|
11
|
-
- Support `string` control property `background`
|
12
|
-
- Support `string` control property `font`
|
13
|
-
- Support `string` control property `underline`
|
16
|
+
- Support `string` control property: `background`
|
17
|
+
- Support `string` control property: `font`
|
18
|
+
- Support `string` control property: `underline`
|
14
19
|
- Enhance `combobox` to accept `String` value for `selected` item instead of just `Integer` index
|
15
20
|
- Add `selected_item` read-only property to `combobox` to return selected item `String` value
|
16
21
|
- Fix `color` property support for `string` to accept 255-based rgb values
|
@@ -23,7 +28,7 @@
|
|
23
28
|
- Support dynamic `text` control to be called in `area` `on_draw` listener
|
24
29
|
- Support `text` control `default_font` property
|
25
30
|
- Support `string` control nestable under `text` to represent an attributed/unattributed string (depending on nestable properties)
|
26
|
-
- Support `string` control property `color`
|
31
|
+
- Support `string` control property: `color`
|
27
32
|
- Support enum symbols for `align` property of `text` control
|
28
33
|
- Support enum symbols for `:italic` font descriptor key (in addition to numbers)
|
29
34
|
- Support enum symbols for `:stretch` font descriptor key (in addition to numbers)
|
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.
|
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.6
|
2
2
|
## Prerequisite-Free Ruby Desktop Development GUI Library
|
3
3
|
[](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
4
|
[](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
|
@@ -197,7 +197,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
197
197
|
|
198
198
|
## Table of Contents
|
199
199
|
|
200
|
-
- [Glimmer DSL for LibUI 0.2.
|
200
|
+
- [Glimmer DSL for LibUI 0.2.6](#-glimmer-dsl-for-libui-026)
|
201
201
|
- [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
|
202
202
|
- [Usage](#usage)
|
203
203
|
- [Girb (Glimmer IRB)](#girb-glimmer-irb)
|
@@ -333,7 +333,7 @@ gem install glimmer-dsl-libui
|
|
333
333
|
Or install via Bundler `Gemfile`:
|
334
334
|
|
335
335
|
```ruby
|
336
|
-
gem 'glimmer-dsl-libui', '~> 0.2.
|
336
|
+
gem 'glimmer-dsl-libui', '~> 0.2.6'
|
337
337
|
```
|
338
338
|
|
339
339
|
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.
|
@@ -790,6 +790,50 @@ Check [Basic Transform](#basic-transform) example for use of [X11](https://en.wi
|
|
790
790
|
|
791
791
|
Check [Histogram](#histogram) example for use of hex colors.
|
792
792
|
|
793
|
+
To draw `text` in an `area`, you simply nest a `text(x, y, width)` control directly under `area` or inside a `on_draw` listener, and then nest attributed `string {string_value}` controls underneath it returning an actual `String` (think of them as the `<span>` element in html, which contains a string of text).
|
794
|
+
|
795
|
+
`text` control can have the following properties:
|
796
|
+
- `default_font`:
|
797
|
+
- `align`: `:left` (default), `:center`, or `:right` (`align` currently seems not to work on the Mac)
|
798
|
+
|
799
|
+
`string` can have the following properties:
|
800
|
+
- `font`: font descriptor hash consisting of `:family`, `:size`, `:weight` (`[:minimum, :thin, :ultra_light, :light, :book, :normal, :medium, :semi_bold, :bold, :ultra_bold, :heavy, :ultra_heavy, :maximum]`), `:italic` (`[:normal, :oblique, :italic]`), and `:stretch` (`[:ultra_condensed, :extra_condensed, :condensed, :semi_condensed, :normal, :semi_expanded, :expanded, :extra_expanded, :ultra_expanded]`) key values
|
801
|
+
- `color`: rgba, hex, or x11 color
|
802
|
+
- `background`: rgba, hex, or x11 color
|
803
|
+
- `underline`: one of `:none`, `:single`, `:double`, `:suggestion`, `:color_custom`, `:color_spelling`, `:color_grammar`, `:color_auxiliary`
|
804
|
+
- `underline_color`: one of `:spelling`, `:grammar`, `:auxiliary`, rgba, hex, or x11 color
|
805
|
+
- `open_type_features`: it must have a block containing `open_type_tag` occurrances, which take the a, b, c, d arguments plus a number at the end.
|
806
|
+
|
807
|
+
Example (you may copy/paste in [`girb`](#girb-glimmer-irb)):
|
808
|
+
|
809
|
+
```ruby
|
810
|
+
window('area text drawing') {
|
811
|
+
area {
|
812
|
+
text {
|
813
|
+
default_font family: 'Helvetica', size: 12, weight: :normal, italic: :normal, stretch: :normal
|
814
|
+
|
815
|
+
string {
|
816
|
+
font family: 'Georgia', size: 13, weight: :medium, italic: :normal, stretch: :normal
|
817
|
+
color r: 230, g: 100, b: 50, a: 0.5
|
818
|
+
background r: 230, g: 200, b: 250, a: 0.8
|
819
|
+
underline :single
|
820
|
+
underline_color :spelling
|
821
|
+
open_type_features {
|
822
|
+
open_type_tag 'l', 'i', 'g', 'a', 0
|
823
|
+
open_type_tag 'l', 'i', 'g', 'a', 1
|
824
|
+
}
|
825
|
+
|
826
|
+
"This is a test\n\n"
|
827
|
+
}
|
828
|
+
|
829
|
+
string {
|
830
|
+
'This is another test'
|
831
|
+
}
|
832
|
+
}
|
833
|
+
}
|
834
|
+
}.show
|
835
|
+
```
|
836
|
+
|
793
837
|
### Smart Defaults and Conventions
|
794
838
|
|
795
839
|
- `horizontal_box`, `vertical_box`, `grid`, and `form` controls have `padded` as `true` upon instantiation to ensure more user-friendly GUI by default
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
@@ -71,7 +71,7 @@ class CustomDrawText
|
|
71
71
|
area {
|
72
72
|
text { # default arguments for x, y, and width are (0, 0, area_draw_params[:area_width])
|
73
73
|
# align :left # default alignment
|
74
|
-
|
74
|
+
|
75
75
|
@string = string {
|
76
76
|
' At last Ygramul sensed that something was coming toward ' \
|
77
77
|
'her. With the speed of lightning, she turned about, confronting ' \
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -94,12 +94,27 @@ module Glimmer
|
|
94
94
|
alias underline_color= underline_color
|
95
95
|
alias set_underline_color underline_color
|
96
96
|
|
97
|
+
def open_type_features(value = nil)
|
98
|
+
if value.nil?
|
99
|
+
@open_type_features
|
100
|
+
else
|
101
|
+
@open_type_features = value
|
102
|
+
redraw
|
103
|
+
end
|
104
|
+
end
|
105
|
+
alias open_type_features= open_type_features
|
106
|
+
alias set_open_type_features open_type_features
|
107
|
+
|
97
108
|
def post_add_content
|
98
109
|
block_result = block&.call
|
99
110
|
@string = block_result if block_result.is_a?(String)
|
100
111
|
@parent_proxy&.post_initialize_child(self)
|
101
112
|
end
|
102
113
|
|
114
|
+
def post_initialize_child(child)
|
115
|
+
self.open_type_features = child if child.is_a?(Glimmer::LibUI::ControlProxy::OpenTypeFeaturesProxy)
|
116
|
+
end
|
117
|
+
|
103
118
|
def draw(area_draw_params)
|
104
119
|
@start = ::LibUI.attributed_string_len(@parent_proxy.attributed_string)
|
105
120
|
::LibUI.attributed_string_append_unattributed(@parent_proxy.attributed_string, @string)
|
@@ -137,10 +152,15 @@ module Glimmer
|
|
137
152
|
stretch_attribute = ::LibUI.new_stretch_attribute(Glimmer::LibUI.enum_symbol_to_value(:text_stretch, font[:stretch]))
|
138
153
|
::LibUI.attributed_string_set_attribute(@parent_proxy.attributed_string, stretch_attribute, @start, @start + @string.size)
|
139
154
|
end
|
155
|
+
unless open_type_features.nil?
|
156
|
+
open_type_features_attribute = ::LibUI.new_features_attribute(open_type_features.libui)
|
157
|
+
::LibUI.attributed_string_set_attribute(@parent_proxy.attributed_string, open_type_features_attribute, @start, @start + @string.size)
|
158
|
+
end
|
140
159
|
destroy if area_proxy.nil?
|
141
160
|
end
|
142
161
|
|
143
162
|
def destroy
|
163
|
+
open_type_features.destroy unless open_type_features.nil?
|
144
164
|
@parent_proxy&.children&.delete(self)
|
145
165
|
end
|
146
166
|
|
@@ -0,0 +1,53 @@
|
|
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
|
+
require 'glimmer/libui/control_proxy/area_proxy'
|
24
|
+
require 'glimmer/libui/parent'
|
25
|
+
|
26
|
+
module Glimmer
|
27
|
+
module LibUI
|
28
|
+
class ControlProxy
|
29
|
+
# Proxy for LibUI open type features objects
|
30
|
+
#
|
31
|
+
# Follows the Proxy Design Pattern
|
32
|
+
class OpenTypeFeaturesProxy < ControlProxy
|
33
|
+
include Parent
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
::LibUI.free_open_type_features(@libui)
|
37
|
+
@parent_proxy&.children&.delete(self)
|
38
|
+
ControlProxy.control_proxies.delete(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def redraw
|
42
|
+
@parent_proxy.redraw
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def build_control
|
48
|
+
@libui = ::LibUI.new_open_type_features
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,59 @@
|
|
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
|
+
require 'glimmer/libui/control_proxy/area_proxy'
|
24
|
+
require 'glimmer/libui/parent'
|
25
|
+
|
26
|
+
module Glimmer
|
27
|
+
module LibUI
|
28
|
+
class ControlProxy
|
29
|
+
# Proxy for LibUI open type tag objects
|
30
|
+
#
|
31
|
+
# Follows the Proxy Design Pattern
|
32
|
+
class OpenTypeTagProxy < ControlProxy
|
33
|
+
def destroy
|
34
|
+
@parent_proxy&.children&.delete(self)
|
35
|
+
ControlProxy.control_proxies.delete(self)
|
36
|
+
end
|
37
|
+
|
38
|
+
def redraw
|
39
|
+
@parent_proxy.redraw
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def build_control
|
45
|
+
tag_args = @args.dup
|
46
|
+
tag_args[0] = ordinalize(tag_args[0])
|
47
|
+
tag_args[1] = ordinalize(tag_args[1])
|
48
|
+
tag_args[2] = ordinalize(tag_args[2])
|
49
|
+
tag_args[3] = ordinalize(tag_args[3])
|
50
|
+
::LibUI.open_type_features_add(@parent_proxy.libui, *tag_args)
|
51
|
+
end
|
52
|
+
|
53
|
+
def ordinalize(arg)
|
54
|
+
arg.is_a?(String) ? arg.ord : arg
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
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.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -312,6 +312,8 @@ files:
|
|
312
312
|
- lib/glimmer/libui/control_proxy/message_box/msg_box_proxy.rb
|
313
313
|
- lib/glimmer/libui/control_proxy/multiline_entry_proxy.rb
|
314
314
|
- lib/glimmer/libui/control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb
|
315
|
+
- lib/glimmer/libui/control_proxy/open_type_features_proxy.rb
|
316
|
+
- lib/glimmer/libui/control_proxy/open_type_tag_proxy.rb
|
315
317
|
- lib/glimmer/libui/control_proxy/path_proxy.rb
|
316
318
|
- lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb
|
317
319
|
- lib/glimmer/libui/control_proxy/tab_item_proxy.rb
|