Jaka jest architektura systemu okien Mac OS X?

34

Wiem, jak działa system X11, w którym klienci łączą się za pośrednictwem gniazda z procesem serwera i wysyłają operacje do serwera okien w celu wykonania pewnych operacji w ich imieniu.

Ale nie rozumiem (i nie mogłem znaleźć dobrych dokumentów) opisujących interakcję aplikacji GUI z systemem okien w Mac OS X. Niektóre z moich pytań obejmują:

  • W jaki sposób aplikacja odbiera zdarzenia z systemu okien?
  • Czy aplikacja musi się zarejestrować w jądrze lub na serwerze systemu okienkowego?
  • W jaki sposób system okienkowy żąda, aby aplikacja zaktualizowała swój ekran?
  • W jaki sposób aplikacja wyzwala operację ponownego wyświetlania?
  • Czy istnieje system oparty na gniazdach lub inny system RPC w systemie okienkowym?
  • Czy system okien lub aplikacja ma bezpośredni dostęp do sprzętu?
  • Jakie operacje są dostępne między aplikacjami klienckimi a systemem okienkowym?
miguel.de.icaza
źródło

Odpowiedzi:

14

Do tej pory udało mi się zebrać:

Aplikacje komunikują się przez jakiś prywatny interfejs API z procesem WindowServer, proces WindowServer to taki, który faktycznie pobiera zdarzenia sprzętowe (mysz, klawiatura) i rozsyła je do aplikacji klienckich. (wciąż jest to otwarte pytanie: jakiego protokołu używają, jeśli w ogóle, czy używają portów Mach i MIG, lub jakiegoś API opartego na Socket, nie jestem pewien).

Niektóre informacje są tutaj:

https://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/GraphicsTechnologies/GraphicsTechnologies.html#//apple_ref/doc/uid/TP40001067-CH273-SW1

WindowServer to kwarcowy kompozytor. Zazwyczaj aplikacje używają interfejsu API Quartz2D, który został udostępniony w interfejsie API CoreGraphics (funkcje CGXXX). Aplikacje tworzą „konteksty” CoreGraphics (CGContext) i tam rysują. Czy kontekst jest wypychany, gdy jest wykonywany jako duża bitmapa, czy też operacje są wysyłane do serwera tak, jak na X11, wciąż pozostaje otwartym pytaniem.

Istnieje ograniczony interfejs API, który może kontrolować niektóre aspekty procesu WindowServer, rodzaj ustawień konfiguracyjnych zwykle wykonywanych z aplikacji Ustawienia, ale nie ma dokumentacji dotyczącej tego, jak aplikacje faktycznie komunikują żądania graficzne lub pompują wiadomości z serwera, inne niż odsłonięte API węgla / kakao.

miguel.de.icaza
źródło
link jest zerwany
Mick
3

„Co to jest kakao?” sekcja Przewodnika po podstawach kakao zawiera kilka świetnych ilustracji architektury od podstaw.

Kevin Cantu
źródło
2
(przepraszam, nie mogę jeszcze dodawać notatek): Quartz lub Core Graphics to system rysowania i okienkowania w OS X (zastępujący QuickDraw). Podstawowa grafika to jedna część Cocoa (Cocoa jako całość jest bardziej porównywalna z całym Win32 API, a nie GDI, Direct2D lub X)
KellyClowers
1

XQuartz to projekt open source X.org X Window System działający na Mac OS X. Ich wiki programistów i lista mailingowa powinny pomóc ci w zadawaniu pytań, wydaje się, że potrzebujesz kogoś głęboko zaangażowanego w projekt, aby na nie odpowiedzieć.

odwracać
źródło
4
Zgadza się, ale dotyczy to tylko XQuartz, który jest tylko programem rozmawiającym z ich prawdziwym systemem okienkowym. Pytanie było o tym, jak zrobić aplikacje jak XQuarts lub Finder rozmawiać z tym powłokę graficzną
miguel.de.icaza
1

We wcześniejszych wersjach MacOS podnoszenie odbywało się za pomocą QuickDraw; w OS X, który został zastąpiony przez Cocoa ...

Jednak nie jest to po prostu równoległy X11. Na przykład X11 nie zawiera dźwięku, ale Cocoa tak.


źródło