Ignore:
Timestamp:
May 25, 2006, 10:01:10 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Have cucul_utf8_to_utf32 write how many bytes it read.
  • Use that in the SLang driver so that it supports UTF-8 input.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_slang.c

    r974 r982  
    212212
    213213#if defined(OPTIMISE_SLANG_PALETTE)
     214            /* If foreground == background, just don't use this colour
     215             * pair, and print a space instead of the real character.
     216             * XXX: disabled, because I can't remember what it was
     217             * here for, and in cases where SLang does not render
     218             * bright backgrounds, it's just fucked up. */
     219#if 0
    214220            uint8_t fgcolor = _cucul_argb32_to_ansi4fg(*attr);
    215221            uint8_t bgcolor = _cucul_argb32_to_ansi4bg(*attr);
    216222
    217             /* If foreground == background, just don't use this colour
    218              * pair, and print a space instead of the real character. */
    219             if(fgcolor != bgcolor)
    220             {
    221                 SLsmg_set_color(slang_assoc[_cucul_argb32_to_ansi8(*attr++)]);
    222                 slang_write_utf32(ch);
    223             }
    224             else
     223            if(fgcolor == bgcolor)
    225224            {
    226225                if(fgcolor == CUCUL_COLOR_BLACK)
     
    235234                attr++;
    236235            }
     236            else
     237#endif
     238            {
     239                SLsmg_set_color(slang_assoc[_cucul_argb32_to_ansi8(*attr++)]);
     240                slang_write_utf32(ch);
     241            }
    237242#else
    238243            SLsmg_set_color(_cucul_argb32_to_ansi8(*attr++));
     
    284289        ev->data.key.utf8[1] = '\0';
    285290        return 1;
     291    }
     292
     293    /* If the key was UTF-8, parse the whole sequence */
     294    if(intkey >= 0x80 && intkey < 0x100)
     295    {
     296        int keys[7]; /* Necessary for ungetkey(); */
     297        char utf8[7];
     298        uint32_t utf32;
     299        unsigned int i, bytes = 0;
     300
     301        keys[0] = intkey;
     302        utf8[0] = intkey;
     303
     304        for(i = 1; i < 6; i++)
     305        {
     306            if(!SLang_input_pending(0))
     307                break;
     308            keys[i] = SLang_getkey();
     309            utf8[i] = (unsigned char)keys[i];
     310        }
     311
     312        utf8[i] = '\0';
     313        utf32 = cucul_utf8_to_utf32(utf8, &bytes);
     314
     315        while(i > bytes)
     316            SLang_ungetkey(keys[--i]);
     317
     318        if(bytes)
     319        {
     320            ev->type = CACA_EVENT_KEY_PRESS;
     321            ev->data.key.ch = 0;
     322            ev->data.key.utf32 = utf32;
     323            strcpy(ev->data.key.utf8, utf8);
     324            return 1;
     325        }
    286326    }
    287327
     
    339379        case SL_KEY_F(12): ev->data.key.ch = CACA_KEY_F12; break;
    340380
    341         default: ev->type = CACA_EVENT_NONE; return 0;
     381        default:
     382            /* Unknown key */
     383            ev->type = CACA_EVENT_NONE; return 0;
    342384    }
    343385
Note: See TracChangeset for help on using the changeset viewer.