pub struct SourceID { /* private fields */ }
Implementations§
Source§impl SourceID
impl SourceID
pub const fn new(id: DataID) -> Self
Sourcepub fn child(self: &Arc<Self>, id: DataID) -> Arc<Self>
pub fn child(self: &Arc<Self>, id: DataID) -> Arc<Self>
Creates a new SourceID out of the given DataID, with ourselves as its parent
Examples found in repository?
examples/graph-rs.rs (line 121)
66 fn call(
67 &mut self,
68 mut store: Self::Store,
69 args: &GraphState,
70 ) -> (Self::Store, im::HashMap<Arc<SourceID>, Option<Window>>) {
71 if store.0 != *args {
72 let mut children: im::Vector<Option<Box<ChildOf<dyn fixed::Prop>>>> = im::Vector::new();
73 let domain: Arc<CrossReferenceDomain> = Default::default();
74
75 let mut node_ids: Vec<Arc<SourceID>> = Vec::new();
76
77 for i in 0..args.nodes.len() {
78 let node = args.nodes[i];
79 const BASE: sRGB = sRGB::new(0.2, 0.7, 0.4, 1.0);
80
81 let point = DomainPoint::new(gen_id!(), domain.clone());
82 node_ids.push(point.id.clone());
83
84 let circle = Shape::<DRect, { ShapeKind::Circle as u8 }>::new(
85 gen_id!(),
86 FILL_DRECT.into(),
87 0.0,
88 0.0,
89 Vec2::new(0.0, 20.0),
90 if args.selected == Some(i) {
91 sRGB::new(0.7, 1.0, 0.8, 1.0)
92 } else {
93 BASE
94 },
95 BASE,
96 );
97
98 let bag = Region::<MinimalArea>::new(
99 gen_id!(gen_id!(), i),
100 MinimalArea {
101 area: AbsRect::new(
102 node.x - NODE_RADIUS,
103 node.y - NODE_RADIUS,
104 node.x + NODE_RADIUS,
105 node.y + NODE_RADIUS,
106 )
107 .into(),
108 }
109 .into(),
110 feather_ui::children![fixed::Prop, point, circle],
111 );
112
113 children.push_back(Some(Box::new(bag)));
114 }
115
116 let edge_id = gen_id!();
117
118 for (a, b) in &args.edges {
119 let line = DomainLine::<()> {
120 id: edge_id
121 .child(DataID::Int(*a as i64))
122 .child(DataID::Int(*b as i64)),
123 fill: sRGB::white(),
124 domain: domain.clone(),
125 start: node_ids[*a].clone(),
126 end: node_ids[*b].clone(),
127 props: ().into(),
128 };
129
130 children.push_back(Some(Box::new(line)));
131 }
132
133 let subregion = Region::new(
134 gen_id!(),
135 MinimalArea {
136 area: AbsRect::new(
137 args.offset.x,
138 args.offset.y,
139 args.offset.x + 10000.0,
140 args.offset.y + 10000.0,
141 )
142 .into(),
143 }
144 .into(),
145 children,
146 );
147
148 let mousearea: MouseArea<MinimalArea> = MouseArea::new(
149 gen_id!(),
150 MinimalArea { area: FILL_DRECT },
151 Some(4.0),
152 [
153 Some(Slot(feather_ui::APP_SOURCE_ID.into(), 0)),
154 Some(Slot(feather_ui::APP_SOURCE_ID.into(), 0)),
155 Some(Slot(feather_ui::APP_SOURCE_ID.into(), 0)),
156 None,
157 None,
158 None,
159 ],
160 );
161
162 let region = Region::new(
163 gen_id!(),
164 MinimalArea { area: FILL_DRECT }.into(),
165 feather_ui::children![fixed::Prop, subregion, mousearea],
166 );
167
168 let window = Window::new(
169 gen_id!(),
170 feather_ui::winit::window::Window::default_attributes()
171 .with_title(env!("CARGO_CRATE_NAME"))
172 .with_resizable(true),
173 Box::new(region),
174 );
175
176 store.1 = im::HashMap::new();
177 store.1.insert(window.id.clone(), Some(window));
178 store.0 = args.clone();
179 }
180 let windows = store.1.clone();
181 (store, windows)
182 }
More examples
examples/grid-rs.rs (line 171)
110 fn call(
111 &mut self,
112 mut store: Self::Store,
113 args: &CounterState,
114 ) -> (Self::Store, im::HashMap<Arc<SourceID>, Option<Window>>) {
115 if store.0 != *args {
116 let button = {
117 let text = Text::<FixedData> {
118 id: gen_id!(),
119 props: FixedData {
120 area: feather_ui::URect {
121 abs: AbsRect::new(10.0, 15.0, 10.0, 15.0),
122 rel: RelRect::new(0.0, 0.0, UNSIZED_AXIS, UNSIZED_AXIS),
123 }
124 .into(),
125 anchor: feather_ui::RelPoint(Vec2 { x: 0.0, y: 0.0 }).into(),
126 ..Default::default()
127 }
128 .into(),
129 text: format!("Boxes: {}", args.count),
130 font_size: 40.0,
131 line_height: 56.0,
132 ..Default::default()
133 };
134
135 let rect = Shape::<DRect, { ShapeKind::RoundRect as u8 }>::new(
136 gen_id!(),
137 feather_ui::FILL_DRECT.into(),
138 0.0,
139 0.0,
140 Vec4::broadcast(10.0),
141 sRGB::new(0.2, 0.7, 0.4, 1.0),
142 sRGB::transparent(),
143 );
144
145 Button::<FixedData>::new(
146 gen_id!(),
147 FixedData {
148 area: feather_ui::URect {
149 abs: AbsRect::new(0.0, 20.0, 0.0, 0.0),
150 rel: RelRect::new(0.5, 0.0, UNSIZED_AXIS, UNSIZED_AXIS),
151 }
152 .into(),
153 anchor: feather_ui::RelPoint(Vec2 { x: 0.5, y: 0.0 }).into(),
154 zindex: 0,
155 },
156 Slot(feather_ui::APP_SOURCE_ID.into(), 0),
157 feather_ui::children![fixed::Prop, rect, text],
158 )
159 };
160
161 const NUM_COLUMNS: usize = 5;
162 let rectgrid = {
163 let mut children: im::Vector<Option<Box<ChildOf<dyn grid::Prop>>>> =
164 im::Vector::new();
165 let grid_id = gen_id!();
166 for i in 0..args.count {
167 children.push_back(Some(Box::new(Shape::<
168 GridChild,
169 { ShapeKind::RoundRect as u8 },
170 >::new(
171 grid_id.child(DataID::Int(i as i64)),
172 GridChild {
173 area: FILL_DRECT,
174 x: i % NUM_COLUMNS,
175 y: i / NUM_COLUMNS,
176 }
177 .into(),
178 0.0,
179 0.0,
180 Vec4::broadcast(4.0),
181 sRGB::new(
182 (0.1 * i as f32) % 1.0,
183 (0.65 * i as f32) % 1.0,
184 (0.2 * i as f32) % 1.0,
185 1.0,
186 ),
187 sRGB::transparent(),
188 ))));
189
190 /*children.push_back(Some(Box::new(Text::<GridChild> {
191 id: gen_id!(),
192 props: GridChild {
193 area: FILL_DRECT,
194 x: i % NUM_COLUMNS,
195 y: i / NUM_COLUMNS,
196 }
197 .into(),
198 text: format!("Cell: {}", i),
199 font_size: 20.0,
200 line_height: 22.0,
201 ..Default::default()
202 })));*/
203 }
204
205 GridBox::<GridData>::new(
206 gen_id!(),
207 GridData {
208 area: feather_ui::URect {
209 abs: AbsRect::new(0.0, 200.0, 0.0, 0.0),
210 rel: RelRect::new(0.0, 0.0, UNSIZED_AXIS, 1.0),
211 }
212 .into(),
213 rlimits: feather_ui::RelLimits::new(
214 ZERO_POINT,
215 Vec2::new(1.0, f32::INFINITY),
216 ),
217 direction: feather_ui::RowDirection::BottomToTop,
218 rows: [40.0, 20.0, 40.0, 20.0, 40.0, 20.0, 10.0]
219 .map(DValue::from)
220 .to_vec(),
221 columns: [80.0, 40.0, 80.0, 40.0, 80.0].map(DValue::from).to_vec(),
222 spacing: DPoint::from(Vec2::new(4.0, 4.0)),
223 padding: AbsRect::new(8.0, 8.0, 8.0, 8.0).into(),
224 }
225 .into(),
226 children,
227 )
228 };
229
230 let region = Region::new(
231 gen_id!(),
232 FixedData {
233 area: FILL_DRECT,
234 zindex: 0,
235 ..Default::default()
236 }
237 .into(),
238 feather_ui::children![fixed::Prop, button, rectgrid],
239 );
240 let window = Window::new(
241 gen_id!(),
242 winit::window::Window::default_attributes()
243 .with_title(env!("CARGO_CRATE_NAME"))
244 .with_resizable(true),
245 Box::new(region),
246 );
247
248 store.1 = im::HashMap::new();
249 store.1.insert(window.id.clone(), Some(window));
250 store.0 = args.clone();
251 }
252 let windows = store.1.clone();
253 (store, windows)
254 }
examples/list-rs.rs (line 187)
125 fn call(
126 &mut self,
127 mut store: Self::Store,
128 args: &CounterState,
129 ) -> (Self::Store, im::HashMap<Arc<SourceID>, Option<Window>>) {
130 if store.0 != *args {
131 let button = {
132 let text = Text::<FixedData> {
133 id: gen_id!(),
134 props: FixedData {
135 area: feather_ui::URect {
136 abs: AbsRect::new(10.0, 15.0, 10.0, 15.0),
137 rel: RelRect::new(0.0, 0.0, UNSIZED_AXIS, UNSIZED_AXIS),
138 }
139 .into(),
140 anchor: feather_ui::RelPoint(Vec2 { x: 0.0, y: 0.0 }).into(),
141 ..Default::default()
142 }
143 .into(),
144 text: format!("Boxes: {}", args.count),
145 font_size: 40.0,
146 line_height: 56.0,
147 ..Default::default()
148 };
149
150 let rect = Shape::<DRect, { ShapeKind::RoundRect as u8 }>::new(
151 gen_id!(),
152 feather_ui::FILL_DRECT.into(),
153 0.0,
154 0.0,
155 Vec4::broadcast(10.0),
156 sRGB::new(0.2, 0.7, 0.4, 1.0),
157 sRGB::transparent(),
158 );
159
160 Button::<FixedData>::new(
161 gen_id!(),
162 FixedData {
163 area: feather_ui::URect {
164 abs: AbsRect::new(0.0, 20.0, 0.0, 0.0),
165 rel: RelRect::new(0.5, 0.0, UNSIZED_AXIS, UNSIZED_AXIS),
166 }
167 .into(),
168 anchor: feather_ui::RelPoint(Vec2 { x: 0.5, y: 0.0 }).into(),
169 zindex: 0,
170 },
171 Slot(feather_ui::APP_SOURCE_ID.into(), 0),
172 feather_ui::children![fixed::Prop, rect, text],
173 )
174 };
175
176 let rectlist = {
177 let mut children: im::Vector<Option<Box<ChildOf<dyn list::Prop>>>> =
178 im::Vector::new();
179
180 let rect_id = gen_id!();
181
182 for i in 0..args.count {
183 children.push_back(Some(Box::new(Shape::<
184 ListChild,
185 { ShapeKind::RoundRect as u8 },
186 >::new(
187 rect_id.child(DataID::Int(i as i64)),
188 ListChild {
189 area: AbsRect::new(0.0, 0.0, 40.0, 40.0).into(),
190 margin: AbsRect::new(8.0, 8.0, 4.0, 4.0).into(),
191 }
192 .into(),
193 0.0,
194 0.0,
195 Vec4::broadcast(8.0),
196 sRGB::new(
197 (0.1 * i as f32) % 1.0,
198 (0.65 * i as f32) % 1.0,
199 (0.2 * i as f32) % 1.0,
200 1.0,
201 ),
202 sRGB::transparent(),
203 ))));
204 }
205
206 ListBox::<ListData>::new(
207 gen_id!(),
208 ListData {
209 area: feather_ui::URect {
210 abs: AbsRect::new(0.0, 200.0, 0.0, 0.0),
211 rel: RelRect::new(0.0, 0.0, UNSIZED_AXIS, 1.0),
212 }
213 .into(),
214 rlimits: feather_ui::RelLimits::new(
215 ZERO_POINT,
216 Vec2::new(1.0, f32::INFINITY),
217 ),
218 direction: feather_ui::RowDirection::BottomToTop,
219 }
220 .into(),
221 children,
222 )
223 };
224
225 let flexlist = {
226 let mut children: im::Vector<Option<Box<ChildOf<dyn flex::Prop>>>> =
227 im::Vector::new();
228
229 let box_id = gen_id!();
230 for i in 0..args.count {
231 children.push_back(Some(Box::new(Shape::<
232 FlexChild,
233 { ShapeKind::RoundRect as u8 },
234 >::new(
235 box_id.child(DataID::Int(i as i64)),
236 FlexChild {
237 area: feather_ui::URect {
238 abs: AbsRect::new(0.0, 0.0, 0.0, 40.0),
239 rel: RelRect::new(0.0, 0.0, 1.0, 0.0),
240 }
241 .into(),
242 margin: AbsRect::new(8.0, 8.0, 4.0, 4.0).into(),
243 basis: 40.0.into(),
244 grow: 0.0,
245 shrink: 0.0,
246 }
247 .into(),
248 0.0,
249 0.0,
250 Vec4::broadcast(8.0),
251 sRGB::new(
252 (0.1 * i as f32) % 1.0,
253 (0.65 * i as f32) % 1.0,
254 (0.2 * i as f32) % 1.0,
255 1.0,
256 ),
257 sRGB::transparent(),
258 ))));
259 }
260
261 FlexBox::<MinimalFlex>::new(
262 gen_id!(),
263 MinimalFlex {
264 area: (AbsRect::new(40.0, 40.0, 0.0, 200.0)
265 + RelRect::new(0.0, 0.0, 1.0, 0.0))
266 .into(),
267 }
268 .into(),
269 children,
270 )
271 };
272
273 let region = Region::new(
274 gen_id!(),
275 FixedData {
276 area: FILL_DRECT,
277 zindex: 0,
278 ..Default::default()
279 }
280 .into(),
281 feather_ui::children![fixed::Prop, button, flexlist, rectlist],
282 );
283 let window = Window::new(
284 gen_id!(),
285 feather_ui::winit::window::Window::default_attributes()
286 .with_title(env!("CARGO_CRATE_NAME"))
287 .with_resizable(true),
288 Box::new(region),
289 );
290
291 store.1 = im::HashMap::new();
292 store.1.insert(window.id.clone(), Some(window));
293 store.0 = args.clone();
294 }
295 let windows = store.1.clone();
296 (store, windows)
297 }
Trait Implementations§
Source§impl UserData for SourceID
impl UserData for SourceID
Source§fn add_fields<F>(fields: &mut F)where
F: UserDataFields<Self>,
fn add_fields<F>(fields: &mut F)where
F: UserDataFields<Self>,
Adds custom fields specific to this userdata.
Source§fn add_methods<M>(methods: &mut M)where
M: UserDataMethods<Self>,
fn add_methods<M>(methods: &mut M)where
M: UserDataMethods<Self>,
Adds custom methods and operators specific to this userdata.
Source§fn register(registry: &mut UserDataRegistry<Self>)
fn register(registry: &mut UserDataRegistry<Self>)
Registers this type for use in Lua. Read more
impl Eq for SourceID
impl Send for SourceID
impl Sync for SourceID
Auto Trait Implementations§
impl !Freeze for SourceID
impl !RefUnwindSafe for SourceID
impl Unpin for SourceID
impl !UnwindSafe for SourceID
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.Source§impl<T> FromLuaMulti for Twhere
T: FromLua,
impl<T> FromLuaMulti for Twhere
T: FromLua,
Source§fn from_lua_multi(values: MultiValue, lua: &Lua) -> Result<T, Error>
fn from_lua_multi(values: MultiValue, lua: &Lua) -> Result<T, Error>
Performs the conversion. Read more
fn from_lua_args( args: MultiValue, i: usize, to: Option<&str>, lua: &Lua, ) -> Result<T, Error>
unsafe fn from_stack_multi(nvals: i32, lua: &RawLua) -> Result<T, Error>
unsafe fn from_stack_args( nargs: i32, i: usize, to: Option<&str>, lua: &RawLua, ) -> Result<T, Error>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoLuaMulti for Twhere
T: IntoLua,
impl<T> IntoLuaMulti for Twhere
T: IntoLua,
Source§fn into_lua_multi(self, lua: &Lua) -> Result<MultiValue, Error>
fn into_lua_multi(self, lua: &Lua) -> Result<MultiValue, Error>
Performs the conversion.