/* * TOIlet The Other Implementation’s letters * Copyright (c) 2006 Sam Hocevar * All Rights Reserved * * $Id$ * * This program is free software; you can redistribute it and/or * modify it under the terms of the Do What The Fuck You Want To * Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ /* * This file contains post-processing filter functions. */ #include "config.h" #if defined(HAVE_INTTYPES_H) # include #endif #include #include "filters.h" void filter_autocrop(cucul_canvas_t *cv) { unsigned int x, y, w, h; unsigned int xmin, xmax, ymin, ymax; xmin = w = cucul_get_canvas_width(cv); xmax = 0; ymin = h = cucul_get_canvas_height(cv); ymax = 0; for(y = 0; y < h; y++) for(x = 0; x < w; x++) { unsigned long int ch = cucul_getchar(cv, x, y); if(ch != (unsigned char)' ') { if(x < xmin) xmin = x; if(x > xmax) xmax = x; if(y < ymin) ymin = y; if(y > ymax) ymax = y; } } if(xmax < xmin || ymax < ymin) return; cucul_set_canvas_boundaries(cv, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); } void filter_metal(cucul_canvas_t *cv) { static struct { char ch[6]; unsigned char fg, bg; } const palette[] = { { " ", CUCUL_COLOR_LIGHTBLUE, CUCUL_COLOR_LIGHTBLUE }, { "░", CUCUL_COLOR_BLUE, CUCUL_COLOR_LIGHTBLUE }, { "▒", CUCUL_COLOR_BLUE, CUCUL_COLOR_LIGHTBLUE }, { "░", CUCUL_COLOR_LIGHTBLUE, CUCUL_COLOR_BLUE }, { " ", CUCUL_COLOR_BLUE, CUCUL_COLOR_BLUE }, { " ", CUCUL_COLOR_LIGHTGRAY, CUCUL_COLOR_LIGHTGRAY }, { "░", CUCUL_COLOR_DARKGRAY, CUCUL_COLOR_LIGHTGRAY }, { "▒", CUCUL_COLOR_DARKGRAY, CUCUL_COLOR_LIGHTGRAY }, { "░", CUCUL_COLOR_LIGHTGRAY, CUCUL_COLOR_DARKGRAY }, { " ", CUCUL_COLOR_DARKGRAY, CUCUL_COLOR_DARKGRAY }, }; unsigned int x, y, w, h; w = cucul_get_canvas_width(cv); h = cucul_get_canvas_height(cv); for(y = 0; y < h; y++) for(x = 0; x < w; x++) { int i; if(cucul_getchar(cv, x, y) == (unsigned char)' ') continue; i = y * 10 / h; cucul_set_color(cv, palette[i].fg, palette[i].bg); cucul_putstr(cv, x, y, palette[i].ch); } } void filter_gay(cucul_canvas_t *cv) { static unsigned char const rainbow[] = { CUCUL_COLOR_LIGHTMAGENTA, CUCUL_COLOR_LIGHTRED, CUCUL_COLOR_YELLOW, CUCUL_COLOR_LIGHTGREEN, CUCUL_COLOR_LIGHTCYAN, CUCUL_COLOR_LIGHTBLUE, }; unsigned int x, y, w, h; w = cucul_get_canvas_width(cv); h = cucul_get_canvas_height(cv); for(y = 0; y < h; y++) for(x = 0; x < w; x++) { unsigned long int ch = cucul_getchar(cv, x, y); if(ch != (unsigned char)' ') { cucul_set_color(cv, rainbow[(x / 2 + y) % 6], CUCUL_COLOR_TRANSPARENT); cucul_putchar(cv, x, y, ch); } } }