From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.bugs Subject: bug#40845: SVG rendering issues Date: Sat, 25 Apr 2020 14:34:11 +0000 Message-ID: References: <72ebf5eb-6b00-ebb4-dab3-a047e35ae1ae@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000003afedd05a41e62fe" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="44685"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 40845@debbugs.gnu.org To: =?UTF-8?Q?Cl=C3=A9ment?= Pit-Claudel Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Apr 25 16:35:16 2020 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 1jSLtj-000BVu-7h for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 25 Apr 2020 16:35:15 +0200 Original-Received: from localhost ([::1]:38306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSLth-0003w9-Sq for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 25 Apr 2020 10:35:13 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42498) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSLtZ-0003vw-5V for bug-gnu-emacs@gnu.org; Sat, 25 Apr 2020 10:35:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jSLtX-0004Tb-9j for bug-gnu-emacs@gnu.org; Sat, 25 Apr 2020 10:35:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:48643) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jSLtW-0004TU-5E for bug-gnu-emacs@gnu.org; Sat, 25 Apr 2020 10:35:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jSLtW-0004Fn-2F for bug-gnu-emacs@gnu.org; Sat, 25 Apr 2020 10:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Pip Cet Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 25 Apr 2020 14:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 40845 X-GNU-PR-Package: emacs Original-Received: via spool by 40845-submit@debbugs.gnu.org id=B40845.158782529616334 (code B ref 40845); Sat, 25 Apr 2020 14:35:02 +0000 Original-Received: (at 40845) by debbugs.gnu.org; 25 Apr 2020 14:34:56 +0000 Original-Received: from localhost ([127.0.0.1]:60189 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jSLtP-0004FN-IG for submit@debbugs.gnu.org; Sat, 25 Apr 2020 10:34:56 -0400 Original-Received: from mail-ot1-f50.google.com ([209.85.210.50]:33031) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jSLtN-0004FA-7S for 40845@debbugs.gnu.org; Sat, 25 Apr 2020 10:34:53 -0400 Original-Received: by mail-ot1-f50.google.com with SMTP id j26so17831219ots.0 for <40845@debbugs.gnu.org>; Sat, 25 Apr 2020 07:34:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9C+GcuOlPAZVdI6pFkOhtV84qd3TemtpeuRM+QY4unU=; b=NFMn/QbVWdGEJ6NpTtncSQU7CBEImUVmDk+cCHDl22gXNt9GoDaTW16sDDh+Poj7qv URBOgkGXOXrPu3pfw+sfw/BTMuu8VX76op+0sKmlpIbi36a3X0aULqTzn516pfW2SK+X jY7g3ndk8SixuP6tgj0NDiIYxU0l+kayKmt57I726VtpdkqQPYiphpn7Pp7ZvT4iem0G LZvwlCbZwYD2do38WvE1MZGIF7M7IdcarjA0ErQXV2W4BVjlDaMKSccumyJ1k3DOMxm7 rmIhbaioj+RAoX+JNbu36mQuujeZxpOGEC/ERZVwvdWi3OiT6ug0eStFVcxuRMFebxQk W+Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9C+GcuOlPAZVdI6pFkOhtV84qd3TemtpeuRM+QY4unU=; b=a/HrEHaW/2FNWZfKaQL0QKoiAdiZy3TQToJu9mFTC5ZUX56YjD2/fjdxtA7QMahIlI zz9dh7YRpF1jTUMnX+tnAshtROtjq8vt1r6FYwKaQw+SPvDvluYQqaI+0YhxN/2xvaZf e6AhI3Qs5EvvbdD0gIFx/HaMeFb0HIe8t9ml3QfI3BvZt6KKPUFBUSIka8sIWBlFHijp RCiIqJmIiVyy1QVDWObNAA6F1WKLOjDVRNMHcpz+xGivwzeKGTwSziL6Pm7sE4uV2TmG ct3EMnaTM861VktRE88C1v7JSRTZNFFf9FA1d+UgX0xSaeeOF3gd/jg3SKsvgENBRORm 11Ww== X-Gm-Message-State: AGi0PubaPyxhOVqHgHaW9/o7/tDsBd3ROKu46hQNUt2btVnaXvx5oazl TrnmZF7KWj5AWdp0LdU2/MtwmBKn2r5lVNkdi+Y= X-Google-Smtp-Source: APiQypLZ/JsICPIPAwBSk3+5SzfXTbBHymrd2mN5gFv9S7QsTVJUvA0/s84DNuDgHmoIlFhGMklIm0XWCgmosQFvRGc= X-Received: by 2002:aca:ec87:: with SMTP id k129mr11036559oih.44.1587825287553; Sat, 25 Apr 2020 07:34:47 -0700 (PDT) In-Reply-To: <72ebf5eb-6b00-ebb4-dab3-a047e35ae1ae@gmail.com> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Received-From: 209.51.188.43 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:179005 Archived-At: --0000000000003afedd05a41e62fe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Apr 25, 2020 at 12:20 PM Cl=C3=A9ment Pit-Claudel wrote: > > Hi all, > > As discussed on the mailing list, a number of issues currently exist with= our SVG rendering implementation. I have tried to summarize the ones I'm = aware of in the following example. > > (with-current-buffer (get-buffer-create "*svg bugs*") > (erase-buffer) > (require 'face-remap) > (setq text-scale-mode-amount 10) > (text-scale-mode) > (let ((svg (svg-create 16 16))) > (svg-ellipse svg 8 8 4 4) > (insert "Text: ") > (print (svg-image svg :ascent 100)) > (insert-image (svg-image svg :ascent 100)) > (insert-image (svg-image svg :scale 5.0 :ascent 'center :foreground "= red" :background "darkgreen")) > (add-text-properties > (point-min) (point-max) > '(face (:foreground "orange" :background "purple") > mouse-face '(:foreground "purple" :background "orange")))) > (pop-to-buffer (current-buffer))) > > The issues: > > 1. Manually scaling an image, as is done for the second image, doesn't re= -render the svg: is scales the bitmap-rendered version of it, causing blurr= iness. > 2. The SVG images don't inherit the background of the current face; inste= ad, they inherit the background of the default face. > 3. The SVG images don't inherit the foreground of the current face; inste= ad, they use a black foreground. > 4. The :foreground keyword has no effect on svg images. > 5. The images are not scaled with the text: changing text-scale-mode-amou= nt doesn't change the size of the images. I would like to add 6. When the cursor is over an SVG image, it is displayed with a box around it rather than with inverted video as characters are. I've played around a while ago in an attempt to fix these issues, and be able to define "character-like" SVG glyphs. My approach was to add a display spec of the form (gen FN), which calls FN with the current face parameters as arguments whenever redisplaying the spec, then uses the return value (an image spec) as the actual spec to be displayed. It's probably quite slow, but (as of June last) it works, even when displaying the same buffer twice. Calling elisp from the redisplay engine is, of course, something we don't really want to have more of, but we'd do so anyway for a `when' spec (in fact, an alternative approach to get this working with old Emacsen was to abuse a `when' spec to set the image spec correctly). The attached patch, IIRC, is the main part. As you can see, it leaves most of the work to the Lisp side of things. It can fix all issues mentioned above by modifying the SVG as required. Also, IIRC, 3 is an rsvg issue. --0000000000003afedd05a41e62fe Content-Type: text/x-patch; charset="US-ASCII"; name="gen.diff" Content-Disposition: attachment; filename="gen.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k9fq3vr70 Y29tbWl0IDBhZjE4NTA0ODVmM2FkMTUxOWU1MmRlMmIxNjk0ZWZhOTIyOTE3ZjQKQXV0aG9yOiBQ aXAgQ2V0IDxwaXBjZXRAZ21haWwuY29tPgpEYXRlOiAgIFNhdCBKdW4gMjIgMDc6NTM6MjggMjAx OSArMDAwMAoKICAgIHNuYXBzaG90CgpkaWZmIC0tZ2l0IGEvc3JjL2NhbGxpbnQuYyBiL3NyYy9j YWxsaW50LmMKaW5kZXggODhhM2MzNDhkMC4uNmYyZTVkNTA2NiAxMDA2NDQKLS0tIGEvc3JjL2Nh bGxpbnQuYworKysgYi9zcmMvY2FsbGludC5jCkBAIC04MjQsNiArODI0LDcgQEAgc3ltc19vZl9j YWxsaW50ICh2b2lkKQogICBERUZTWU0gKFFsZXQsICJsZXQiKTsKICAgREVGU1lNIChRaWYsICJp ZiIpOwogICBERUZTWU0gKFF3aGVuLCAid2hlbiIpOworICBERUZTWU0gKFFnZW4sICJnZW4iKTsK ICAgREVGU1lNIChRbGV0eCwgImxldCoiKTsKICAgREVGU1lNIChRc2F2ZV9leGN1cnNpb24sICJz YXZlLWV4Y3Vyc2lvbiIpOwogICBERUZTWU0gKFFwcm9nbiwgInByb2duIik7CmRpZmYgLS1naXQg YS9zcmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jCmluZGV4IDU2OTlhYWM2MWIuLjcxN2ZiMzBlYzMg MTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC0yNzI4LDcgKzI3 MjgsNiBAQCBzYWZlX2NhbGwyIChMaXNwX09iamVjdCBmbiwgTGlzcF9PYmplY3QgYXJnMSwgTGlz cF9PYmplY3QgYXJnMikKICAgcmV0dXJuIHNhZmVfY2FsbCAoMywgZm4sIGFyZzEsIGFyZzIpOwog fQogCi0KIAwKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgogCQkJICAgICAgRGVidWdnaW5nCkBAIC00ODkzLDYg KzQ4OTIsNyBAQCBoYW5kbGVfZGlzcGxheV9zcGVjIChzdHJ1Y3QgaXQgKml0LCBMaXNwX09iamVj dCBzcGVjLCBMaXNwX09iamVjdCBvYmplY3QsCiAjZW5kaWYKICAgICAgICYmICFFUSAoWENBUiAo c3BlYyksIFFzcGFjZSkKICAgICAgICYmICFFUSAoWENBUiAoc3BlYyksIFF3aGVuKQorICAgICAg JiYgIUVRIChYQ0FSIChzcGVjKSwgUWdlbikKICAgICAgICYmICFFUSAoWENBUiAoc3BlYyksIFFz bGljZSkKICAgICAgICYmICFFUSAoWENBUiAoc3BlYyksIFFzcGFjZV93aWR0aCkKICAgICAgICYm ICFFUSAoWENBUiAoc3BlYyksIFFoZWlnaHQpCkBAIC00OTkxLDYgKzQ5OTEsOCBAQCBkaXNwbGF5 X3Byb3BfZW5kIChzdHJ1Y3QgaXQgKml0LCBMaXNwX09iamVjdCBvYmplY3QsIHN0cnVjdCB0ZXh0 X3BvcyBzdGFydF9wb3MpCiAgICBWYWx1ZSBpcyBub24temVybyBpZiBzb21ldGhpbmcgd2FzIGZv dW5kIHdoaWNoIHJlcGxhY2VzIHRoZSBkaXNwbGF5CiAgICBvZiBidWZmZXIgb3Igc3RyaW5nIHRl eHQuICAqLwogCitleHRlcm4gTGlzcF9PYmplY3QgKmxmYWNlX2lkX3RvX25hbWU7CisKIHN0YXRp YyBpbnQKIGhhbmRsZV9zaW5nbGVfZGlzcGxheV9zcGVjIChzdHJ1Y3QgaXQgKml0LCBMaXNwX09i amVjdCBzcGVjLCBMaXNwX09iamVjdCBvYmplY3QsCiAJCQkgICAgTGlzcF9PYmplY3Qgb3Zlcmxh eSwgc3RydWN0IHRleHRfcG9zICpwb3NpdGlvbiwKQEAgLTUwMDIsNiArNTAwNCw0NiBAQCBoYW5k bGVfc2luZ2xlX2Rpc3BsYXlfc3BlYyAoc3RydWN0IGl0ICppdCwgTGlzcF9PYmplY3Qgc3BlYywg TGlzcF9PYmplY3Qgb2JqZWN0LAogICBzdHJ1Y3QgdGV4dF9wb3Mgc3RhcnRfcG9zID0gKnBvc2l0 aW9uOwogICB2b2lkICppdGRhdGEgPSBOVUxMOwogCisgIGlmIChpdCAhPSBOVUxMICYmCisgICAg ICBDT05TUCAoc3BlYykgJiYKKyAgICAgIEVRIChYQ0FSIChzcGVjKSwgUWdlbikpCisgICAgewor ICAgICAgc3BlYyA9IFhDRFIgKHNwZWMpOworICAgICAgaWYgKCFDT05TUCAoc3BlYykpCisJcmV0 dXJuIDA7CisgICAgICBMaXNwX09iamVjdCBnZW4gPSBYQ0FSIChzcGVjKTsKKyAgICAgIHN0cnVj dCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChpdC0+ZiwgaXQtPmZhY2VfaWQpOworICAgICAg TGlzcF9PYmplY3QgbGZhY2UgPSBRbmlsOworICAgICAgTGlzcF9PYmplY3QgcHJvcHNbXSA9IHsK KwlRQ3R5cGUsCisJUUNmYW1pbHksCisJUUNmb3VuZHJ5LAorCVFDd2lkdGgsCisJUUNoZWlnaHQs CisJUUN3ZWlnaHQsCisJUUNzbGFudCwKKwlRQ3VuZGVybGluZSwKKwlRQ2ludmVyc2VfdmlkZW8s CisJUUNmb3JlZ3JvdW5kLAorCVFDYmFja2dyb3VuZCwKKwlRQ3N0aXBwbGUsCisJUUNvdmVybGlu ZSwKKwlRQ3N0cmlrZV90aHJvdWdoLAorCVFDYm94LAorCVFDZm9udCwKKwlRQ2luaGVyaXQsCisJ UUNmb250c2V0LAorCVFDZGlzdGFudF9mb3JlZ3JvdW5kLAorICAgICAgfTsKKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgTEZBQ0VfVkVDVE9SX1NJWkU7IGkrKykKKwlsZmFjZSA9IEZjb25zIChG Y29ucyAocHJvcHNbaV0sIGZhY2UtPmxmYWNlW2ldKSwKKwkJICAgICAgIGxmYWNlKTsKKyAgICAg IExpc3BfT2JqZWN0IGZvbnQgPSBRbmlsOworICAgICAgWFNFVEZPTlQgKGZvbnQsIGZhY2UtPmZv bnQpOworICAgICAgbGZhY2UgPSBGY29ucyAoRmNvbnMgKFFDZm9udCwgZm9udCksIGxmYWNlKTsK KyAgICAgIHNwZWMgPSBzYWZlX2NhbGwxIChnZW4sIGxmYWNlKTsKKyAgICB9CisKICAgLyogSWYg U1BFQyBpcyBhIGxpc3Qgb2YgdGhlIGZvcm0gYCh3aGVuIEZPUk0gLiBWQUxVRSknLCBldmFsdWF0 ZSBGT1JNLgogICAgICBJZiB0aGUgcmVzdWx0IGlzIG5vbi1uaWwsIHVzZSBWQUxVRSBpbnN0ZWFk IG9mIFNQRUMuICAqLwogICBmb3JtID0gUXQ7CmRpZmYgLS1naXQgYS9zcmMveGZhY2VzLmMgYi9z cmMveGZhY2VzLmMKaW5kZXggMDEyY2M5NjQ3MC4uNDc0NTNjMmIzMSAxMDA2NDQKLS0tIGEvc3Jj L3hmYWNlcy5jCisrKyBiL3NyYy94ZmFjZXMuYwpAQCAtMjk0LDcgKzI5NCw3IEBAICNkZWZpbmUg RkFDRV9DQUNIRV9CVUNLRVRTX1NJWkUgMTAwMQogCiAvKiBBIHZlY3RvciBtYXBwaW5nIExpc3Ag ZmFjZSBJZCdzIHRvIGZhY2UgbmFtZXMuICAqLwogCi1zdGF0aWMgTGlzcF9PYmplY3QgKmxmYWNl X2lkX3RvX25hbWU7CitMaXNwX09iamVjdCAqbGZhY2VfaWRfdG9fbmFtZTsKIHN0YXRpYyBwdHJk aWZmX3QgbGZhY2VfaWRfdG9fbmFtZV9zaXplOwogCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVN Cgo= --0000000000003afedd05a41e62fe--