refresh: stack al día (vello 0.7 / wgpu 27 / parley 0.6) + motor 3D voxel
Re-sincroniza las fuentes desde el monorepo (estaba en vello 0.5/wgpu 24 y con la estructura vieja de eventloop) y suma el 3D: - bump del workspace a vello 0.7 / wgpu 27 / parley 0.6, + accesskit 0.24 / accesskit_winit 0.33 / vello_hybrid 0.0.9. - nuevos crates: llimphi-3d (voxels ray-march + mallas en un depth compartido, montable dentro de un View 2D vía set_viewport+scissor) y llimphi-voxel (world-gen, personajes, director de escenas) + shared/foreign-vox (puente .vox). - README: sección "Not just 2D — a 3D voxel engine" + GIF (docs/llimphi_voxel.gif). - excluido modules/allichay (arrastra deps fuera del alcance del front-door). - cargo check --workspace: verde. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,8 +23,8 @@ use llimphi_ui::llimphi_layout::taffy::{
|
||||
};
|
||||
use llimphi_ui::llimphi_raster::peniko::Color;
|
||||
use llimphi_ui::llimphi_text::Alignment;
|
||||
use llimphi_ui::View;
|
||||
use llimphi_theme::{alpha, radius, Theme};
|
||||
use llimphi_ui::{Shadow, View};
|
||||
use llimphi_theme::{alpha, elevation, motion, radius, Theme};
|
||||
use llimphi_widget_panel::{panel_signature_painter, PanelStyle};
|
||||
|
||||
/// Paleta del modal.
|
||||
@@ -36,7 +36,7 @@ pub struct ModalPalette {
|
||||
/// lo que pidió el caller. Esto focaliza al modal sin "encerrarlo".
|
||||
pub scrim: Color,
|
||||
/// Firma visual del panel — gradient sutil + hairline accent en el
|
||||
/// top edge. La que vuelve consistente el "look gioser" en todos
|
||||
/// top edge. La que vuelve consistente el "look tawasuyu" en todos
|
||||
/// los modales y overlays.
|
||||
pub panel: PanelStyle,
|
||||
pub border: Color,
|
||||
@@ -212,6 +212,21 @@ pub fn modal_view<Msg: Clone + 'static>(spec: ModalSpec<Msg>) -> View<Msg> {
|
||||
})
|
||||
.children(btn_children);
|
||||
|
||||
// Sombra E4 + entrada animada (ease_out_cubic, FAST). El `key`
|
||||
// estable se deriva del puntero a `spec.title` — alcanza para que
|
||||
// una sola firma de modal viva en el frame. Si la app necesita
|
||||
// múltiples modales animados independientemente, pasar un `key`
|
||||
// propio (todavía no expuesto en la API — se agrega cuando aparezca
|
||||
// ese caller).
|
||||
let (sh_a, sh_blur, sh_dy) = elevation::E4;
|
||||
let modal_shadow = Shadow {
|
||||
color: Color::from_rgba8(0, 0, 0, sh_a),
|
||||
blur: sh_blur,
|
||||
dx: 0.0,
|
||||
dy: sh_dy,
|
||||
spread: 0.0,
|
||||
};
|
||||
let panel_key: u64 = 0x4d4f44414c00_u64 ^ (w as u64) ^ ((h as u64) << 8);
|
||||
let panel = View::new(Style {
|
||||
position: Position::Absolute,
|
||||
inset: Rect {
|
||||
@@ -229,6 +244,8 @@ pub fn modal_view<Msg: Clone + 'static>(spec: ModalSpec<Msg>) -> View<Msg> {
|
||||
})
|
||||
.paint_with(panel_signature_painter(palette.panel))
|
||||
.radius(palette.panel.radius)
|
||||
.shadow(modal_shadow)
|
||||
.animated_enter(panel_key, motion::FAST)
|
||||
.clip(true)
|
||||
.children(vec![header, separator, body_wrap, buttons_row]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user