Ignore:
Timestamp:
Oct 26, 2006, 3:30:14 PM (13 years ago)
Author:
Sam Hocevar
Message:
  • Make filters line-feed aware.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • toilet/trunk/src/filter.c

    r1241 r1243  
    2929#include "filter.h"
    3030
    31 static void filter_crop(cucul_canvas_t *);
    32 static void filter_gay(cucul_canvas_t *);
    33 static void filter_metal(cucul_canvas_t *);
    34 static void filter_flip(cucul_canvas_t *);
    35 static void filter_flop(cucul_canvas_t *);
    36 static void filter_rotate(cucul_canvas_t *);
     31static void filter_crop(context_t *);
     32static void filter_gay(context_t *);
     33static void filter_metal(context_t *);
     34static void filter_flip(context_t *);
     35static void filter_flop(context_t *);
     36static void filter_rotate(context_t *);
    3737
    3838struct
    3939{
    4040    char const *name;
    41     void (*function)(cucul_canvas_t *);
     41    void (*function)(context_t *);
    4242}
    4343const lookup[] =
     
    9393
    9494    for(i = 0; i < cx->nfilters; i++)
    95         cx->filters[i](cx->torender);
     95        cx->filters[i](cx);
    9696
    9797    return 0;
     
    105105}
    106106
    107 static void filter_crop(cucul_canvas_t *cv)
     107static void filter_crop(context_t *cx)
    108108{
    109109    unsigned int x, y, w, h;
    110110    unsigned int xmin, xmax, ymin, ymax;
    111111
    112     xmin = w = cucul_get_canvas_width(cv);
     112    xmin = w = cucul_get_canvas_width(cx->torender);
    113113    xmax = 0;
    114     ymin = h = cucul_get_canvas_height(cv);
     114    ymin = h = cucul_get_canvas_height(cx->torender);
    115115    ymax = 0;
    116116
     
    118118        for(x = 0; x < w; x++)
    119119    {
    120         unsigned long int ch = cucul_getchar(cv, x, y);
     120        unsigned long int ch = cucul_getchar(cx->torender, x, y);
    121121        if(ch != (unsigned char)' ')
    122122        {
     
    135135        return;
    136136
    137     cucul_set_canvas_boundaries(cv, xmin, ymin,
     137    cucul_set_canvas_boundaries(cx->torender, xmin, ymin,
    138138                                xmax - xmin + 1, ymax - ymin + 1);
    139139}
    140140
    141 static void filter_metal(cucul_canvas_t *cv)
     141static void filter_metal(context_t *cx)
    142142{
    143143    static unsigned char const palette[] =
     
    151151    unsigned int x, y, w, h;
    152152
    153     w = cucul_get_canvas_width(cv);
    154     h = cucul_get_canvas_height(cv);
     153    w = cucul_get_canvas_width(cx->torender);
     154    h = cucul_get_canvas_height(cx->torender);
    155155
    156156    for(y = 0; y < h; y++)
    157157        for(x = 0; x < w; x++)
    158158    {
    159         unsigned long int ch = cucul_getchar(cv, x, y);
     159        unsigned long int ch = cucul_getchar(cx->torender, x, y);
    160160        int i;
    161161
     
    163163            continue;
    164164
    165         i = y * 4 / h;
    166         cucul_set_color(cv, palette[i], CUCUL_COLOR_TRANSPARENT);
    167         cucul_putchar(cv, x, y, ch);
    168     }
    169 }
    170 
    171 static void filter_gay(cucul_canvas_t *cv)
     165        i = ((cx->lines + y + x / 8) / 2) % 4;
     166        cucul_set_color(cx->torender, palette[i], CUCUL_COLOR_TRANSPARENT);
     167        cucul_putchar(cx->torender, x, y, ch);
     168    }
     169}
     170
     171static void filter_gay(context_t *cx)
    172172{
    173173    static unsigned char const rainbow[] =
     
    182182    unsigned int x, y, w, h;
    183183
    184     w = cucul_get_canvas_width(cv);
    185     h = cucul_get_canvas_height(cv);
     184    w = cucul_get_canvas_width(cx->torender);
     185    h = cucul_get_canvas_height(cx->torender);
    186186
    187187    for(y = 0; y < h; y++)
    188188        for(x = 0; x < w; x++)
    189189    {
    190         unsigned long int ch = cucul_getchar(cv, x, y);
     190        unsigned long int ch = cucul_getchar(cx->torender, x, y);
    191191        if(ch != (unsigned char)' ')
    192192        {
    193             cucul_set_color(cv, rainbow[(x / 2 + y) % 6],
     193            cucul_set_color(cx->torender, rainbow[(x / 2 + y + cx->lines) % 6],
    194194                                CUCUL_COLOR_TRANSPARENT);
    195             cucul_putchar(cv, x, y, ch);
     195            cucul_putchar(cx->torender, x, y, ch);
    196196        }
    197197    }
    198198}
    199199
    200 static void filter_flip(cucul_canvas_t *cv)
    201 {
    202     cucul_flip(cv);
    203 }
    204 
    205 static void filter_flop(cucul_canvas_t *cv)
    206 {
    207     cucul_flop(cv);
    208 }
    209 
    210 static void filter_rotate(cucul_canvas_t *cv)
    211 {
    212     cucul_rotate(cv);
    213 }
    214 
     200static void filter_flip(context_t *cx)
     201{
     202    cucul_flip(cx->torender);
     203}
     204
     205static void filter_flop(context_t *cx)
     206{
     207    cucul_flop(cx->torender);
     208}
     209
     210static void filter_rotate(context_t *cx)
     211{
     212    cucul_rotate(cx->torender);
     213}
     214
Note: See TracChangeset for help on using the changeset viewer.