macos cocoa cursor nscursor

macos - NSCursor: uso de cursores de alta resolución con zoom del cursor(o retina)



cocoa (1)

En OSX, el usuario puede hacer zoom con el cursor del mouse usando las preferencias del sistema de accesibilidad. Desde Lion (creo) OSX almacena los cursores como archivos PDF y puede redimensionarlos sin problemas. Quiero la misma funcionalidad para mi aplicación, pero usar archivos PDF como el NSImage usado para mi NSCursor solo NSCursor el mapa de bits representado cuando se establece un nivel de zoom del cursor mayor que 1.0.

Cómo puedo:

  • ¿Usar ilustraciones vectoriales para mis cursores y hacer que se ajusten correctamente como hacen los cursores del sistema?
  • Detectar el nivel actual de zoom del cursor.
  • ¿Recibir notificación cuando cambia el nivel de zoom del cursor?

Además, al usar un modo HiDPI para mi pantalla y revertir la configuración del zoom del cursor, el cursor del PDF también está borroso, así que, ¿exactamente cómo están reteniendo sus cursores?


Acabo de recibir la solución que me dijo @kongtomorrow. Aquí está el fragmento que me envió:

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];

Básicamente, lo que esto hace es generar varias representaciones de imagen en los factores de escala apropiados en la imagen, según el PDF original. Esto funciona para mí, mi cursor es agradable y suave.