2012-05-24 7 views
7

Si utilizamos NSTrackingArea por alguna región especificada a continuación, podemos implementar dicho método para cambiar el cursor por defecto:nativa OSX Lion cambiar el tamaño del cursor de encargo NSWindow o NSView

-(void)cursorUpdate:(NSEvent *)theEvent { 
    [[NSCursor resizeLeftCursor] set]; 
} 

que la implementación personalizada cambiar el tamaño de NSWindow, que utiliza NSBorderlessWindowMask . Y quiere usar los cursores de dos flechas de Lion nativo. Pero ese tipo de cursores no existe en NSCursor API.

¿Puedo obtener tales cursores nativos de alguna manera del código?
O tal vez deba volver a dibujarlos a mano (no es una buena idea)?

+0

mismo problema aquí. ¿Encontraste esas imágenes de cursor? – Mark

Respuesta

1

WebKit contiene las imágenes que se ven exactamente los mismos que los cursores utilizados por el sistema, en el siguiente directorio:

/System/Library/Frameworks/WebKit.framework/Versions/Current/Frameworks/WebCore.framework/Resources/ 

... por ejemplo, el archivo "northWestSouthEastResizeCursor.png".

15

los presentes en WebKit no están disponibles en la resolución de la retina por desgracia, mirando en

/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors 

encontrará versión en pdf de los cursores de cambio de tamaño.

+0

¿Puede por favor proporcionar el código de cómo cargar correctamente dicho cursor? No se muestran en retina para mí :( –

+0

¿Hay una API pública para obtener/utilizar estos cursores ...? – cacau

5

He aquí algunos ejemplos de código para cursores de carga basados ​​en vectores (y por lo tanto capaz de retina) de HIServices.framework:

NSString *cursorName = @"resizenortheastsouthwest"; 
NSString *cursorPath = [@"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors" stringByAppendingPathComponent:cursorName]; 
NSImage *image = [[NSImage alloc] initByReferencingFile:[cursorPath stringByAppendingPathComponent:@"cursor.pdf"]]; 
NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:[cursorPath stringByAppendingPathComponent:@"info.plist"]]; 
NSCursor *cursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint([[info valueForKey:@"hotx"] doubleValue], [[info valueForKey:@"hoty"] doubleValue])]; 

Nota no sé si esto funciona en Aplicaciones de espacio aislado.

1

Existen métodos no documentados para crear dichos cursores. He aquí un ejemplo:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wundeclared-selector" 
    if ([NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)]) 
    { 
     self.resizeUpDownCursor = [NSCursor performSelector:@selector(_windowResizeNorthSouthCursor)]; 
    } 
    else 
    { 
     self.resizeUpDownCursor = [NSCursor resizeUpDownCursor]; 
    } 
#pragma clang diagnostic pop 

Aquí está la lista completa de los cursores indocumentados en macOS Sierra:

[NSCursor _windowResizeEastCursor] 
[NSCursor _windowResizeWestCursor] 
[NSCursor _windowResizeEastWestCursor] 
[NSCursor _windowResizeNorthCursor] 
[NSCursor _windowResizeSouthCursor] 
[NSCursor _windowResizeNorthSouthCursor] 
[NSCursor _windowResizeNorthEastCursor] 
[NSCursor _windowResizeNorthWestCursor] 
[NSCursor _windowResizeSouthEastCursor] 
[NSCursor _windowResizeSouthWestCursor] 
[NSCursor _windowResizeNorthEastSouthWestCursor] 
[NSCursor _windowResizeNorthWestSouthEastCursor] 
[NSCursor _zoomInCursor] 
[NSCursor _zoomOutCursor] 
[NSCursor _helpCursor] 
[NSCursor _copyDragCursor] 
[NSCursor _genericDragCursor] 
[NSCursor _handCursor] 
[NSCursor _closedHandCursor] 
[NSCursor _moveCursor] 
[NSCursor _waitCursor] 
[NSCursor _crosshairCursor] 
[NSCursor _horizontalResizeCursor] 
[NSCursor _verticalResizeCursor] 
[NSCursor _bottomLeftResizeCursor] 
[NSCursor _topLeftResizeCursor] 
[NSCursor _bottomRightResizeCursor] 
[NSCursor _topRightResizeCursor] 
[NSCursor _resizeLeftCursor] 
[NSCursor _resizeRightCursor] 
[NSCursor _resizeLeftRightCursor] 
Cuestiones relacionadas