Changeset 348


Ignore:
Timestamp:
Jan 13, 2004, 10:08:43 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • src/graphics.c: + Resize handling in the ncurses and slang drivers.
Location:
libcaca/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/configure.ac

    r346 r348  
    1616AC_C_CONST
    1717AC_C_INLINE
     18AC_TYPE_SIGNAL
    1819
    1920dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right
     
    4142  [  --enable-doc            build documentation (needs doxygen and LaTeX)])
    4243
    43 AC_CHECK_HEADERS(sys/time.h inttypes.h endian.h unistd.h)
    44 AC_CHECK_FUNCS(vsnprintf _vsnprintf getenv putenv strcasecmp usleep gettimeofday)
     44AC_CHECK_HEADERS(signal.h sys/ioctl.h sys/time.h inttypes.h endian.h unistd.h)
     45AC_CHECK_FUNCS(signal ioctl vsnprintf getenv putenv strcasecmp)
     46AC_CHECK_FUNCS(usleep gettimeofday)
     47
    4548AC_MSG_CHECKING(for Sleep)
    4649AC_TRY_COMPILE([#include <windows.h>],[Sleep(42);],
  • libcaca/trunk/msvc/config.h

    r344 r348  
    1111/* #undef HAVE_NCURSES_H */
    1212#define HAVE_PUTENV 1
     13/* #undef HAVE_SIGNAL */
     14/* #undef HAVE_SIGNAL_H */
    1315/* #undef HAVE_SLANG_H */
    1416/* #undef HAVE_SLANG_SLANG_H */
     
    1921#define HAVE_STRINGS_H 1
    2022#define HAVE_STRING_H 1
     23/* #undef HAVE_SYS_IOCTL_H */
    2124#define HAVE_SYS_STAT_H 1
     25/* #undef HAVE_SYS_TIME_H */
    2226#define HAVE_SYS_TYPES_H 1
    2327/* #undef HAVE_UNISTD_H */
     
    2630#define HAVE_WINDOWS_H 1
    2731/* #undef HAVE_X11_XKBLIB_H */
    28 #define HAVE__VSNPRINTF 1
    2932/* #undef NO_MINUS_C_MINUS_O */
    3033#define PACKAGE "libcaca"
     
    3437#define PACKAGE_TARNAME ""
    3538#define PACKAGE_VERSION ""
     39/* #undef RETSIGTYPE */
    3640/* #undef SCREENUPDATE_IN_PC_H */
    3741#define STDC_HEADERS 1
  • libcaca/trunk/src/graphics.c

    r347 r348  
    6969#endif
    7070#include <stdarg.h>
     71
     72#if defined(HAVE_SIGNAL_H)
     73#   include <signal.h>
     74#endif
     75#if defined(HAVE_SYS_IOCTL_H)
     76#   include <sys/ioctl.h>
     77#endif
    7178
    7279#include "caca.h"
     
    240247#endif
    241248
     249#if defined(HAVE_SIGNAL) && (defined(USE_NCURSES) || defined(USE_SLANG))
     250static RETSIGTYPE sigwinch_handler(int);
     251#endif
     252
    242253#if defined(USE_X11)
    243254static int x11_error_handler(Display *, XErrorEvent *);
     
    564575int _caca_init_graphics(void)
    565576{
     577#if defined(HAVE_SIGNAL) && (defined(USE_NCURSES) || defined(USE_SLANG))
     578    signal(SIGWINCH, sigwinch_handler);
     579#endif
     580
    566581#if defined(USE_SLANG)
    567582    if(_caca_driver == CACA_DRIVER_SLANG)
     
    12031218    _caca_height = _caca_new_height;
    12041219
    1205     free(_caca_empty_line);
    1206     _caca_empty_line = malloc(_caca_width + 1);
    1207     memset(_caca_empty_line, ' ', _caca_width);
    1208     _caca_empty_line[_caca_width] = '\0';
    1209 
    1210     free(_caca_scratch_line);
    1211     _caca_scratch_line = malloc(_caca_width + 1);
     1220    if(_caca_width != old_width)
     1221    {
     1222        free(_caca_empty_line);
     1223        _caca_empty_line = malloc(_caca_width + 1);
     1224        memset(_caca_empty_line, ' ', _caca_width);
     1225        _caca_empty_line[_caca_width] = '\0';
     1226
     1227        free(_caca_scratch_line);
     1228        _caca_scratch_line = malloc(_caca_width + 1);
     1229    }
    12121230
    12131231#if defined(USE_SLANG)
    12141232    if(_caca_driver == CACA_DRIVER_SLANG)
    12151233    {
     1234        SLsmg_reinit_smg();
    12161235    }
    12171236    else
     
    12201239    if(_caca_driver == CACA_DRIVER_NCURSES)
    12211240    {
     1241        resize_term(_caca_height, _caca_width);
     1242        wrefresh(curscr);
    12221243    }
    12231244    else
     
    13121333#endif
    13131334
     1335#if defined(HAVE_SIGNAL) && (defined(USE_NCURSES) || defined(USE_SLANG))
     1336static RETSIGTYPE sigwinch_handler(int sig)
     1337{
     1338    struct winsize size;
     1339
     1340#if defined(USE_SLANG)
     1341    if(_caca_driver == CACA_DRIVER_SLANG)
     1342    {
     1343        SLtt_get_screen_size();
     1344        _caca_new_width = SLtt_Screen_Cols;
     1345        _caca_new_height = SLtt_Screen_Rows;
     1346    }
     1347    else
     1348#endif
     1349#if defined(USE_NCURSES)
     1350    if(_caca_driver == CACA_DRIVER_NCURSES)
     1351    {
     1352        if(ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0)
     1353        {
     1354            _caca_new_width = size.ws_col;
     1355            _caca_new_height = size.ws_row;
     1356        }
     1357    }
     1358    else
     1359#endif
     1360    {
     1361        /* Dummy */
     1362    }
     1363
     1364    signal(SIGWINCH, sigwinch_handler);;
     1365}
     1366#endif
     1367
Note: See TracChangeset for help on using the changeset viewer.