glimmer-dsl-libui 0.11.2 → 0.11.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 664a95631db2e2b9bf943f9843c6954df9dc55ba335e51214d721b376969094c
4
- data.tar.gz: 61bc5b8242902e1273296c74dd74b470930a38cf9c34af48e296e14a91dce2e2
3
+ metadata.gz: 9be2fa52f18acfaf245110441ec7c6d728cffd361f995b71f58a8e9e235c0846
4
+ data.tar.gz: b6f3cd15b385edc1839ff0da45cd22677723f1b8a91d947ad773a23a317f88bf
5
5
  SHA512:
6
- metadata.gz: 7045e3c06a6551286523e8f6564b6b57e86477d4c1693ba8b0852c4e259a69151caa0d945d05187cb9b1d0642274323dc6c5d7dcfe02e8481cc01f227a99e993
7
- data.tar.gz: 5927641112ab6807a6f8f941f1e89d1927f85242bdadf79dd1ed9aa8d52f2707cf9607a702ed730a7f76f9594557fadb9f26415b4e87f6ee03b263740f013205
6
+ metadata.gz: 6f6ad39350772e169b0500fcb727567d884c5fab0f06945eb7e25a20c45322083d70f7b9ad8b636b7dfef12ede12afce87dce480e819567a414ad20dbf77904c
7
+ data.tar.gz: 25eabc97ed6588b7ba74d97bd352bb80a41afbcecb2e4f8d7f26f101753b81062fcfc2503d61292997ee82f856d8a5bc0b3786fd227b8a6f248da36d40a82aac
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.11.3
4
+
5
+ - Support nesting `on_mouse_*` listeners under `text`
6
+
3
7
  ## 0.11.2
4
8
 
5
9
  - Fix issue with getting error when nesting property content under custom controls/shapes/windows (fixes `examples/basic_custom_shape.rb`)
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.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.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.2'
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.2
1
+ 0.11.3
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(8)
108
- height = Fiddle::Pointer.malloc(8)
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, 8].unpack1('i')
111
- height = height[0, 8].unpack1('i')
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.2
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-17 00:00:00.000000000 Z
11
+ date: 2023-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer