From 11872c12884c69647812794d30c1cbde9353c715 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Mon, 3 Feb 2020 17:58:13 +0800 Subject: [PATCH] initial version of on_dirty_ppp --- src/kernel/compsor-fallback.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/kernel/compsor-fallback.c b/src/kernel/compsor-fallback.c index ae82a73f..f7a8ea33 100644 --- a/src/kernel/compsor-fallback.c +++ b/src/kernel/compsor-fallback.c @@ -484,7 +484,39 @@ static void on_showing_ppp (CompositorCtxt* ctxt, int zidx) static void on_dirty_ppp (CompositorCtxt* ctxt, int zidx) { + const ZNODEHEADER* znode_hdr; + CLIPRGN* ppp_rgn; + CLIPRGN dirty_rgn; + _DBG_PRINTF("called\n"); + znode_hdr = ServerGetPopupMenuZNodeHeader (zidx, (void**)&ppp_rgn, TRUE); + if (znode_hdr == NULL) + return; + + if (znode_hdr->dirty_rcs) { + int i; + + InitClipRgn (&dirty_rgn, &ctxt->cliprc_heap); + ClipRgnCopy (&dirty_rgn, ppp_rgn); + + for (i = 0; i < znode_hdr->nr_dirty_rcs; i++) { + RECT rc; + + // convert device coordinates to screen coordinates + rc = znode_hdr->dirty_rcs [i]; + OffsetRect (&rc, znode_hdr->rc.left, znode_hdr->rc.top); + // intersect the dirty rect with dirty region. + IntersectClipRect (&dirty_rgn, &rc); + } + + //SelectClipRegion (HDC_SCREEN_SYS, &dirty_rgn); + BitBlt (znode_hdr->mem_dc, 0, 0, + RECTW (znode_hdr->rc), RECTH (znode_hdr->rc), + HDC_SCREEN_SYS, znode_hdr->rc.left, znode_hdr->rc.top, 0); + EmptyClipRgn (&dirty_rgn); + } + + ServerReleasePopupMenuZNodeHeader (zidx); } static void on_hiding_ppp (CompositorCtxt* ctxt, int zidx)