Changeset 1243
- Timestamp:
- Oct 26, 2006, 3:30:14 PM (16 years ago)
- Location:
- toilet/trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
toilet/trunk/src/filter.c
r1241 r1243 29 29 #include "filter.h" 30 30 31 static void filter_crop(c ucul_canvas_t *);32 static void filter_gay(c ucul_canvas_t *);33 static void filter_metal(c ucul_canvas_t *);34 static void filter_flip(c ucul_canvas_t *);35 static void filter_flop(c ucul_canvas_t *);36 static void filter_rotate(c ucul_canvas_t *);31 static void filter_crop(context_t *); 32 static void filter_gay(context_t *); 33 static void filter_metal(context_t *); 34 static void filter_flip(context_t *); 35 static void filter_flop(context_t *); 36 static void filter_rotate(context_t *); 37 37 38 38 struct 39 39 { 40 40 char const *name; 41 void (*function)(c ucul_canvas_t *);41 void (*function)(context_t *); 42 42 } 43 43 const lookup[] = … … 93 93 94 94 for(i = 0; i < cx->nfilters; i++) 95 cx->filters[i](cx ->torender);95 cx->filters[i](cx); 96 96 97 97 return 0; … … 105 105 } 106 106 107 static void filter_crop(c ucul_canvas_t *cv)107 static void filter_crop(context_t *cx) 108 108 { 109 109 unsigned int x, y, w, h; 110 110 unsigned int xmin, xmax, ymin, ymax; 111 111 112 xmin = w = cucul_get_canvas_width(c v);112 xmin = w = cucul_get_canvas_width(cx->torender); 113 113 xmax = 0; 114 ymin = h = cucul_get_canvas_height(c v);114 ymin = h = cucul_get_canvas_height(cx->torender); 115 115 ymax = 0; 116 116 … … 118 118 for(x = 0; x < w; x++) 119 119 { 120 unsigned long int ch = cucul_getchar(c v, x, y);120 unsigned long int ch = cucul_getchar(cx->torender, x, y); 121 121 if(ch != (unsigned char)' ') 122 122 { … … 135 135 return; 136 136 137 cucul_set_canvas_boundaries(c v, xmin, ymin,137 cucul_set_canvas_boundaries(cx->torender, xmin, ymin, 138 138 xmax - xmin + 1, ymax - ymin + 1); 139 139 } 140 140 141 static void filter_metal(c ucul_canvas_t *cv)141 static void filter_metal(context_t *cx) 142 142 { 143 143 static unsigned char const palette[] = … … 151 151 unsigned int x, y, w, h; 152 152 153 w = cucul_get_canvas_width(c v);154 h = cucul_get_canvas_height(c v);153 w = cucul_get_canvas_width(cx->torender); 154 h = cucul_get_canvas_height(cx->torender); 155 155 156 156 for(y = 0; y < h; y++) 157 157 for(x = 0; x < w; x++) 158 158 { 159 unsigned long int ch = cucul_getchar(c v, x, y);159 unsigned long int ch = cucul_getchar(cx->torender, x, y); 160 160 int i; 161 161 … … 163 163 continue; 164 164 165 i = y * 4 / h;166 cucul_set_color(c v, palette[i], CUCUL_COLOR_TRANSPARENT);167 cucul_putchar(c v, x, y, ch);168 } 169 } 170 171 static void filter_gay(c ucul_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 171 static void filter_gay(context_t *cx) 172 172 { 173 173 static unsigned char const rainbow[] = … … 182 182 unsigned int x, y, w, h; 183 183 184 w = cucul_get_canvas_width(c v);185 h = cucul_get_canvas_height(c v);184 w = cucul_get_canvas_width(cx->torender); 185 h = cucul_get_canvas_height(cx->torender); 186 186 187 187 for(y = 0; y < h; y++) 188 188 for(x = 0; x < w; x++) 189 189 { 190 unsigned long int ch = cucul_getchar(c v, x, y);190 unsigned long int ch = cucul_getchar(cx->torender, x, y); 191 191 if(ch != (unsigned char)' ') 192 192 { 193 cucul_set_color(c v, rainbow[(x / 2 + y) % 6],193 cucul_set_color(cx->torender, rainbow[(x / 2 + y + cx->lines) % 6], 194 194 CUCUL_COLOR_TRANSPARENT); 195 cucul_putchar(c v, x, y, ch);195 cucul_putchar(cx->torender, x, y, ch); 196 196 } 197 197 } 198 198 } 199 199 200 static void filter_flip(c ucul_canvas_t *cv)201 { 202 cucul_flip(c v);203 } 204 205 static void filter_flop(c ucul_canvas_t *cv)206 { 207 cucul_flop(c v);208 } 209 210 static void filter_rotate(c ucul_canvas_t *cv)211 { 212 cucul_rotate(c v);213 } 214 200 static void filter_flip(context_t *cx) 201 { 202 cucul_flip(cx->torender); 203 } 204 205 static void filter_flop(context_t *cx) 206 { 207 cucul_flop(cx->torender); 208 } 209 210 static void filter_rotate(context_t *cx) 211 { 212 cucul_rotate(cx->torender); 213 } 214 -
toilet/trunk/src/render.c
r1242 r1243 29 29 #include "render.h" 30 30 #include "filter.h" 31 32 static int render_flush(context_t *); 31 33 32 34 int render_init(context_t *cx) … … 67 69 68 70 if(ch == '\n') 69 render_ line(cx);71 render_flush(cx); 70 72 } 71 73 … … 92 94 } 93 95 94 render_line(cx); 95 96 return 0; 97 } 98 99 int render_line(context_t *cx) 100 { 101 cucul_buffer_t *buffer; 102 103 /* Flush current line */ 104 cx->flush(cx); 105 106 /* Apply optional effects to our string */ 107 filter_do(cx); 108 109 /* Output line */ 110 buffer = cucul_export_canvas(cx->torender, cx->export); 111 fwrite(cucul_get_buffer_data(buffer), 112 cucul_get_buffer_size(buffer), 1, stdout); 113 cucul_free_buffer(buffer); 114 cucul_free_canvas(cx->torender); 96 render_flush(cx); 115 97 116 98 return 0; … … 125 107 } 126 108 109 /* XXX: Following functions are local */ 110 111 static int render_flush(context_t *cx) 112 { 113 cucul_buffer_t *buffer; 114 115 /* Flush current line */ 116 cx->flush(cx); 117 118 /* Apply optional effects to our string */ 119 filter_do(cx); 120 121 cx->lines += cucul_get_canvas_height(cx->torender); 122 123 /* Output line */ 124 buffer = cucul_export_canvas(cx->torender, cx->export); 125 fwrite(cucul_get_buffer_data(buffer), 126 cucul_get_buffer_size(buffer), 1, stdout); 127 cucul_free_buffer(buffer); 128 cucul_free_canvas(cx->torender); 129 130 return 0; 131 } 132 -
toilet/trunk/src/render.h
r1241 r1243 23 23 extern int render_stdin(context_t *); 24 24 extern int render_list(context_t *, unsigned int, char *[]); 25 extern int render_line(context_t *);26 25 extern int render_end(context_t *); 27 26 -
toilet/trunk/src/toilet.h
r1242 r1243 48 48 49 49 /* Render filters */ 50 void (**filters)( cucul_canvas_t *);50 void (**filters)(struct toilet_context *); 51 51 unsigned int nfilters; 52 52 };
Note: See TracChangeset
for help on using the changeset viewer.