diff --git a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs index a99962d2..71866cb1 100644 --- a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs +++ b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs @@ -113,6 +113,7 @@ impl LayoutHolder for ExportDialogMessageHandler { .unit("") .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) + .increment_step(0.5) .disabled(self.file_type == FileType::Svg) .on_update(|number_input: &NumberInput| ExportDialogMessage::ScaleFactor { factor: number_input.value.unwrap() }.into()) .min_width(200) diff --git a/editor/src/node_graph_executor.rs b/editor/src/node_graph_executor.rs index ce07aead..8fe138be 100644 --- a/editor/src/node_graph_executor.rs +++ b/editor/src/node_graph_executor.rs @@ -238,15 +238,19 @@ impl NodeGraphExecutor { ExportBounds::Artboard(id) => document.metadata().bounding_box_document(id), } .ok_or_else(|| "No bounding box".to_string())?; - let resolution = (bounds[1] - bounds[0]).round().as_uvec2(); + + let resolution_in_document_space = bounds[1] - bounds[0]; + let export_resolution = resolution_in_document_space * export_config.scale_factor; + let resolution = export_resolution.round().as_uvec2(); let transform = DAffine2::from_translation(bounds[0]).inverse(); + let viewport = Footprint { + resolution, + transform, + ..Default::default() + }; let render_config = RenderConfig { - viewport: Footprint { - resolution, - transform, - ..Default::default() - }, + viewport, scale: export_config.scale_factor, time: Default::default(), pointer: DVec2::ZERO, @@ -256,7 +260,7 @@ impl NodeGraphExecutor { for_export: true, for_eyedropper: false, }; - export_config.size = resolution.as_dvec2(); + export_config.size = resolution; // Execute the node graph self.runtime_io @@ -425,7 +429,6 @@ impl NodeGraphExecutor { file_type, name, size, - scale_factor, #[cfg(feature = "gpu")] transparent_background, artboard_name, @@ -456,7 +459,7 @@ impl NodeGraphExecutor { }); } else { let mime = file_type.to_mime().to_string(); - let size = (size * scale_factor).into(); + let size = size.as_dvec2().into(); responses.add(FrontendMessage::TriggerExportImage { svg, name, mime, size }); } } diff --git a/editor/src/node_graph_executor/runtime.rs b/editor/src/node_graph_executor/runtime.rs index 4c7b196d..9b7a8de4 100644 --- a/editor/src/node_graph_executor/runtime.rs +++ b/editor/src/node_graph_executor/runtime.rs @@ -1,6 +1,6 @@ use super::*; use crate::messages::frontend::utility_types::{ExportBounds, FileType}; -use glam::{DAffine2, DVec2}; +use glam::{DAffine2, UVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeNetwork}; use graph_craft::graphene_compiler::Compiler; @@ -84,7 +84,7 @@ pub struct ExportConfig { pub scale_factor: f64, pub bounds: ExportBounds, pub transparent_background: bool, - pub size: DVec2, + pub size: UVec2, pub artboard_name: Option, pub artboard_count: usize, }