Skip to content

Commit 1344e7f

Browse files
committed
Add z-index support for UI layers and improve render order
Introduced a set_layer_z_index method to UISystem to allow explicit control of layer stacking order. Updated create_desktop_ui to assign z-index values to desktop layers for correct visual hierarchy. Modified get_layers_for_rendering to sort layers by z-index, ensuring proper rendering from background to foreground.
1 parent ca55b30 commit 1344e7f

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

crates/prisma_compositor/src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,18 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
7979
async 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,

crates/prisma_compositor/src/ui.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)