mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-01 21:18:12 +08:00
Make Imaginate into a node (#878)
* Simplify document node input defenitions * Remove imaginate layer * Imaginate node properties * Fix serde feature gate * Add Proc Macro for Protonode implementation * Fix incorrect type * Add cargo.toml metadata * Send imaginate params to frontend * Fix image_creativity range * Finish imaginate implementation * Fix the imaginate draw tool * Remove node-graph/rpco-macro * Cargo fmt * Fix missing workspace member * Changes to the resolution * Add checkbox for Imaginate auto resolution; improve Properties panel layouts And fix bugs in panel resizing * Implement the Rescale button * Reorder imports * Update Rust deps Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Keavon Chambers
parent
2f2daa25e9
commit
2732492307
@@ -250,6 +250,46 @@ pub enum LayoutGroup {
|
||||
#[serde(rename = "section")]
|
||||
Section { name: String, layout: SubLayout },
|
||||
}
|
||||
impl LayoutGroup {
|
||||
/// Applies a tooltip to all widgets in this row or column without a tooltip.
|
||||
pub fn with_tooltip(self, tooltip: impl Into<String>) -> Self {
|
||||
let (is_col, mut widgets) = match self {
|
||||
LayoutGroup::Column { widgets } => (true, widgets),
|
||||
LayoutGroup::Row { widgets } => (false, widgets),
|
||||
_ => unimplemented!(),
|
||||
};
|
||||
let tooltip = tooltip.into();
|
||||
for widget in &mut widgets {
|
||||
let val = match &mut widget.widget {
|
||||
Widget::CheckboxInput(x) => &mut x.tooltip,
|
||||
Widget::ColorInput(x) => &mut x.tooltip,
|
||||
Widget::DropdownInput(x) => &mut x.tooltip,
|
||||
Widget::FontInput(x) => &mut x.tooltip,
|
||||
Widget::IconButton(x) => &mut x.tooltip,
|
||||
Widget::IconLabel(x) => &mut x.tooltip,
|
||||
Widget::LayerReferenceInput(x) => &mut x.tooltip,
|
||||
Widget::NumberInput(x) => &mut x.tooltip,
|
||||
Widget::OptionalInput(x) => &mut x.tooltip,
|
||||
Widget::ParameterExposeButton(x) => &mut x.tooltip,
|
||||
Widget::PopoverButton(x) => &mut x.tooltip,
|
||||
Widget::TextAreaInput(x) => &mut x.tooltip,
|
||||
Widget::TextButton(x) => &mut x.tooltip,
|
||||
Widget::TextInput(x) => &mut x.tooltip,
|
||||
Widget::TextLabel(x) => &mut x.tooltip,
|
||||
Widget::BreadcrumbTrailButtons(x) => &mut x.tooltip,
|
||||
Widget::InvisibleStandinInput(_) | Widget::PivotAssist(_) | Widget::RadioInput(_) | Widget::Separator(_) | Widget::SwatchPairInput(_) => continue,
|
||||
};
|
||||
if val.is_empty() {
|
||||
*val = tooltip.clone();
|
||||
}
|
||||
}
|
||||
if is_col {
|
||||
Self::Column { widgets }
|
||||
} else {
|
||||
Self::Row { widgets }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct WidgetHolder {
|
||||
@@ -262,18 +302,31 @@ impl WidgetHolder {
|
||||
pub fn new(widget: Widget) -> Self {
|
||||
Self { widget_id: generate_uuid(), widget }
|
||||
}
|
||||
pub fn unrelated_seperator() -> Self {
|
||||
pub fn unrelated_separator() -> Self {
|
||||
WidgetHolder::new(Widget::Separator(Separator {
|
||||
separator_type: SeparatorType::Unrelated,
|
||||
direction: SeparatorDirection::Horizontal,
|
||||
}))
|
||||
}
|
||||
pub fn related_separator() -> Self {
|
||||
WidgetHolder::new(Widget::Separator(Separator {
|
||||
separator_type: SeparatorType::Related,
|
||||
direction: SeparatorDirection::Horizontal,
|
||||
}))
|
||||
}
|
||||
pub fn text_widget(text: impl Into<String>) -> Self {
|
||||
WidgetHolder::new(Widget::TextLabel(TextLabel {
|
||||
value: text.into(),
|
||||
..Default::default()
|
||||
}))
|
||||
}
|
||||
pub fn bold_text(text: impl Into<String>) -> Self {
|
||||
WidgetHolder::new(Widget::TextLabel(TextLabel {
|
||||
value: text.into(),
|
||||
bold: true,
|
||||
..Default::default()
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
||||
@@ -246,6 +246,42 @@ pub struct NumberInput {
|
||||
pub on_update: WidgetCallback<NumberInput>,
|
||||
}
|
||||
|
||||
impl NumberInput {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
pub fn int(mut self) -> Self {
|
||||
self.is_integer = true;
|
||||
self
|
||||
}
|
||||
pub fn min(mut self, val: f64) -> Self {
|
||||
self.min = Some(val);
|
||||
self.range_min = Some(val);
|
||||
self
|
||||
}
|
||||
pub fn max(mut self, val: f64) -> Self {
|
||||
self.max = Some(val);
|
||||
self.range_max = Some(val);
|
||||
self.mode = NumberInputMode::Range;
|
||||
self
|
||||
}
|
||||
pub fn unit(mut self, val: impl Into<String>) -> Self {
|
||||
self.unit = val.into();
|
||||
self
|
||||
}
|
||||
pub fn dp(mut self, decimal_places: u32) -> Self {
|
||||
self.display_decimal_places = decimal_places;
|
||||
self
|
||||
}
|
||||
pub fn percentage(self) -> Self {
|
||||
self.min(0.).max(100.).unit("%").dp(2)
|
||||
}
|
||||
pub fn disabled(mut self, disabled: bool) -> Self {
|
||||
self.disabled = disabled;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Serialize, Deserialize, Debug, Default, PartialEq, Eq)]
|
||||
pub enum NumberInputIncrementBehavior {
|
||||
#[default]
|
||||
|
||||
Reference in New Issue
Block a user