g_box UI macro can now take inline conditional children

This commit is contained in:
Reinout Meliesie 2025-02-07 15:19:41 +01:00
commit a9ec7bdcc9
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6
2 changed files with 81 additions and 53 deletions

View file

@ -156,46 +156,48 @@ async fn create_collection_item (
poster_file_path : Option < & Path > ,
details_widget : & Box ,
) -> Box {
let container = g_box ! (
g_box ! (
@ option_children ;
@ orientation : Vertical ;
@ margin_top : 20 ;
@ margin_bottom : 20 ;
) ;
if let Some (poster_file_path) = poster_file_path {
let poster_file_path = PathBuf :: from (poster_file_path) ; // God forbid `Path` would work with `clone ! ()`
let poster_texture = spawn_blocking ( move ||
Texture :: from_filename (poster_file_path) . unwrap ()
) . await . unwrap () ;
match poster_file_path {
Some (poster_file_path) => {
let poster_file_path = PathBuf :: from (poster_file_path) ; // God forbid `Path` would work with `clone ! ()`
let poster_texture = spawn_blocking ( move ||
Texture :: from_filename (poster_file_path) . unwrap ()
) . await . unwrap () ;
Some ( image ! (
@ paintable : & poster_texture ;
@ width_request : 300 ;
@ height_request : 300 ;
@ margin_bottom : 10 ;
) )
} ,
None => None ,
} . as_ref () ,
container . append ( & image ! (
@ paintable : & poster_texture ;
@ width_request : 300 ;
@ height_request : 300 ;
@ margin_bottom : 10 ;
) ) ;
}
container . append ( & label ! (
@ justify : Justification :: Center ;
@ wrap : true ;
@ max_width_chars : 1 ; // Not the actual limit, used instead to wrap more aggressively
@ attributes : & pango_attributes ! ( @ scale : SCALE_LARGE ; @ weight : Bold ; ) ;
name ,
) ) ;
if let Some (original_name) = original_name {
container . append ( & label ! (
Some ( & label ! (
@ justify : Justification :: Center ;
@ wrap : true ;
@ max_width_chars : 1 ; // Not the actual limit, used instead to wrap more aggressively
original_name ,
) ) ;
}
@ attributes : & pango_attributes ! ( @ scale : SCALE_LARGE ; @ weight : Bold ; ) ;
name ,
) ) ,
container . append (details_widget) ;
match original_name {
Some (original_name) => Some ( label ! (
@ justify : Justification :: Center ;
@ wrap : true ;
@ max_width_chars : 1 ; // Not the actual limit, used instead to wrap more aggressively
original_name ,
) ) ,
None => None ,
} . as_ref () ,
container
Some (details_widget) ,
)
}
fn create_film_details ( film : & FilmOverview ) -> Box {