diff --git a/src/render.rs b/src/render.rs
index 33a238156ee535ad65faf40eb6870be4c926d12f..56300fd27f36650d69dd5adf81708a541f93dba9 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -463,13 +463,33 @@ pub(crate) fn hide_inactive_or_readonly_cursor(
 
 pub(crate) fn set_initial_scale(
     window_q: Query<&Window, With<PrimaryWindow>>,
-    mut metrics_q: Query<&mut CosmicMetrics, Added<CosmicMetrics>>,
+    mut cosmic_query: Query<
+        (
+            Option<&mut CosmicEditor>,
+            &mut CosmicMetrics,
+            Option<&mut XOffset>,
+        ),
+        Added<CosmicMetrics>,
+    >,
+    mut font_system: ResMut<CosmicFontSystem>,
 ) {
     let scale = window_q.single().scale_factor() as f32;
 
-    for mut metrics in metrics_q.iter_mut() {
-        if metrics.scale_factor == DEFAULT_SCALE_PLACEHOLDER {
-            metrics.scale_factor = scale;
+    for (editor, mut metrics, x_offset) in &mut cosmic_query.iter_mut() {
+        if metrics.scale_factor != DEFAULT_SCALE_PLACEHOLDER {
+            continue;
+        }
+
+        let font_system = &mut font_system.0;
+        metrics.scale_factor = scale;
+        let metrics = Metrics::new(metrics.font_size, metrics.line_height).scale(scale);
+
+        if let Some(mut editor) = editor {
+            editor.0.buffer_mut().set_metrics(font_system, metrics);
+            editor.0.buffer_mut().set_redraw(true);
+        }
+        if let Some(mut x_offset) = x_offset {
+            *x_offset = XOffset(None);
         }
     }
 }