@effindomv2/fui-rs 0.1.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.
Files changed (115) hide show
  1. package/COMMERCIAL.md +7 -0
  2. package/Cargo.toml +34 -0
  3. package/LICENSE.md +9 -0
  4. package/README.md +88 -0
  5. package/package.json +54 -0
  6. package/scripts/build.sh +227 -0
  7. package/scripts/check-runtime-dependency.sh +41 -0
  8. package/scripts/framework-host-services.ts +40 -0
  9. package/scripts/generate-host-events.ts +17 -0
  10. package/scripts/generate-host-services.ts +28 -0
  11. package/scripts/hostgen/common.ts +73 -0
  12. package/scripts/hostgen/registry.ts +159 -0
  13. package/scripts/hostgen/rust-host-events.ts +171 -0
  14. package/scripts/hostgen/rust-host-services.ts +257 -0
  15. package/src/animation.rs +625 -0
  16. package/src/app.rs +324 -0
  17. package/src/assets.rs +572 -0
  18. package/src/bindings/mod.rs +1 -0
  19. package/src/bindings/ui.rs +705 -0
  20. package/src/bitmap.rs +317 -0
  21. package/src/bridge_callbacks.rs +242 -0
  22. package/src/context_menu_manager.rs +332 -0
  23. package/src/controls/anti_selection_area.rs +54 -0
  24. package/src/controls/button.rs +542 -0
  25. package/src/controls/checkbox.rs +372 -0
  26. package/src/controls/combobox.rs +1574 -0
  27. package/src/controls/context_menu.rs +1367 -0
  28. package/src/controls/control_template_set.rs +46 -0
  29. package/src/controls/control_tokens.rs +596 -0
  30. package/src/controls/dialog.rs +590 -0
  31. package/src/controls/dropdown.rs +1010 -0
  32. package/src/controls/form.rs +229 -0
  33. package/src/controls/internal/button_presenter.rs +142 -0
  34. package/src/controls/internal/checkbox_indicator_presenter.rs +210 -0
  35. package/src/controls/internal/dropdown_chevron_presenter.rs +134 -0
  36. package/src/controls/internal/dropdown_field_presenter.rs +269 -0
  37. package/src/controls/internal/dropdown_option_row_presenter.rs +184 -0
  38. package/src/controls/internal/mod.rs +13 -0
  39. package/src/controls/internal/pressable_indicator_presenter.rs +26 -0
  40. package/src/controls/internal/pressable_labeled_control.rs +492 -0
  41. package/src/controls/internal/radio_indicator_presenter.rs +208 -0
  42. package/src/controls/internal/selectable_popup_list.rs +597 -0
  43. package/src/controls/internal/slider_presenter.rs +282 -0
  44. package/src/controls/internal/switch_indicator_presenter.rs +235 -0
  45. package/src/controls/internal/text_input_core.rs +1074 -0
  46. package/src/controls/internal/text_input_presenter.rs +108 -0
  47. package/src/controls/mod.rs +235 -0
  48. package/src/controls/nav_link.rs +395 -0
  49. package/src/controls/popup.rs +191 -0
  50. package/src/controls/progress_bar.rs +287 -0
  51. package/src/controls/radio_button.rs +348 -0
  52. package/src/controls/radio_group.rs +283 -0
  53. package/src/controls/selection_area.rs +82 -0
  54. package/src/controls/shared.rs +68 -0
  55. package/src/controls/slider.rs +701 -0
  56. package/src/controls/switch.rs +293 -0
  57. package/src/controls/templating.rs +49 -0
  58. package/src/controls/tests.rs +3905 -0
  59. package/src/controls/text_area.rs +207 -0
  60. package/src/controls/text_input.rs +192 -0
  61. package/src/debug.rs +146 -0
  62. package/src/drag_drop.rs +424 -0
  63. package/src/drag_gesture.rs +258 -0
  64. package/src/drawing.rs +385 -0
  65. package/src/event.rs +1603 -0
  66. package/src/external_drop.rs +467 -0
  67. package/src/fetch.rs +500 -0
  68. package/src/ffi.rs +3542 -0
  69. package/src/file.rs +1677 -0
  70. package/src/focus_adorner.rs +307 -0
  71. package/src/focus_visibility.rs +121 -0
  72. package/src/frame_scheduler.rs +159 -0
  73. package/src/frame_signal.rs +64 -0
  74. package/src/generated/ffi.rs +798 -0
  75. package/src/generated/framework_host_services.rs +74 -0
  76. package/src/generated/mod.rs +2 -0
  77. package/src/host_services.rs +162 -0
  78. package/src/image_sampling.rs +78 -0
  79. package/src/keyboard_scroll.rs +137 -0
  80. package/src/keyboard_scroll_tracker.rs +385 -0
  81. package/src/lib.rs +547 -0
  82. package/src/logger.rs +56 -0
  83. package/src/mobile_text_selection_toolbar.rs +1034 -0
  84. package/src/navigation.rs +48 -0
  85. package/src/node/core.rs +2210 -0
  86. package/src/node/custom_drawable.rs +149 -0
  87. package/src/node/flex_box.rs +874 -0
  88. package/src/node/grid.rs +304 -0
  89. package/src/node/helpers.rs +442 -0
  90. package/src/node/image.rs +506 -0
  91. package/src/node/mod.rs +315 -0
  92. package/src/node/scroll_bar.rs +845 -0
  93. package/src/node/scroll_box.rs +514 -0
  94. package/src/node/scroll_state.rs +121 -0
  95. package/src/node/scroll_view.rs +557 -0
  96. package/src/node/svg_node.rs +474 -0
  97. package/src/node/text_node.rs +633 -0
  98. package/src/node/virtual_list.rs +678 -0
  99. package/src/panic_hook.rs +36 -0
  100. package/src/persisted.rs +274 -0
  101. package/src/platform.rs +556 -0
  102. package/src/popup_presenter.rs +344 -0
  103. package/src/selection_handle_adorner.rs +838 -0
  104. package/src/signal.rs +134 -0
  105. package/src/text.rs +1065 -0
  106. package/src/theme.rs +571 -0
  107. package/src/timers.rs +106 -0
  108. package/src/tool_tip.rs +167 -0
  109. package/src/tool_tip_manager.rs +691 -0
  110. package/src/transitions.rs +41 -0
  111. package/src/typography.rs +520 -0
  112. package/src/viewport.rs +108 -0
  113. package/src/worker.rs +308 -0
  114. package/src/worker_job.rs +82 -0
  115. package/src/worker_runtime.rs +172 -0
@@ -0,0 +1,149 @@
1
+ use super::core::*;
2
+ use super::*;
3
+
4
+ #[derive(Clone)]
5
+ pub struct CustomDrawable {
6
+ base: FlexBox,
7
+ draw_callback: DrawCallback,
8
+ }
9
+
10
+ impl CustomDrawable {
11
+ pub fn new(handler: impl Fn(&mut DrawContext) + 'static) -> Self {
12
+ let base = FlexBox::default();
13
+ base.custom_drawable(true);
14
+ Self {
15
+ base,
16
+ draw_callback: Rc::new(handler),
17
+ }
18
+ }
19
+
20
+ pub fn width(&self, width: f32, unit: Unit) -> &Self {
21
+ self.base.width(width, unit);
22
+ self
23
+ }
24
+
25
+ pub fn width_len(&self, length: Length) -> &Self {
26
+ self.base.width_len(length);
27
+ self
28
+ }
29
+
30
+ pub fn height(&self, height: f32, unit: Unit) -> &Self {
31
+ self.base.height(height, unit);
32
+ self
33
+ }
34
+
35
+ pub fn height_len(&self, length: Length) -> &Self {
36
+ self.base.height_len(length);
37
+ self
38
+ }
39
+
40
+ pub fn bg_color(&self, color: u32) -> &Self {
41
+ self.base.bg_color(color);
42
+ self
43
+ }
44
+
45
+ pub fn corner_radius(&self, radius: f32) -> &Self {
46
+ self.base.corner_radius(radius);
47
+ self
48
+ }
49
+
50
+ pub fn border(&self, width: f32, color: u32) -> &Self {
51
+ self.base.border(width, color);
52
+ self
53
+ }
54
+
55
+ pub fn border_config(&self, border: Border) -> &Self {
56
+ self.base.border_config(border);
57
+ self
58
+ }
59
+
60
+ pub fn opacity(&self, value: f32) -> &Self {
61
+ self.base.opacity(value);
62
+ self
63
+ }
64
+
65
+ pub fn drop_shadow(
66
+ &self,
67
+ color: u32,
68
+ offset_x: f32,
69
+ offset_y: f32,
70
+ blur_sigma: f32,
71
+ spread: f32,
72
+ ) -> &Self {
73
+ self.base
74
+ .drop_shadow(color, offset_x, offset_y, blur_sigma, spread);
75
+ self
76
+ }
77
+
78
+ pub fn linear_gradient(
79
+ &self,
80
+ sx: f32,
81
+ sy: f32,
82
+ ex: f32,
83
+ ey: f32,
84
+ offsets: Vec<f32>,
85
+ colors: Vec<u32>,
86
+ ) -> &Self {
87
+ self.base.linear_gradient(sx, sy, ex, ey, offsets, colors);
88
+ self
89
+ }
90
+
91
+ pub fn child<T: Node>(&self, child: &T) -> &Self {
92
+ self.base.child(child);
93
+ self
94
+ }
95
+
96
+ pub fn mark_dirty(&self) {
97
+ let handle = self.handle();
98
+ if handle != NodeHandle::INVALID {
99
+ let Some(bounds) = ui::get_visible_bounds(handle.raw()) else {
100
+ return;
101
+ };
102
+ if bounds[2] <= 0.0 || bounds[3] <= 0.0 {
103
+ return;
104
+ }
105
+ }
106
+ crate::frame_scheduler::mark_needs_commit();
107
+ }
108
+ }
109
+
110
+ impl Node for CustomDrawable {
111
+ fn retained_node_ref(&self) -> NodeRef {
112
+ NodeRef::from_node(self.base.core.clone(), self.clone())
113
+ }
114
+
115
+ fn build_self(&self) {
116
+ self.base.build_self();
117
+ let weak_base = self.base.downgrade();
118
+ let draw_callback = self.draw_callback.clone();
119
+ self.base.core.borrow_mut().draw_callback = Some(Rc::new(move |ctx| {
120
+ let Some(base) = weak_base.upgrade() else {
121
+ return;
122
+ };
123
+ let bounds = base.get_bounds();
124
+ let (tl, tr, br, bl) = base
125
+ .props
126
+ .borrow()
127
+ .box_style
128
+ .map(|style| {
129
+ (
130
+ style.radius_tl,
131
+ style.radius_tr,
132
+ style.radius_br,
133
+ style.radius_bl,
134
+ )
135
+ })
136
+ .unwrap_or((0.0, 0.0, 0.0, 0.0));
137
+
138
+ ctx.save();
139
+ if tl > 0.0 || tr > 0.0 || br > 0.0 || bl > 0.0 {
140
+ ctx.clip_round_rect(0.0, 0.0, bounds[2], bounds[3], tl, tr, br, bl);
141
+ } else {
142
+ ctx.clip_rect(0.0, 0.0, bounds[2], bounds[3]);
143
+ }
144
+ draw_callback(ctx);
145
+ ctx.restore();
146
+ ctx.flush();
147
+ }));
148
+ }
149
+ }