compute ScreenBounds once
This commit is contained in:
parent
c434321376
commit
30722bed8f
2 changed files with 22 additions and 22 deletions
|
|
@ -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 }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue