glimmer-dsl-libui 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![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)
|
@@ -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
|