diff --git a/src/lib.rs b/src/lib.rs index d6d80a3e89afb96ab2b908564c878da296105de8..51a430d9ddcd104e24aa3ee10d3787356ea8a765 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,7 +21,7 @@ use input::{input_kb, input_mouse, undo_redo, ClickTimer}; use input::{poll_wasm_paste, WasmPaste, WasmPasteAsyncChannel}; use render::{ blink_cursor, cosmic_edit_redraw_buffer, freeze_cursor_blink, hide_inactive_or_readonly_cursor, - on_scale_factor_change, CursorBlinkTimer, CursorVisibility, SwashCacheState, + on_scale_factor_change, set_initial_scale, CursorBlinkTimer, CursorVisibility, SwashCacheState, }; #[cfg(feature = "multicam")] @@ -73,6 +73,8 @@ pub enum CosmicTextPosition { pub struct CosmicTextChanged(pub (Entity, String)); // TODO docs +const DEFAULT_SCALE_PLACEHOLDER: f32 = 0.696969; + #[derive(Clone, Component)] pub struct CosmicMetrics { pub font_size: f32, @@ -85,7 +87,7 @@ impl Default for CosmicMetrics { Self { font_size: 12., line_height: 12., - scale_factor: 1., + scale_factor: DEFAULT_SCALE_PLACEHOLDER, } } } @@ -291,9 +293,13 @@ impl Plugin for CosmicEditPlugin { app.add_systems( First, ( - cosmic_editor_builder, - placeholder_builder, - on_scale_factor_change, + set_initial_scale, + ( + cosmic_editor_builder, + placeholder_builder, + on_scale_factor_change, + ) + .after(set_initial_scale), render::cosmic_ui_to_canvas, render::cosmic_sprite_to_canvas, ), diff --git a/src/render.rs b/src/render.rs index 4f0b93547773fa756c667b29de190bb9cdb774f3..d7033a2f8da3c9555882aa10340b31abf74d1e92 100644 --- a/src/render.rs +++ b/src/render.rs @@ -2,7 +2,7 @@ use std::time::Duration; use bevy::{ asset::HandleId, - prelude::*, + prelude::*; render::render_resource::Extent3d, window::{PrimaryWindow, WindowScaleFactorChanged}, }; @@ -12,7 +12,7 @@ use image::{imageops::FilterType, GenericImageView}; use crate::{ get_text_size, get_x_offset_center, get_y_offset_center, CosmicAttrs, CosmicBackground, CosmicCanvas, CosmicEditor, CosmicFontSystem, CosmicMetrics, CosmicMode, CosmicTextPosition, - FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset, + FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset, DEFAULT_SCALE_PLACEHOLDER }; #[derive(Resource)] @@ -452,6 +452,19 @@ 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>>, +) { + 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; + } + } +} + pub(crate) fn on_scale_factor_change( mut scale_factor_changed: EventReader<WindowScaleFactorChanged>, mut cosmic_query: Query<(&mut CosmicEditor, &CosmicMetrics, &mut XOffset)>,