Comment un toucher sur votre iPhone devient un clic sur votre Mac
Envoyer un clic est facile. En envoyer des milliers sur une mauvaise connexion, dans l'ordre, sans faire traîner le curseur, c'est là que le contrôle à distance devient intéressant.
Les positions sont des fractions, pas des pixels
Quand vous touchez l'image, l'iPhone n'envoie pas « pixel 812, 640 ». Il envoie un point entre 0 et 1 sur chaque axe, relatif à la source affichée. Le Mac le convertit en coordonnées réelles pour l'écran ou la fenêtre qu'il capture. C'est pourquoi un toucher tombe au bon endroit que l'image soit ajustée à l'écran ou zoomée, en portrait ou en paysage, sur un écran Retina ou un écran virtuel à la forme de l'iPhone. Aucun des deux côtés n'a besoin de s'accorder sur une résolution.
Tous les messages ne se valent pas
La saisie voyage sous forme de petites commandes JSON sur la connexion de contrôle chiffrée, et l'app traite chaque type différemment :
- Les déplacements de souris ne gardent que le dernier. Si trois déplacements s'empilent pendant que le réseau cale, les deux premiers ne valent rien. Le plus récent les remplace, et les déplacements sont limités à environ 60 par seconde.
- Les défilements s'additionnent. Deux événements de défilement mis en file ensemble deviennent un seul événement avec la somme, aucune distance n'est donc perdue.
- Les clics et les touches ne sont jamais perdus ni réordonnés. Un relâchement de bouton qui arrive avant son appui serait un bogue visible.
Cette petite politique explique l'essentiel de la différence entre un curseur qui glisse et un autre qui saute après un accroc. Elle signifie aussi qu'une mauvaise connexion se traduit par un pointeur moins fluide, jamais par une mauvaise action.
Les touches sont des codes de touche macOS
Un appui sur une touche est un code de touche virtuelle macOS plus des bits de modification pour Majuscule, Contrôle, Option et Commande. L'app Mac le convertit en véritable événement clavier et le poste dans le système, c'est pourquoi elle a besoin de l'autorisation Accessibilité. Les raccourcis suivent l'app dans laquelle vous êtes : le panneau ci-dessus montre les commandes de l'éditeur au premier plan, pas une liste figée.
Faire se comporter les touches comme sur un clavier physique réserve des surprises. Une vraie flèche porte deux indicateurs supplémentaires, un indicateur de fonction et un indicateur de pavé numérique, qu'un événement synthétique naïf omet. Sans eux, Contrôle et flèche haut ne faisaient rien sur le Mac au lieu d'ouvrir Mission Control, alors que le bon code de touche était bien arrivé. Peering active désormais les deux indicateurs, comme le fait un vrai clavier.
Le texte n'est pas une suite d'appuis de touches
Les emoji, les accents et les écritures non latines ne correspondent pas à des codes de touche. Pour ceux-là, l'iPhone envoie les caractères eux-mêmes sous forme de texte, et le Mac les saisit. C'est pourquoi le clavier fonctionne dans toutes les langues, et pourquoi quelques raccourcis du Mac ne marchent pas dans ce mode. C'est un compromis que l'app vous laisse changer dans les Réglages.
Rester synchronisés
L'iPhone envoie un ping au Mac chaque seconde, et le Mac répond en renvoyant le ping, ce qui sert aussi de mesure de latence en direct. Si l'iPhone passe en arrière-plan, il le signale d'abord, car iOS peut geler une app sans fermer ses connexions, et le Mac cesse alors de lui envoyer de la vidéo jusqu'à son retour. Une session peut aussi être réglée en observation seule : le Mac ignore alors la saisie pendant que l'image continue d'arriver.
L'autre sens de cette boucle, c'est comment l'image parvient à l'iPhone. Ensemble, ils déterminent la réactivité de l'ensemble.
Questions
Peering prend-il en charge les emoji et les claviers non anglophones ?
Oui. Le texte qui n'est pas un appui de touche est envoyé sous forme de caractères et saisi sur le Mac, donc les emoji et toutes les langues fonctionnent. Les raccourcis du Mac ne sont envoyés que dans le mode qui envoie des codes de touche.
Pourquoi le curseur reste-t-il fluide sur une connexion faible ?
Les déplacements de souris sont regroupés pour ne garder que la dernière position, et les défilements sont additionnés. Les clics et les touches sont toujours livrés dans l'ordre.