Skip to content

Commit dcdcd80

Browse files
authored
Cleanup: de-duplicate ItemRc::map_to_* implementation
As discussed in #9772 (comment)
1 parent 5b6f254 commit dcdcd80

File tree

1 file changed

+12
-21
lines changed

1 file changed

+12
-21
lines changed

internal/core/item_tree.rs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)