@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.
- package/Cargo.toml +1 -1
- package/README.md +12 -0
- package/package.json +1 -1
- package/src/controls/anti_selection_area.rs +0 -18
- package/src/controls/button.rs +14 -42
- package/src/controls/checkbox.rs +7 -0
- package/src/controls/combobox.rs +7 -6
- package/src/controls/context_menu.rs +38 -5
- package/src/controls/dialog.rs +41 -3
- package/src/controls/dropdown.rs +2 -2
- package/src/controls/form.rs +16 -20
- package/src/controls/internal/button_presenter.rs +5 -5
- package/src/controls/internal/checkbox_indicator_presenter.rs +1 -1
- package/src/controls/internal/pressable_labeled_control.rs +21 -7
- package/src/controls/internal/selectable_popup_list.rs +2 -2
- package/src/controls/internal/text_input_core.rs +38 -68
- package/src/controls/internal/text_input_presenter.rs +4 -4
- package/src/controls/mod.rs +11 -4
- package/src/controls/popup.rs +35 -20
- package/src/controls/radio_button.rs +7 -0
- package/src/controls/radio_group.rs +17 -0
- package/src/controls/selection_area.rs +0 -18
- package/src/controls/shared.rs +2 -17
- package/src/controls/switch.rs +7 -0
- package/src/controls/tests.rs +230 -6
- package/src/controls/text_area.rs +28 -142
- package/src/controls/text_editor_surface.rs +167 -0
- package/src/controls/text_input.rs +30 -144
- package/src/lib.rs +26 -20
- package/src/mobile_text_selection_toolbar.rs +2 -2
- package/src/node/core.rs +451 -60
- package/src/node/custom_drawable.rs +20 -0
- package/src/node/flex_box.rs +39 -47
- package/src/node/grid.rs +43 -128
- package/src/node/helpers.rs +34 -43
- package/src/node/image.rs +47 -56
- package/src/node/mod.rs +398 -73
- package/src/node/scroll_bar.rs +6 -0
- package/src/node/scroll_box.rs +8 -21
- package/src/node/scroll_view.rs +144 -13
- package/src/node/svg_node.rs +47 -66
- package/src/node/text_node.rs +358 -79
- package/src/node/virtual_list.rs +17 -0
- package/src/popup_presenter.rs +31 -0
- package/src/text.rs +59 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
354
|
-
|
|
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
|
|
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(
|
|
388
|
-
|
|
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 {
|
|
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
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
|