+ When resizing under X11, copy the old pixmap to the new one.
* examples/cacaview.c:
+ Resizing support.
tags/v0.99.beta14
| @@ -111,21 +111,22 @@ int main(int argc, char **argv) | |||||
| /* Go ! */ | /* Go ! */ | ||||
| while(!quit) | while(!quit) | ||||
| { | { | ||||
| int ww = caca_get_width(); | |||||
| int wh = caca_get_height(); | |||||
| int ww, wh; | |||||
| unsigned int event, new_status = 0, new_help = 0; | unsigned int event, new_status = 0, new_help = 0; | ||||
| ww = caca_get_width(); | |||||
| wh = caca_get_height(); | |||||
| if(update) | if(update) | ||||
| event = caca_get_event(CACA_EVENT_KEY_PRESS); | |||||
| event = caca_get_event(CACA_EVENT_KEY_PRESS | CACA_EVENT_RESIZE); | |||||
| else | else | ||||
| event = caca_wait_event(CACA_EVENT_KEY_PRESS); | |||||
| event = caca_wait_event(CACA_EVENT_KEY_PRESS | CACA_EVENT_RESIZE); | |||||
| while(event) | while(event) | ||||
| { | { | ||||
| unsigned int key = event & 0x00ffffff; | unsigned int key = event & 0x00ffffff; | ||||
| switch(key) | |||||
| if(key) switch(key) | |||||
| { | { | ||||
| case 'n': | case 'n': | ||||
| case 'N': | case 'N': | ||||
| @@ -231,6 +232,14 @@ int main(int argc, char **argv) | |||||
| break; | break; | ||||
| } | } | ||||
| if(event == CACA_EVENT_RESIZE) | |||||
| { | |||||
| caca_refresh(); | |||||
| ww = caca_get_width(); | |||||
| wh = caca_get_height(); | |||||
| update = 1; | |||||
| } | |||||
| if(status || new_status) | if(status || new_status) | ||||
| status = new_status; | status = new_status; | ||||
| @@ -258,6 +267,8 @@ int main(int argc, char **argv) | |||||
| caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLUE); | caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLUE); | ||||
| caca_putstr((ww - strlen(buffer)) / 2, wh / 2, buffer); | caca_putstr((ww - strlen(buffer)) / 2, wh / 2, buffer); | ||||
| caca_refresh(); | caca_refresh(); | ||||
| ww = caca_get_width(); | |||||
| wh = caca_get_height(); | |||||
| unload_image(); | unload_image(); | ||||
| load_image(list[current]); | load_image(list[current]); | ||||
| @@ -273,10 +273,10 @@ static unsigned int _lowlevel_event(void) | |||||
| { | { | ||||
| unsigned int w, h; | unsigned int w, h; | ||||
| h = (xevent.xconfigure.height + x11_font_height / 3) | |||||
| / x11_font_height; | |||||
| w = (xevent.xconfigure.width + x11_font_width / 3) | w = (xevent.xconfigure.width + x11_font_width / 3) | ||||
| / x11_font_width; | / x11_font_width; | ||||
| h = (xevent.xconfigure.height + x11_font_height / 3) | |||||
| / x11_font_height; | |||||
| if(w == _caca_width && h == _caca_height) | if(w == _caca_width && h == _caca_height) | ||||
| continue; | continue; | ||||
| @@ -1320,18 +1320,25 @@ static void caca_handle_resize(void) | |||||
| #if defined(USE_X11) | #if defined(USE_X11) | ||||
| if(_caca_driver == CACA_DRIVER_X11) | if(_caca_driver == CACA_DRIVER_X11) | ||||
| { | { | ||||
| Pixmap new_pixmap; | |||||
| _caca_width = x11_new_width; | _caca_width = x11_new_width; | ||||
| _caca_height = x11_new_height; | _caca_height = x11_new_height; | ||||
| XFreePixmap(x11_dpy, x11_pixmap); | |||||
| free(x11_char); | free(x11_char); | ||||
| free(x11_attr); | free(x11_attr); | ||||
| x11_pixmap = XCreatePixmap(x11_dpy, x11_window, | |||||
| new_pixmap = XCreatePixmap(x11_dpy, x11_window, | |||||
| _caca_width * x11_font_width, | _caca_width * x11_font_width, | ||||
| _caca_height * x11_font_height, | _caca_height * x11_font_height, | ||||
| DefaultDepth(x11_dpy, | DefaultDepth(x11_dpy, | ||||
| DefaultScreen(x11_dpy))); | DefaultScreen(x11_dpy))); | ||||
| XCopyArea(x11_dpy, x11_pixmap, new_pixmap, x11_gc, 0, 0, | |||||
| old_width * x11_font_width, old_height * x11_font_height, | |||||
| 0, 0); | |||||
| XFreePixmap(x11_dpy, x11_pixmap); | |||||
| x11_pixmap = new_pixmap; | |||||
| x11_char = malloc(_caca_width * _caca_height * sizeof(int)); | x11_char = malloc(_caca_width * _caca_height * sizeof(int)); | ||||
| memset(x11_char, 0, _caca_width * _caca_height * sizeof(int)); | memset(x11_char, 0, _caca_width * _caca_height * sizeof(int)); | ||||
| x11_attr = malloc(_caca_width * _caca_height * sizeof(int)); | x11_attr = malloc(_caca_width * _caca_height * sizeof(int)); | ||||