Apa arsitektur sistem windowing Mac OS X?

34

Saya akrab dengan cara kerja sistem X11, di mana klien terhubung melalui soket ke proses server dan mengirim operasi ke server jendela untuk melakukan operasi tertentu atas nama mereka.

Tetapi saya tidak mengerti (dan saya tidak dapat menemukan dokumen yang bagus) yang menjelaskan bagaimana aplikasi GUI berinteraksi dengan sistem jendela pada Mac OS X. Beberapa pertanyaan yang saya miliki meliputi:

  • Bagaimana cara aplikasi menerima acara dari sistem windowing?
  • Apakah aplikasi perlu mendaftar dengan kernel, atau server sistem windowing?
  • Bagaimana sistem windowing meminta aplikasi memperbarui tampilannya?
  • Bagaimana cara aplikasi memicu operasi tampilan ulang?
  • Apakah ada protokol berbasis soket, atau sistem RPC lain ke sistem windowing?
  • Apakah sistem windowing, atau aplikasi, memiliki akses perangkat keras langsung?
  • Apa operasi yang tersedia antara aplikasi klien dan sistem windowing?
miguel.de.icaza
sumber

Jawaban:

14

Inilah yang saya dapat kumpulkan sejauh ini:

Aplikasi berkomunikasi melalui semacam API pribadi ke proses WindowServer, proses WindowServer adalah yang benar-benar mendapatkan peristiwa perangkat keras (mouse, keyboard) dan mengirimkannya ke aplikasi klien. (ini masih merupakan pertanyaan terbuka: protokol apa yang mereka gunakan jika ada, apakah mereka menggunakan port Mach dan MIG, atau beberapa API berbasis Socket, tidak yakin).

Beberapa informasi ada di sini:

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

WindowServer adalah Quartz Compositor. Biasanya aplikasi menggunakan API Quartz2D yang terpapar dalam API CoreGraphics (fungsi CGXXX). Aplikasi membuat CoreGraphics "Konteks" (CGContext) dan menggambar di sana. Apakah konteks didorong ketika dilakukan sebagai bitmap besar, atau jika operasi dikirim ke server seperti mereka di X11 masih merupakan pertanyaan terbuka.

Ada API terbatas untuk mengontrol aspek tertentu dari proses WindowServer, semacam pengaturan konfigurasi yang biasanya dilakukan dari aplikasi Pengaturan, tetapi tidak ada dokumentasi tentang bagaimana aplikasi benar-benar berkomunikasi permintaan grafis atau memompa pesan dari server, selain API Karbon / Kakao terbuka.

miguel.de.icaza
sumber
tautannya rusak
Mick
3

"Apa itu Kakao?" bagian dari Panduan Dasar-Dasar Kakao memiliki banyak ilustrasi hebat arsitektur dari bawah ke atas.

Kevin Cantu
sumber
2
(maaf, belum dapat memposting catatan): Quartz atau Core Graphics adalah sistem menggambar dan windowing di OS X (menggantikan QuickDraw). Core Graphics adalah salah satu bagian dari Cocoa (Cocoa secara keseluruhan lebih sebanding dengan seluruh Win32 API, daripada GDI, Direct2D atau X)
KellyClowers
1

XQuartz adalah proyek sumber terbuka dari X.org X Window System yang berjalan pada Mac OS X. Wiki dan milis pengembang mereka akan membantu Anda dengan pertanyaan Anda, sepertinya Anda memerlukan seseorang yang sangat terlibat dalam proyek untuk menjawabnya.

membalikkan
sumber
4
Benar, tapi itu hanya mencakup XQuartz, yang hanya sebuah program yang berbicara dengan sistem windowing mereka yang sebenarnya. Pertanyaannya adalah tentang bagaimana aplikasi seperti XQuarts atau Finder berbicara dengan sistem windowing ini
miguel.de.icaza
1

Dalam versi MacOS sebelumnya, pengangkatan dilakukan oleh QuickDraw; di OS X, yang telah digantikan oleh Cocoa ...

Itu tidak hanya paralel X11 sekalipun. Misalnya, X11 tidak termasuk audio, tetapi Cocoa.


sumber