glimmer-dsl-libui 0.11.2 → 0.11.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/VERSION +1 -1
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/control_proxy/text_proxy.rb +75 -1
- data/lib/glimmer/libui/control_proxy/window_proxy.rb +4 -4
- data/lib/glimmer/libui/perfect_shaped.rb +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9be2fa52f18acfaf245110441ec7c6d728cffd361f995b71f58a8e9e235c0846
|
4
|
+
data.tar.gz: b6f3cd15b385edc1839ff0da45cd22677723f1b8a91d947ad773a23a317f88bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f6ad39350772e169b0500fcb727567d884c5fab0f06945eb7e25a20c45322083d70f7b9ad8b636b7dfef12ede12afce87dce480e819567a414ad20dbf77904c
|
7
|
+
data.tar.gz: 25eabc97ed6588b7ba74d97bd352bb80a41afbcecb2e4f8d7f26f101753b81062fcfc2503d61292997ee82f856d8a5bc0b3786fd227b8a6f248da36d40a82aac
|
data/CHANGELOG.md
CHANGED
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.11.
|
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.11.3
|
2
2
|
## Prerequisite-Free Ruby Desktop Development Cross-Platform Native GUI Library ([Fukuoka Award Winning](http://www.digitalfukuoka.jp/topics/187?locale=ja))
|
3
3
|
### The Quickest Way From Zero To GUI
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
|
@@ -431,7 +431,7 @@ gem install glimmer-dsl-libui
|
|
431
431
|
Or install via Bundler `Gemfile`:
|
432
432
|
|
433
433
|
```ruby
|
434
|
-
gem 'glimmer-dsl-libui', '~> 0.11.
|
434
|
+
gem 'glimmer-dsl-libui', '~> 0.11.3'
|
435
435
|
```
|
436
436
|
|
437
437
|
Test that installation worked by running the [Glimmer Meta-Example](#examples):
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.11.
|
1
|
+
0.11.3
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -32,8 +32,9 @@ module Glimmer
|
|
32
32
|
# Follows the Proxy Design Pattern
|
33
33
|
class TextProxy < ControlProxy
|
34
34
|
include Parent
|
35
|
+
include PerfectShaped
|
35
36
|
prepend Transformable
|
36
|
-
|
37
|
+
|
37
38
|
def initialize(keyword, parent, args, &block)
|
38
39
|
@keyword = keyword
|
39
40
|
@parent_proxy = parent
|
@@ -156,6 +157,69 @@ module Glimmer
|
|
156
157
|
@draw_text_layout_params
|
157
158
|
end
|
158
159
|
|
160
|
+
def area_proxy
|
161
|
+
# TODO eventually reuse this method from Shape
|
162
|
+
find_parent_in_ancestors { |parent| parent.nil? || parent.is_a?(ControlProxy::AreaProxy) }
|
163
|
+
end
|
164
|
+
|
165
|
+
def find_parent_in_ancestors(&condition)
|
166
|
+
# TODO eventually reuse this method from Shape
|
167
|
+
found = self
|
168
|
+
until condition.call(found)
|
169
|
+
# TODO in the future, support nesting under composite shape where there is parent instead of parent_proxy
|
170
|
+
# found = found.respond_to?(:parent_proxy) ? found.parent_proxy : found.parent
|
171
|
+
found = found.parent_proxy
|
172
|
+
end
|
173
|
+
found
|
174
|
+
end
|
175
|
+
|
176
|
+
def can_handle_listener?(listener_name)
|
177
|
+
area_proxy.can_handle_listener?(listener_name)
|
178
|
+
end
|
179
|
+
|
180
|
+
def handle_listener(listener_name, &listener)
|
181
|
+
area_proxy.handle_listener(listener_name) do |event|
|
182
|
+
listener.call(event) if include?(event[:x], event[:y])
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def perfect_shape
|
187
|
+
the_perfect_shape_dependencies = perfect_shape_dependencies
|
188
|
+
if the_perfect_shape_dependencies != @perfect_shape_dependencies
|
189
|
+
absolute_x, absolute_y, width, height = @perfect_shape_dependencies = the_perfect_shape_dependencies
|
190
|
+
@perfect_shape = PerfectShape::Rectangle.new(x: absolute_x, y: absolute_y, width: width, height: height)
|
191
|
+
end
|
192
|
+
@perfect_shape
|
193
|
+
end
|
194
|
+
|
195
|
+
def perfect_shape_dependencies
|
196
|
+
# TODO support absolute_x and absolute_y with relative positioning in the future
|
197
|
+
absolute_x = x
|
198
|
+
absolute_y = y
|
199
|
+
[absolute_x, absolute_y, extent_width, extent_height]
|
200
|
+
end
|
201
|
+
|
202
|
+
def extent_width
|
203
|
+
if @extent_width.to_f > 0
|
204
|
+
@extent_width
|
205
|
+
else
|
206
|
+
width
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def extent_height
|
211
|
+
if @extent_height.to_f > 0
|
212
|
+
@extent_height
|
213
|
+
else
|
214
|
+
children_max_size = children.map(&:font).map {|font| font[:size] if font.respond_to?(:[]) }.compact.max
|
215
|
+
if children_max_size.to_f > 0
|
216
|
+
children_max_size
|
217
|
+
else
|
218
|
+
@default_font[:size]
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
159
223
|
private
|
160
224
|
|
161
225
|
def build_control
|
@@ -169,6 +233,16 @@ module Glimmer
|
|
169
233
|
draw_brush.B = (draw_brush_args[:b] || draw_brush_args[:blue]).to_f / 255.0
|
170
234
|
draw_brush.A = (draw_brush_args[:a] || draw_brush_args[:alpha])
|
171
235
|
end
|
236
|
+
|
237
|
+
def calculate_extents
|
238
|
+
# TODO fix implementation once libui binding project responds about this
|
239
|
+
# as it always returns 0,0 right now
|
240
|
+
extent_width = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE*8)
|
241
|
+
extent_height = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE*8)
|
242
|
+
::LibUI.draw_text_layout_extents(@libui, extent_width, extent_height)
|
243
|
+
@extent_width = extent_width[0, Fiddle::SIZEOF_DOUBLE*8].unpack1('i')
|
244
|
+
@extent_height = extent_height[0, Fiddle::SIZEOF_DOUBLE*8].unpack1('i')
|
245
|
+
end
|
172
246
|
end
|
173
247
|
end
|
174
248
|
end
|
@@ -104,11 +104,11 @@ module Glimmer
|
|
104
104
|
|
105
105
|
def content_size(*args)
|
106
106
|
if args.empty?
|
107
|
-
width = Fiddle::Pointer.malloc(
|
108
|
-
height = Fiddle::Pointer.malloc(
|
107
|
+
width = Fiddle::Pointer.malloc(64)
|
108
|
+
height = Fiddle::Pointer.malloc(64)
|
109
109
|
::LibUI.window_content_size(@libui, width, height)
|
110
|
-
width = width[0,
|
111
|
-
height = height[0,
|
110
|
+
width = width[0, 64].unpack1('i')
|
111
|
+
height = height[0, 64].unpack1('i')
|
112
112
|
[width, height]
|
113
113
|
else
|
114
114
|
args = args.first if args.size == 1 && args.first.is_a?(Array)
|
@@ -15,13 +15,14 @@ module Glimmer
|
|
15
15
|
# determining if a point lies on the outline (e.g. makes it easier to select
|
16
16
|
# a shape by mouse)
|
17
17
|
def contain?(*point, outline: false, distance_tolerance: 0)
|
18
|
+
# TODO inverse transform point with `uiDrawMatrixTransformPoint` before checking containment
|
18
19
|
perfect_shape&.contain?(*point, outline: outline, distance_tolerance: distance_tolerance)
|
19
20
|
end
|
20
21
|
|
21
22
|
# Returns if shape includes point on the inside when filled
|
22
23
|
# or if shape includes point on the outline when stroked
|
23
24
|
def include?(*point)
|
24
|
-
if fill.empty?
|
25
|
+
if respond_to?(:fill) && fill.empty?
|
25
26
|
# TODO check if distance_tolerance should be half the thickness in case it is checked against both sides of out and in
|
26
27
|
contain?(*point, outline: true, distance_tolerance: ((stroke[:thickness] || 1) - 1))
|
27
28
|
else
|
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.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|