Journal TapTempo en Slint

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
18
6
nov.
2024

Bonjour à tous,

Ce journal s'inscrit dans la série des journaux TapTempo. Je vous présente : TapTempo en Slint !

Pour ceux qui ne connaissent pas encore Slint, c’est un toolkit pour créer des interfaces graphiques natives. Je suis l'un des développeurs, et j’en ai déjà parlé dans ce journal et cette dépêche.

Dans ce portage de TapTempo, j'ai décidé de tout coder directement en Slint. Normalement, Slint sert principalement à construire l'interface utilisateur (UI), et la logique du programme est écrite dans le langage de programmation.
Mais pour ce journal, j'ai intégré toute la logique directement en Slint.

Pour réaliser cela, j'ai détourné la fonction animation-tick() pour mesurer le temps. Ce n’est pas la méthode la plus orthodoxe, je vous l'accorde, mais… ça fonctionne !

Voici le code :

import { Slider, HorizontalBox } from "std-widgets.slint";
export component TapTempo inherits Window {

    property <int> touch-count;
    property <[duration]> last_samples: [0ms, 0ms, 0ms, 0ms, 0ms, 0ms, 0ms, 0ms, 0ms, 0ms];
    property <int> sample-size: 5;
    property <int> bpm;

    preferred-height: 200px;
    preferred-width: 600px;
    forward-focus: fs;

    VerticalLayout {
        padding: 0.5rem;
        text := Text {
            text: @tr("Hit enter key for each beat");
            wrap: word-wrap;
            horizontal-alignment: left;
            vertical-alignment: center;
            font-size: 2rem;
            vertical-stretch: 1;
        }

        HorizontalBox {
            spacing: 1rem;
            Text {
                text: @tr("Sample size: {}", sample-size);
                vertical-alignment: center;
            }

            Slider {
                value: sample-size;
                minimum: 1;
                maximum: last_samples.length;
                changed(value) => {
                    touch-count = 0;
                    text.text = @tr("Hit enter key for each beat");
                    sample-size = value;
                    fs.focus();
                }
            }
        }
    }

    fs := FocusScope {
        key-pressed(e) => {
            if (e.text == "\n" || e.text == " ") {
                if (touch-count == 0) {
                    text.text = @tr("Hit enter key one more time to start bpm computation...");
                } else {
                    if (touch-count < sample-size) {
                        bpm = 60s / ((animation-tick() - last_samples[0]) / touch-count);
                    } else {
                        bpm = 60s / ((animation-tick() - last_samples[mod(touch-count, sample-size)]) / sample-size);
                    }
                    text.text = @tr("Tempo: {} bpm", bpm);
                }
                last_samples[mod(touch-count, sample-size)] = animation-tick();
                touch-count += 1;
                return accept;
            } else if (e.text == "q") {
                touch-count = 0;
                bpm = 0;
                text.text = @tr("Bye Bye!");
                return accept;
            }
            reject
        }
    }
}

Et si vous voulez essayer, vous pouvez le faire directement en ligne grâce à SlintPad, notre éditeur/preview en ligne.
Lien vers SlintPad

  • # slint

    Posté par  (site web personnel) . Évalué à -7 (+3/-13).

    C'est dommage que slint ne soit pas vraiment libre (il y a Pricing sur la page d'accueil) !

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

    • [^] # Re: slint

      Posté par  (site web personnel) . Évalué à 10 (+10/-0).

      Depuis quand un logiciel libre ne peut-il pas être vendu ? 😉 Slint est sous licences multiples, dont la GPL, et reste donc entièrement libre.

      • [^] # Re: slint

        Posté par  (site web personnel) . Évalué à -2 (+3/-8).

        J'applique des heuristiques pour éviter de perdre du temps :-)

        Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

        • [^] # Re: slint

          Posté par  . Évalué à 10 (+9/-0).

          J'appelle pas ça une heuristique, j'appelle ça de la flemme.

          heuristique : site web -> logo github en haut à droite -> voir si le repo propose bien à priori le code du produit et pas des SDK, ou juste une gestion d'issues -> chercher License

          • [^] # Re: slint

            Posté par  . Évalué à 1 (+0/-1). Dernière modification le 07 novembre 2024 à 07:32.

            J'appelle pas ça une heuristique, j'appelle ça de la flemme.

            La flemme c'est de sauter sur des conclusions hâtives, mais ensuite colporter cette hypothèse comme il le fait c'est du FUD, de la fake news, etc.

            C'est vraiment un comportement que je ne comprends pas qu'il soit admissible ici.

            https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

            • [^] # Re: slint

              Posté par  (site web personnel) . Évalué à 3 (+1/-0).

              Personnellement je l'ai pris comme un bon gros troll. J'avoue que l'absurdité du raccourci m'a fait rire.

              • [^] # Re: slint

                Posté par  (site web personnel) . Évalué à 3 (+0/-0).

                J'ai juste oublié de mettre un smiley :-(

                Sur le fond, il manque une manière de marquer clairement une solution comme vraiment libre sans entourloupe…

                Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

                • [^] # Re: slint

                  Posté par  . Évalué à 5 (+3/-0).

                  Et on appellerait ça une licence ?…

                  Il est important de dénoncer les solutions qui se prétendent "libres" mais ne le sont pas, mais il est tout aussi important de ne pas se planter quand on fait une telle accusation, sinon c'est contre-productif.

                • [^] # Re: slint

                  Posté par  . Évalué à 3 (+0/-0).

                  La FSF et l'OSI pourraient vendre des tampons "OSI approved" avec un audit (et des concours "élu meilleur logiciel de listage des fichiers dans un répertoire par un panel de développeurs")

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.