Je me suis plusieurs fois frotté à la création de thème GDM. Et les problèmes structurels de la syntaxe à utiliser pour créer un thème ne font que se multiplier à mesure que l'on veut faire quelques choses de rechercher, comme un thème « flexible », qui s'adapte à la résolution de l'écran.

Mauvais accueil

C'est très difficile de faire un thème pour le greeter de GDM. Pour deux raisons :

  • La doc est très difficile à trouver, mais avec un peu de hargne, on peut lire la description détaillé du format de thème de gdm..
  • Il semble que le concepteur du greeter (un type de chez sun, sans doute) ai ajouté au fur et a mesure les balises et les attributs du greeter. Il y a tout pour faire le thème bien classique ou on ne change que l'image de fond et les couleurs, mais ça n'a pas été conçut comme CSS ou on donne un véritable outils au designer pour créer un thème.

Un travail brouillion qui complique la vie du designer.

La sémantique est affreuse, tout n'est qu'item et box. les box sont en fait des listes d'item. Les items sont de type button ou text, list, etc. J'éssairai de lister les points précis qu'il faudrait améliorer.

De plus, certains attribut similaires comme width et height ne sont pas implémenté de la même manière. Leur comportement est étrange suivant le contexte. Essayez de faire une liste d'utilisateur dont la hauteur faire x% d'un conteneur, vous n'arrivez à rien. Tandis que définir la largeur en pourcentage est parfaitement supporté...

Évidement, de nombreux attribut ont été ajouté afin de contourner des problèmes de conception. Par exemple, il y a un attribut expand qui est censé étendre les dimension de l'item enfant. Ça marche une fois sur deux. et c'est très mal expliqué dans la doc. C'est censé être la réciproque de width="box".

L'implémentation des dimensions (largeur et hauteur) est pitoyable. Un des effet est qu'il est possible d'utiliser des valeurs en pourcentage seulement pour les widgets à la racine du greeter, pas pour les widget imbriqués. On se retrouve soit à donner des largeur arbitraire qui sont soit trop grosse pour un petit écran, soit ridicule pour un grand écran. C'est notemment le cas pour la liste des utilisateurs.

Ceci dit, GDM possède quand même quelques bons points : la gestion des images (pixmap et scalable) est bien gérer avec le redimensionnement et la transparence qui sont de qualité.

Quelques idées:

  • Appliquer des propriétés à tout les widgets : width, height, min-width, min-height, padding et sans doute d'autres. Il faut évidement que leur comportement soit identique d'un widget à l'autre.
  • Ne pas utiliser de balise ne servant qu'à définir des attributs de positionnement et d'espacement.
  • Implémenter un comportement similaire à tous les attributs de largeur et de hauteur : pouvoir définir en pixels (positif ou négatifs) et en pourcentage (positifs ou négatifs).
  • Oublier le nœud box et écrire directement les enfants dans une balise.
  • Implémenter les pourcentages de dimension systématiquement en fonction du widget parent.
  • À continuer ...