compute ScreenBounds once

This commit is contained in:
Evan Carroll 2026-01-26 23:03:54 -06:00
parent c434321376
commit 30722bed8f
2 changed files with 22 additions and 22 deletions

View file

@ -22,7 +22,7 @@ use uuid::Uuid;
use chattyness_db::models::{ChannelMemberWithAvatar, LooseProp, Scene};
use super::avatar::{Avatar, member_key};
use super::avatar::{Avatar, ScreenBounds, member_key};
#[cfg(feature = "hydrate")]
use super::canvas_utils::hit_test_canvas;
use super::chat_types::ActiveBubble;
@ -450,6 +450,18 @@ pub fn RealmSceneViewer(
let scene_width_signal = Signal::derive(move || scene_width_f);
let scene_height_signal = Signal::derive(move || scene_height_f);
// Compute ScreenBounds once for all avatars (instead of each avatar computing it)
let screen_bounds = Signal::derive(move || {
ScreenBounds::from_transform(
scene_width_signal.get(),
scene_height_signal.get(),
scale_x_signal.get(),
scale_y_signal.get(),
offset_x_signal.get(),
offset_y_signal.get(),
)
});
let members_by_key = Signal::derive(move || {
sorted_members.get().into_iter().enumerate()
.map(|(idx, m)| (member_key(&m), (idx, m)))
@ -520,8 +532,7 @@ pub fn RealmSceneViewer(
prop_size=prop_size
z_index=z
text_em_size=text_em_size
scene_width=scene_width_signal
scene_height=scene_height_signal
screen_bounds=screen_bounds
active_bubble=bubble_signal
/>
}
@ -553,8 +564,7 @@ pub fn RealmSceneViewer(
z_index=5
text_em_size=text_em_size
opacity=opacity
scene_width=scene_width_signal
scene_height=scene_height_signal
screen_bounds=screen_bounds
/>
})
} else { None }