Page 1 of 1

Problème AppVar tokens (é/à)

Unread postPosted: 21 Oct 2024, 19:44
by elyas.creates
Bonsoir! J'ai un problème dans mon code: les accents ne s'affichent pas correctement en lisant l'AppVar, et je ne comprend pas le fonctionnement des tokens:
Code: Select all
void display_file_content(int file_index)
{
    int line_height = 10; // Hauteur d'une ligne de texte
    int x = 10, y = 40;   // Position initiale du texte
    char *content = file_contents[file_index];
    int content_length = strlen(content); // Longueur du contenu du fichier
    char buffer[CHAR_PER_LINE + 1];       // Buffer pour une ligne de texte (constante)
    int line_count = 0;
    int screen_lines = 0;
    int hold_counter = 0;     // Compteur de maintien de touche
    kb_key_t key_pressed = 0; // Touche actuellement pressée

    static kb_key_t last_key_pressed = 0; // Touche pressée lors du dernier cycle

    gfx_FillScreen(bg_color);   // Efface l'écran avec une couleur blanche
    gfx_SetTextFGColor(txt_color); // Texte en noir

    // Afficher le header avec le nom du fichier
    gfx_SetColor(header_color);
    gfx_FillRectangle_NoClip(0, 0, 320, 30);
    gfx_SetTextXY(10, 12);
    gfx_PrintUInt(rtc_Hours, 2);
    gfx_PrintString(":");
    gfx_PrintUInt(rtc_Minutes, 2);
    gfx_SetTextScale(2, 2);
    gfx_PrintStringXY(file_names[file_index], 60, 8);
    gfx_SetTextScale(1, 1);

    // Défilement si le texte dépasse l'écran
    for (int i = 0; i < content_length; i++)
    {
        // Ignorer les caractères nuls
        if (content[i] == '\0')
        {
            break;
        }

        // Gestion du saut de ligne ou lorsque la ligne est remplie
        if (content[i] == '\n' || line_count == CHAR_PER_LINE)
        {
            // Si la ligne est terminée, afficher la ligne et passer à la suivante
            buffer[line_count] = '\0'; // Terminer la chaîne
            if (screen_lines >= scroll_offset && screen_lines < scroll_offset + MAX_LINES_ON_SCREEN)
            {
                gfx_PrintStringXY(buffer, x, y + (screen_lines - scroll_offset) * line_height);
            }
            line_count = 0;
            screen_lines++;
            if (content[i] == '\n')
            {
                continue; // Passer directement à la prochaine ligne
            }
        }

        // Ajouter le caractère courant à la ligne si ce n'est pas un retour à la ligne
        if (content[i] != '\n')
        {
            buffer[line_count++] = content[i];
        }
    }

    // Afficher la dernière ligne si elle n'a pas été affichée
    if (line_count > 0 && screen_lines >= scroll_offset && screen_lines < scroll_offset + MAX_LINES_ON_SCREEN)
    {
        buffer[line_count] = '\0';
        gfx_PrintStringXY(buffer, x, y + (screen_lines - scroll_offset) * line_height);
    }

    // Lecture des touches pour le défilement
    kb_Scan();

    if (kb_Data[7] & kb_Up)
    {

        if (scroll_offset > 0)
        {
            scroll_offset -= SCROLL_SPEED; // Défilement vers le haut
        }
    }
    if (kb_Data[7] & kb_Down)
    {

        if (screen_lines > MAX_LINES_ON_SCREEN + scroll_offset)
        {
            scroll_offset += SCROLL_SPEED; // Défilement vers le bas
        }
    }

    gfx_SwapDraw(); // Actualise l'écran
}

Re: Problème AppVar tokens (é/à)

Unread postPosted: 21 Oct 2024, 19:57
by Adriweb
Du coup, en effet, c'est pas supporté par la police par défaut de GraphX, ces caractères.
Voici ce qui est supporté : https://github.com/CE-Programming/toolc ... 6590-L6717 (_DefaultTextData en bas)

Il y a sûrement moyen de faire ce qu'on veut avec une police personnalisée, cf. FontLibC : https://ce-programming.github.io/toolch ... tlibc.html