Rev 3723 | Rev 3725 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3723 | Rev 3724 | ||
|---|---|---|---|
| Line 269... | Line 269... | ||
| 269 | vport->style.bg_color); |
269 | vport->style.bg_color); |
| 270 | } |
270 | } |
| 271 | } |
271 | } |
| 272 | 272 | ||
| 273 | 273 | ||
| 274 | /** Clear viewport |
274 | /** Clear viewport. |
| 275 | * |
275 | * |
| 276 | * @param vport Viewport to clear |
276 | * @param vport Viewport to clear |
| 277 | * |
277 | * |
| 278 | */ |
278 | */ |
| 279 | static void vport_clear(viewport_t *vport) |
279 | static void vport_clear(viewport_t *vport) |
| 280 | { |
280 | { |
| 281 | memset(vport->backbuf, 0, vport->bbsize); |
281 | memset(vport->backbuf, 0, vport->bbsize); |
| 282 | vport_redraw(vport); |
282 | vport_redraw(vport); |
| 283 | } |
283 | } |
| 284 | 284 | ||
| 285 | /** Scroll viewport by given number of lines |
285 | /** Scroll viewport by the specified number of lines. |
| 286 | * |
286 | * |
| 287 | * @param vport Viewport to scroll |
287 | * @param vport Viewport to scroll |
| 288 | * @param lines Number of lines to scroll |
288 | * @param lines Number of lines to scroll |
| 289 | * |
289 | * |
| 290 | */ |
290 | */ |
| 291 | static void vport_scroll(viewport_t *vport, int lines) |
291 | static void vport_scroll(viewport_t *vport, int lines) |
| 292 | { |
292 | { |
| - | 293 | /* |
|
| 293 | unsigned int row, col; |
294 | * Scroll backbuffer. |
| - | 295 | */ |
|
| 294 | 296 | ||
| 295 | if (lines > 0) { |
297 | if (lines > 0) { |
| 296 | memcpy(vport->backbuf, vport->backbuf + vport->cols * lines, |
298 | memmove(vport->backbuf, vport->backbuf + vport->cols * lines, |
| 297 | vport->cols * (vport->rows - lines)); |
299 | vport->cols * (vport->rows - lines)); |
| 298 | memset(&vport->backbuf[BB_POS(vport, 0, vport->rows - lines)], |
300 | memset(&vport->backbuf[BB_POS(vport, 0, vport->rows - lines)], |
| 299 | 0, vport->cols * lines); |
301 | 0, vport->cols * lines); |
| 300 | } else { |
302 | } else { |
| 301 | memcpy(vport->backbuf - vport->cols * lines, vport->backbuf, |
303 | memmove(vport->backbuf - vport->cols * lines, vport->backbuf, |
| 302 | vport->cols * (vport->rows + lines)); |
304 | vport->cols * (vport->rows + lines)); |
| 303 | memset(vport->backbuf, 0, - vport->cols * lines); |
305 | memset(vport->backbuf, 0, - vport->cols * lines); |
| 304 | } |
306 | } |
| 305 | 307 | ||
| - | 308 | /* |
|
| - | 309 | * Scroll pixels. |
|
| - | 310 | */ |
|
| - | 311 | ||
| - | 312 | unsigned int dist, height, alines; |
|
| - | 313 | unsigned int y, ry; |
|
| - | 314 | uint8_t *sp, *dp; |
|
| - | 315 | ||
| - | 316 | alines = lines > 0 ? lines : -lines; |
|
| - | 317 | dist = alines * FONT_SCANLINES; |
|
| - | 318 | height = (vport->rows - alines) * FONT_SCANLINES; |
|
| - | 319 | ||
| - | 320 | if (lines > 0) { |
|
| 306 | for (row = 0; row < vport->rows; row++) { |
321 | dp = &screen.fb_addr[FB_POS(vport->x, vport->y + 0)]; |
| 307 | for (col = 0; col < vport->cols; col++) { |
322 | sp = &screen.fb_addr[FB_POS(vport->x, vport->y + dist)]; |
| - | 323 | ry = height; |
|
| - | 324 | } else { |
|
| - | 325 | dp = &screen.fb_addr[FB_POS(vport->x, vport->y + dist)]; |
|
| 308 | draw_glyph(vport, false, col, row); |
326 | sp = &screen.fb_addr[FB_POS(vport->x, vport->y + 0)]; |
| 309 | } |
327 | ry = 0; |
| 310 | } |
328 | } |
| - | 329 | ||
| - | 330 | /* Move pixels line by line. */ |
|
| - | 331 | for (y = 0; y < height; y++) { |
|
| - | 332 | memcpy(dp, sp, vport->cols * FONT_WIDTH |
|
| - | 333 | * screen.pixelbytes); |
|
| - | 334 | ||
| - | 335 | sp += screen.scanline; |
|
| - | 336 | dp += screen.scanline; |
|
| - | 337 | } |
|
| - | 338 | ||
| - | 339 | /* Fill emptied area with background color. */ |
|
| - | 340 | draw_filled_rect(vport->x, vport->y + ry, |
|
| - | 341 | vport->x + COL2X(vport->cols), vport->y + ry + dist, |
|
| - | 342 | vport->style.bg_color); |
|
| 311 | } |
343 | } |
| 312 | 344 | ||
| 313 | /** Render glyphs |
345 | /** Render glyphs |
| 314 | * |
346 | * |
| 315 | * Convert glyphs from device independent font |
347 | * Convert glyphs from device independent font |