From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Po Lu via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#51681: 29.0.50; [PATCH] Really fix xwidget scroll optimization Date: Mon, 08 Nov 2021 14:24:18 +0800 Message-ID: <8735o7qi5p.fsf@yahoo.com> References: <8735o7qi5p.fsf.ref@yahoo.com> Reply-To: Po Lu Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3159"; mail-complaints-to="usenet@ciao.gmane.io" To: 51681@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Nov 08 07:26:06 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mjy6X-0000bz-TD for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 08 Nov 2021 07:26:06 +0100 Original-Received: from localhost ([::1]:55928 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mjy6W-0004Ie-3o for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 08 Nov 2021 01:26:04 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:44536) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mjy5X-0004Ep-OU for bug-gnu-emacs@gnu.org; Mon, 08 Nov 2021 01:25:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:44266) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mjy5W-0006GX-M7 for bug-gnu-emacs@gnu.org; Mon, 08 Nov 2021 01:25:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mjy5W-0007mH-J4 for bug-gnu-emacs@gnu.org; Mon, 08 Nov 2021 01:25:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Po Lu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 08 Nov 2021 06:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 51681 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.163635267629841 (code B ref -1); Mon, 08 Nov 2021 06:25:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 8 Nov 2021 06:24:36 +0000 Original-Received: from localhost ([127.0.0.1]:55810 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mjy55-0007lF-Lg for submit@debbugs.gnu.org; Mon, 08 Nov 2021 01:24:35 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:57024) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mjy53-0007l7-RJ for submit@debbugs.gnu.org; Mon, 08 Nov 2021 01:24:34 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:44416) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mjy53-0003sx-M0 for bug-gnu-emacs@gnu.org; Mon, 08 Nov 2021 01:24:33 -0500 Original-Received: from sonic301-30.consmr.mail.ne1.yahoo.com ([66.163.184.199]:38926) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mjy50-0006Bh-SJ for bug-gnu-emacs@gnu.org; Mon, 08 Nov 2021 01:24:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1636352668; bh=h8QcNHYvPlB2lePIwki4KyW5N1a6zwagHgcUby8gSno=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=bZkkctjyOzbxoe0coszulbK1ZlcQMZYh9fXcqJTl6EtizQVc0AujitJ/t0roI9l3VJEuLBXLqZVAK6HWk3ivHArhQo5zxZ+pp6Rp9DQABSiFZD4ZJGdhaVx09W6uZNCPUIbh1LLV8KtUDoq7tvzQPOiIFtwrJts+b4SGjIS3P8W+TeBLtKUD98B+4d8FfGU21VbrUrEjiaJ7GWYPVEdSkpi0B14wYO0EEATIWgSbw2GAjqtsOpqn59fbhpAqG/wnlXbNP/vv62TpumwEmhCp7xee6CaGlcXoQgjyDl59IL8liNgqdzt1+BnSnVKx3pB8dKy5bdOExxqzPuI+CA76vw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1636352668; bh=28n5TyhqNQuXcdIGFZgcYZ//SjeXzWT7hMuzG+tdBAt=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=nm4luxA32XBnQd1MO6+nkZP9LX8HvzJKCZtDl1Ox/MCW7b2jRuI252ev4RgDHOVpqw5hh4T6c9MERleysnStEcI+7cOr8xvYWxD/8WmqXO656PB5wr27G4PDENbo4Im/zBxRU04AF+jB4FBwT3H6KpofXNT6wiB5SpNxUuwtEryG+fkNQIuyErV/MIS5NAG7Z6HqN6b22+QxtfQizOZXS18slNPEel4C4p9xqUTXtY8zjxcyMcReTOOgfX7xA8AkGK1KHGBTkMm3NRSH2EvILzimjQrnAu8g9OqjHfwygoLYm3wrGQqS6KQMMHQjyOoPITfUpxnQeaXrNdjEpUCv+A== X-YMail-OSG: EturzWoVM1lb0.0J_s_zjR89Ud4j7PDwWB_v84D0Ha82uWYYDWgdRYma69T3xDY dMefGPyGcsQ5M4SHbyh1pCg81bYBdXm5wfjbeP45jSF40aDRg6iBr3AhhoHzFs1arVdfC3vKKN4P jOKwhJfTlvAPNWADcx5YmdHhsC3U2OZ7okjukFwgYoK9NF5Je1viZSutAv2.bpSBS900EU4IApOj bos8pQ53QJs66NcbXSGCULoYDIP.46ep8w7_gg1rNWjCQZUoZrqmvU0oTe2JG5FnkGVTr.HFRRkS 4h2wT0N8VQdOhD1lhUjZu4h5XVKU3x4mVbQH.g5EF0R7.MVj5oVTqpS_.QAyCznj_D2gWEvO33H_ FiuU2uHiRjzK7rZmpwRJJe3OXaooPMhzFkC3Ve1keFmzmaRM6doifyWR5qDCPYVcni.BLxmIYize QyYZ39KUmus38C65Tg2yvhFzmqZj1PJxaV7NpY9a6GfzpDeSUGSZ5ZoU4_ELOXA7ui11gll2KmJF QjhP4YAlBE5f9xN1NNt28.yujaOMcYzKa.BFgwGvQ28kVNV4HU0tEtkkXLHqX16yUVh4gqDD6yNu aC_CQTeXVEYEW._QoA8nTMkeerjYSdpIENIeuSPpegQvIl7eqUoYXe1l38s7L37jPAkYER6h8VYF M5RZVyqGxzqSjSeF.AxBaQ1Oe9EhylB6zvAo35s_KPCqIGJ.3Js4j6jmiwktqFTm6B_dbeRaMCZb mQ_3Q53tOceHmVgrTttVq_gEbbv8hhGfVkASOd3e.uQJxs3y4qqdAsALzDtlTSzZKCgsXLUAY267 rmXO.EuxgH_ApZMmoy1sGKz.nRezBxJ3vlxs3_hlDW X-Sonic-MF: Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ne1.yahoo.com with HTTP; Mon, 8 Nov 2021 06:24:28 +0000 Original-Received: by kubenode502.mail-prod1.omega.sg3.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 28be4f49c2abd48048a95f70d5b2bb25; Mon, 08 Nov 2021 06:24:21 +0000 (UTC) X-Mailer: WebService/1.1.19266 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Received-SPF: pass client-ip=66.163.184.199; envelope-from=luangruo@yahoo.com; helo=sonic301-30.consmr.mail.ne1.yahoo.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:219322 Archived-At: --=-=-= Content-Type: text/plain Sorry for missing this, it was quite obvious in retrospect, but when I first wrote the code for x_scroll_run it was with a mistaken understanding of the meaning of `clip_bottom'. Thanks. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Really-fix-xwidget-scroll-optimization-and-clip.patch >From 75c0f76a3f8f122151c20e3f2037a17e78ede970 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Mon, 8 Nov 2021 14:17:48 +0800 Subject: [PATCH] Really fix xwidget scroll optimization and clip * src/xterm.c (x_scroll_run): Improve clip detection. * src/xwidget.c (xv_do_draw): Use cairo_translate. (xwidget_motion_or_crossing): Use correct fields. --- src/xterm.c | 23 ++++++++++++++++------- src/xwidget.c | 8 ++++---- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/xterm.c b/src/xterm.c index 24f12d6e24..1fb3d8d7c0 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -4442,18 +4442,27 @@ x_scroll_run (struct window *w, struct run *run) window_box (w, TEXT_AREA, &text_area_x, &text_area_y, &text_area_width, &text_area_height); - clip_top = max (0, text_area_y - y); - clip_bottom = max (clip_top, - min (XXWIDGET (view->model)->height, - text_area_y + text_area_height - y)); - view->y = y; + + clip_top = 0; + clip_bottom = window_height; + + if (y < text_area_y) + clip_top = text_area_y - y; + + if ((y + clip_top + window_height) + > (text_area_y + text_area_height)) + { + clip_bottom -= (y + clip_top + window_height) + - (text_area_y + text_area_height); + } + view->clip_top = clip_top; view->clip_bottom = clip_bottom; /* This means the view has moved offscreen. Unmap it and hide it here. */ - if ((view->clip_top - view->clip_bottom) <= 0) + if ((view->clip_bottom - view->clip_top) <= 0) { view->hidden = true; XUnmapWindow (dpy, child); @@ -4462,7 +4471,7 @@ x_scroll_run (struct window *w, struct run *run) XMoveResizeWindow (dpy, child, view->x + view->clip_left, view->y + view->clip_top, view->clip_right - view->clip_left, - view->clip_top - view->clip_bottom); + view->clip_bottom - view->clip_top); XFlush (dpy); } } diff --git a/src/xwidget.c b/src/xwidget.c index 1815a39ab6..2d9351308e 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -753,9 +753,9 @@ xwidget_motion_or_crossing (struct xwidget_view *view, const XEvent *event) GtkWidget *target = find_widget_at_pos (model->widgetwindow_osr, (event->type == MotionNotify ? event->xmotion.x + view->clip_left - : event->xmotion.y + view->clip_top), + : event->xcrossing.x + view->clip_left), (event->type == MotionNotify - ? event->xmotion.y + view->clip_left + ? event->xmotion.y + view->clip_top : event->xcrossing.y + view->clip_top), &x, &y); @@ -855,8 +855,8 @@ xv_do_draw (struct xwidget_view *xw, struct xwidget *w) cairo_save (xw->cr_context); if (surface) { - cairo_set_source_surface (xw->cr_context, surface, xw->clip_left, - xw->clip_top); + cairo_translate (xw->cr_context, -xw->clip_left, -xw->clip_top); + cairo_set_source_surface (xw->cr_context, surface, 0, 0); cairo_set_operator (xw->cr_context, CAIRO_OPERATOR_SOURCE); cairo_paint (xw->cr_context); } -- 2.31.1 --=-=-=--