@@ -4,9 +4,18 @@ impl WaylandState {
44 pub ( in crate :: backend:: wayland) fn render ( & mut self , qh : & QueueHandle < Self > ) -> Result < bool > {
55 debug ! ( "=== RENDER START ===" ) ;
66 let board_mode = self . input_state . board_mode ( ) ;
7- let suppressed = self . overlay_suppressed ( )
8- && !( self . data . overlay_suppression == OverlaySuppression :: Zoom
9- && board_mode != BoardMode :: Transparent ) ;
7+ let suppression = if self . data . overlay_suppression == OverlaySuppression :: Zoom
8+ && board_mode != BoardMode :: Transparent
9+ {
10+ OverlaySuppression :: None
11+ } else {
12+ self . data . overlay_suppression
13+ } ;
14+ let render_canvas = !matches ! (
15+ suppression,
16+ OverlaySuppression :: Frozen | OverlaySuppression :: Zoom
17+ ) ;
18+ let render_ui = suppression == OverlaySuppression :: None ;
1019
1120 // Create pool if needed
1221 let buffer_count = self . config . performance . buffer_count as usize ;
@@ -65,7 +74,7 @@ impl WaylandState {
6574 ctx. paint ( ) . context ( "Failed to clear background" ) ?;
6675 ctx. set_operator ( cairo:: Operator :: Over ) ;
6776
68- if !suppressed {
77+ if render_canvas {
6978 let allow_background_image =
7079 !( self . zoom . is_engaged ( ) && board_mode != BoardMode :: Transparent ) ;
7180 let zoom_render_image = if self . zoom . active && allow_background_image {
@@ -307,74 +316,78 @@ impl WaylandState {
307316 let _ = ctx. restore ( ) ;
308317 }
309318
310- // Render frozen badge even if status bar is hidden
311- if self . input_state . frozen_active ( )
312- && !self . zoom . active
313- && self . config . ui . show_frozen_badge
314- {
315- crate :: ui:: render_frozen_badge ( & ctx, width, height) ;
316- }
317- // Render a zoom badge when the status bar is hidden or zoom is locked.
318- if self . input_state . zoom_active ( )
319- && ( !self . input_state . show_status_bar || self . input_state . zoom_locked ( ) )
320- {
321- crate :: ui:: render_zoom_badge (
322- & ctx,
323- width,
324- height,
325- self . input_state . zoom_scale ( ) ,
326- self . input_state . zoom_locked ( ) ,
327- ) ;
328- }
319+ if render_ui {
320+ // Render frozen badge even if status bar is hidden
321+ if self . input_state . frozen_active ( )
322+ && !self . zoom . active
323+ && self . config . ui . show_frozen_badge
324+ {
325+ crate :: ui:: render_frozen_badge ( & ctx, width, height) ;
326+ }
327+ // Render a zoom badge when the status bar is hidden or zoom is locked.
328+ if self . input_state . zoom_active ( )
329+ && ( !self . input_state . show_status_bar || self . input_state . zoom_locked ( ) )
330+ {
331+ crate :: ui:: render_zoom_badge (
332+ & ctx,
333+ width,
334+ height,
335+ self . input_state . zoom_scale ( ) ,
336+ self . input_state . zoom_locked ( ) ,
337+ ) ;
338+ }
329339
330- // Render status bar if enabled
331- if self . input_state . show_status_bar {
332- crate :: ui:: render_status_bar (
333- & ctx,
334- & self . input_state ,
335- self . config . ui . status_bar_position ,
336- & self . config . ui . status_bar_style ,
337- width,
338- height,
339- ) ;
340- }
340+ // Render status bar if enabled
341+ if self . input_state . show_status_bar {
342+ crate :: ui:: render_status_bar (
343+ & ctx,
344+ & self . input_state ,
345+ self . config . ui . status_bar_position ,
346+ & self . config . ui . status_bar_style ,
347+ width,
348+ height,
349+ ) ;
350+ }
341351
342- // Render help overlay if toggled
343- if self . input_state . show_help {
344- crate :: ui:: render_help_overlay (
345- & ctx,
346- & self . config . ui . help_overlay_style ,
347- width,
348- height,
349- self . frozen_enabled ( ) ,
350- ) ;
351- }
352+ // Render help overlay if toggled
353+ if self . input_state . show_help {
354+ crate :: ui:: render_help_overlay (
355+ & ctx,
356+ & self . config . ui . help_overlay_style ,
357+ width,
358+ height,
359+ self . frozen_enabled ( ) ,
360+ ) ;
361+ }
352362
353- if !self . zoom . active {
354- crate :: ui:: render_properties_panel ( & ctx, & self . input_state , width, height) ;
363+ if !self . zoom . active {
364+ crate :: ui:: render_properties_panel ( & ctx, & self . input_state , width, height) ;
355365
356- if self . input_state . is_context_menu_open ( ) {
357- self . input_state
358- . update_context_menu_layout ( & ctx, width, height) ;
366+ if self . input_state . is_context_menu_open ( ) {
367+ self . input_state
368+ . update_context_menu_layout ( & ctx, width, height) ;
369+ } else {
370+ self . input_state . clear_context_menu_layout ( ) ;
371+ }
372+
373+ // Render context menu if open
374+ crate :: ui:: render_context_menu ( & ctx, & self . input_state , width, height) ;
359375 } else {
360376 self . input_state . clear_context_menu_layout ( ) ;
361377 }
362378
363- // Render context menu if open
364- crate :: ui:: render_context_menu ( & ctx, & self . input_state , width, height) ;
379+ // Inline toolbars (xdg fallback) render directly into main surface when layer-shell is unavailable.
380+ if self . toolbar . is_visible ( ) && self . inline_toolbars_active ( ) {
381+ let snapshot = self . toolbar_snapshot ( ) ;
382+ if self . toolbar . update_snapshot ( & snapshot) {
383+ self . toolbar . mark_dirty ( ) ;
384+ }
385+ self . render_inline_toolbars ( & ctx, & snapshot) ;
386+ }
365387 } else {
366388 self . input_state . clear_context_menu_layout ( ) ;
367389 }
368390
369- // Inline toolbars (xdg fallback) render directly into main surface when layer-shell is unavailable.
370- if self . toolbar . is_visible ( ) && self . inline_toolbars_active ( ) {
371- let snapshot = self . toolbar_snapshot ( ) ;
372- if self . toolbar . update_snapshot ( & snapshot) {
373- self . toolbar . mark_dirty ( ) ;
374- }
375- self . render_inline_toolbars ( & ctx, & snapshot) ;
376- }
377-
378391 let _ = ctx. restore ( ) ;
379392 }
380393
0 commit comments