File tree Expand file tree Collapse file tree
crates/prisma_compositor/src Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -79,12 +79,18 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
7979async fn create_desktop_ui ( compositor : & Arc < Compositor > ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
8080 let ui_system = compositor. window_manager . read ( ) . unwrap ( ) . get_ui_system ( ) ;
8181
82- // Create desktop layers
82+ // Create desktop layers with proper z-ordering
8383 let wallpaper_layer = ui_system. create_layer ( "Wallpaper" . to_string ( ) ) ;
8484 let desktop_layer = ui_system. create_layer ( "Desktop" . to_string ( ) ) ;
8585 let windows_layer = ui_system. create_layer ( "Windows" . to_string ( ) ) ;
8686 let taskbar_layer = ui_system. create_layer ( "Taskbar" . to_string ( ) ) ;
8787
88+ // Set z-index for proper layering (lower = background, higher = foreground)
89+ ui_system. set_layer_z_index ( wallpaper_layer, -100 ) ; // Background
90+ ui_system. set_layer_z_index ( desktop_layer, -50 ) ; // Desktop icons
91+ ui_system. set_layer_z_index ( windows_layer, 0 ) ; // Windows
92+ ui_system. set_layer_z_index ( taskbar_layer, 100 ) ; // Always on top
93+
8894 // Create wallpaper
8995 let wallpaper = UIElement :: rect (
9096 1 ,
Original file line number Diff line number Diff line change @@ -290,6 +290,15 @@ impl UISystem {
290290 layer_id
291291 }
292292
293+ /// Set the z-index of a layer
294+ pub fn set_layer_z_index ( & self , layer_id : u64 , z_index : i32 ) {
295+ if let Ok ( mut layers) = self . layers . write ( ) {
296+ if let Some ( layer) = layers. get_mut ( & layer_id) {
297+ layer. z_index = z_index;
298+ }
299+ }
300+ }
301+
293302 /// Add element to a layer
294303 pub fn add_element_to_layer ( & self , layer_id : u64 , element : UIElement ) {
295304 if let Ok ( mut layers) = self . layers . write ( ) {
@@ -377,17 +386,22 @@ impl UISystem {
377386 }
378387 }
379388
380- /// Get layers in render order
389+ /// Get layers in render order (sorted by z_index)
381390 pub fn get_layers_for_rendering ( & self ) -> Vec < UILayer > {
382391 let layers = self . layers . read ( ) . unwrap ( ) ;
383392 let layer_order = self . layer_order . read ( ) . unwrap ( ) ;
384393
385- layer_order
394+ let mut render_layers : Vec < UILayer > = layer_order
386395 . iter ( )
387396 . filter_map ( |& id| layers. get ( & id) )
388397 . filter ( |layer| layer. visible )
389398 . cloned ( )
390- . collect ( )
399+ . collect ( ) ;
400+
401+ // Sort layers by z_index to ensure proper rendering order
402+ // Lower z_index renders first (background), higher z_index renders last (foreground)
403+ render_layers. sort_by_key ( |layer| layer. z_index ) ;
404+ render_layers
391405 }
392406
393407 /// Update screen size
You can’t perform that action at this time.
0 commit comments