- Timestamp:
- May 14, 2009, 2:18:23 AM (13 years ago)
- Location:
- libcaca/trunk/caca
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/attr.c
r2826 r3448 131 131 { 132 132 uint32_t *curattr, *curchar; 133 int xmin, xmax; 133 134 134 135 if(x < 0 || x >= (int)cv->width || y < 0 || y >= (int)cv->height) 135 136 return 0; 137 138 xmin = xmax = x; 136 139 137 140 curchar = cv->chars + x + y * cv->width; … … 144 147 145 148 if(x && curchar[0] == CACA_MAGIC_FULLWIDTH) 149 { 146 150 curattr[-1] = curattr[0]; 151 xmin--; 152 } 147 153 else if(x + 1 < (int)cv->width && curchar[1] == CACA_MAGIC_FULLWIDTH) 154 { 148 155 curattr[1] = curattr[0]; 156 xmax++; 157 } 158 159 caca_add_dirty_rectangle(cv, xmin, xmax, y, y); 149 160 150 161 return 0; -
libcaca/trunk/caca/caca_internals.h
r3443 r3448 40 40 uint32_t curattr; 41 41 42 /* Dirty rectangle */43 int dirty_xmin, dirty_xmax, dirty_ymin, dirty_ymax;44 45 42 /* Frame name */ 46 43 char *name; … … 61 58 int (*resize_callback)(void *); 62 59 void *resize_data; 60 61 /* Dirty rectangle */ 62 int dirty_xmin, dirty_xmax, dirty_ymin, dirty_ymax; 63 63 64 64 /* Shortcut to the active frame information */ -
libcaca/trunk/caca/canvas.c
r3443 r3448 90 90 cv->frames[0].curattr = 0; 91 91 cv->frames[0].name = strdup("frame#00000000"); 92 cv->frames[0].dirty_xmin = 0;93 cv->frames[0].dirty_xmax = -1;94 cv->frames[0].dirty_ymin = 0;95 cv->frames[0].dirty_ymax = -1;96 92 97 93 _caca_load_frame_info(cv); 98 94 caca_set_color_ansi(cv, CACA_DEFAULT, CACA_TRANSPARENT); 95 96 cv->dirty_xmin = 0; 97 cv->dirty_xmax = -1; 98 cv->dirty_ymin = 0; 99 cv->dirty_ymax = -1; 99 100 100 101 cv->ff = NULL; … … 332 333 int *ymin, int *ymax) 333 334 { 334 *xmin = cv-> frames[cv->frame].dirty_xmin;335 *xmax = cv-> frames[cv->frame].dirty_xmax;336 *ymin = cv-> frames[cv->frame].dirty_ymin;337 *ymax = cv-> frames[cv->frame].dirty_ymax;335 *xmin = cv->dirty_xmin; 336 *xmax = cv->dirty_xmax; 337 *ymin = cv->dirty_ymin; 338 *ymax = cv->dirty_ymax; 338 339 339 340 return 0; … … 372 373 return 0; 373 374 374 if(xmin < cv-> frames[cv->frame].dirty_xmin)375 cv-> frames[cv->frame].dirty_xmin = xmin;376 377 if(xmax > cv-> frames[cv->frame].dirty_xmax)378 cv-> frames[cv->frame].dirty_xmax = xmax;379 380 if(ymin < cv-> frames[cv->frame].dirty_ymin)381 cv-> frames[cv->frame].dirty_ymin = ymin;382 383 if(ymax > cv-> frames[cv->frame].dirty_ymax)384 cv-> frames[cv->frame].dirty_ymax = ymax;375 if(xmin < cv->dirty_xmin) 376 cv->dirty_xmin = xmin; 377 378 if(xmax > cv->dirty_xmax) 379 cv->dirty_xmax = xmax; 380 381 if(ymin < cv->dirty_ymin) 382 cv->dirty_ymin = ymin; 383 384 if(ymax > cv->dirty_ymax) 385 cv->dirty_ymax = ymax; 385 386 386 387 return 0; … … 417 418 } 418 419 419 cv-> frames[cv->frame].dirty_xmin = xmin;420 cv-> frames[cv->frame].dirty_xmax = xmax;421 cv-> frames[cv->frame].dirty_ymin = ymin;422 cv-> frames[cv->frame].dirty_ymax = ymax;420 cv->dirty_xmin = xmin; 421 cv->dirty_xmax = xmax; 422 cv->dirty_ymin = ymin; 423 cv->dirty_ymax = ymax; 423 424 424 425 return 0; … … 556 557 } 557 558 } 559 560 caca_add_dirty_rectangle(cv, old_width, 0, width - 1, old_height - 1); 558 561 } 559 562 else … … 595 598 } 596 599 } 597 } 600 601 caca_add_dirty_rectangle(cv, 0, old_height, old_width - 1, height - 1); 602 } 603 604 /* XXX: technically we should not worry about the dirty rectangle in 605 * the bottom-right corner, because we only handle one dirty rectangle, 606 * but in case the API changes later, we make sure this is handled. */ 607 if(width > old_width && height > old_height) 608 caca_add_dirty_rectangle(cv, old_width, old_height, 609 width - 1, height - 1); 598 610 599 611 /* Step 4: if new area is smaller, resize memory area now. */ -
libcaca/trunk/caca/frame.c
r2826 r3448 65 65 } 66 66 67 /* Bail out if no operation is required */ 68 if(id == cv->frame) 69 return 0; 70 67 71 _caca_save_frame_info(cv); 68 72 cv->frame = id; 69 73 _caca_load_frame_info(cv); 74 75 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 70 76 71 77 return 0; … … 231 237 cv->frame = 0; 232 238 _caca_load_frame_info(cv); 239 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 233 240 } 234 241 -
libcaca/trunk/caca/graphics.c
r3412 r3448 155 155 dp->drv.display(dp); 156 156 157 /* Invalidate the dirty rectangle */ 158 caca_set_dirty_rectangle(dp->cv, -1, -1, -1, -1); 159 157 160 /* Once the display is finished, we can ack resizes */ 158 161 if(dp->resize.resized) -
libcaca/trunk/caca/string.c
r2826 r3448 113 113 { 114 114 uint32_t *curchar, *curattr, attr; 115 int fullwidth ;115 int fullwidth, xmin, xmax; 116 116 117 117 if(x >= (int)cv->width || y < 0 || y >= (int)cv->height) … … 136 136 attr = cv->curattr; 137 137 138 xmin = xmax = x; 139 138 140 /* When overwriting the right part of a fullwidth character, 139 141 * replace its left part with a space. */ 140 142 if(x && curchar[0] == CACA_MAGIC_FULLWIDTH) 143 { 141 144 curchar[-1] = ' '; 145 xmin--; 146 } 142 147 143 148 if(fullwidth) … … 147 152 else 148 153 { 154 xmax++; 155 149 156 /* When overwriting the left part of a fullwidth character, 150 157 * replace its right part with a space. */ 151 158 if(x + 2 < (int)cv->width && curchar[2] == CACA_MAGIC_FULLWIDTH) 159 { 152 160 curchar[2] = ' '; 161 xmax++; 162 } 153 163 154 164 curchar[1] = CACA_MAGIC_FULLWIDTH; … … 163 173 curchar[1] = ' '; 164 174 } 175 176 caca_add_dirty_rectangle(cv, xmin, xmax, y, y); 165 177 166 178 curchar[0] = ch; … … 308 320 } 309 321 322 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 323 310 324 return 0; 311 325 } … … 376 390 */ 377 391 int caca_blit(caca_canvas_t *dst, int x, int y, 378 379 { 380 int i, j, starti, startj, endi, endj ;392 caca_canvas_t const *src, caca_canvas_t const *mask) 393 { 394 int i, j, starti, startj, endi, endj, stride, bleed_left, bleed_right; 381 395 382 396 if(mask && (src->width != mask->width || src->height != mask->height)) … … 393 407 endi = (x + src->width >= dst->width) ? dst->width - x : src->width; 394 408 endj = (y + src->height >= dst->height) ? dst->height - y : src->height; 409 stride = endi - starti; 395 410 396 411 if(starti > src->width || startj > src->height … … 398 413 return 0; 399 414 415 bleed_left = bleed_right = 0; 416 400 417 for(j = startj; j < endj; j++) 401 418 { 402 419 int dstix = (j + y) * dst->width + starti + x; 403 420 int srcix = j * src->width + starti; 404 int stride = endi - starti;405 421 406 422 /* FIXME: we are ignoring the mask here */ 407 423 if((starti + x) && dst->chars[dstix] == CACA_MAGIC_FULLWIDTH) 424 { 408 425 dst->chars[dstix - 1] = ' '; 426 bleed_left = 1; 427 } 409 428 410 429 if(endi + x < dst->width 411 430 && dst->chars[dstix + stride] == CACA_MAGIC_FULLWIDTH) 431 { 412 432 dst->chars[dstix + stride] = ' '; 433 bleed_right = 1; 434 } 413 435 414 436 if(mask) … … 437 459 } 438 460 461 caca_add_dirty_rectangle(dst, starti + x - bleed_left, startj + y, 462 endi + x - 1 + bleed_right, endj + y - 1); 463 439 464 return 0; 440 465 } … … 499 524 caca_set_frame(cv, saved_f); 500 525 _caca_load_frame_info(cv); 526 527 /* FIXME: this may be optimised somewhat */ 528 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 501 529 502 530 return 0; -
libcaca/trunk/caca/transform.c
r3406 r3448 54 54 attrs++; 55 55 } 56 57 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 56 58 57 59 return 0; … … 114 116 } 115 117 118 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 119 116 120 return 0; 117 121 } … … 158 162 *ctop = flopchar(*ctop); 159 163 } 164 165 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 160 166 161 167 return 0; … … 216 222 } 217 223 224 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 225 218 226 return 0; 219 227 } … … 333 341 _caca_load_frame_info(cv); 334 342 343 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 344 335 345 return 0; 336 346 } … … 450 460 _caca_load_frame_info(cv); 451 461 462 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 463 452 464 return 0; 453 465 } … … 541 553 _caca_load_frame_info(cv); 542 554 555 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 556 543 557 return 0; 544 558 } … … 631 645 /* Reset the current frame shortcuts */ 632 646 _caca_load_frame_info(cv); 647 648 caca_set_dirty_rectangle(cv, 0, 0, cv->width - 1, cv->height - 1); 633 649 634 650 return 0;
Note: See TracChangeset
for help on using the changeset viewer.