Qual é a arquitetura do sistema de janelas do Mac OS X?

34

Estou familiarizado com o funcionamento do sistema X11, no qual os clientes se conectam por meio de um soquete ao processo do servidor e enviam operações ao servidor de janelas para executar determinadas operações em seu nome.

Mas não entendo (e não consegui encontrar bons documentos) descrevendo como um aplicativo GUI interage com o sistema de janelas no Mac OS X. Algumas das perguntas que tenho incluem:

  • Como um aplicativo recebe eventos do sistema de janelas?
  • O aplicativo precisa se registrar no kernel ou em algum servidor de sistema com janelas?
  • Como o sistema de janelas solicita que um aplicativo atualize sua exibição?
  • Como um aplicativo aciona uma operação de reexibição?
  • Existe um protocolo baseado em soquete ou algum outro sistema RPC no sistema de janelas?
  • O sistema de janelas, ou o aplicativo, tem acesso direto ao hardware?
  • Quais são as operações disponíveis entre aplicativos clientes e o sistema de janelas?
miguel.de.icaza
fonte

Respostas:

14

Isto é o que pude reunir até agora:

Os aplicativos se comunicam através de algum tipo de API privada com o processo WindowServer; o processo WindowServer é aquele que realmente obtém eventos de hardware (mouse, teclado) e os envia para os aplicativos clientes. (essa ainda é uma questão em aberto: qual protocolo eles usam, se houver algum, eles usam portas Mach e MIG, ou alguma API baseada em soquete, não tenho certeza).

Algumas informações estão aqui:

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

O WindowServer é o compositor de quartzo. Normalmente, os aplicativos usam a API Quartz2D, que é exposta na API CoreGraphics (funções CGXXX). Os aplicativos criam "Contextos" CoreGraphics (CGContext) e desenham lá. Se o contexto é empurrado quando é feito como grande bitmap ou se as operações são enviadas para o servidor como se estivessem no X11 ainda é uma questão em aberto.

Há uma API limitada exposta para controlar certos aspectos do processo WindowServer, o tipo de definições de configuração normalmente feitas no aplicativo Configurações, mas não há documentação sobre como os aplicativos realmente comunicam solicitações gráficas ou bombeam mensagens do servidor, exceto as APIs de carbono / cacau expostas.

miguel.de.icaza
fonte
o link está quebrado
Mick
3

O "O que é cacau?" A seção do Guia de fundamentos do cacau contém várias ótimas ilustrações da arquitetura de baixo para cima.

Kevin Cantu
fonte
2
(desculpe, ainda não é possível postar notas): Quartz ou Core Graphics é o sistema de desenho e janelas no OS X (substituindo o QuickDraw). Core Graphics é uma parte do Cacau (cacau como um ser inteiro mais comparável a todo o Win32 API, em vez de GDI, Direct2D ou X)
KellyClowers
1

XQuartz é o projeto de código aberto do X.org X Window System que roda no Mac OS X. O wiki e a lista de discussão dos desenvolvedores devem ajudá-lo com suas perguntas, parece que você precisa de alguém profundamente envolvido no projeto para respondê-las.

invertido
fonte
4
Certo, mas isso abrange apenas o XQuartz, que é apenas um programa que fala com o sistema real de janelas. A pergunta era sobre como fazer aplicativos como XQuarts ou Localizador de falar com esse sistema de janelas
miguel.de.icaza
1

Nas versões anteriores do MacOS, o levantamento era feito pelo QuickDraw; no OS X, que foi substituído pelo Cocoa ...

Porém, ele simplesmente não é paralelo ao X11. Por exemplo, o X11 não inclui áudio, mas o cacau inclui.


fonte