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 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