4b7d955012
This commit introduces support for inverting all types of cursor. To invert the display without re-rendering any text, we draw the cursor into a command list and then compose the command list with the existing renderer using the MASK_INVERT composition flag. This wouldn't normally work with our renderer because there is no _background_ color to invert in some cases (such as when acrylic is in use.) To work around that, we're taking advantage of @zadjii-msft's two-pass cursor renderer. To properly invert the cursor over a transparent background: (Examples are given below for two cursor types, but this applies to all of them.) First, we'll draw a "backplate" in the user's requested background color (with the alpha channel set to 0xFF). (`firstPass` == true) EMPTY BOX FILLED BOX ===== ===== = = ===== = = ===== = = ===== ===== ===== Second, the glyph is drawn (outside of the cursor renderer). EMPTY BOX FILLED BOX ==A== ==A== =A A= =A=A= AAAAA AAAAA A A A===A A===A A===A Last, we'll draw the cursor again in all white and use that as the *mask* for inverting the already-drawn pixels. (`firstPass` == false) (# = mask, a = inverted A) EMPTY BOX FILLED BOX ##a## ##a## #A A# #a#a# aAAAa aaaaa a a a###a a###a a###a Related to #9610 ## Validation Steps Performed Manual visual validation in all configurations.
35 lines
425 B
Plaintext
35 lines
425 B
Plaintext
AAAa
|
|
abcd
|
|
abcde
|
|
abcdef
|
|
ABCDEFG
|
|
ABCDEFGH
|
|
ABCDEFGHIJ
|
|
abcdefghijk
|
|
abcdefghijklmnop
|
|
ABCDEFGHIJKLMNOPQRST
|
|
abcdefghijklmnopqrstuvwxyz
|
|
ABE
|
|
BBGGRR
|
|
BBBBBBBBBBBBBBDDDD
|
|
EFG
|
|
EFGh
|
|
QQQQQQQQQQABCDEFGHIJ
|
|
QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQ
|
|
QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQQ
|
|
QQQQQQQQQQABCDEFGHIJPQRSTQQQQQQQQQQ
|
|
qrstuvwxyz
|
|
qwerty
|
|
QWERTYUIOP
|
|
qwertyuiopasdfg
|
|
YYYYYYYDDDDDDDDDDD
|
|
ZAAZZ
|
|
ZABBZ
|
|
ZBAZZ
|
|
ZBBBZ
|
|
ZBBZZ
|
|
ZYXWVUT
|
|
ZZBBZ
|
|
ZZZBB
|
|
ZZZBZ
|