Quelle est l'architecture du système de fenêtrage de Mac OS X?

34

Je connais bien le fonctionnement du système X11: les clients se connectent via un socket au processus serveur et envoient des opérations au serveur Windows pour effectuer certaines opérations en leur nom.

Mais je ne comprends pas (et je ne trouvais pas de bons documents) décrivant comment une application à interface graphique interagit avec le système de fenêtre sur Mac OS X. Certaines de mes questions incluent:

  • Comment une application reçoit-elle les événements du système de fenêtrage?
  • L'application doit-elle s'inscrire auprès du noyau ou d'un serveur système?
  • Comment le système de fenêtrage demande-t-il qu'une application mette à jour son affichage?
  • Comment une application déclenche-t-elle une opération de ré-affichage?
  • Existe-t-il un protocole basé sur des sockets ou un autre système RPC pour le système Windows?
  • Le système de fenêtrage, ou l'application, dispose-t-il d'un accès matériel direct?
  • Quelles sont les opérations disponibles entre les applications client et le système de fenêtrage?
miguel.de.icaza
la source

Réponses:

14

Voici ce que j'ai pu rassembler jusqu'à présent:

Les applications communiquent via une sorte d'API privée avec le processus WindowServer. Le processus WindowServer est celui qui obtient les événements matériels (souris, clavier) et les transmet aux applications clientes. (la question reste ouverte: quel protocole utilisent-ils, s’ils en utilisent, utilisent-ils des ports Mach et MIG, ou des API basées sur Socket, pas sûr).

Quelques informations sont ici:

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

WindowServer est le compositeur Quartz. Les applications utilisent généralement l’API Quartz2D exposée dans l’API CoreGraphics (fonctions CGXXX). Les applications créent des "contextes" CoreGraphics (CGContext) et y dessinent. Que le contexte soit poussé quand il est fait en tant que gros bitmap, ou si les opérations sont envoyées au serveur comme elles sont sur X11 reste une question ouverte.

Il existe une API limitée destinée à contrôler certains aspects du processus WindowServer, le type de paramètres de configuration généralement définis à partir de l'application Paramètres, mais il n'existe aucune documentation sur la manière dont les applications communiquent réellement les demandes graphiques ou les messages de pompage du serveur, à l'exception des informations suivantes: les API Carbone / Cacao exposées.

miguel.de.icaza
la source
le lien est cassé
Mick
3

Le "Qu'est-ce que le cacao?" La section du Guide des principes fondamentaux du cacao contient de nombreuses illustrations de l’architecture de bas en haut.

Kevin Cantu
la source
2
(désolé, je ne peux pas encore publier de notes): Quartz ou Core Graphics est le système de dessin et de fenêtrage sous OS X (remplace QuickDraw). Core Graphics est une partie de Cocoa (dans l'ensemble, le cacao est plus comparable à l'API Win32 que à GDI, à Direct2D ou à X)
KellyClowers
1

XQuartz est le projet open-source du système X.org X Window fonctionnant sous Mac OS X. Leur wiki de développeur et leur liste de diffusion devraient vous aider dans vos questions. Il semblerait que vous ayez besoin de quelqu'un de très impliqué dans le projet pour y répondre.

inverser
la source
4
C'est vrai, mais cela ne concerne que XQuartz, qui est juste un programme qui parle à leur véritable système de fenêtrage. La question était de savoir comment les applications comme XQuarts ou Finder parlent de ce système de fenêtrage
miguel.de.icaza
1

Dans les versions antérieures de MacOS, le levage avait été effectué par QuickDraw; dans OS X, qui a été remplacé par Cocoa ...

Cependant, il ne se limite pas simplement à X11. Par exemple, X11 n'inclut pas l'audio, mais Cocoa.


la source