Comme le modèle des configurations d'entrée, ICON s'appuie sur une classification des dispositifs en dispositifs système, dispositifs utilitaires et dispositifs d'application, à laquelle il ajoute un type particulier de dispositif d'application, les dispositifs de boîte à outils graphiques. La bibliothèque de dispositifs d'ICON comprend tous les types de dispositifs hormis les dispositifs d'application, qui sont sont décrits par chaque application interactive.
Un dispositif système représente une ressource globale, en général un dispositif d'entrée physique. Il est:
Partagé: Plusieurs copies d'un dispositif système, si elles sont paramétrées de la même manière, émettront les mêmes données.
Volatile: à un instant donné, un dispositif système peut être présent ou non dans la bibliothèque d'ICON, selon la configuration matérielle et logicielle du système hôte. Lorsqu'une configuration dans laquelle il est utilisé est en cours d'exécution, sa durée de vie est au moins celle de la configuration. Il peut cependant disparaître entre deux exécutions.
ICON repose sur un ensemble d'APIs d'entrée existantes afin d'accéder aux dispositifs d'entrée. Chacune de ces APIs d'entrée fournit une interface unifiée pour l'accès aux informations et aux données produites par une classe spécifique de dispositifs, dans un système d'exploitation donné.
ICON produit à son tour une vision unifiée de ces classes de dispositifs. Chaque API d'entrée gérée par ICON génère un ensemble de dispositifs système dans la bibliothèque de dispositifs. L'ensemble des dispositifs système est variable, et est fonction de la configuration logicielle (pilotes installés) et physique (dispositifs connectés) du poste de travail.
La plupart des APIs d'entrée fournissent plusieurs niveaux d'accès aux dispositifs, à travers des mécanismes spécifiques de traitement de données et d'abstraction. Dans notre optique, le court-circuitage de ces services par l'utilisation exclusive des services bas-niveau est nécessaire à une utilisation optimale des capacités inhérentes à chaque dispositif d'entrée.
Bien qu'ICON constitue une sur-couche aux APIs d'entrée, il reste à l'écart de toute abstraction simplificatrice en présentant une vision essentiellement bas niveau des dispositifs d'entrée. Le modèle de dispositifs à base de canaux d'ICON autorise et même encourage cette vision.
Actuellement, ICON fournit sous les systèmes Microsoft Windows l'accès à la souris (bas-niveau) et au clavier (niveau boîte à outils), aux tablettes graphiques à travers l'API Wintab [Poyner, 1996], aux dispositifs de jeu et aux contrôleurs isométriques 3D à travers l'API DirectInput [Microsoft, 2003a], et à la reconnaissance vocale à travers l'API JavaSpeech [Sun, 1998] (la reconnaissance gestuelle également prise en charge, mais sous forme de dispositif utilitaire). Sous X Windows sont accessibles tous les dispositifs implémentés par la XInput Extension [Patrick and Sachs, 1994]. Un dispositif système particulier nommé VirtualUser permet de rejouer des signaux préalablement entregistrés en sortie de dispositifs système. ICON comprend également des dispositifs système de sortie, permettant ainsi de jouer de la musique sur des cartes son, ou faire de la synthèse vocale. La bibliothèque d'ICON est extensible, et des dispositifs système reposant sur d'autres APIs d'entrée peuvent y être ajoutées.
La figure 4.1 montre des exemples de dispositifs système
tels qu'ils apparaissent dans ICON. Le premier dispositif, à gauche, est une
souris bas niveau, qui émet des valeurs positionnelles relatives
et
. Contrairement aux coordonnées écran traditionnellement utilisées dans les
systèmes à événements, ces valeurs traduisent directement les actions
effectuées sur le dispositif physique. Elles peuvent ainsi être interprétées
indépendamment de toute notion de pointeur (et ne sont pas, en particulier,
contraintes aux bords de l'écran).
Le second dispositif est un clavier qui émet les changements d'état de chaque touche individuelle, mais qui est également capable d'émettre des « codes touche ». La tablette graphique émet des informations spécifiques à chaque pointeur physique (stylet, gomme, souris,...) présent sur tablette, ainsi que des valeurs synthétiques de position, de pression et d'orientation. Enfin, le dispositif de commande vocale émet les chaînes de caractères reconnues ou leur indice, conformément au vocabulaire spécifié dans les paramètres du dispositif.
Les dispositifs utilitaires sont les dispositifs de la bibliothèque d'ICON qui ne sont pas des dispositifs système. Ces dispositifs sont autonomes (chaque copie d'un dispositif se comporte indépendamment des autres) et persistants (un dispositif utilitaire est toujours présent dans la bibliothèque d'ICON, indépendamment de la configuration logicielle et matérielle du système). Nous décrivons dans cette section les différents types de dispositifs utilitaires.
Un dispositif de traitement effectue essentiellement des transformations de données. Ils n'ont pour la plupart pas d'entrées/sorties implicites et sont par conséquent déterministes. D'autres se basent sur un temps absolu, ce qui les rend non-déterministes (le temps n'est pas explicite dans ICON et il n'est accessible que sous forme d'entrée implicite).
La bibliothèque d'ICON comporte une trentaine de dispositifs de traitement qui comprennent les opérateurs mathématiques, les opérateurs logiques, les dispositifs de traitement de signal, les adaptateurs de type et de domaine, et les dispositifs pour le contrôle conditionnel et le routage.
![]() |
La figure 4.2 illustre quelques-uns de ces dispositifs. À gauche, un dispositif d'addition acceptant différents types (mutable) et un dispositif de transformation linéaire paramétrable. Ensuite sont représentés deux opérateurs booléens, un dispositif passe-bas paramétrable, un adaptateur de types (cast) automatique et un échantillonneur temporel, et enfin un « passeur » conditionnel et un intégrateur qui permet de transformer des valeurs relatives en valeurs absolues.
La plupart des dispositifs de traitement sont mutables, c'est-à-dire qu'ils se spécialisent suivant les types de slots qui leurs sont connectés ou en fonction de leur paramétrage. C'est le cas par exemple du dispositif plus de la figure 4.2, qui est capable d'effectuer des additions sur plusieurs types, ou du dispositif typeAdapter, qui se spécialise selon les types qui lui sont connectés en entrée et en sortie.
Les dispositifs à retour graphique sont des dispositifs utilitaires qui produisent un affichage graphique afin d'émettre des informations vers l'utilisateur (feedback). Ces dispositifs comportent des sorties implicites, mais contrairement aux dispositifs système, ils sont persistants car indépendants de toute configuration logicielle. Concernant la configuration matérielle, nous supposons que dans les systèmes ICON un écran est toujours disponible. Dans le cas contraire (prise en compte de systèmes embarqués, par exemple), ces dispositifs appartiendraient à la catégorie système.
Les dispositifs à retour graphique actuellement présents dans ICON sont représentés sur la figure 4.3. À gauche apparaissent les dispositifs d'affichage de données brutes, essentiellement utilisés pour le débogage de configurations. Le premier affiche l'historique des données qu'il reçoit sur la sortie standard. Le second affiche ses dernières valeurs reçues dans une fenêtre de dialogue.
Les dispositifs suivants animent des objets graphiques en incrustation (overlay) par-dessus les autres éléments de l'écran. Le dispositif curseur permet d'animer un pointeur en fonction des positions en coordonnées écran qu'il reçoit, et comporte également des slots booléens destinés à recevoir et transmettre des états de boutons. Ce dernier aspect lui confère un rôle de dispositif virtuel. La fenêtre de propriétés de ce dispositif, représentée sur la figure, offre le choix entre plusieurs pointeurs prédéfinis. Chaque copie d'un dispositif curseur est autonome (hormis les recouvrements visuels), ce qui autorise les curseurs multiples.
Les deux derniers dispositifs offrent des retours graphiques similaires au curseur, bien que plus avancés: le dispositif toolglass permet d'animer une barre d'outils semi-transparente [Bier et al., 1993], et le dispositif quikwrite permet de contrôler un éditeur de texte avec uniquement un pointeur. Ces dispositifs, qui décrivent également des techniques d'interaction, sont décrits plus en détail par la suite, dans la section 4.4.4.
Les affichages en incrustation sont actuellement implémentés au niveau de la boîte à outils Swing, la plupart des systèmes d'exploitation (dont Microsoft Windows) n'offrant pas ce type de service. Les mécanismes employés actuellement permettent d'afficher et d'animer par-dessus n'importe quelle fenêtre Swing un ou plusieurs composants graphiques semi-transparents, sans modifier le code de l'application. Ces affichages restent cependant limités aux fenêtres Swing, et les dispositifs qui les emploient appartiennent par conséquent à la catégorie des dispositifs de boîte à outils graphique (voir section suivante), bien qu'en réalité ils ne communiquent pas avec les composants interactifs. Mais il n'est pas exclu qu'à terme, les plate-formes actuelles fournissent des services d'incrustation et que les dispositifs de retour graphique sophistiqués soient fournis comme des services de base dans ICON.
D'autres dispositifs à retour graphique, basés ou non sur les mécanismes d'incrustation, peuvent être implémentés et ajoutés à la bibliothèque d'ICON.
Les dispositifs de boîte à outils graphique, situés à mi-chemin entre la
catégorie des dispositifs utilitaires et celle de dispositifs d'applications,
permettent un contrôle générique de ces dernières. À travers des entrées ou des
sorties implicites, ces dispositifs communiquent avec les composants
interactifs (widgets) des fenêtres développées avec la boîte à outils.
Les références vers les fenêtres contrôlées sont passées en paramètre à travers
le contexte d'exécution (
section 4.3.2). ICON comporte des
dispositifs de boîte à outils liés à Swing. Nous les décrivons ici.
Il existe deux types de dispositifs de boîte à outils graphique:
Les sélecteurs. Les sélecteurs sont des dispositifs qui émettent en sortie des références vers des composants interactifs. Chaque sélecteur décrit une stratégie de sélection pour ces composants. Les sélecteurs standards des boîtes à outils sont la sélection positionnelle (picking) et le focus. D'autres stratégies peuvent être développées, comme les références statiques ou les sélections multiples.
Les manipulateurs. Les manipulateurs sont des dispositifs qui prennent en entrée des références vers des composants interactifs. Chaque manipulateur possède des fonctionnalités de contrôle propres à une classe donnée de composants, et emploie les références reçues en entrée pour déterminer sur quelles instances opérer. Parmi ces dispositifs, un manipulateur de surface offre un contrôle générique des composants interactifs. Celui-ci expose toutes les opérations possibles sur ces composants, telles que l'émission d'événements positionnels. Ensuite, chaque manipulateur de modèle décrit les opérations supplémentaires qu'il est possible d'effectuer sur une classe particulière de composants: modification de la valeur d'une barre de défilement ou insertion de texte dans une zone de texte, par exemple.
ICON inclut un ensemble de dispositifs Swing, dont le rôle est de permettre d'interagir, de façon standard ou non, avec toute application reposant sur cette boîte à outils. Afin de permettre de repenser l'intégralité de l'interaction avec Swing et d'éviter les interférences avec ses techniques d'interaction standard, ICON désactive par défaut toute gestion événementielle des entrées lors de l'exécution d'une configuration:
Désactivation du clavier. Lorsque le dispositif clavier est utilisé dans une configuration en cours d'exécution, ICON désactive l'interprétation des événements clavier dans Swing en consommant ces événements dans la file d'événements Java. ICON détourne également la combinaison Alt+C, utilisée pour stopper la configuration.
Désactivation de la souris. Lorsque le dispositif souris est utilisé dans une configuration en cours d'exécution, ICON désactive l'interprétation des événements souris, ainsi que le curseur système. Ce dernier est rendu invisible et maintenu dans une fenêtre Swing.
Les dispositifs Swing sont représentés sur la figure 4.4. Ceux-ci incluent deux sélecteurs standards: le picking et le focus. Le premier émet une référence vers le composant qui se trouve sous la dernière position reçue en entrée, lorsque son slot pick est à vrai. Le dispositif de focus communique avec le système de focus de Swing: il notifie des changements de focus, et permet également de contrôler ce focus en passant au composant suivant ou précédent.
Le dispositif suivant est un manipulateur de surface qui déclare toutes les actions qu'il est possible d'effectuer sur un objet de type JComponent. Un certain nombre de slots d'entrée permettent de simuler les manipulations positionnelles standard avec une granularité assez fine. Ces slots incluent une position, trois boutons, et des modificateurs (touches de contrôle, double-clic). À partir de ces informations, le dispositif construit des événements souris synthétiques (de type MouseClicked, MouseMoved, MouseDragged, etc.), qui sont émis vers le composant en cours. D'autres slots permettent de modifier l'état interne du composant, comme sa visibilité ou son focus.
Les dispositif JScrollbar offre différentes manières de contrôler la valeur courante des barres de défilement et des curseurs (sliders). Le dispositif JText permet quant à lui de contrôler sur les composants textuels le placement du caret et d'y insérer du texte. Il expose en outre toutes les actions abstraites déclarées par le composant Swing, telles que la suppression de texte ou le copier-coller.
Ces 5 dispositifs constituent une bibliothèque minimale pour expérimenter le contrôle des applications Swing avec ICON (un projet extérieur à cette thèse étant en cours pour développer un bibliothèque complète de dispositifs reposant sur la boîte à outils Jazz/Piccolo). Notre bibliothèque expérimentale offre cependant déjà une grande richesse quant aux possibilités de construction de techniques d'interaction non standards, et nous a permis de valider les principes de base des dispositifs de boîtes à outils, à savoir les notions de sélecteurs et de manipulateurs.
Notons enfin que les dispositifs Swing maintiennent une référence vers une fenêtre unique et opèrent sur un seul composant de cette fenêtre à la fois, mais qu'il est tout à fait envisageable d'étendre ces dispositifs pour gérer des listes de références, aussi bien pour les fenêtres que pour les composants.
ICON laisse les détails de gestion des systèmes de coordonnées aux boîtes à outils graphiques et aux applications. Il emploie un système de coordonnées unique, à savoir des coordonnées écran en double précision. Il s'agit d'une convention que les dispositifs d'entrée positionnels, les dispositifs de boîtes à outils graphiques et les applications partagent.
L'usage de la résolution de l'écran comme système de référence évite les conversions multiples et permet d'attribuer une sémantique précise aux slots positionnels présents en entrée ou en sortie sur des dispositifs comme le Pick. L'emploi de valeurs réelles plutôt qu'entières possède quant à lui plusieurs avantages. Tout d'abord, il réduit de façon importante les pertes de précision dans les conversions de coordonnées locales en coordonnées écran. Ensuite, certains dispositifs positionnels absolus comme la tablette graphique possèdent une résolution bien plus importante que celle de l'écran4.1, et cette résolution peut ainsi être exploitée par les applications (par exemple les applications de dessin) et par certaines techniques d'interaction comme la reconnaissance gestuelle. Par ailleurs, certaines boîtes à outils possèdent un mode d'affichage graphique supérieur à la résolution de l'écran (nommé anti-aliasing dans Swing), qui peut être avantageusement exploité par les dispositifs de feedback ou les applications.
Bien qu'une application interactive puisse être contrôlée de manière générique par les dispositifs de boîte à outils graphique, les développeurs peuvent étendre la contrôlabilité de leur application en implémentant et en déclarant des dispositifs spécifiques: ce sont les dispositifs d'application.
Les dispositifs d'application sont les dispositifs qui n'appartiennent pas à la bibliothèque d'ICON et qui sont fournis par les applications.
La figure 4.5 montre une application de dessin en Java, ICONDraw (à droite), qui a été écrite pour être entièrement reconfigurable par ICON. Cette application est totalement isolée des événements Java standards, hormis les composants interactifs Swing situés autour de la zone de dessin. Elle décrit simplement la façon dont elle s'attend à être contrôlée en exposant ses outils de dessin sous forme de dispositifs d'application (figure 4.5, image de gauche).
Les outils de dessin sont au nombre de quatre: dessin à main levée, tracé de lignes et de rectangles, et gomme. Ces outils sont contrôlés par l'émission, à travers les slots p0 et p, d'une ou deux séries de positions (les lignes et les rectangles sont définies par leurs deux extrémités). Un outil peut également être activé ou désactivé (slot activate) et recevoir des attributs graphiques tels que la taille de la brosse et les composantes couleur RGBA (slot brush).
Les outils de dessin gèrent également un retour graphique, ainsi que deux modes d'utilisation, le mode courant étant spécifié par le slot use. Dans le mode « non utilisé », un retour graphique est effectué sur la position et les attributs de la brosse courante. En mode « utilisé », le retour graphique est effectué sur la forme géométrique en cours de création. Cette forme est validée et ajoutée au dessin lors du passage suivant au mode « non utilisé ».
Nous dégageons trois grands types de dispositifs d'application, adaptés à un contexte de programmation orientée-objet comme java:
Les dispositifs de classe. Un dispositif de classe est un dispositif d'application qui représente une classe d'objets. Les slots décrivent les opérations qui peuvent être effectuées par l'utilisateur sur les objets de cette classe. Les dispositifs de classe comportent en entrée un slot de type objet, qui spécifie la ou les instances cibles. Les JComponent et leurs dérivés, décrits précédemment dans la section 4.2.3, en sont des exemples. Les dispositifs de classe sont en général utiles pour contrôler des objets créés et supprimés dynamiquement pendant l'exécution d'une configuration.
Les dispositifs d'instance statiques. Les dispositifs d'instance statiques représentent des instances particulières de classes. Seules les instances créées puis convenablement déclarées avant l'initialisation d'une configuration d'entrée seront visibles et contrôlables. Par exemple, après la création et l'initialisation d'une fenêtre, un dispositif d'instance statique pourra être créé pour chaque composant interactif présent dans la fenêtre. Les dispositifs d'instance statiques sont utiles pour le contrôle dédié.
Les dispositifs d'instance dynamiques. Les dispositifs d'instance dynamiques représentent des instances de classes qui sont créées à la demande d'ICON. Lors du lancement d'une configuration d'entrée, chaque dispositif d'instance dynamique présent dans la configuration est ouvert par un appel à sa méthode open. Dans cette méthode, un gestionnaire d'instances de l'application crée l'instance et l'installe, c'est-à-dire la lie au reste de l'application. D'autres objets peuvent être créés durant cette procédure d'installation. Les dispositifs de dessin d'ICONDraw sont des dispositifs d'instance dynamiques: un outil de dessin est instancié pour chaque dispositif présent dans la configuration. Plusieurs instances du même outil de dessin peuvent coexister, et il n'existe pas de limite quant au nombre d'outils présents dans la fenêtre de dessin. Les dispositifs d'instance dynamiques, très puissants, sont utiles pour décrire des outils, c'est-à-dire des objets de manipulation qui ne font pas partie intégrante du modèle interne de l'application.