From 3e5ec2107aab115df9e36111cfed1b761723c639 Mon Sep 17 00:00:00 2001 From: Adam Gleitman Date: Tue, 25 Jun 2024 10:37:44 -0700 Subject: [PATCH] Refactor and dedupe some code --- .../Libraries/Text/Text/RCTTextView.mm | 45 ++++++------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/packages/react-native/Libraries/Text/Text/RCTTextView.mm b/packages/react-native/Libraries/Text/Text/RCTTextView.mm index 97a09d17e7b190..be16dcb3abc0eb 100644 --- a/packages/react-native/Libraries/Text/Text/RCTTextView.mm +++ b/packages/react-native/Libraries/Text/Text/RCTTextView.mm @@ -456,32 +456,12 @@ - (void)mouseEntered:(NSEvent *)event // superclass invokes self.onMouseEnter, so do this first [super mouseEntered:event]; - // TODO: dedupe from mouseMoved - if (_descendantViews != nil) { - NSNumber *reactTagOfHoveredView = [self reactTagAtMouseLocationFromEvent:event]; - - RCTUIView *hoveredView = nil; - if ([reactTagOfHoveredView isEqualToNumber:self.reactTag]) { - // We're hovering over the root Text element - hoveredView = self; - } else { - // Maybe we're hovering over a child Text element? - NSUInteger index = [_descendantViews indexOfObjectPassingTest:^BOOL(RCTUIView * _Nonnull view, NSUInteger idx, BOOL * _Nonnull stop) { - *stop = [[view reactTag] isEqualToNumber:reactTagOfHoveredView]; - return *stop; - }]; - if (index != NSNotFound) { - hoveredView = _descendantViews[index]; - } - } - - [self setCurrentHoveredSubview:hoveredView withEvent:event]; - } + [self updateHoveredSubviewWithEvent:event]; } - (void)mouseExited:(NSEvent *)event { - [self setCurrentHoveredSubview:nil withEvent:event]; + [self updateHoveredSubviewWithEvent:event]; // superclass invokes self.onMouseLeave, so do this last [super mouseExited:event]; @@ -489,10 +469,19 @@ - (void)mouseExited:(NSEvent *)event - (void)mouseMoved:(NSEvent *)event { - if (_descendantViews != nil) { + [self updateHoveredSubviewWithEvent:event]; + + // Web environments call mouse move events from the inside outwards, so do this last + [super mouseMoved:event]; +} + +- (void)updateHoveredSubviewWithEvent:(NSEvent *)event +{ + RCTUIView *hoveredView = nil; + + if ([event type] != NSEventTypeMouseExited && _descendantViews != nil) { NSNumber *reactTagOfHoveredView = [self reactTagAtMouseLocationFromEvent:event]; - RCTUIView *hoveredView = nil; if ([reactTagOfHoveredView isEqualToNumber:self.reactTag]) { // We're hovering over the root Text element hoveredView = self; @@ -506,16 +495,8 @@ - (void)mouseMoved:(NSEvent *)event hoveredView = _descendantViews[index]; } } - - [self setCurrentHoveredSubview:hoveredView withEvent:event]; } - // Web environments call mouse move events from the inside outwards, so do this last - [super mouseMoved:event]; -} - -- (void)setCurrentHoveredSubview:(RCTUIView *)hoveredView withEvent:(NSEvent *)event -{ if (_currentHoveredSubview == hoveredView) { return; }