@@ -470,23 +470,7 @@ impl ItemRc {
470470 /// Returns an absolute position of `p` in the parent item coordinate system
471471 /// (does not add this item's x and y)
472472 pub fn map_to_window ( & self , p : LogicalPoint ) -> LogicalPoint {
473- let mut current = self . clone ( ) ;
474- let mut result = p;
475- let supports_transformations = self
476- . window_adapter ( )
477- . map ( |adapter| adapter. renderer ( ) . supports_transformations ( ) )
478- . unwrap_or ( true ) ;
479- while let Some ( parent) = current. parent_item ( ParentItemTraversalMode :: StopAtPopups ) {
480- let geometry = parent. geometry ( ) ;
481- if supports_transformations {
482- if let Some ( transform) = parent. children_transform ( ) {
483- result = transform. transform_point ( result. cast ( ) ) . cast ( ) ;
484- }
485- }
486- result += geometry. origin . to_vector ( ) ;
487- current = parent. clone ( ) ;
488- }
489- result
473+ self . map_to_item_tree_impl ( p, None )
490474 }
491475
492476 /// Returns an absolute position of `p` in the `ItemTree`'s coordinate system
@@ -495,18 +479,25 @@ impl ItemRc {
495479 & self ,
496480 p : LogicalPoint ,
497481 item_tree : & vtable:: VRc < ItemTreeVTable > ,
482+ ) -> LogicalPoint {
483+ self . map_to_item_tree_impl ( p, Some ( item_tree) )
484+ }
485+
486+ fn map_to_item_tree_impl (
487+ & self ,
488+ p : LogicalPoint ,
489+ item_tree : Option < & vtable:: VRc < ItemTreeVTable > > ,
498490 ) -> LogicalPoint {
499491 let mut current = self . clone ( ) ;
500492 let mut result = p;
501- if current. is_root_item_of ( item_tree) {
493+ if item_tree . is_some_and ( |item_tree| current. is_root_item_of ( item_tree) ) {
502494 return result;
503495 }
504496 let supports_transformations = self
505497 . window_adapter ( )
506- . map ( |adapter| adapter. renderer ( ) . supports_transformations ( ) )
507- . unwrap_or ( true ) ;
498+ . is_none_or ( |adapter| adapter. renderer ( ) . supports_transformations ( ) ) ;
508499 while let Some ( parent) = current. parent_item ( ParentItemTraversalMode :: StopAtPopups ) {
509- if parent . is_root_item_of ( item_tree) {
500+ if item_tree . is_some_and ( |item_tree| current . is_root_item_of ( item_tree) ) {
510501 break ;
511502 }
512503 let geometry = parent. geometry ( ) ;
0 commit comments