web-development-kb-pt.site

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

Estou familiarizado com o funcionamento do sistema X11, em que os clientes se conectam por meio de um soquete ao processo do servidor e enviam operações ao servidor de janela para realizar certas operações em seu nome.

Mas eu 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 de janelas?
  • Como o sistema de janelas solicita que um aplicativo atualize sua exibição?
  • Como um aplicativo aciona uma operação de nova exibição?
  • Existe um protocolo baseado em soquete ou algum outro sistema RPC para o sistema de janelas?
  • O sistema de janelas, ou o aplicativo, tem acesso direto ao hardware?
  • Quais são as operações disponíveis entre os aplicativos cliente e o sistema de janelas?
35
miguel.de.icaza

Isso é o que consegui reunir até agora:

Os aplicativos se comunicam por meio 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. (esta ainda é uma questão em aberto: qual protocolo eles usam se houver, eles usam portas Mach e MIG, ou alguma API baseada em Socket, 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 Quartz Compositor. Normalmente, os aplicativos usam a API Quartz2D que é exposta na API CoreGraphics (funções CGXXX). Os aplicativos criam "Contextos" do CoreGraphics (CGContext) e desenham lá. Se o contexto é enviado quando é feito como bitmap grande ou se as operações são enviadas ao servidor como 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 que normalmente são feitas no aplicativo Configurações, mas não há documentação sobre como os aplicativos realmente comunicam solicitações gráficas ou bombeiam mensagens do servidor, a não ser as APIs Carbon/Cocoa expostas.

14
miguel.de.icaza

O "O que é cacau?" seção do Cocoa Fundamentals Guide tem um monte de ótimas ilustrações da arquitetura de baixo para cima.

3
Kevin Cantu

O melhor recurso para os internos do OS X é internos do Mac OS X de Amit Singh . É surpreendentemente detalhado, mas infelizmente cobre apenas o OS X até o 10.4. Os livros do Google têm um visualização .

documentação da Apple para OS X também é um bom recurso e, obviamente, está mais atualizado.

2
redacted

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

1
invert

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

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

1
Kevin Cantu