mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-22 02:18:11 +08:00
Old value node migrations
This commit is contained in:
@@ -9,6 +9,7 @@ use graphene_brush::brush_cache::BrushCache;
|
||||
use graphene_brush::brush_stroke::BrushStroke;
|
||||
use graphene_core::raster::Image;
|
||||
use graphene_core::raster_types::CPU;
|
||||
use graphene_core::registry::types::Percentage;
|
||||
use graphene_core::registry::{ChoiceTypeStatic, ChoiceWidgetHint, VariantMetadata};
|
||||
use graphene_core::transform::ReferencePoint;
|
||||
use graphene_core::uuid::NodeId;
|
||||
@@ -21,7 +22,6 @@ use std::hash::Hash;
|
||||
use std::marker::PhantomData;
|
||||
use std::str::FromStr;
|
||||
pub use std::sync::Arc;
|
||||
|
||||
pub struct TaggedValueTypeError;
|
||||
|
||||
/// Macro to generate the tagged value enum.
|
||||
@@ -32,6 +32,7 @@ macro_rules! tagged_value {
|
||||
#[allow(clippy::large_enum_variant)] // TODO(TrueDoctor): Properly solve this disparity between the size of the largest and next largest variants
|
||||
pub enum TaggedValue {
|
||||
None,
|
||||
Percentage(Percentage),
|
||||
$( $(#[$meta] ) *$identifier( $ty ), )*
|
||||
RenderOutput(RenderOutput),
|
||||
SurfaceFrame(SurfaceFrame),
|
||||
@@ -43,6 +44,7 @@ macro_rules! tagged_value {
|
||||
#[repr(u32)]
|
||||
pub enum TaggedValueChoice {
|
||||
None,
|
||||
Percentage,
|
||||
$($identifier,)*
|
||||
}
|
||||
|
||||
@@ -50,12 +52,14 @@ macro_rules! tagged_value {
|
||||
pub fn to_tagged_value(&self) -> TaggedValue {
|
||||
match self {
|
||||
TaggedValueChoice::None => TaggedValue::None,
|
||||
TaggedValueChoice::Percentage => TaggedValue::Percentage(0.),
|
||||
$(TaggedValueChoice::$identifier => TaggedValue::$identifier(Default::default()),)*
|
||||
}
|
||||
}
|
||||
pub fn from_tagged_value(value: &TaggedValue) -> Option<Self> {
|
||||
match value {
|
||||
TaggedValue::None => Some(TaggedValueChoice::None),
|
||||
TaggedValue::Percentage(_) => Some(TaggedValueChoice::Percentage),
|
||||
$( TaggedValue::$identifier(_) => Some(TaggedValueChoice::$identifier), )*
|
||||
_ => None
|
||||
}
|
||||
@@ -71,7 +75,7 @@ macro_rules! tagged_value {
|
||||
|
||||
const COUNT: usize = 0 $( + one!($identifier) )*;
|
||||
// Define static array of (choice, metadata) tuples
|
||||
static VALUES: [(TaggedValueChoice, VariantMetadata); 1 + COUNT] = [
|
||||
static VALUES: [(TaggedValueChoice, VariantMetadata); 2 + COUNT] = [
|
||||
|
||||
(TaggedValueChoice::None, VariantMetadata {
|
||||
name: Cow::Borrowed(stringify!(None)),
|
||||
@@ -79,6 +83,12 @@ macro_rules! tagged_value {
|
||||
docstring: None,
|
||||
icon: None,
|
||||
}),
|
||||
(TaggedValueChoice::Percentage, VariantMetadata {
|
||||
name: Cow::Borrowed(stringify!(Percentage)),
|
||||
label: Cow::Borrowed(stringify!(Percentage)),
|
||||
docstring: None,
|
||||
icon: None,
|
||||
}),
|
||||
$(
|
||||
(TaggedValueChoice::$identifier, VariantMetadata {
|
||||
name: Cow::Borrowed(stringify!($identifier)),
|
||||
@@ -105,6 +115,7 @@ macro_rules! tagged_value {
|
||||
core::mem::discriminant(self).hash(state);
|
||||
match self {
|
||||
Self::None => {}
|
||||
Self::Percentage(x) => {x.hash(state)},
|
||||
$( Self::$identifier(x) => {x.hash(state)}),*
|
||||
Self::RenderOutput(x) => x.hash(state),
|
||||
Self::SurfaceFrame(x) => x.hash(state),
|
||||
@@ -117,6 +128,7 @@ macro_rules! tagged_value {
|
||||
pub fn to_dynany(self) -> DAny<'a> {
|
||||
match self {
|
||||
Self::None => Box::new(()),
|
||||
Self::Percentage(x) => Box::new(x),
|
||||
$( Self::$identifier(x) => Box::new(x), )*
|
||||
Self::RenderOutput(x) => Box::new(x),
|
||||
Self::SurfaceFrame(x) => Box::new(x),
|
||||
@@ -127,6 +139,7 @@ macro_rules! tagged_value {
|
||||
pub fn to_any(self) -> Arc<dyn std::any::Any + Send + Sync + 'static> {
|
||||
match self {
|
||||
Self::None => Arc::new(()),
|
||||
Self::Percentage(x) => Arc::new(x),
|
||||
$( Self::$identifier(x) => Arc::new(x), )*
|
||||
Self::RenderOutput(x) => Arc::new(x),
|
||||
Self::SurfaceFrame(x) => Arc::new(x),
|
||||
@@ -137,6 +150,7 @@ macro_rules! tagged_value {
|
||||
pub fn ty(&self) -> Type {
|
||||
match self {
|
||||
Self::None => concrete!(()),
|
||||
Self::Percentage(_) => concrete!(Percentage),
|
||||
$( Self::$identifier(_) => concrete!($ty), )*
|
||||
Self::RenderOutput(_) => concrete!(RenderOutput),
|
||||
Self::SurfaceFrame(_) => concrete!(SurfaceFrame),
|
||||
@@ -153,8 +167,6 @@ macro_rules! tagged_value {
|
||||
$( x if x == TypeId::of::<$ty>() => Ok(TaggedValue::$identifier(*downcast(input).unwrap())), )*
|
||||
x if x == TypeId::of::<RenderOutput>() => Ok(TaggedValue::RenderOutput(*downcast(input).unwrap())),
|
||||
x if x == TypeId::of::<SurfaceFrame>() => Ok(TaggedValue::SurfaceFrame(*downcast(input).unwrap())),
|
||||
|
||||
|
||||
_ => Err(format!("Cannot convert {:?} to TaggedValue", DynAny::type_name(input.as_ref()))),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user