1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
use crate::def_attribute;
def_attribute!(
/// Attach a canvas reference created from the `use_canvas` or
/// `use_canvas_with_deps` hooks to enable drawing to an element.
///
/// This attribute allows you to bind a canvas context to a Freya element,
/// giving you the ability to perform custom rendering operations.
///
/// ### Example
///
/// ```rust, no_run
/// # use freya::prelude::*;
/// fn app() -> Element {
/// let (reference, size) = use_node_signal();
/// let platform = use_platform();
///
/// let canvas = use_canvas(move || {
/// platform.invalidate_drawing_area(size.peek().area);
/// platform.request_animation_frame();
/// move |ctx| {
/// // Custom drawing code here,
/// // you will need to add skia as a dependency and look into how to use a skia canvas
/// }
/// });
///
/// rsx!(
/// rect {
/// background: "white",
/// width: "300",
/// height: "200",
/// canvas_reference: canvas.attribute(),
/// reference,
/// }
/// )
/// }
/// ```
canvas_reference,
/// Attach a reference to an element to track its layout and metadata.
///
/// This attribute is used in conjunction with hooks like `use_node`, `use_node_signal`,
/// or other node reference hooks to observe and respond to changes in an element's layout.
///
/// ### Example
///
/// ```rust, no_run
/// # use freya::prelude::*;
/// fn app() -> Element {
/// // Basic usage with use_node
/// let (reference, layout) = use_node();
///
/// // Alternative usage with use_node_signal for reactive access
/// // let (reference, layout_signal) = use_node_signal();
///
/// rsx!(
/// rect {
/// width: "100%",
/// height: "100%",
/// reference,
/// label {
/// "Width: {layout.area.width()}, Height: {layout.area.height()}"
/// }
/// }
/// )
/// }
/// ```
reference,
/// This attribute is typically used with text components or custom editors that need to
/// control cursor placement and selection programmatically. It's obtained from hooks like
/// `use_editable` that manage text editing functionality.
cursor_reference,
);