Skip to content

[caret-color] Clip the override paint to the caret rect.#59798

Draft
chromium-wpt-export-bot wants to merge 1 commit into
masterfrom
chromium-export-cl-7829948
Draft

[caret-color] Clip the override paint to the caret rect.#59798
chromium-wpt-export-bot wants to merge 1 commit into
masterfrom
chromium-export-cl-7829948

Conversation

@chromium-wpt-export-bot
Copy link
Copy Markdown
Collaborator

With current paint code, we noticed that when the block caret
first moves past the end of the text (no character is overlapped)
and then moves back to a position inside the text, every glyph of
the fragment gets re-painted in the second caret-color.

This is due to the call of text_painter.Paint() with slice
[char_start, char_end] is honored only when font.DrawText() actually
re-shapes. When CachedTextBlob() returns non-null, the slice is
discarded and the entire cached blob is redrawn with the override
fill color.

The solution here is to clip the override paint to the caret rect.

Bug: 498556169
Change-Id: I30ad92029a23f502226058eaf2db0bbe180a3b45

Reviewed-on: https://chromium-review.googlesource.com/7829948
WPT-Export-Revision: 79b454bad5b876525c6273e728c79b42259715f1

With current paint code, we noticed that when the block caret
first moves past the end of the text (no character is overlapped)
and then moves back to a position inside the text, every glyph of
the fragment gets re-painted in the second caret-color.

This is due to the call of text_painter.Paint() with slice
[char_start, char_end] is honored only when font.DrawText() actually
re-shapes. When CachedTextBlob() returns non-null, the slice is
discarded and the entire cached blob is redrawn with the override
fill color.

The solution here is to clip the override paint to the caret rect.

Bug: 498556169
Change-Id: I30ad92029a23f502226058eaf2db0bbe180a3b45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants