Taille des menus, du curseur texte et du pointeur de la souris dans les applications

Une fois n’est pas coutume, je ne vais pas parler de magie, mais d’énervement vis à vis des applications, suite à ma situation personnelle.

Atteint d’un glaucome, je suis confronté à une diminution de ma vision qui se traduit par des difficultés à distinguer les textes écrits en petits caractères, en particulier sur les écrans.

Vous allez me dire qu’il est facile aujourd’hui de changer les tailles de caractères pour les régler à notre gout. C’est exact, pour la majorité des systèmes et des applications, soit de façon intuitive en utilisant un zoom intégré (par exemple avec un CTRL + ou un CTRL molette souris), soit par l’utilisation d’option d’affichage, plus ou moins claires.

Mais quid des menus ? quid du curseur ? ou du pointeur de la souris ?
Par exemple, comment faire pour avoir un curseur de saisie de texte dans firefox ou un curseur de souris sous Windows avec les tailles de cette animation ?

tailles du curseur texte et du pointeur de la  souris personnalisées
tailles du curseur texte et du pointeur de la souris personnalisées

Pour un grand nombre de logiciels, ces réglages sont possibles, mais malheureusement peu intuitifs, cachés et peu ou mal documentés. Il m’est arrivé de chercher longtemps dans les documentations, les forums ou les listes de bug certaines informations, puis d’avoir à tester pour réussir à obtenir ce que je voulais…

Vues les difficultés que j’ai rencontrées, je me suis dit qu’il serait peut être utile de rassembler et de publier ces procédures, pour faciliter la vie d’autres personnes. Dans un premier temps, je vais proposer une série d’articles sur les logiciels que j’utilise et pour lesquels j’ai une solution.

Pour commencer, une solution qui couvre un grand nombre de logiciels : sous Windows 10, il est possible de régler la taille du pointeur de la souris, sa couleur et la taille du curseur dans les paramètres Windows. Cet article explique en détail comment le faire. Cela permet d’améliorer le confort visuel de Windows en général et de bons nombre d’applications, comme celles de Microsoft Office, LibreOffice ou encore Gimp.
De même, la taille de la police des menus peut être réglée. Cet article présente la procédure à suivre. Il faudra probablement que vous jouiez sur les deux paramètres « agrandir la taille de la police » et « tout agrandir ». Je vous invite à commencer par « tout agrandir » et à affiner avec « agrandir la taille de la police ».

Mais il va rester des applications pour lesquelles tout ou partie de ces paramètres ne sont pas exploités. Le changement de taille du curseur texte de Windows est ainsi inopérant pour Chrome ou Firefox et celui de la taille des polices insuffisant, comme dans Qt Creator ou Visual Studio …

