Mercurial > emacs
changeset 42934:b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
If region left to draw is not what was expected, mark the frame as
garbaged.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Thu, 24 Jan 2002 20:41:46 +0000 |
parents | 1d21c0e2179b |
children | 20a21fb23284 |
files | src/w32term.c |
diffstat | 1 files changed, 30 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32term.c Thu Jan 24 19:20:21 2002 +0000 +++ b/src/w32term.c Thu Jan 24 20:41:46 2002 +0000 @@ -5453,7 +5453,8 @@ { struct frame *f = XFRAME (w->frame); int x, y, width, height, from_y, to_y, bottom_y; - HDC hdc = get_frame_dc (f); + HWND hwnd = FRAME_W32_WINDOW (f); + HRGN expect_dirty; /* Get frame-relative bounding box of the text display area of W, without mode lines. Include in this box the left and right @@ -5474,6 +5475,7 @@ height = bottom_y - from_y; else height = run->height; + expect_dirty = CreateRectRgn (x, y + height, x + width, bottom_y); } else { @@ -5483,6 +5485,7 @@ height = bottom_y - to_y; else height = run->height; + expect_dirty = CreateRectRgn (x, y, x + width, to_y); } BLOCK_INPUT; @@ -5491,10 +5494,32 @@ updated_window = w; x_clear_cursor (w); - BitBlt (hdc, x, to_y, width, height, hdc, x, from_y, SRCCOPY); - + { + RECT from; + RECT to; + HRGN dirty = CreateRectRgn (0, 0, 0, 0); + HRGN combined = CreateRectRgn (0, 0, 0, 0); + + from.left = to.left = x; + from.right = to.right = x + width; + from.top = from_y; + from.bottom = from_y + height; + to.top = y; + to.bottom = bottom_y; + + ScrollWindowEx (hwnd, 0, to_y - from_y, &from, &to, dirty, + NULL, SW_INVALIDATE); + + /* Combine this with what we expect to be dirty. This covers the + case where not all of the region we expect is actually dirty. */ + CombineRgn (combined, dirty, expect_dirty, RGN_OR); + + /* If the dirty region is not what we expected, redraw the entire frame. */ + if (!EqualRgn (combined, expect_dirty)) + SET_FRAME_GARBAGED (f); + } + UNBLOCK_INPUT; - release_frame_dc (f, hdc); } @@ -10464,7 +10489,7 @@ f->output_data.w32->asked_for_visible = 1; -// my_show_window (f, FRAME_W32_WINDOW (f), f->async_iconified ? SW_RESTORE : SW_SHOW); +/* my_show_window (f, FRAME_W32_WINDOW (f), f->async_iconified ? SW_RESTORE : SW_SHOW); */ my_show_window (f, FRAME_W32_WINDOW (f), SW_SHOWNORMAL); }