Core UI
L'indépendance vis à vis de la résolution est une bonne idée, mais il y a le problème épineux de savoir dessiner tous ces widgets de l'interface utilisateur en utilisant plus de pixels. Quand l'indépendance à la résolution débarquera en 2008 (ou à un autre moment), est-ce que l'interface utilisateur de Mac OS X sera dessinée entièrement en utilisant du dessin vectoriel, à échelle variable ? Cela résoudrait bien la difficulté de savoir où mettre tous ces pixels supplémentaires, Mais je ne suis pas très partisan de cette approche. Pourquoi ne pas inclure simplement des bitmaps géants pour chaque élément d'interface, en se basant sur les mécanismes traditionnelles de changement d'échelle en bitmap pour les dessiner à des tailles plus petites ? Cela marche bien, mais cela semble un peu dispendieux d'utiliser des bitmaps géants pour des lignes et des formes de base qui sont représentées par des vecteurs de façon si compacte.
Hé bien, que voyons-nous donc là, qui se cache dans /System/Library/PrivateFrameworks dans Léopard ? Pourquoi semble-t-il y avoir un nouveau framework, CoreUI.framework ? A quoi cela pourrait-il servir ? Surprise ! Chaque morceau de l'interface utilisateur dans Léopard est dessiné d'une façon entièrement nouvelle en incorporant le meilleur des styles bitmap et vectoriel.
Jetons un coup d'œil au mécanisme. Core UI dessine chaque morceau de l'interface utilisateur sur la base d'une série de recettes XML, qui décrivent la structure et les caractéristiques de chaque élément, en se reportant à des croquis stockés dans des fichiers séparés de ressources, à l'intérieur du paquet du framework. Voici seulement quelques exemples de ces recettes :
Notez la localisation de stockage : le framework Core UI contient d'autres paquets qui à leur tour contiennent des recettes et des ressources. Il est difficile de ne pas considérer cet arrangement comme une sorte de moteur de thèmes, dans la tradition de Kaleidoscope ou de ShapeShifter, et bien sûr d'Appearance Manager d'Apple elle-même... bien que ce soit un moteur proche de concurrents, et susceptible de changer par la suite. Mais maintenant c'est un écart significatif à l'approche qui était restée sans changement, de dessin de l'IU (Interface Utilisateur) dans Tiger ou dans les versions précédentes. A tout le moins, la nouvelle structure recette/ressources montre dénudés les composants qui constituent ce qu'on voir sur l'écran.
Prenons la simple case à cocher, par exemple. Le fichier checkbox.xml est un fichier étourdissant de plus de 2800 lignes de long, dont la plupart crées très vraisemblablement par les outils Apple de création de thème de Core UI (connus depuis longtemps par ceux qui y prêtent attention). Il renvoie à une figure nommée checkmark représentée dans le répertoire de ressources par le fichier checkmark.pdf.
Dans le même répertoire, vous trouverez aussi différents bitmaps "matériels" ; en voilà deux exemples, rapetissés par rapport à leur taille réelle de 398 x 398 pixels
aquamaterial.png (à gauche) et brightmaterial.png (à droite)
Gardez à l'esprit qu'il ne s'agit pas là de radio-boutons géants ; des bitmaps de ce genre sont utilisés comme sources de textures pour des widgets de toutes formes et de toutes tailles.
Et finalement, voici à quoi ressemble une case à cocher dans Léopard à différents facteurs d'échelle :
Cases à cocher aux échelles 1, 2 et 3
Vous voyez comment tout commence à se mettre en place. L'exploration de l'ensemble complet des ressources révèle une division attendue du travail entre de grosses images bitmap en (PNG) et des graphiques vectoriels (en PDF). Tout de qui est linéaire ou a des formes de base est fait avec des vecteurs. Les surfacés léchées, d'un autre côté sont encore représentées avec du bitmap (sans doute amélioré à la main), souvent de très grande taille. En particulier, la manière dont Core UI construit ses widgets Aqua brillants, en utilisant une suite de bitmaps "materials", quelques uns pour l'éclairage, d'autres pour le fond, et ainsi de suite, est une façon élégante de préserver de la mémoire, tout en utilisant du dessin à la main.
Alors, qu'est-ce que cela signifie pour Mac OS X ? Et bien d'abord, cela veut dire que Apple travaille sur une solution d'indépendance à la résolution. On le savait déjà, mais c'est bien de voir jusqu'où les choses sont arrivées. Rappelez-vous que même au facteur d'échelle par défaut (1.0) avec lequel Léopard est livré, tous les widgets de l'interface utilisateur sont dessinés par Core UI. Seules les premières pré-versions de Léopard utilisaient Core UI à des facteurs d'échelle supérieurs à 1.0, et repassaient à l'ancienne manière de faire pour 1.0. La décision d'utiliser Core UI partout révèle une certaine confiance dans la technologie.
Core UI veut dire aussi que Apple est en bonne position pour proposer des modifications fondamentales à l'apparence de Mac OS X, que j'attend depuis longtemps. Core UI n'est certainement pas un moteur d'usage général, capable de créer n'importe quel rendu auquel un artiste peut rêver. Il est clairement fait pour créer des rendus de style Aqua, avec l'ajout de choses comme les ombres portées et les éclairages. Mais l'approche d'ensemble consistant à utiliser des recettes XML pour composer des ressources vectorielles et bitmaps est saine, et elle va engager Apple pour longtemps, en plein dans l'ère de l'indépendance à la résolution.