add transform signal to reduce 4 signals into one responsibility
This commit is contained in:
parent
30722bed8f
commit
a4cf8d3df4
4 changed files with 83 additions and 86 deletions
|
|
@ -22,7 +22,7 @@ use uuid::Uuid;
|
|||
|
||||
use chattyness_db::models::{ChannelMemberWithAvatar, LooseProp, Scene};
|
||||
|
||||
use super::avatar::{Avatar, ScreenBounds, member_key};
|
||||
use super::avatar::{Avatar, ScreenBounds, SceneTransform, member_key};
|
||||
#[cfg(feature = "hydrate")]
|
||||
use super::canvas_utils::hit_test_canvas;
|
||||
use super::chat_types::ActiveBubble;
|
||||
|
|
@ -443,22 +443,25 @@ pub fn RealmSceneViewer(
|
|||
});
|
||||
|
||||
let text_em_size = Signal::derive(move || settings.get().text_em_size);
|
||||
let scale_x_signal = Signal::derive(move || scale_x.get());
|
||||
let scale_y_signal = Signal::derive(move || scale_y.get());
|
||||
let offset_x_signal = Signal::derive(move || offset_x.get());
|
||||
let offset_y_signal = Signal::derive(move || offset_y.get());
|
||||
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)
|
||||
// Compute SceneTransform once for all avatars and props
|
||||
let scene_transform = Signal::derive(move || SceneTransform {
|
||||
scale_x: scale_x.get(),
|
||||
scale_y: scale_y.get(),
|
||||
offset_x: offset_x.get(),
|
||||
offset_y: offset_y.get(),
|
||||
});
|
||||
|
||||
// Compute ScreenBounds once for all avatars (for clamping)
|
||||
let screen_bounds = Signal::derive(move || {
|
||||
let t = scene_transform.get();
|
||||
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(),
|
||||
scene_width_f,
|
||||
scene_height_f,
|
||||
t.scale_x,
|
||||
t.scale_y,
|
||||
t.offset_x,
|
||||
t.offset_y,
|
||||
)
|
||||
});
|
||||
|
||||
|
|
@ -494,10 +497,7 @@ pub fn RealmSceneViewer(
|
|||
view! {
|
||||
<LoosePropCanvas
|
||||
prop=prop_signal
|
||||
scale_x=scale_x_signal
|
||||
scale_y=scale_y_signal
|
||||
offset_x=offset_x_signal
|
||||
offset_y=offset_y_signal
|
||||
transform=scene_transform
|
||||
base_prop_size=prop_size
|
||||
z_index=5
|
||||
/>
|
||||
|
|
@ -525,10 +525,7 @@ pub fn RealmSceneViewer(
|
|||
view! {
|
||||
<Avatar
|
||||
member=member_signal
|
||||
scale_x=scale_x_signal
|
||||
scale_y=scale_y_signal
|
||||
offset_x=offset_x_signal
|
||||
offset_y=offset_y_signal
|
||||
transform=scene_transform
|
||||
prop_size=prop_size
|
||||
z_index=z
|
||||
text_em_size=text_em_size
|
||||
|
|
@ -556,10 +553,7 @@ pub fn RealmSceneViewer(
|
|||
Some(view! {
|
||||
<Avatar
|
||||
member=member_signal
|
||||
scale_x=scale_x_signal
|
||||
scale_y=scale_y_signal
|
||||
offset_x=offset_x_signal
|
||||
offset_y=offset_y_signal
|
||||
transform=scene_transform
|
||||
prop_size=prop_size
|
||||
z_index=5
|
||||
text_em_size=text_em_size
|
||||
|
|
@ -736,10 +730,7 @@ pub fn RealmSceneViewer(
|
|||
prop_scale=Signal::derive(move || move_mode_prop_scale.get())
|
||||
loose_props=loose_props
|
||||
prop_size=prop_size
|
||||
scale_x=scale_x_signal
|
||||
scale_y=scale_y_signal
|
||||
offset_x=offset_x_signal
|
||||
offset_y=offset_y_signal
|
||||
transform=scene_transform
|
||||
on_apply=on_prop_move.unwrap_or_else(|| Callback::new(|_| {}))
|
||||
on_cancel=Callback::new(move |_: ()| {
|
||||
set_move_mode_active.set(false);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue