Re: Scintilla GTK 4 port

Neil Hodgson <[email protected]> Thu, 11 Dec 2025 15:40:18 +1100
Newsgroups gmane.comp.lib.scintilla.devel
Message-ID <CACWkrTix5WWFFvdM=62Xk6W3Bu60-SK+jw_GqPkYsayYDX8M1Q@mail.gmail.com>
--00000000000093db0a0645a5be4d
Content-Type: text/plain; charset="UTF-8"

Me:

>    wrote some code that coalesced adjacent background rectangles and only drew when the background changed

Attached an implementation of this. It doesn't optimize all cases but
should reduce vertical seams within a line. The GTK4 demo doesn't lex
the file so there is only one lexeme per line and the benefit can't
yet be seen.

For debugging, see the spans by uncommenting the line (near the end of
the patch) that shades every second span on a line.

Neil

-- 
You received this message because you are subscribed to the Google Groups "scintilla-interest" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/scintilla-interest/CACWkrTix5WWFFvdM%3D62Xk6W3Bu60-SK%2Bjw_GqPkYsayYDX8M1Q%40mail.gmail.com.

--00000000000093db0a0645a5be4d
Content-Type: text/plain; charset="US-ASCII"; name="CoalesceStrips.patch"
Content-Disposition: attachment; filename="CoalesceStrips.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mj0y8nrq0>
X-Attachment-Id: f_mj0y8nrq0

