• # En Perl/Tk, avec ajustement du contraste en temps réel

    Posté par (site web personnel) . En réponse au journal Réglage du contraste sur ordinateur portable. Évalué à 10. Dernière modification le 21 avril 2020 à 03:54.

    Bonjour,

    L’idée est bonne, mais utiliser des outils moins limités que bash permet d’obtenir un ajustement du contraste en temps réel.

    La complexité légèrement plus importante de la création de l’interface graphique est compensée par le fait qu’on n’en est pas réduit à appeler des programmes externes avec deux niveaux de quotes pour faire de simples calculs.

    #!/usr/bin/perl -w
    use strict;
    # Modification basique du contraste de l’affichage sous X.org
    # Vous pouvez utiliser ce programme au choix selon les termes
    # de la GNU General Public License version 2 ou ultérieure
    # ou de la Perl Artistic License.
    use Tk;
    use POSIX qw(log10);
    # Le paramètre gamma semble plutôt exponentiel, donc on utilisera une échelle
    # logarithmique. Le logarithme décimal n’est probablement pas l’idéal, mais il
    # est pratique.
    # Arbitrairement, l’échelle choisie ira de 0.1 à 10, affichée de -100 pour 10−1
    # à 100 pour 101.
    # Récupération des valeurs de contraste actuelles (trois valeurs décimales
    # précédées par des caractères qui ne sont pas des chiffres).
    `xgamma 2>&1` =~ /^\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D*$/
     or die "Impossible de lire le contraste actuel avec xgamma\n";
    # On initialise le contraste avec la moyenne des contrastes rouge, vert et bleu.
    # C’est un pis aller, mais apparemment, xgamma ne prend pas en compte les
    # valeurs différenciées au niveau de xrandr qu’a pu apporter par exemple
    # Redshift, donc n’interfère pas avec celui-ci.
    # Idéalement, il faudrait utiliser xrandr et permettre de modifier les trois ou
    # conserver la proportionnalité.
    my $contraste = log10((1ドル + 2ドル + 3ドル) / 3) * 100;
    # Changement du contraste
    sub chng_contraste {
     system 'xgamma', '-gamma', 10 ** ($contraste / 100);
     # Note : on laisse les valeurs s’afficher sur la sortie d’erreur, mais est-ce
     # plus gênant qu’utile ?
    }
    # Interface graphique
    my $fen = MainWindow -> new('-title' => 'Affichage');
    my $etiq = $fen -> Label ('-text' => 'Contraste') -> pack();
    my $ech = $fen -> Scale ('-orient' => 'horizontal', '-length' => 300,
     '-from' => -100, '-to' => 100, '-resolution' => 1,
     '-variable' => \$contraste, '-command' => \&chng_contraste)
     -> pack();
    my $bout = $fen -> Button('-text' => 'Fermer', '-command' => sub { exit 0; })
     -> pack();
    MainLoop;

    Prendre une bonne disposition : beop.free.fr