@@ -220,20 +220,24 @@ static int slang_get_display_height(caca_display_t const *dp) | |||||
static void slang_display(caca_display_t *dp) | static void slang_display(caca_display_t *dp) | ||||
{ | { | ||||
uint32_t const *cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv); | |||||
uint32_t const *cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv); | |||||
int x, y, i; | int x, y, i; | ||||
for(i = 0; i < caca_get_dirty_rectangle_count(dp->cv); i++) | for(i = 0; i < caca_get_dirty_rectangle_count(dp->cv); i++) | ||||
{ | { | ||||
uint32_t const *cvchars, *cvattrs; | |||||
int xmin, ymin, xmax, ymax; | int xmin, ymin, xmax, ymax; | ||||
caca_get_dirty_rectangle(dp->cv, i, &xmin, &ymin, &xmax, &ymax); | caca_get_dirty_rectangle(dp->cv, i, &xmin, &ymin, &xmax, &ymax); | ||||
cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv) | |||||
+ xmin + ymin * dp->cv->width; | |||||
cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv) | |||||
+ xmin + ymin * dp->cv->width; | |||||
for(y = ymin; y <= ymax; y++) | for(y = ymin; y <= ymax; y++) | ||||
{ | { | ||||
SLsmg_gotorc(y, 0); | |||||
for(x = xmax; x >= xmin; x--) | |||||
SLsmg_gotorc(y, xmin); | |||||
for(x = xmin; x <= xmax; x++) | |||||
{ | { | ||||
uint32_t ch = *cvchars++; | uint32_t ch = *cvchars++; | ||||
@@ -277,6 +281,9 @@ static void slang_display(caca_display_t *dp) | |||||
slang_write_utf32(ch); | slang_write_utf32(ch); | ||||
#endif | #endif | ||||
} | } | ||||
cvchars += dp->cv->width - (xmax - xmin) - 1; | |||||
cvattrs += dp->cv->width - (xmax - xmin) - 1; | |||||
} | } | ||||
} | } | ||||
SLsmg_gotorc(caca_get_cursor_y(dp->cv), caca_get_cursor_x(dp->cv)); | SLsmg_gotorc(caca_get_cursor_y(dp->cv), caca_get_cursor_x(dp->cv)); | ||||
@@ -142,7 +142,7 @@ static int x11_init_graphics(caca_display_t *dp) | |||||
else | else | ||||
dp->drv.p->max_char = 0x7f; | dp->drv.p->max_char = 0x7f; | ||||
font_max_char = | |||||
font_max_char = | |||||
(dp->drv.p->font_struct->max_byte1 << 8) | (dp->drv.p->font_struct->max_byte1 << 8) | ||||
| dp->drv.p->font_struct->max_char_or_byte2; | | dp->drv.p->font_struct->max_char_or_byte2; | ||||
if(font_max_char && (font_max_char < dp->drv.p->max_char)) | if(font_max_char && (font_max_char < dp->drv.p->max_char)) | ||||
@@ -153,7 +153,7 @@ static int x11_init_graphics(caca_display_t *dp) | |||||
/* Reset the default X11 error handler */ | /* Reset the default X11 error handler */ | ||||
XSetErrorHandler(old_error_handler); | XSetErrorHandler(old_error_handler); | ||||
dp->drv.p->font_width = 0; | dp->drv.p->font_width = 0; | ||||
if(dp->drv.p->font_struct->per_char | if(dp->drv.p->font_struct->per_char | ||||
&& !dp->drv.p->font_struct->min_byte1 | && !dp->drv.p->font_struct->min_byte1 | ||||
@@ -331,8 +331,8 @@ static void x11_display(caca_display_t *dp) | |||||
{ | { | ||||
int yoff = (y + 1) * dp->drv.p->font_height | int yoff = (y + 1) * dp->drv.p->font_height | ||||
- dp->drv.p->font_offset; | - dp->drv.p->font_offset; | ||||
uint32_t const *chars = cvchars + y * width; | |||||
uint32_t const *attrs = cvattrs + y * width; | |||||
uint32_t const *chars = cvchars + xmin + y * width; | |||||
uint32_t const *attrs = cvattrs + xmin + y * width; | |||||
for(x = xmin; x <= xmax; x++, chars++, attrs++) | for(x = xmin; x <= xmax; x++, chars++, attrs++) | ||||
{ | { | ||||