fix: avatar center to cursor, and cleanup.
Lots of cleanup, went in with this too
This commit is contained in:
parent
c3320ddcce
commit
fe65835f4a
14 changed files with 769 additions and 708 deletions
|
|
@ -2,8 +2,7 @@
|
|||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// LocalStorage key for viewer settings.
|
||||
const SETTINGS_KEY: &str = "chattyness_viewer_settings";
|
||||
use crate::utils::LocalStoragePersist;
|
||||
|
||||
/// Reference resolution for enlarged props calculation.
|
||||
pub const REFERENCE_WIDTH: f64 = 1920.0;
|
||||
|
|
@ -99,51 +98,12 @@ impl Default for ViewerSettings {
|
|||
}
|
||||
}
|
||||
|
||||
// Implement LocalStoragePersist trait for automatic load/save
|
||||
impl LocalStoragePersist for ViewerSettings {
|
||||
const STORAGE_KEY: &'static str = "chattyness_viewer_settings";
|
||||
}
|
||||
|
||||
impl ViewerSettings {
|
||||
/// Load settings from localStorage, returning defaults if not found or invalid.
|
||||
#[cfg(feature = "hydrate")]
|
||||
pub fn load() -> Self {
|
||||
let Some(window) = web_sys::window() else {
|
||||
return Self::default();
|
||||
};
|
||||
|
||||
let Ok(Some(storage)) = window.local_storage() else {
|
||||
return Self::default();
|
||||
};
|
||||
|
||||
let Ok(Some(json)) = storage.get_item(SETTINGS_KEY) else {
|
||||
return Self::default();
|
||||
};
|
||||
|
||||
serde_json::from_str(&json).unwrap_or_default()
|
||||
}
|
||||
|
||||
/// Stub for SSR - returns default settings.
|
||||
#[cfg(not(feature = "hydrate"))]
|
||||
pub fn load() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// Save settings to localStorage.
|
||||
#[cfg(feature = "hydrate")]
|
||||
pub fn save(&self) {
|
||||
let Some(window) = web_sys::window() else {
|
||||
return;
|
||||
};
|
||||
|
||||
let Ok(Some(storage)) = window.local_storage() else {
|
||||
return;
|
||||
};
|
||||
|
||||
if let Ok(json) = serde_json::to_string(self) {
|
||||
let _ = storage.set_item(SETTINGS_KEY, &json);
|
||||
}
|
||||
}
|
||||
|
||||
/// Stub for SSR - no-op.
|
||||
#[cfg(not(feature = "hydrate"))]
|
||||
pub fn save(&self) {}
|
||||
|
||||
/// Calculate the effective prop size based on current settings.
|
||||
///
|
||||
/// In pan mode without enlarge, returns base size * zoom level.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue