Подтвердить что ты не робот

NSCursor: использование курсоров высокого разрешения с масштабированием курсора (или сетчаткой)

В OSX пользователь может масштабировать курсор мыши с помощью настроек системы доступности. Поскольку Lion (я думаю) OSX хранит курсоры как PDF файлы и умеет их изменять без изменений. Я хочу использовать те же функции для своего приложения, но используя PDF файлы, поскольку NSImage, используемый для моего NSCursor, просто масштабирует отображаемое растровое изображение, когда установлен уровень масштабирования курсора более 1,0.

Как я:

  • Используйте векторные иллюстрации для моих курсоров и правильно ли их масштабируйте, как это делают системные курсоры?
  • Обнаружить текущий уровень масштабирования курсора.
  • Получать уведомления при изменении уровня масштабирования курсора?

Кроме того, при использовании режима HiDPI для моего экрана и возврата к настройке масштабирования курсора курсор PDF также размывается, так как именно вы, ребята, сетчатые ваши курсоры?

4b9b3361

Ответ 1

Я только что получил решение, сказанное мне на @kongtomorrow. Вот фрагмент, который он мне прислал:

NSImage *   theImage = [NSImage imageNamed: @"CURS_128.pdf"];

NSImage *resultImage = [[NSImage alloc] initWithSize:[theImage size]];

for (int scale = 1; scale <= 4; scale++) {
    NSAffineTransform *xform = [[NSAffineTransform alloc] init];
    [xform scaleBy:scale];
    id hints = @{ NSImageHintCTM: xform };
    CGImageRef rasterCGImage = [theImage CGImageForProposedRect:NULL context:nil hints:hints];
    NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithCGImage:rasterCGImage];
    [rep setSize:[theImage size]];
    [resultImage addRepresentation:rep];
}

NSCursor*   theCursor = [[NSCursor alloc] initWithImage: resultImage hotSpot: NSMakePoint(12,8)];
[self.scrollView setDocumentCursor: theCursor];

Таким образом, по существу, это делает сгенерирование нескольких изображений с соответствующими масштабными факторами в изображении на основе оригинального PDF. Это работает для меня, мой курсор приятный и гладкий.