J’ai des solutions pour Firefox et Thunderbird, ainsi sur les logiciels que j’utilise en développement ( Visual Studio 2019, Netbeans, Notepad++, Gvim, Qt Creator) ou pour la réalisation des formations comme (Opale (scenari.org) ou Openboard. Je les publierai dans de prochains articles;

N’hésitez pas à me faire part de vos questions et de vos remarques pour que je puisse améliorer ces billets. Il y a certainement des cas où j’ai utilisé une usine à gaz pour rien.
N’hésitez également pas à me proposer des solutions pour d’autres logiciels que vous utilisez afin que je les publie ou à me demander des solutions si vous êtes bloqués.

Exercices pour étudier le C++ moderne

C++

 

Si vous apprenez le C++, je vous propose une série d’exercices de type fil rouge pour illustrer les points importants à comprendre.
En effet, lors de l’apprentissage du C++, faire des exercices est très important, car cela permet de mieux comprendre et mémoriser les nombreux éléments que l’on découvre.
Ces exercices font partie de ceux que j’utilise lors de formations, aussi bien en présentiel qu’à distance.

Ces exercices sont placés dans le dépôt github suivant : https://github.com/webformation/initiationCPP
Ils constituent un fil rouge sur un cas relativement réaliste de capteurs (capteurs de température, capteurs de pression, …) pour contrôler une structure quelconque comme un appareil électrique ou une pièce d’une maison.

En suivant les différentes étapes, vous découvrirez comment construire une classe, implémenter des constructeurs et le destructeur, écrire des méthodes, gérer des exceptions pour signaler des erreurs, écrire des opérateurs pour comparer deux capteurs, afficher les valeurs.
Puis vous vous exercerez à construire une hiérarchie de classe, créer des méthodes virtuelles, utiliser le polymorphisme et créer des classes abstraites. Et enfin vous emploierez les templates en implantant dans une classe capteur la généricité pour fournir différents types de résultats de mesure.

Une solution est donnée pour chaque cas, avec des commit successifs dans le dépôt git, en utilisant un projet codeblock.

Elle est écrite en C++ moderne (C++ 11 ou 14), et fait appel à différents éléments de la STL (conteneurs, algorithmes, smart_pointer, …).

N’hésitez pas à me faire part des difficultés rencontrées ou de vos suggestions pour améliorer ces exemples !

A quoi sert if constexpr en C++ 17 ?

WOCinTech Chat Stock Images @ Microsoft NYC

C++ 17 a fourni un lot de nouveautés, dont une très utile lors de la compilation, if constexpr, pour faciliter la vie des développeurs. Elle offre plus de possibilités que l’utilisation des #if et autres #ifdef.

Template variadique utilisant une liste d’initialisation avec inférence de type

Prenons l’exemple d’une fonction template qui fournit un vecteur à partir d’un nombre variable de paramètres. Elle peut s’écrire ainsi :

template <typename T1,typename... T> vector<T1> init(T... args) {
    vector<T1> v;
    for (auto x : { args... }) {
        v.push_back(x * x);
    }
    return v;
}

Cette fonction peut être utilisée ainsi, sans aucun problème :

    auto v1 = init<int>(1, 2, 3);

Malheureusement, si on appelle la fonction sans aucun paramètre, le compilateur signale une erreur sur la 3ième ligne de la fonction.

auto v2 = init<int>();

Que se passe t-il ? Lors de l’instanciation du template, le compilateur génère une ligne de la forme :

for (auto x : { })

C’est une instruction invalide, puisqu’auto n’est pas capable de déterminer un type à partir d’une liste vide.
Pour éviter ce problème, on pense immédiatement à effectuer un test sur le nombre d’arguments effectivement passés en utilisant sizeof…(). Mais comment ?

Utilisation de #if ou de if ?

Un #if ne sera pas utilisable, car le passage par le préprocesseur intervient avant la génération du code du template par le compilateur.
Et si on emploie une instruction if classique, la compilation échoue toujours.

template <typename T1,typename... T> vector<T1> init(T... args) {
    vector<T1> v;
    if (sizeof...(args) > 0) {
        for (auto x : { args... }) {
            v.push_back(x * x);
        }
    }
    return v;
}

Le développeur sait que cette condition est suffisante et que le code ne sera jamais appelé. Mais pas le compilateur, qui génère toujours l’instruction avec la liste vide lors de l’instanciation du template.

Utilisation de if constrexpr

if constexpr permet de résoudre le problème. Cette instruction permet de définir des conditions évaluées à la compilation. Dans le cas d’un template, elle permet donc d’inclure ou d’exclure des lignes générées par le compilateur. Une réécriture de la fonction init permet donc d’éviter les lignes posant problème.

template <typename T1,typename... T> vector<T1> init(T... args) {
    vector<T1> v;
    if constexpr (sizeof...(args) > 0) {
        for (auto x : { args... }) {
            v.push_back(x * x);
        }
    }
    return v;
}

L’utilisation de init sans paramètres ne pose maintenant plus aucun problème de compilation et la fonction init peut être appelée avec ou sans paramètre.

Cet exemple provient des formations C++ moderne que j’anime régulièrement.