Unified layout computation & cleanup

This commit is contained in:
Evan Carroll 2026-01-27 00:29:14 -06:00
parent e8ca7c9a12
commit ae210d5352
4 changed files with 307 additions and 193 deletions

View file

@ -23,6 +23,7 @@ use uuid::Uuid;
use chattyness_db::models::{ChannelMemberWithAvatar, LooseProp, Scene};
use super::avatar::{Avatar, ScreenBounds, SceneTransform, member_key};
use super::constants::{Z_AVATAR_BASE, Z_AVATARS_CONTAINER, Z_CLICK_OVERLAY, Z_FADING_AVATAR, Z_LOOSE_PROP, Z_PROPS};
#[cfg(feature = "hydrate")]
use super::canvas_utils::hit_test_canvas;
use super::chat_types::ActiveBubble;
@ -488,7 +489,7 @@ pub fn RealmSceneViewer(
style=move || canvas_style(0)
aria-hidden="true"
/>
<div class="props-container absolute inset-0" style="z-index: 1; pointer-events: none;">
<div class="props-container absolute inset-0" style=format!("z-index: {}; pointer-events: none;", Z_PROPS)>
<Show when=move || scales_ready.get() fallback=|| ()>
{move || {
loose_props.get().into_iter().map(|prop| {
@ -501,14 +502,14 @@ pub fn RealmSceneViewer(
prop=prop_signal
transform=scene_transform
base_prop_size=prop_size
z_index=5
z_index=Z_LOOSE_PROP
/>
}
}).collect_view()
}}
</Show>
</div>
<div class="avatars-container absolute inset-0" style="z-index: 2; pointer-events: none; overflow: visible;">
<div class="avatars-container absolute inset-0" style=format!("z-index: {}; pointer-events: none; overflow: visible;", Z_AVATARS_CONTAINER)>
<Show when=move || scales_ready.get() fallback=|| ()>
{move || {
member_keys.get().into_iter().map(|key| {
@ -516,7 +517,7 @@ pub fn RealmSceneViewer(
members_by_key.get().get(&key).map(|(_, m)| m.clone()).expect("member key should exist")
});
let z_index_signal = Signal::derive(move || {
members_by_key.get().get(&key).map(|(idx, _)| (*idx as i32) + 10).unwrap_or(10)
members_by_key.get().get(&key).map(|(idx, _)| (*idx as i32) + Z_AVATAR_BASE).unwrap_or(Z_AVATAR_BASE)
});
let z = z_index_signal.get_untracked();
// Derive bubble signal for this member
@ -557,7 +558,7 @@ pub fn RealmSceneViewer(
member=member_signal
transform=scene_transform
prop_size=prop_size
z_index=5
z_index=Z_FADING_AVATAR
text_em_size=text_em_size
opacity=opacity
screen_bounds=screen_bounds
@ -570,7 +571,7 @@ pub fn RealmSceneViewer(
</div>
<div
class="click-overlay absolute inset-0"
style="z-index: 5; cursor: pointer;"
style=format!("z-index: {}; cursor: pointer;", Z_CLICK_OVERLAY)
aria-label=format!("Scene: {}", scene_name)
role="img"
on:click=move |ev| {