@@ -167,7 +167,7 @@ enum DeferredOp {
167167
168168#[ derive( Clone ) ]
169169pub struct WindowHandle {
170- dwrite_factory : DwriteFactory ,
170+ text : PietText ,
171171 state : Weak < WindowState > ,
172172}
173173
@@ -243,7 +243,7 @@ struct MyWndProc {
243243 app : Application ,
244244 handle : RefCell < WindowHandle > ,
245245 d2d_factory : D2DFactory ,
246- dwrite_factory : DwriteFactory ,
246+ text : PietText ,
247247 state : RefCell < Option < WndState > > ,
248248 present_strategy : PresentStrategy ,
249249}
@@ -419,7 +419,7 @@ impl WndState {
419419 }
420420
421421 // Renders but does not present.
422- fn render ( & mut self , d2d : & D2DFactory , dw : & DwriteFactory , invalid : & Region ) {
422+ fn render ( & mut self , d2d : & D2DFactory , text : & PietText , invalid : & Region ) {
423423 let rt = self . render_target . as_mut ( ) . unwrap ( ) ;
424424
425425 rt. begin_draw ( ) ;
@@ -434,8 +434,7 @@ impl WndState {
434434 . unwrap ( )
435435 } ) ;
436436
437- let text = PietText :: new ( dw. clone ( ) ) ;
438- let mut piet_ctx = Piet :: new ( d2d, text, rt) ;
437+ let mut piet_ctx = Piet :: new ( d2d, text. clone ( ) , rt) ;
439438
440439 // Clear the background if transparency DC is found
441440 if let Some ( dc) = dc_for_transparency {
@@ -815,7 +814,7 @@ impl WndProc for MyWndProc {
815814 let invalid = self . take_invalid ( ) ;
816815 if !invalid. rects ( ) . is_empty ( ) {
817816 s. handler . rebuild_resources ( ) ;
818- s. render ( & self . d2d_factory , & self . dwrite_factory , & invalid) ;
817+ s. render ( & self . d2d_factory , & self . text , & invalid) ;
819818 if let Some ( ref mut ds) = s. dxgi_state {
820819 let mut dirty_rects = util:: region_to_rectis ( & invalid, self . scale ( ) ) ;
821820 let params = DXGI_PRESENT_PARAMETERS {
@@ -950,11 +949,7 @@ impl WndProc for MyWndProc {
950949 if let Err ( e) = s. rebuild_render_target ( & self . d2d_factory , scale) {
951950 error ! ( "error building render target: {}" , e) ;
952951 }
953- s. render (
954- & self . d2d_factory ,
955- & self . dwrite_factory ,
956- & size_dp. to_rect ( ) . into ( ) ,
957- ) ;
952+ s. render ( & self . d2d_factory , & self . text , & size_dp. to_rect ( ) . into ( ) ) ;
958953 let present_after = match self . present_strategy {
959954 PresentStrategy :: Sequential => 1 ,
960955 _ => 0 ,
@@ -1330,12 +1325,13 @@ impl WindowBuilder {
13301325 unsafe {
13311326 let class_name = super :: util:: CLASS_NAME . to_wide ( ) ;
13321327 let dwrite_factory = DwriteFactory :: new ( ) . unwrap ( ) ;
1333- let dw_clone = dwrite_factory. clone ( ) ;
1328+ let fonts = self . app . fonts . clone ( ) ;
1329+ let text = PietText :: new_with_shared_fonts ( dwrite_factory, Some ( fonts) ) ;
13341330 let wndproc = MyWndProc {
13351331 app : self . app . clone ( ) ,
13361332 handle : Default :: default ( ) ,
13371333 d2d_factory : D2DFactory :: new ( ) . unwrap ( ) ,
1338- dwrite_factory : dw_clone ,
1334+ text : text . clone ( ) ,
13391335 state : RefCell :: new ( None ) ,
13401336 present_strategy : self . present_strategy ,
13411337 } ;
@@ -1382,7 +1378,7 @@ impl WindowBuilder {
13821378 } ;
13831379 let win = Rc :: new ( window) ;
13841380 let handle = WindowHandle {
1385- dwrite_factory ,
1381+ text ,
13861382 state : Rc :: downgrade ( & win) ,
13871383 } ;
13881384
@@ -1962,7 +1958,7 @@ impl WindowHandle {
19621958 }
19631959
19641960 pub fn text ( & self ) -> PietText {
1965- PietText :: new ( self . dwrite_factory . clone ( ) )
1961+ self . text . clone ( )
19661962 }
19671963
19681964 pub fn add_text_field ( & self ) -> TextFieldToken {
@@ -2176,7 +2172,7 @@ impl Default for WindowHandle {
21762172 fn default ( ) -> Self {
21772173 WindowHandle {
21782174 state : Default :: default ( ) ,
2179- dwrite_factory : DwriteFactory :: new ( ) . unwrap ( ) ,
2175+ text : PietText :: new_with_shared_fonts ( DwriteFactory :: new ( ) . unwrap ( ) , None ) ,
21802176 }
21812177 }
21822178}
0 commit comments