@effindomv2/fui-rs 0.1.22 → 0.1.24

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.
Files changed (46) hide show
  1. package/Cargo.toml +1 -1
  2. package/README.md +12 -0
  3. package/package.json +1 -1
  4. package/src/controls/anti_selection_area.rs +0 -18
  5. package/src/controls/button.rs +14 -42
  6. package/src/controls/checkbox.rs +7 -0
  7. package/src/controls/combobox.rs +7 -6
  8. package/src/controls/context_menu.rs +38 -5
  9. package/src/controls/dialog.rs +41 -3
  10. package/src/controls/dropdown.rs +2 -2
  11. package/src/controls/form.rs +16 -20
  12. package/src/controls/internal/button_presenter.rs +5 -5
  13. package/src/controls/internal/checkbox_indicator_presenter.rs +1 -1
  14. package/src/controls/internal/pressable_labeled_control.rs +21 -7
  15. package/src/controls/internal/selectable_popup_list.rs +2 -2
  16. package/src/controls/internal/text_input_core.rs +38 -68
  17. package/src/controls/internal/text_input_presenter.rs +4 -4
  18. package/src/controls/mod.rs +11 -4
  19. package/src/controls/popup.rs +35 -20
  20. package/src/controls/radio_button.rs +7 -0
  21. package/src/controls/radio_group.rs +17 -0
  22. package/src/controls/selection_area.rs +0 -18
  23. package/src/controls/shared.rs +2 -17
  24. package/src/controls/switch.rs +7 -0
  25. package/src/controls/tests.rs +230 -6
  26. package/src/controls/text_area.rs +28 -142
  27. package/src/controls/text_editor_surface.rs +167 -0
  28. package/src/controls/text_input.rs +30 -144
  29. package/src/lib.rs +26 -20
  30. package/src/mobile_text_selection_toolbar.rs +2 -2
  31. package/src/node/core.rs +451 -60
  32. package/src/node/custom_drawable.rs +20 -0
  33. package/src/node/flex_box.rs +39 -47
  34. package/src/node/grid.rs +43 -128
  35. package/src/node/helpers.rs +34 -43
  36. package/src/node/image.rs +47 -56
  37. package/src/node/mod.rs +398 -73
  38. package/src/node/scroll_bar.rs +6 -0
  39. package/src/node/scroll_box.rs +8 -21
  40. package/src/node/scroll_view.rs +144 -13
  41. package/src/node/svg_node.rs +47 -66
  42. package/src/node/text_node.rs +358 -79
  43. package/src/node/virtual_list.rs +17 -0
  44. package/src/popup_presenter.rs +31 -0
  45. package/src/text.rs +59 -0
  46. package/src/text_indices.rs +48 -0
