Changeset 1880


Ignore:
Timestamp:
Nov 4, 2007, 12:59:57 PM (13 years ago)
Author:
Sam Hocevar
Message:
  • Implemented cucul_get_dither_charset() and cucul_get_dither_mode().
Location:
libcaca/trunk/cucul
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/cucul.h

    r1879 r1880  
    222222int cucul_set_dither_charset(cucul_dither_t *, char const *);
    223223char const * const * cucul_get_dither_charset_list(cucul_dither_t const *);
     224char const * cucul_get_dither_charset(cucul_dither_t const *);
    224225int cucul_set_dither_mode(cucul_dither_t *, char const *);
    225226char const * const * cucul_get_dither_mode_list(cucul_dither_t const *);
     227char const * cucul_get_dither_mode(cucul_dither_t const *);
    226228int cucul_dither_bitmap(cucul_canvas_t *, int, int, int, int,
    227229                         cucul_dither_t const *, void *);
  • libcaca/trunk/cucul/dither.c

    r1877 r1880  
    131131    int gammatab[4097];
    132132
    133     /* Bitmap features */
    134     struct
    135     {
    136         char const *name;
    137         int value;
    138     }
    139     antialias, color;
    140     int invert;
    141 
    142     /* Glyphs used for rendering */
    143     uint32_t const * glyphs;
    144     unsigned glyph_count;
    145 
    146     /* Current dithering method */
     133    /* Dithering features */
     134    char const *antialias_name;
     135    int antialias;
     136
     137    char const *color_name;
     138    enum color_mode color;
     139
     140    char const *dither_name;
    147141    void (*init_dither) (int);
    148142    unsigned int (*get_dither) (void);
    149143    void (*increment_dither) (void);
     144
     145    char const *glyph_name;
     146    uint32_t const * glyphs;
     147    unsigned glyph_count;
     148
     149    int invert;
    150150};
    151151
     
    340340
    341341    /* Default features */
    342     d->antialias.name = "prefilter";
    343     d->antialias.value = 1;
    344     d->color.name = "full16";
    345     d->color.value = COLOR_MODE_FULL16;
    346     d->invert = 0;
    347 
    348     /* Default character set */
     342    d->antialias_name = "prefilter";
     343    d->antialias = 1;
     344
     345    d->color_name = "full16";
     346    d->color = COLOR_MODE_FULL16;
     347
     348    d->glyph_name = "ascii";
    349349    d->glyphs = ascii_glyphs;
    350350    d->glyph_count = sizeof(ascii_glyphs) / sizeof(*ascii_glyphs);
    351351
    352     /* Default dithering mode */
     352    d->dither_name = "fstein";
    353353    d->init_dither = init_fstein_dither;
    354354    d->get_dither = get_fstein_dither;
    355355    d->increment_dither = increment_fstein_dither;
     356
     357    d->invert = 0;
    356358
    357359    return d;
     
    550552    if(!strcasecmp(str, "none"))
    551553    {
    552         d->antialias.name = "none";
    553         d->antialias.value = 0;
     554        d->antialias_name = "none";
     555        d->antialias = 0;
    554556    }
    555557    else if(!strcasecmp(str, "prefilter") || !strcasecmp(str, "default"))
    556558    {
    557         d->antialias.name = "prefilter";
    558         d->antialias.value = 1;
     559        d->antialias_name = "prefilter";
     560        d->antialias = 1;
    559561    }
    560562    else
     
    604606char const * cucul_get_dither_antialias(cucul_dither_t const *d)
    605607{
    606     return d->antialias.name;
     608    return d->antialias_name;
    607609}
    608610
     
    634636    if(!strcasecmp(str, "mono"))
    635637    {
    636         d->color.name = "mono";
    637         d->color.value = COLOR_MODE_MONO;
     638        d->color_name = "mono";
     639        d->color = COLOR_MODE_MONO;
    638640    }
    639641    else if(!strcasecmp(str, "gray"))
    640642    {
    641         d->color.name = "gray";
    642         d->color.value = COLOR_MODE_GRAY;
     643        d->color_name = "gray";
     644        d->color = COLOR_MODE_GRAY;
    643645    }
    644646    else if(!strcasecmp(str, "8"))
    645647    {
    646         d->color.name = "8";
    647         d->color.value = COLOR_MODE_8;
     648        d->color_name = "8";
     649        d->color = COLOR_MODE_8;
    648650    }
    649651    else if(!strcasecmp(str, "16"))
    650652    {
    651         d->color.name = "16";
    652         d->color.value = COLOR_MODE_16;
     653        d->color_name = "16";
     654        d->color = COLOR_MODE_16;
    653655    }
    654656    else if(!strcasecmp(str, "fullgray"))
    655657    {
    656         d->color.name = "fullgray";
    657         d->color.value = COLOR_MODE_FULLGRAY;
     658        d->color_name = "fullgray";
     659        d->color = COLOR_MODE_FULLGRAY;
    658660    }
    659661    else if(!strcasecmp(str, "full8"))
    660662    {
    661         d->color.name = "full8";
    662         d->color.value = COLOR_MODE_FULL8;
     663        d->color_name = "full8";
     664        d->color = COLOR_MODE_FULL8;
    663665    }
    664666    else if(!strcasecmp(str, "full16") || !strcasecmp(str, "default"))
    665667    {
    666         d->color.name = "full16";
    667         d->color.value = COLOR_MODE_FULL16;
     668        d->color_name = "full16";
     669        d->color = COLOR_MODE_FULL16;
    668670    }
    669671    else
     
    718720char const * cucul_get_dither_color(cucul_dither_t const *d)
    719721{
    720     return d->color.name;
     722    return d->color_name;
    721723}
    722724
     
    745747    if(!strcasecmp(str, "shades"))
    746748    {
     749        d->glyph_name = "shades";
    747750        d->glyphs = shades_glyphs;
    748751        d->glyph_count = sizeof(shades_glyphs) / sizeof(*shades_glyphs);
     
    750753    else if(!strcasecmp(str, "blocks"))
    751754    {
     755        d->glyph_name = "blocks";
    752756        d->glyphs = blocks_glyphs;
    753757        d->glyph_count = sizeof(blocks_glyphs) / sizeof(*blocks_glyphs);
     
    755759    else if(!strcasecmp(str, "ascii") || !strcasecmp(str, "default"))
    756760    {
     761        d->glyph_name = "ascii";
    757762        d->glyphs = ascii_glyphs;
    758763        d->glyph_count = sizeof(ascii_glyphs) / sizeof(*ascii_glyphs);
     
    791796
    792797    return list;
     798}
     799
     800/** \brief Get current character set
     801 *
     802 *  Return the given dither's current character set.
     803 *
     804 *  This function never fails.
     805 *
     806 *  \param d Dither object.
     807 *  \return A static string.
     808 */
     809char const * cucul_get_dither_charset(cucul_dither_t const *d)
     810{
     811    return d->glyph_name;
    793812}
    794813
     
    817836    if(!strcasecmp(str, "none"))
    818837    {
     838        d->dither_name = "none";
    819839        d->init_dither = init_no_dither;
    820840        d->get_dither = get_no_dither;
     
    823843    else if(!strcasecmp(str, "ordered2"))
    824844    {
     845        d->dither_name = "ordered2";
    825846        d->init_dither = init_ordered2_dither;
    826847        d->get_dither = get_ordered2_dither;
     
    829850    else if(!strcasecmp(str, "ordered4"))
    830851    {
     852        d->dither_name = "ordered4";
    831853        d->init_dither = init_ordered4_dither;
    832854        d->get_dither = get_ordered4_dither;
     
    835857    else if(!strcasecmp(str, "ordered8"))
    836858    {
     859        d->dither_name = "ordered8";
    837860        d->init_dither = init_ordered8_dither;
    838861        d->get_dither = get_ordered8_dither;
     
    841864    else if(!strcasecmp(str, "random"))
    842865    {
     866        d->dither_name = "random";
    843867        d->init_dither = init_random_dither;
    844868        d->get_dither = get_random_dither;
     
    847871    else if(!strcasecmp(str, "fstein") || !strcasecmp(str, "default"))
    848872    {
     873        d->dither_name = "fstein";
    849874        d->init_dither = init_fstein_dither;
    850875        d->get_dither = get_fstein_dither;
     
    889914}
    890915
     916/** \brief Get current dithering method
     917 *
     918 *  Return the given dither's current dithering method.
     919 *
     920 *  This function never fails.
     921 *
     922 *  \param d Dither object.
     923 *  \return A static string.
     924 */
     925char const * cucul_get_dither_mode(cucul_dither_t const *d)
     926{
     927    return d->dither_name;
     928}
     929
    891930/** \brief Dither a bitmap on the canvas.
    892931 *
     
    959998
    960999        /* First get RGB */
    961         if(d->antialias.value)
     1000        if(d->antialias)
    9621001        {
    9631002            fromx = (x - x1) * w / deltax;
     
    10421081
    10431082        /* FIXME: we currently only honour "full16" */
    1044         if(d->color.value == COLOR_MODE_FULL16)
     1083        if(d->color == COLOR_MODE_FULL16)
    10451084        {
    10461085            distmin = INT_MAX;
Note: See TracChangeset for help on using the changeset viewer.