@@ -3,7 +3,8 @@ use crate::core::image;
33use crate :: core:: renderer;
44use crate :: core:: svg;
55use crate :: core:: {
6- self , Background , Color , Image , Point , Rectangle , Size , Svg , Transformation ,
6+ self , Background , Color , Font , Image , Pixels , Point , Rectangle , Size , Svg ,
7+ Transformation ,
78} ;
89use crate :: graphics;
910use crate :: graphics:: compositor;
@@ -321,6 +322,7 @@ where
321322 surface : & mut Self :: Surface ,
322323 viewport : & graphics:: Viewport ,
323324 background_color : Color ,
325+ on_pre_present : impl FnOnce ( ) ,
324326 ) -> Result < ( ) , compositor:: SurfaceError > {
325327 match ( self , renderer, surface) {
326328 (
@@ -332,6 +334,7 @@ where
332334 surface,
333335 viewport,
334336 background_color,
337+ on_pre_present,
335338 ) ,
336339 (
337340 Self :: Secondary ( compositor) ,
@@ -342,6 +345,7 @@ where
342345 surface,
343346 viewport,
344347 background_color,
348+ on_pre_present,
345349 ) ,
346350 _ => unreachable ! ( ) ,
347351 }
@@ -600,6 +604,48 @@ mod geometry {
600604 }
601605}
602606
607+ impl < A , B > renderer:: Headless for Renderer < A , B >
608+ where
609+ A : renderer:: Headless ,
610+ B : renderer:: Headless ,
611+ {
612+ async fn new (
613+ default_font : Font ,
614+ default_text_size : Pixels ,
615+ backend : Option < & str > ,
616+ ) -> Option < Self > {
617+ if let Some ( renderer) =
618+ A :: new ( default_font, default_text_size, backend) . await
619+ {
620+ return Some ( Self :: Primary ( renderer) ) ;
621+ }
622+
623+ B :: new ( default_font, default_text_size, backend)
624+ . await
625+ . map ( Self :: Secondary )
626+ }
627+
628+ fn name ( & self ) -> String {
629+ delegate ! ( self , renderer, renderer. name( ) )
630+ }
631+
632+ fn screenshot (
633+ & mut self ,
634+ size : Size < u32 > ,
635+ scale_factor : f32 ,
636+ background_color : Color ,
637+ ) -> Vec < u8 > {
638+ match self {
639+ crate :: fallback:: Renderer :: Primary ( renderer) => {
640+ renderer. screenshot ( size, scale_factor, background_color)
641+ }
642+ crate :: fallback:: Renderer :: Secondary ( renderer) => {
643+ renderer. screenshot ( size, scale_factor, background_color)
644+ }
645+ }
646+ }
647+ }
648+
603649impl < A , B > compositor:: Default for Renderer < A , B >
604650where
605651 A : compositor:: Default ,
0 commit comments