Ignore:
Timestamp:
Dec 20, 2007, 4:00:39 PM (12 years ago)
Author:
Sam Hocevar
Message:
  • Started sprite example. Doesn't work :-)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/examples/spritedit.c

    r2101 r2146  
    1515#include "config.h"
    1616#include "common.h"
     17
    1718#if !defined(__KERNEL__)
    1819#   include <stdio.h>
     20#   include <string.h>
     21#   include <stdlib.h>
    1922#endif
     23
    2024#include "cucul.h"
    2125#include "caca.h"
    2226
    23 #define MYDELAY 100
     27/* Courtesy of Zashi */
     28char *guy[] = {
     29  "  O_,= \n"
     30  "  |    \n"
     31  "  /\\   \n"
     32  " / /   \n",
     33
     34  "  O_,= \n"
     35  "  |    \n"
     36  "  /|   \n"
     37  " / |   \n",
     38
     39  "  O_,= \n"
     40  "  |    \n"
     41  "  |\\   \n"
     42  "  |/   \n",
     43
     44  "  O_,= \n"
     45  "  |    \n"
     46  "  |\\   \n"
     47  "  | \\  \n",
     48};
    2449
    2550int main(int argc, char **argv)
    2651{
    27 #if 0
    28     cucul_canvas_t *cv;
    29     caca_display_t *dp;
     52    cucul_canvas_t *sprite;
     53    unsigned long int len;
     54    void *buffer;
     55    int i;
    3056
    31     int quit = 0;
    32     cucul_sprite_t *sprite;
    33     int frame = 0;
    34     unsigned char play = 0;
    35     unsigned int delay = 0;
     57    /* Create a canvas with 4 frames */
     58    sprite = cucul_create_canvas(0, 0);
     59    for(i = 0; i < 3; i++)
     60        cucul_create_frame(sprite, 0);
    3661
    37     if(argc < 2)
     62    /* Load stuff in all 4 frames */
     63    for(i = 0; i < 4; i++)
    3864    {
    39         fprintf(stderr, "%s: missing argument (filename).\n", argv[0]);
    40         return 1;
     65        cucul_set_frame(sprite, i);
     66        cucul_import_memory(sprite, guy[i], strlen(guy[i]), "text");
    4167    }
    4268
    43     cv = cucul_create_canvas(0, 0);
    44     if(!cv)
    45         return 1;
    46     dp = caca_create_display(cv);
    47     if(!dp)
    48         return 1;
     69    /* Export our sprite in a memory buffer. We could save this to
     70     * disk afterwards. */
     71    buffer = cucul_export_memory(sprite, "caca", &len);
    4972
    50     sprite = cucul_load_sprite(argv[1]);
     73    /* Free our sprite and reload it from the memory buffer. We could
     74     * load this from disk, too. */
     75    cucul_free_canvas(sprite);
     76    sprite = cucul_create_canvas(0, 0);
     77    cucul_import_memory(sprite, buffer, len, "caca");
     78    free(buffer);
    5179
    52     if(!sprite)
     80    /* Print each sprite frame to stdout */
     81    for(i = 0; i < 4; i++)
    5382    {
    54         caca_free_display(dp);
    55         cucul_free_canvas(cv);
    56         fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
    57         return 1;
     83        cucul_set_frame(sprite, i);
     84        printf("Frame #%i\n", i);
     85        buffer = cucul_export_memory(sprite, "utf8", &len);
     86        fwrite(buffer, len, 1, stdout);
     87        free(buffer);
    5888    }
    5989
    60     /* Go ! */
    61     while(!quit)
    62     {
    63         caca_event_t ev;
    64         int xa, ya, xb, yb;
    65         char buf[BUFSIZ];
    66 
    67         while(caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, 0))
    68         {
    69             switch(caca_get_event_key_ch(&ev))
    70             {
    71             case 0:
    72                 break;
    73             case 'q':
    74                 quit = 1;
    75                 break;
    76             case '-':
    77                 if(frame > 0)
    78                     frame--;
    79                 break;
    80             case '+':
    81                 if(frame < cucul_get_sprite_frames(sprite) - 1)
    82                     frame++;
    83                 break;
    84             case 'p':
    85                 play=!play;
    86 
    87             }
    88         }
    89 
    90         if(play) {
    91             if(!delay) {
    92                 if(frame < cucul_get_sprite_frames(sprite) - 1) {
    93                     frame++;
    94                 }
    95                 else {
    96                     frame = 0;
    97                 }
    98             }
    99             delay++;
    100             if(delay>=MYDELAY) {
    101                 delay = 0;
    102             }
    103         }
    104 
    105 
    106         cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK);
    107         cucul_clear_canvas(cv);
    108 
    109         cucul_draw_thin_box(cv, 0, 0, cucul_get_canvas_width(cv) - 1,
    110                             cucul_get_canvas_height(cv) - 1);
    111 
    112         cucul_put_str(cv, 3, 0, "[ Sprite editor for libcaca ]");
    113 
    114         sprintf(buf, "sprite `%s'", argv[1]);
    115         cucul_put_str(cv, 3, 2, buf);
    116         sprintf(buf, "frame %i/%i", frame, cucul_get_sprite_frames(sprite) - 1);
    117         cucul_put_str(cv, 3, 3, buf);
    118 
    119         /* Crosshair */
    120         cucul_draw_thin_line(cv, 57, 2, 57, 18);
    121         cucul_draw_thin_line(cv, 37, 10, 77, 10);
    122         cucul_put_char(cv, 57, 10, '+');
    123 
    124         /* Boxed sprite */
    125         xa = -1 - cucul_get_sprite_dx(sprite, frame);
    126         ya = -1 - cucul_get_sprite_dy(sprite, frame);
    127         xb = xa + 1 + cucul_get_sprite_width(sprite, frame);
    128         yb = ya + 1 + cucul_get_sprite_height(sprite, frame);
    129         cucul_set_color_ansi(cv, CUCUL_BLACK, CUCUL_BLACK);
    130         cucul_fill_box(cv, 57 + xa, 10 + ya, 57 + xb, 10 + yb, " ");
    131         cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK);
    132         cucul_draw_thin_box(cv, 57 + xa, 10 + ya, 57 + xb, 10 + yb);
    133         cucul_draw_sprite(cv, 57, 10, sprite, frame);
    134 
    135         /* Free sprite */
    136         cucul_draw_sprite(cv, 20, 10, sprite, frame);
    137 
    138         caca_refresh_display(dp);
    139     }
    140 
    141     /* Clean up */
    142     caca_free_display(dp);
    143     cucul_free_canvas(cv);
    144 #endif
     90    /* Free our sprite */
     91    cucul_free_canvas(sprite);
    14592
    14693    return 0;
Note: See TracChangeset for help on using the changeset viewer.