mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tree:
d8dfbec04b
christophwille/closedhierarchies
christophwille/membench
compound-assignment-operators
fix/1982-params-attribute-args
fix/2040-invalid-xml-characters
fix/2093-navigateto-reference-assembly
fix/2362-xalz-references
fix/2372-address-taken-by
fix/3282-indexer-optional-arguments
fix/3568-record-member-order
fix/4059-deconstruct-out-slots
fix/lambda-parameter-syntax
fix/scroll-children-on-expand
gh-pages
ldmembertoken
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
substring-optimizations
tests/829-async-method-builder-override
tests/829-collection-expressions
tests/829-compound-assignment-operators
tests/829-coverage-audit
tests/829-expression-tree-named-optional-args
tests/829-expression-variables-in-initializers
tests/829-extended-property-patterns
tests/829-extension-members
tests/829-extension-operators
tests/829-file-local-types
tests/829-improved-definite-assignment
tests/829-improved-overload-candidates
tests/829-inline-arrays
tests/829-interpolated-string-improvements
tests/829-lambda-param-modifiers
tests/829-list-patterns
tests/829-lock-object
tests/829-mixed-deconstruction
tests/829-null-coalescing-assignment
tests/829-null-conditional-assignment
tests/829-object-initializer-indexer
tests/829-overload-resolution-priority
tests/829-params-collections
tests/829-pattern-matching-improvements
tests/829-primary-constructors
tests/829-ref-unsafe-in-iterators-async
tests/829-sealed-record-tostring
tests/829-target-typed-conditional
tests/829-tuple-comparison
win-a11y-textsize
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v10.1.1
v11.0
v11.0-preview1
v11.0-rc
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ noResults }
ILSpy/ILSpy.Tests/Themes
The dark palette is hand-authored for C# only; every other highlighting definition -- XML, IL, Asm, and all AvaloniaEdit built-ins -- is derived by inverting HSL lightness. HSL lightness is not perceptual luminance, so the result depended entirely on hue: blue carries a 0.0722 luminance weight, so plain Blue landed at 4.08:1 against the editor canvas, and an already-light source such as Asm's #8080FF inverted downwards to 1.29:1 -- invisible. Reported against XML resources in #3986. Enforcing a 5.5:1 WCAG floor on the converted foreground fixes every affected definition in the one place they all route through, which a per-language palette would not: the AvaloniaEdit built-ins (JSON, Markdown, JS, HTML, CSS, Python) have no palette to author. 5.5 is where the existing CSharpDark values already sit; the 4.5 AA threshold was measured and only moves the reported blue to 4.51. The floor is deliberately foreground-only -- forcing a span background to contrast with the canvas would repaint Asm's #EEEEEE Registers background as a bright block and bury the text on top of it -- and it is measured against the surface the foreground lands on, which is that span background when the colour declares one, so a light-on-dark span cannot be pulled apart into two colours that no longer contrast with each other. The same function's desaturation guard only fired when the inverted lightness stayed below 0.75, so a dark fully saturated source (DarkMagenta) came back light and still fully saturated -- exactly the neon the softening exists to prevent. Only the softening becomes unconditional; the lightness lift paired with it stays scoped to over-saturated colours, because it is not monotone across its own 0.75 boundary and would reorder neighbouring greys. Hyperlinks were a second, unrelated path: nothing ever set TextView.LinkTextForegroundBrush, so the About page and every decompiler-view link used AvaloniaEdit's registered default of pure blue, 1.94:1 on dark. They now share a themed ILSpy.LinkForeground with the metadata table's token cells, which take it from a style rather than a local Foreground so the selected row's white override still wins over the accent fill. Assisted-by: Claude:claude-opus-5[1m]:Claude Code |
1 month ago | |
|---|---|---|
| .. | ||
| DoubleDarkConversionTests.cs | Snapshot original highlighting colours per colour instance | 1 month ago |
| LinkColorTests.cs | Give dark-theme syntax colors a perceptual contrast floor | 1 month ago |
| ThemeAwareHighlightingColorizerTests.cs | Move ILSpy UI code back to the ICSharpCode.ILSpy root namespace | 3 months ago |
| ThemeManagerTests.cs | Give dark-theme syntax colors a perceptual contrast floor | 1 month ago |