2012-05-24 13 views
7

Se usiamo NSTrackingArea per qualche regione determinata allora possiamo implementare tale metodo per modificare il cursore predefinito:nativo OSX Lion ridimensionare cursore per personalizzato NSWindow o NSView

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

ho attuazione personalizzato ridimensionare per NSWindow, che utilizza NSBorderlessWindowMask . E voglio usare i cursori di due frecce di Lion nativi. Ma questo tipo di cursori non esiste in NSCursor API.

Posso ottenere tali cursori nativi in ​​qualche modo dal codice?
O forse devo ridisegnarli a mano (non è una buona idea)?

+0

Stesso problema qui. Hai trovato quelle immagini del cursore? – Mark

risposta

1

WebKit contiene immagini che sembrano esattamente come i cursori utilizzati dal sistema, nella directory seguente:

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

... per esempio, il file "northWestSouthEastResizeCursor.png".

15

Quelli presenti in WebKit non sono disponibili nella risoluzione della retina purtroppo, guardando in

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

troverete la versione pdf di cursori di ridimensionamento.

+0

Puoi fornire il codice per caricare correttamente questo cursore? Non sono mostrati in retina per me :( –

+0

Esiste una API pubblica per ottenere/utilizzare questi cursori ..? – cacau

5

Ecco alcuni esempi di codice per la (e quindi in grado retina) cursori basati su vettori di carico da 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 Non so se questo funziona in applicazioni in modalità sandbox.

1

Esistono metodi non documentati per la creazione di tali cursori. Ecco un esempio:

#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 

Ecco la lista completa dei cursori senza documenti in 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] 
Problemi correlati