ZGlmZiAtciBhYzZhMmQzNzlmMjUgc3JjL0VkaXRWaWV3LmN4eAotLS0gYS9zcmMvRWRpdFZpZXcu
Y3h4CU1vbiBEZWMgMDggMTQ6Mzg6MDcgMjAyNSArMTEwMAorKysgYi9zcmMvRWRpdFZpZXcuY3h4
CVRodSBEZWMgMTEgMTU6MjQ6MTIgMjAyNSArMTEwMApAQCAtMTY1NCw2ICsxNjU0LDM2IEBACiAJ
cmV0dXJuIChjYXJldEF0U3RhcnQgfHwgY2FyZXRBdEVuZCkgPyBJblNlbGVjdGlvbjo6aW5Ob25l
IDogSW5TZWxlY3Rpb246OmluTWFpbjsKIH0KIAorbmFtZXNwYWNlIHsKKworc3RydWN0IFN0cmlw
IHsKKwlJbnRlcnZhbCBzcGFuOworCUNvbG91clJHQkEgY29sb3VyOwkvLyBBc3N1bWVkIG9wYXF1
ZQorCVtbbm9kaXNjYXJkXV0gYm9vbCBBZGQoY29uc3QgU3RyaXAgJm5leHQpIG5vZXhjZXB0IHsK
KwkJaWYgKChjb2xvdXIgPT0gbmV4dC5jb2xvdXIpICYmCisJCQkoc3Bhbi5yaWdodCA9PSBuZXh0
LnNwYW4ubGVmdCkpIHsKKwkJCXNwYW4ucmlnaHQgPSBuZXh0LnNwYW4ucmlnaHQ7CisJCQlyZXR1
cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorfTsKKworc3RydWN0IFN0cmlwcyB7
CisJc3RkOjp2ZWN0b3I8U3RyaXA+IHN0cmlwczsKKwl2b2lkIEFwcGVuZChJbnRlcnZhbCBzcGFu
LCBDb2xvdXJSR0JBIGNvbG91cikgeworCQljb25zdCBTdHJpcCBuZXh0eyBzcGFuLCBjb2xvdXIg
fTsKKwkJaWYgKHN0cmlwcy5lbXB0eSgpIHx8ICFzdHJpcHMuYmFjaygpLkFkZChuZXh0KSkgewor
CQkJLy8gRG9lcyBub3QgaGFuZGxlIGNhc2Ugb2YgdmlzaWJsZSB3aGl0ZXNwYWNlIGJhY2tncm91
bmQuCisJCQkvLyBDb3VsZCBpbnNlcnQgYSBzdHJpcCBpbnNpZGUgdGhlIGxhc3Qgc3BhbiwgbGVh
ZGluZyB0byBlaXRoZXIgMyAoaW50ZXJpb3IpIG9yIDIgKHNpZGUpCisJCQkvLyBzcGFucyB3aGVy
ZSB0aGVyZSBoYWQgYmVlbiBqdXN0IDEuCisJCQlzdHJpcHMucHVzaF9iYWNrKG5leHQpOworCQl9
CisJfQorfTsKKworfQorCiB2b2lkIERyYXdCYWNrZ3JvdW5kKFN1cmZhY2UgKnN1cmZhY2UsIGNv
bnN0IEVkaXRNb2RlbCAmbW9kZWwsIGNvbnN0IFZpZXdTdHlsZSAmdnNEcmF3LCBjb25zdCBMaW5l
TGF5b3V0ICpsbCwKIAlpbnQgeFN0YXJ0LCBQUmVjdGFuZ2xlIHJjTGluZSwgaW50IHN1YkxpbmUs
IFJhbmdlIGxpbmVSYW5nZSwgU2NpOjpQb3NpdGlvbiBwb3NMaW5lU3RhcnQsCiAJQ29sb3VyT3B0
aW9uYWwgYmFja2dyb3VuZCkgewpAQCAtMTY3MCw2ICsxNzAwLDggQEAKIAogCWNvbnN0IGJvb2wg
ZHJhd1doaXRlc3BhY2VCYWNrZ3JvdW5kID0gdnNEcmF3LldoaXRlc3BhY2VCYWNrZ3JvdW5kRHJh
d24oKSAmJiAhYmFja2dyb3VuZDsKIAorCVN0cmlwcyBzdHJpcHM7CisKIAkvLyBCYWNrZ3JvdW5k
IGRyYXdpbmcgbG9vcAogCXdoaWxlIChiZkJhY2suTW9yZSgpKSB7CiAKQEAgLTE2OTksMTcgKzE3
MzEsMTcgQEAKIAkJCQkJLy8gQmxvYiBkaXNwbGF5CiAJCQkJCWluSW5kZW50YXRpb24gPSBmYWxz
ZTsKIAkJCQl9Ci0JCQkJc3VyZmFjZS0+RmlsbFJlY3RhbmdsZUFsaWduZWQocmNTZWdtZW50LCBG
aWxsKHRleHRCYWNrKSk7CisJCQkJc3RyaXBzLkFwcGVuZChIb3Jpem9udGFsQm91bmRzKHJjU2Vn
bWVudCksIHRleHRCYWNrKTsKIAkJCX0gZWxzZSB7CiAJCQkJLy8gTm9ybWFsIHRleHQgZGlzcGxh
eQotCQkJCXN1cmZhY2UtPkZpbGxSZWN0YW5nbGVBbGlnbmVkKHJjU2VnbWVudCwgRmlsbCh0ZXh0
QmFjaykpOworCQkJCXN0cmlwcy5BcHBlbmQoSG9yaXpvbnRhbEJvdW5kcyhyY1NlZ21lbnQpLCB0
ZXh0QmFjayk7CiAJCQkJaWYgKHZzRHJhdy52aWV3V2hpdGVzcGFjZSAhPSBXaGl0ZVNwYWNlOjpJ
bnZpc2libGUpIHsKIAkJCQkJZm9yIChpbnQgY3BvcyA9IDA7IGNwb3MgPD0gaSAtIHRzLnN0YXJ0
OyBjcG9zKyspIHsKIAkJCQkJCWlmIChsbC0+Y2hhcnNbY3BvcyArIHRzLnN0YXJ0XSA9PSAnICcp
IHsKIAkJCQkJCQlpZiAoZHJhd1doaXRlc3BhY2VCYWNrZ3JvdW5kICYmIHZzRHJhdy5XaGl0ZVNw
YWNlVmlzaWJsZShpbkluZGVudGF0aW9uKSkgewogCQkJCQkJCQljb25zdCBQUmVjdGFuZ2xlIHJj
U3BhY2UgPSBJbnRlcnNlY3Rpb24ocmNMaW5lLAogCQkJCQkJCQkJbGwtPlNwYW5CeXRlKGNwb3Mg
KyB0cy5zdGFydCkuT2Zmc2V0KGhvcml6b250YWxPZmZzZXQpKTsKLQkJCQkJCQkJc3VyZmFjZS0+
RmlsbFJlY3RhbmdsZUFsaWduZWQocmNTcGFjZSwKKwkJCQkJCQkJc3RyaXBzLkFwcGVuZChIb3Jp
em9udGFsQm91bmRzKHJjU3BhY2UpLAogCQkJCQkJCQkJdnNEcmF3LkVsZW1lbnRDb2xvdXJGb3Jj
ZWQoRWxlbWVudDo6V2hpdGVTcGFjZUJhY2spLk9wYXF1ZSgpKTsKIAkJCQkJCQl9CiAJCQkJCQl9
IGVsc2UgewpAQCAtMTcyMiw2ICsxNzU0LDE1IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlib29s
IHBoYXNlID0gZmFsc2U7CS8vIEp1c3QgZm9yIGRlYnVnZ2luZyB0byBtYWtlIHRoZSBjb2FsZXNj
aW5nIHZpc2libGUKKwlmb3IgKGNvbnN0IFN0cmlwICZzdHJpcDogc3RyaXBzLnN0cmlwcykgewor
CQlzdXJmYWNlLT5GaWxsUmVjdGFuZ2xlQWxpZ25lZChJbnRlcnNlY3Rpb24ocmNMaW5lLCBzdHJp
cC5zcGFuKSwgRmlsbChzdHJpcC5jb2xvdXIpKTsKKwkJaWYgKHBoYXNlKSB7CisJCQkvLyBNYWtl
IHRoZSBzcGFucyB2aXNpYmxlCisJCQkvL3N1cmZhY2UtPkZpbGxSZWN0YW5nbGVBbGlnbmVkKElu
dGVyc2VjdGlvbihyY0xpbmUsIHN0cmlwLnNwYW4pLCBGaWxsKENvbG91clJHQkEoMCwgMHg4MCwg
MCwgNTApKSk7CisJCX0KKwkJcGhhc2UgPSAhcGhhc2U7CisJfQogfQogCiB2b2lkIERyYXdFZGdl
TGluZShTdXJmYWNlICpzdXJmYWNlLCBjb25zdCBWaWV3U3R5bGUgJnZzRHJhdywgY29uc3QgTGlu
ZUxheW91dCAqbGwsCg==
--00000000000093db0a0645a5be4d--