package/src/node/image.rs CHANGED
@@ -41,18 +41,18 @@ impl Default for ImageState {
41
41
 
42
42
  #[derive(Clone)]
43
43
  pub struct ImageNode {
44
- core: Rc<RefCell<NodeCore>>,
44
+ base: FlexBox,
45
45
  props: Rc<RefCell<ImageProps>>,
46
46
  state: Rc<RefCell<ImageState>>,
47
47
  }
48
48
 
49
49
  impl ImageNode {
50
50
  pub fn new(texture_id: u32) -> Self {
51
+ let base = FlexBox::default();
52
+ base.core.borrow_mut().kind = NodeKind::Image;
51
53
  let node = Self {
52
- core: Rc::new(RefCell::new(NodeCore::new(NodeKind::Image))),
54
+ base,
53
55
  props: Rc::new(RefCell::new(ImageProps {
54
- width: None,
55
- height: None,
56
56
  texture_id,
57
57
  source_url: None,
58
58
  object_fit: ObjectFit::Fill,
@@ -143,10 +143,6 @@ impl ImageNode {
143
143
  self
144
144
  }
145
145
 
146
- pub fn source_url(&self, url: impl Into<String>) -> &Self {
147
- self.source(url)
148
- }
149
-
150
146
  pub fn clear_source(&self) -> &Self {
151
147
  self.release_owned_source_asset();
152
148
  {
@@ -169,10 +165,6 @@ impl ImageNode {
169
165
  self
170
166
  }
171
167
 
172
- pub fn clear_source_url(&self) -> &Self {
173
- self.clear_source()
174
- }
175
-
176
168
  pub fn alt_text(&self, value: impl Into<String>) -> &Self {
177
169
  let value = value.into();
178
170
  self.semantic_role(SemanticRole::Image);
@@ -226,17 +218,6 @@ impl ImageNode {
226
218
  self
227
219
  }
228
220
 
229
- pub fn interactive(&self, interactive: bool) -> &Self {
230
- self.core.borrow_mut().behavior.interactive = interactive;
231
- self
232
- }
233
-
234
- pub fn on_click(&self, handler: impl Fn(&mut PointerEventArgs) + 'static) -> &Self {
235
- self.core.borrow_mut().handlers.pointer_click = Some(Rc::new(handler));
236
- self.retained_node_ref().require_interactive();
237
- self
238
- }
239
-
240
221
  pub fn asset_state_signal(&self) -> crate::assets::AssetStateSignal {
241
222
  get_texture_asset_state(self.props.borrow().texture_id)
242
223
  }
@@ -316,8 +297,6 @@ impl ImageNode {
316
297
  let asset_width = self.asset_width();
317
298
  let asset_height = self.asset_height();
318
299
  let has_intrinsic_size = asset_width > 0.0 && asset_height > 0.0;
319
- let mut props = self.props.borrow_mut();
320
-
321
300
  if has_requested_width {
322
301
  let mut resolved_width_value = requested_width_value;
323
302
  let mut resolved_width_unit = requested_width_unit;
@@ -329,14 +308,7 @@ impl ImageNode {
329
308
  }
330
309
  resolved_width_unit = Unit::Pixel;
331
310
  }
332
- props.width = Some((resolved_width_value, resolved_width_unit));
333
- if self.has_built_handle() {
334
- ui::set_width(
335
- self.handle().raw(),
336
- resolved_width_value,
337
- resolved_width_unit as u32,
338
- );
339
- }
311
+ self.base.width(resolved_width_value, resolved_width_unit);
340
312
  }
341
313
 
342
314
  if has_requested_height {
@@ -350,19 +322,8 @@ impl ImageNode {
350
322
  }
351
323
  resolved_height_unit = Unit::Pixel;
352
324
  }
353
- props.height = Some((resolved_height_value, resolved_height_unit));
354
- if self.has_built_handle() {
355
- ui::set_height(
356
- self.handle().raw(),
357
- resolved_height_value,
358
- resolved_height_unit as u32,
359
- );
360
- }
361
- }
362
-
363
- drop(props);
364
- if self.has_built_handle() {
365
- self.notify_retained_layout_mutation();
325
+ self.base
326
+ .height(resolved_height_value, resolved_height_unit);
366
327
  }
367
328
  }
368
329
 
@@ -380,16 +341,16 @@ impl ImageNode {
380
341
  }
381
342
  }
382
343
 
383
- let core_weak: Weak<RefCell<NodeCore>> = Rc::downgrade(&self.core);
344
+ let base_weak = self.base.downgrade();
384
345
  let props_weak: Weak<RefCell<ImageProps>> = Rc::downgrade(&self.props);
385
346
  let state_weak: Weak<RefCell<ImageState>> = Rc::downgrade(&self.state);
386
347
  let callback: Callback = Rc::new(move || {
387
- if let (Some(core), Some(props), Some(state)) = (
388
- core_weak.upgrade(),
348
+ if let (Some(base), Some(props), Some(state)) = (
349
+ base_weak.upgrade(),
389
350
  props_weak.upgrade(),
390
351
  state_weak.upgrade(),
391
352
  ) {
392
- let node = ImageNode { core, props, state };
353
+ let node = ImageNode { base, props, state };
393
354
  node.apply_resolved_sizing();
394
355
  }
395
356
  });
@@ -415,16 +376,46 @@ impl ImageNode {
415
376
 
416
377
  impl Node for ImageNode {
417
378
  fn retained_node_ref(&self) -> NodeRef {
418
- NodeRef::from_node(self.core.clone(), self.clone())
379
+ NodeRef::from_node(self.base.core.clone(), self.clone())
419
380
  }
420
381
 
421
382
  fn build_self(&self) {
422
383
  self.apply_resolved_sizing();
423
- apply_image_props(
424
- self.handle(),
425
- &self.props.borrow(),
426
- self.core.borrow().behavior.clone(),
427
- );
384
+ self.base.build_self();
385
+ apply_image_props(self.handle(), &self.props.borrow());
386
+ }
387
+ }
388
+
389
+ impl HasFlexBoxRoot for ImageNode {
390
+ fn flex_box_root(&self) -> &FlexBox {
391
+ &self.base
392
+ }
393
+
394
+ fn set_flex_box_surface_width(&self, value: f32, unit: Unit) {
395
+ self.width(value, unit);
396
+ }
397
+
398
+ fn set_flex_box_surface_height(&self, value: f32, unit: Unit) {
399
+ self.height(value, unit);
400
+ }
401
+ }
402
+
403
+ impl ThemeBindable for ImageNode {
404
+ fn theme_binding_node(&self) -> NodeRef {
405
+ self.retained_node_ref()
406
+ }
407
+
408
+ fn weak_theme_target(&self) -> Box<dyn Fn() -> Option<Self>> {
409
+ let base = self.base.downgrade();
410
+ let props = Rc::downgrade(&self.props);
411
+ let state = Rc::downgrade(&self.state);
412
+ Box::new(move || {
413
+ Some(Self {
414
+ base: base.upgrade()?,
415
+ props: props.upgrade()?,
416
+ state: state.upgrade()?,
417
+ })
418
+ })
428
419
  }
429
420
  }
430
421