2012-05-24 14 views
7

Jeśli używamy NSTrackingArea jakiegoś określonego regionu wtedy możemy wdrożyć taki sposób, aby zmienić domyślny kursor:Native OSX Lion rozmiar kursora na zlecenie NSWindow lub NSView

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

I wdrażanie niestandardowego rozmiaru dla NSWindow, który wykorzystuje NSBorderlessWindowMask . I chcesz użyć dwóch strzałek lwa z rodzimego Lwa. Ale tego typu kursory nie istnieją w NSCursor API.

Czy mogę pobrać takie natywne kursory z kodu?
A może muszę przerysować je ręcznie (nie jest to dobry pomysł)?

+0

sam problem tutaj. Czy znalazłeś te zdjęcia kursorów? – Mark

Odpowiedz

1

WebKit zawiera obrazy, które wyglądają dokładnie tak samo jak kursorów używanych przez system, w następującym katalogu:

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

... na przykład, plik „northWestSouthEastResizeCursor.png”.

15

Te obecne w WebKit nie są dostępne w rozdzielczości siatkówki niestety, patrząc w

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

znajdziesz wersję pdf zmiana rozmiaru kursorów.

+0

Czy możesz podać kod prawidłowego ładowania takiego kursora? Nie są one wyświetlane w siatkówce dla mnie :( –

+0

Czy istnieje publiczny interfejs API do pobierania/używania tych kursorów ..? – cacau

5

Oto niektóre przykładowy kod dla załadunku wektorów opartych na (a więc zdolne siatkówki) kursory z 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])]; 

Uwaga Nie wiem, czy to działa w piaskownicy Apps.

1

Istnieją nieudokumentowane metody tworzenia takich kursorów. Oto przykład:

#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 

Oto pełna lista nielegalnych kursorów 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] 
Powiązane problemy