vt_vga: Clip the draw area to never draw offscreen
This fixes a bug when two windows use different fonts, but a longer-term solution is required. The dirty area should be stored as pixels, not character cells, because such coordinates don't have the same meaning in all windows, when using different fonts. MFC after: 1 week
This commit is contained in:
parent
bdcaf97c3e
commit
37fcd2911e
@ -740,6 +740,19 @@ vga_bitblt_text_gfxmode(struct vt_device *vd, const struct vt_buf *vb,
|
|||||||
* VT_VGA_PIXELS_BLOCK;
|
* VT_VGA_PIXELS_BLOCK;
|
||||||
y2 = row * vf->vf_height + vd->vd_offset.tp_row;
|
y2 = row * vf->vf_height + vd->vd_offset.tp_row;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clip the area to the screen size.
|
||||||
|
*
|
||||||
|
* FIXME: The problem with handling the dirty area in character
|
||||||
|
* cells is that when using different fonts, the dirty area was
|
||||||
|
* possibly calculated with a different font than the one we use
|
||||||
|
* here, leading to out-of-screen coordinates. The dirty area
|
||||||
|
* should be stored in pixels.
|
||||||
|
*/
|
||||||
|
|
||||||
|
x2 = min(x2, vd->vd_width - 1);
|
||||||
|
y2 = min(y2, vd->vd_height - 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now, we take care of N pixels line at a time (the first for
|
* Now, we take care of N pixels line at a time (the first for
|
||||||
* loop, N = font height), and for these lines, draw one pixels
|
* loop, N = font height), and for these lines, draw one pixels
|
||||||
|
Loading…
Reference in New Issue
Block a user