Changeset 230


Ignore:
Timestamp:
Nov 28, 2003, 9:39:54 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • src/bitmap.c: + Dither chroma outside of rgb2hsv_default(). + Clip fromx and fromy values.
  • NOTES: + Link to the XTerm control sequences.
  • examples/view.c: + Draw status bar. + Move with 'h' 'j' 'k' 'l', à la vi. + '?' toggles a help menu.
Location:
libcaca/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/NOTES

    r226 r230  
    1818
    1919      From the xterm-16color terminfo:
     20      (http://www.sct.gu.edu.au/~anthony/info/X/Xterm_xf86.terminfo)
    2021
    2122        setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm,
    2223        setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
    2324
    24       (http://www.sct.gu.edu.au/~anthony/info/X/Xterm_xf86.terminfo)
     25      These values can be simply retrieved with a tigetstr() call.
    2526
    2627   o  I tested the following terminals:
     
    7677       + konsole (no bright bg, $blink really blinks)
    7778
    78    o  In an XTerm-compatible terminal, \e[9xm sets bright foreground and
    79       \e[10xm bright background colours. Unfortunately all terminals don't
    80       support these escape sequences. Here is a testcase:
     79   o In an XTerm-compatible terminal, \e[9xm sets bright foreground
     80     and \e[10xm bright background colours. Documentation on this can be
     81     found at http://ftp.xfree86.org/pub/XFree86/4.2.1/doc/ctlseqs.TXT .
     82     Unfortunately all terminals don't support these escape sequences. Here
     83     is a testcase:
    8184
    8285      for fgpre in 3 9; do for fg in 0 4 2 6 1 5 3 7; do
  • libcaca/trunk/examples/view.c

    r217 r230  
    2525
    2626#include <stdio.h>
     27#include <string.h>
    2728
    2829#define X_DISPLAY_MISSING 1
     
    4142int main(int argc, char **argv)
    4243{
    43     int quit = 0, update = 1;
     44    int quit = 0, update = 1, help = 0;
    4445    int x, y, w, h, zoom = 0;
    4546
     
    109110                update = 1;
    110111                break;
     112            case CACA_EVENT_KEY_PRESS | 'k':
     113            case CACA_EVENT_KEY_PRESS | 'K':
    111114            case CACA_EVENT_KEY_PRESS | CACA_KEY_UP:
    112115                if(zoom > 0) y -= 1 + h / (2 + zoom) / 8;
    113116                update = 1;
    114117                break;
     118            case CACA_EVENT_KEY_PRESS | 'j':
     119            case CACA_EVENT_KEY_PRESS | 'J':
    115120            case CACA_EVENT_KEY_PRESS | CACA_KEY_DOWN:
    116121                if(zoom > 0) y += 1 + h / (2 + zoom) / 8;
    117122                update = 1;
    118123                break;
     124            case CACA_EVENT_KEY_PRESS | 'h':
     125            case CACA_EVENT_KEY_PRESS | 'H':
    119126            case CACA_EVENT_KEY_PRESS | CACA_KEY_LEFT:
    120127                if(zoom > 0) x -= 1 + w / (2 + zoom) / 8;
    121128                update = 1;
    122129                break;
     130            case CACA_EVENT_KEY_PRESS | 'l':
     131            case CACA_EVENT_KEY_PRESS | 'L':
    123132            case CACA_EVENT_KEY_PRESS | CACA_KEY_RIGHT:
    124133                if(zoom > 0) x += 1 + w / (2 + zoom) / 8;
     134                update = 1;
     135                break;
     136            case CACA_EVENT_KEY_PRESS | '?':
     137                help = !help;
    125138                update = 1;
    126139                break;
     
    134147        if(update)
    135148        {
     149            int ww = caca_get_width();
     150            int wh = caca_get_height();
     151
    136152            caca_clear();
    137153            caca_set_dithering(dithering_list[dithering]);
    138154            if(zoom < 0)
    139155            {
    140                 int xo = (caca_get_width() - 1) / 2;
    141                 int yo = (caca_get_height() - 1) / 2;
    142                 int xn = (caca_get_width() - 1) / (2 - zoom);
    143                 int yn = (caca_get_height() - 1) / (2 - zoom);
     156                int xo = (ww - 1) / 2;
     157                int yo = (wh - 1) / 2;
     158                int xn = (ww - 1) / (2 - zoom);
     159                int yn = (wh - 1) / (2 - zoom);
    144160                caca_draw_bitmap(xo - xn, yo - yn, xo + xn, yo + yn,
    145161                                 bitmap, pixels);
     
    155171                if(yn + y > h) y = h - yn;
    156172                newbitmap = caca_create_bitmap(32, 2 * xn, 2 * yn, 4 * w,
    157                                             0x00ff0000, 0x0000ff00, 0x000000ff);
    158                 caca_draw_bitmap(0, 0, caca_get_width() - 1,
    159                                  caca_get_height() - 1, newbitmap,
     173                                           0x00ff0000, 0x0000ff00, 0x000000ff);
     174                caca_draw_bitmap(0, 0, ww - 1, wh - 1, newbitmap,
    160175                                 pixels + 4 * (x - xn) + 4 * w * (y - yn));
    161176                caca_free_bitmap(newbitmap);
     
    163178            else
    164179            {
    165                 caca_draw_bitmap(0, 0, caca_get_width() - 1,
    166                                  caca_get_height() - 1, bitmap, pixels);
    167             }
     180                caca_draw_bitmap(0, 0, ww - 1, wh - 1, bitmap, pixels);
     181            }
     182
     183            caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLUE);
     184            caca_draw_line(0, 0, ww - 1, 0, ' ');
     185            caca_printf(1, 0, "cacaview %s", VERSION);
     186            caca_putstr(ww - strlen("'?' for help") - 1, 0,
     187                        "'?' for help");
     188
     189            if(help)
     190            {
     191                caca_putstr(2, 2,  " +: zoom in          ");
     192                caca_putstr(2, 3,  " -: zoom out         ");
     193                caca_putstr(2, 4,  " x: reset zoom       ");
     194                caca_putstr(2, 5,  " ------------------- ");
     195                caca_putstr(2, 6,  " hjkl: move view     ");
     196                caca_putstr(2, 7,  " arrows: move view   ");
     197                caca_putstr(2, 8,  " ------------------- ");
     198                caca_putstr(2, 9,  " d: dithering method ");
     199                caca_putstr(2, 10, " ------------------- ");
     200                caca_putstr(2, 11, " ?: help             ");
     201                caca_putstr(2, 12, " q: quit             ");
     202
     203                help = 0;
     204            }
     205
    168206            caca_refresh();
    169207            update = 0;
  • libcaca/trunk/src/bitmap.c

    r229 r230  
    222222            break;
    223223        case 3:
    224             bits = (pixels[0] << 16)
    225                     | (pixels[1] << 8)
    226                     | (pixels[2]);
     224            bits = (pixels[0] << 16) | (pixels[1] << 8) | (pixels[2]);
    227225            break;
    228226        case 2:
     
    257255    if(min > b) min = b; if(max < b) max = b;
    258256
    259     delta = max - min; /* 0 - 65535 */
    260     *val = max; /* 0 - 65535 */
    261     *sat = max ? 0x100 * delta / max * 0x100: 0; /* 0 - 65536 */
    262 
    263     if(*sat > (_get_dither() + 24) * 0x400)
    264     {
    265         /* XXX: Values should be between 1 and 6, but since we
    266          * are dithering, there may be overflows, hence our bigger
    267          * *_colors[] tables. */
     257    delta = max - min; /* 0 - 0xffff */
     258    *val = max; /* 0 - 0xffff */
     259
     260    if(delta)
     261    {
     262        *sat = 0x1000 * delta / max * 0x10; /* 0 - 0xffff */
     263
     264        /* Generate *hue between 0 and 0x5ffff */
    268265        if( r == max )
    269266            *hue = 0x10000 + 0x100 * (g - b) / delta * 0x100;
     
    272269        else
    273270            *hue = 0x50000 + 0x100 * (r - g) / delta * 0x100;
    274 
    275         *hue = (*hue + 0x8000 + 0x1000 * _get_dither()) / 0x10000;
    276271    }
    277272    else
    278273    {
    279274        *sat = 0;
     275        *hue = 0;
    280276    }
    281277}
     
    360356            int fromx = w * (x - x1) / (x2 - x1 + 1);
    361357            int fromy = h * (y - y1) / (y2 - y1 + 1);
     358
     359            /* Clip values (yuck) */
     360            if(fromx == 0) fromx = 1;
     361            if(fromy == 0) fromy = 1;
    362362
    363363            /* First get RGB */
     
    378378            rgb2hsv_default(R, G, B, &hue, &sat, &val);
    379379
    380             if(!sat)
     380            if(sat < 0x6000 + _get_dither() * 0x800)
    381381                caca_set_color(white_colors[val * 3 / 0x10000], CACA_COLOR_BLACK);
    382382            else if(val > (_get_dither() + 40) * 0x400)
    383                 caca_set_color(light_colors[hue], CACA_COLOR_BLACK);
     383                caca_set_color(light_colors[(hue + 0x8000 + _get_dither() * 0x1000) / 0x10000], CACA_COLOR_BLACK);
    384384            else
    385                 caca_set_color(dark_colors[hue], CACA_COLOR_BLACK);
     385                caca_set_color(dark_colors[(hue + 0x8000 + _get_dither() * 0x1000) / 0x10000], CACA_COLOR_BLACK);
    386386
    387387            /* FIXME: choose better characters! */
Note: See TracChangeset for help on using the changeset viewer.