react-native-macos icon indicating copy to clipboard operation
react-native-macos copied to clipboard

onpress emit in error area when view use transform

Open smallnewer opened this issue 5 years ago • 4 comments

Is this a bug report?

yes

Have you read the Contributing Guidelines?

yes

Environment

Environment: OS: macOS High Sierra 10.13.6 Node: 8.3.0 Yarn: 1.12.3 npm: 5.3.0 Watchman: 4.9.0 Xcode: Xcode 10.1 Build version 10B61 Android Studio: Not Found

Packages: (wanted => installed) react: 16.2.0 => 16.2.0 react-native: Not Found

Target Platform: macos

Steps to Reproduce

  1. init a project use react-native-macos init xxx
  2. run js code below (click red area and move it to left 10px)
  3. click lower half of red area,not work.

ScreenFlow

Expected Behavior

emit click in [100,300] of y.

Actual Behavior

emit click in [0, 200] of y.

code

class Demo extends React.Component {
    constructor(props){
        super(props);

        this.state = {
            left: 100,
        };
    }
    render() {
        return (
            <TouchableOpacity 
                onPress={()=> this.setState({left: this.state.left+10})}
                style={{position:"absolute", right:this.state.left,width:200,height:200,transform:[{translateY:100}],backgroundColor:"red"}}>
            </TouchableOpacity>
        );
    }
}

smallnewer avatar Mar 19 '19 07:03 smallnewer

#228 might fix this for you. You'll need to replace NSWindow usage with RCTWindow.

aleclarson avatar Mar 19 '19 12:03 aleclarson

228 dos't work.😒 I change the hitTest method of RCTView,It can work for my demo now, but I think it also has some bugs. -.- hope for your help.

- (NSView *)hitTest:(CGPoint)point
{

  if ([self isHidden])
  {
    return nil;
  }

  NSPoint p = [self.layer convertPoint: point fromLayer: [self superview].layer];
  for (NSView *subView in [[self subviews] reverseObjectEnumerator]) {
    if (![subView isHidden]) {
      NSView *v = [subView hitTest:p];
      if (v) {
        return v;
      }
    }
  }
  
  if ([self mouse:point inRect:self.layer.frame]) {
    return self;
  }
  return nil;
}

smallnewer avatar Mar 25 '19 08:03 smallnewer

There's definitely a bug in #228 that I'll be looking into sometime soon.

aleclarson avatar Mar 25 '19 12:03 aleclarson

Just pushed some patches to #228. Lemme know if it works for you.

aleclarson avatar Mar 25 '19 21:03 aleclarson