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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//! Defines the [`Shape`] enum and its variants, used for describing the geometric form of UI components.
//!
//! This module provides a flexible way to define very basic components' shape, including
//! [`crate::surface::surface`], [`crate::fluid_glass::fluid_glass`].
use Dp;
/// Shape definitions for UI components
///
/// `Shape` is used by multiple components (`surface`, `fluid_glass`, sliders, progress, buttons)
/// to define:
///
/// * Visual outline (fill / border / highlight pipelines)
/// * Interaction & ripple hit-testing region
/// * Automatic corner radius derivation for capsule variants
///
/// # Variants
/// * [`Shape::RoundedRectangle`] – Independent corner radii + `g2_k_value` curvature control
/// * [`Shape::Ellipse`] – Ellipse filling the component bounds
/// * [`Shape::HorizontalCapsule`] – Pill where corner radius = height / 2 (resolved at render)
/// * [`Shape::VerticalCapsule`] – Pill where corner radius = width / 2 (resolved at render)
///
/// Capsule variants are convenience markers; they are internally converted into a rounded rectangle
/// whose four radii equal half of the minor axis (height for horizontal, width for vertical).
///
/// # Example
///
/// ```
/// use tessera_ui::dp::Dp;
/// use tessera_ui_basic_components::shape_def::Shape;
///
/// // Explicit rounded rectangle
/// let rr = Shape::RoundedRectangle {
/// top_left: Dp(8.0),
/// top_right: Dp(8.0),
/// bottom_right: Dp(8.0),
/// bottom_left: Dp(8.0),
/// g2_k_value: 3.0,
/// };
///
/// // Ellipse
/// let ellipse = Shape::Ellipse;
///
/// // Capsules (auto radius from minor axis)
/// let h_capsule = Shape::HorizontalCapsule;
/// let v_capsule = Shape::VerticalCapsule;
/// ```