Bug 1678756 - Check for new clusters or ligature groups in textPaths even in skipped characters r=emilio

The textcase and reference differ by a single space.
We should check for new clusters or ligature groups in textPaths even in skipped characters
Also removes a redundant check presumably left over from some earlier refactoring.

Differential Revision: https://phabricator.services.mozilla.com/D97828
This commit is contained in:
longsonr 2020-12-04 06:21:37 +00:00
Родитель 732d9030af
Коммит 16a19b1aa8
4 изменённых файлов: 29 добавлений и 6 удалений

Просмотреть файл

@ -114,6 +114,7 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fuzzy-if(skiaContent,0-1,0-
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-a.svg textpath-a-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-anchor-middle.svg textpath-anchor-middle-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-anchor-end.svg textpath-anchor-end-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-cluster.svg textpath-cluster-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-invalid-parent.svg textpath-invalid-parent-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-multiline.svg textpath-multiline-ref.svg # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textpath-multiline-2.svg textpath-multiline-2-ref.svg # Bug 1392106

Просмотреть файл

@ -0,0 +1,12 @@
<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" >
<defs>
<path id="path" d="M 100 200 C 200 100 300 0 400 100" />
<style>
text {
font: 40px monospace;
}
</style>
</defs>
<text transform="translate(0, 40)">a <textPath href="#path">b </textPath>c</text>
</svg>

После

Ширина:  |  Высота:  |  Размер: 315 B

Просмотреть файл

@ -0,0 +1,12 @@
<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" >
<defs>
<path id="path" d="M 100 200 C 200 100 300 0 400 100" />
<style>
text {
font: 40px monospace;
}
</style>
</defs>
<text transform="translate(0, 40)">a <textPath href="#path">b </textPath> c</text>
</svg>

После

Ширина:  |  Высота:  |  Размер: 316 B

Просмотреть файл

@ -4661,8 +4661,7 @@ void SVGTextFrame::DoTextPathLayout() {
}
// Loop for each character in the text path.
while (!it.AtEnd() && it.TextPathFrame() &&
it.TextPathFrame()->GetContent() == textPath) {
while (!it.AtEnd() && it.TextPathFrame()) {
// The index of the cluster or ligature group's first character.
uint32_t i = it.TextElementCharIndex();
@ -4694,11 +4693,10 @@ void SVGTextFrame::DoTextPathLayout() {
// that's OK; we'll consider any complete cluster or ligature
// group that begins inside the text path as being affected
// by it.
if (it.IsOriginalCharSkipped()) {
// Leave partialAdvance unchanged.
} else if (it.IsClusterAndLigatureGroupStart()) {
if (it.IsClusterAndLigatureGroupStart()) {
break;
} else {
}
if (!it.IsOriginalCharSkipped()) {
partialAdvance += it.GetAdvance(context);
}
partialAdvances.AppendElement(partialAdvance);