mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-07-08 00:05:00 +00:00
New node: 'Index'
This commit is contained in:
parent
83773baa00
commit
c671705945
1 changed files with 50 additions and 0 deletions
|
@ -551,3 +551,53 @@ impl From<GraphicGroupTable> for GraphicElement {
|
||||||
pub trait ToGraphicElement {
|
pub trait ToGraphicElement {
|
||||||
fn to_graphic_element(&self) -> GraphicElement;
|
fn to_graphic_element(&self) -> GraphicElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the value at the specified index in the collection.
|
||||||
|
/// If that index has no value, the type's default value is returned.
|
||||||
|
#[node_macro::node(category("General"))]
|
||||||
|
fn index<T: AtIndex + Clone + Default>(
|
||||||
|
_: impl Ctx,
|
||||||
|
/// The collection of data, such as a list or table.
|
||||||
|
#[implementations(
|
||||||
|
Vec<Color>,
|
||||||
|
Vec<Option<Color>>,
|
||||||
|
Vec<f64>, Vec<u64>,
|
||||||
|
Vec<DVec2>,
|
||||||
|
VectorDataTable,
|
||||||
|
RasterDataTable<CPU>,
|
||||||
|
GraphicGroupTable,
|
||||||
|
)]
|
||||||
|
collection: T,
|
||||||
|
/// The index of the item to retrieve, starting from 0 for the first item.
|
||||||
|
index: u32,
|
||||||
|
) -> T::Output
|
||||||
|
where
|
||||||
|
T::Output: Clone + Default,
|
||||||
|
{
|
||||||
|
collection.at_index(index as usize).unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait AtIndex {
|
||||||
|
type Output;
|
||||||
|
fn at_index(&self, index: usize) -> Option<Self::Output>;
|
||||||
|
}
|
||||||
|
impl<T: Clone> AtIndex for Vec<T> {
|
||||||
|
type Output = T;
|
||||||
|
|
||||||
|
fn at_index(&self, index: usize) -> Option<Self::Output> {
|
||||||
|
self.get(index).cloned()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl<T: Clone> AtIndex for Instances<T> {
|
||||||
|
type Output = Instances<T>;
|
||||||
|
|
||||||
|
fn at_index(&self, index: usize) -> Option<Self::Output> {
|
||||||
|
let mut result_table = Self::default();
|
||||||
|
if let Some(row) = self.instance_ref_iter().nth(index) {
|
||||||
|
result_table.push(row.to_instance_cloned());
|
||||||
|
Some(result_table)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue