Как найти положение пикселя символа в NSTextView? - PullRequest
3 голосов
/ 15 мая 2009

В настоящее время я использую следующий код для извлечения логической позиции глифов в NSView, которая работает нормально, однако кажется, что она немного медленная, и позиции не точно соответствуют точке кернинга и базовой линии символа. Вполне возможно, что все, что мне нужно сделать, это перебрать сами глифы один за другим и построить прямоугольник сам.

Этот код (функции) сейчас, просто хочу посмотреть, можно ли сделать это более эффективно или правильно.

// lastRange is any valid, bounds checked character range in an NSTextView


NSLayoutManager *layoutManager = [self layoutManager];
NSRect paragraphRect = [layoutManager boundingRectForGlyphRange:lastRange inTextContainer:[self textContainer]];

// Draw a gradient around the range.
NSGradient * gradient = [self indicatorGradient];
CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(myContext , kCGBlendModeMultiply);
[gradient drawInRect:paragraphRect angle:90];

1 Ответ

3 голосов
/ 17 мая 2009

Это способ сделать это. Однако, если lastRange - это CharacterRange, как вы описали, вы должны указать его через

lastRange = [layoutManager glyphRangeForCharacterRange:lastRange actualRange:NULL];

первым, чтобы получить правильные результаты. Вам также необходимо убедиться, что вы учли происхождение текстового контейнера, в котором расположен текст, а затем выполните команду

NSPoint containerOrigin = [[container textView] textContainerOrigin];
paragraphRect = NSOffsetRect(paragraphRect,containerOrigin.x,containerOrigin.y);

перед нанесением.

...