Question

In my app I want to show popover in NSTextView and need to convert coordinates of selected rect in NSTextView to screen coordinates. I've tried this code:

NSWindow* viewWindow = [self window];
NSRect rect = [self firstRectForCharacterRange:[self selectedRange]];
rect = [[self superview] convertRect:rect toView:nil]; //converting to NSClipView coordinate system
rect = [viewWindow convertRectToScreen:rect];
return rect;

It works almost good, but returned rect has extremely "broken" origin by "x". E.g., if rect.origin.x is 670 at the beginning, in the end it is equal to 1022.

Any ideas?

Thanks.

Was it helpful?

Solution

I got it.

- (NSRect)rectForPopover
{    
    NSRect rect = [self firstRectForCharacterRange:[self selectedRange]];
    NSRect txtViewBounds = [self convertRectToBacking:[self bounds]];
    txtViewBounds = [self.window convertRectToScreen:txtViewBounds];

    rect = [[self superview] convertRect:rect toView:nil];
    rect = [self.window convertRectToScreen:rect];

    rect.origin = NSMakePoint(rect.origin.x - txtViewBounds.origin.x - self.window.frame.origin.x, rect.origin.y);

    return rect;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top