From 8a225f0a993863861b9a0684aa363865fa07d7bf Mon Sep 17 00:00:00 2001 From: Maxime Jacquemin <maxime.jacquemin@cea.fr> Date: Tue, 23 Jul 2024 12:24:22 +0200 Subject: [PATCH] [Ivette] Status bullets styles as CSS Using CSS for status bullets styles allow to specifies colors based on the current theme. Also, it's ugly to write the style in the typescript code. --- ivette/src/dome/renderer/dark.css | 15 ++++++ ivette/src/dome/renderer/light.css | 15 ++++++ ivette/src/frama-c/kernel/ASTview.tsx | 45 ++---------------- ivette/src/frama-c/kernel/style.css | 67 +++++++++++++++++++++++++-- 4 files changed, 96 insertions(+), 46 deletions(-) diff --git a/ivette/src/dome/renderer/dark.css b/ivette/src/dome/renderer/dark.css index 21ac1aabece..31e009d27d3 100644 --- a/ivette/src/dome/renderer/dark.css +++ b/ivette/src/dome/renderer/dark.css @@ -109,5 +109,20 @@ --codemirror-number: #d3869b; --codemirror-keyword: #d84954; --codemirror-def: #94aadd; + + --status-dead : #000000; + --status-valid : #499E00; + --status-invalid: #FF0000; + --status-unknown: #FFE62E; + --status-never-tried: #FFFFFF; + --status-inconsistent: #FF00FF; + + --status-valid-but-dead: linear-gradient(to right, var(--status-valid) 49%, var(--status-dead) 51%); + --status-invalid-but-dead: linear-gradient(to right, var(--status-invalid) 49%, var(--status-dead) 51%); + --status-unknown-but-dead: linear-gradient(to right, var(--status-unknown) 49%, var(--status-dead) 51%); + + --status-valid-under-hyp: linear-gradient(to right, var(--status-valid) 49%, var(--status-unknown) 51%); + --status-considered-valid: linear-gradient(to right, var(--status-valid) 49%, #73BBBB 51%); + --status-invalid-under-hyp: linear-gradient(to right, var(--status-invalid) 49%, var(--status-unknown) 51%); } } diff --git a/ivette/src/dome/renderer/light.css b/ivette/src/dome/renderer/light.css index e9f6bd28b85..732c57a2427 100644 --- a/ivette/src/dome/renderer/light.css +++ b/ivette/src/dome/renderer/light.css @@ -109,5 +109,20 @@ --codemirror-number: #116644; --codemirror-keyword: #770088; --codemirror-def: #0000ff; + + --status-dead : #000000; + --status-valid : #499E00; + --status-invalid: #FF0000; + --status-unknown: #FFE62E; + --status-never-tried: #FFFFFF; + --status-inconsistent: #FF00FF; + + --status-valid-but-dead: linear-gradient(to right, var(--status-valid) 49%, var(--status-dead) 51%); + --status-invalid-but-dead: linear-gradient(to right, var(--status-invalid) 49%, var(--status-dead) 51%); + --status-unknown-but-dead: linear-gradient(to right, var(--status-unknown) 49%, var(--status-dead) 51%); + + --status-valid-under-hyp: linear-gradient(to right, var(--status-valid) 49%, var(--status-unknown) 51%); + --status-considered-valid: linear-gradient(to right, var(--status-valid) 49%, #73BBBB 51%); + --status-invalid-under-hyp: linear-gradient(to right, var(--status-invalid) 49%, var(--status-unknown) 51%); } } diff --git a/ivette/src/frama-c/kernel/ASTview.tsx b/ivette/src/frama-c/kernel/ASTview.tsx index 62dfb6b733e..598da566ec0 100644 --- a/ivette/src/frama-c/kernel/ASTview.tsx +++ b/ivette/src/frama-c/kernel/ASTview.tsx @@ -432,31 +432,6 @@ function createPropertiesNodes(): Editor.Aspect<Property[]> { }); } -// Bullet colors. -function getBulletColors(status: States.Tag): [string, string] { - const yellow = '#FFE62E'; - const red = '#FF0000'; - const blue = '#73bbbb'; - const green = '#499E00'; - const black = '#000000'; - const white = '#FFFFFF'; - const magenta = '#FF00FF'; - switch (status.name) { - case 'unknown': return [yellow, yellow]; - case 'invalid': return [red, red]; - case 'invalid_under_hyp': return [red, yellow]; - case 'valid': return [green, green]; - case 'valid_under_hyp': return [green, yellow]; - case 'considered_valid': return [green, blue]; - case 'invalid_but_dead': return [red, black]; - case 'valid_but_dead': return [green, black]; - case 'unknown_but_dead': return [yellow, black]; - case 'never_tried': return [white, white]; - case 'inconsistent': return [magenta, magenta]; - default: return [yellow, yellow]; - } -} - // Property bullet gutter marker. class PropertyBullet extends Editor.GutterMarker { readonly bullet: HTMLDivElement; @@ -464,22 +439,10 @@ class PropertyBullet extends Editor.GutterMarker { constructor(status?: States.Tag) { super(); this.bullet = document.createElement('div'); - this.bullet.innerHTML = ' '; - if (status) { - const [bulletColorLeft, bulletColorRight] = getBulletColors(status); - this.bullet.style.width = "60%"; - this.bullet.style.aspectRatio = "1 / 1"; - this.bullet.style.textAlign = 'center'; - const bulletGradient = - bulletColorLeft + ' 49%, ' + bulletColorRight + ' 51%'; - this.bullet.style.background = - 'linear-gradient(to right, ' + bulletGradient + ')'; - this.bullet.style.borderRadius = '50%'; - this.bullet.style.border = '0.5px solid rgba(0, 0, 0, 0.5)'; - this.bullet.style.marginLeft = '20%'; - this.bullet.style.marginTop = '25%'; - if (status.descr) this.bullet.title = status.descr; - } + this.bullet.classList.add('bullet'); + if (!status) return; + this.bullet.classList.add(status.name); + if (status.descr) this.bullet.title = status.descr; } } diff --git a/ivette/src/frama-c/kernel/style.css b/ivette/src/frama-c/kernel/style.css index db351090b3f..919c90022b7 100644 --- a/ivette/src/frama-c/kernel/style.css +++ b/ivette/src/frama-c/kernel/style.css @@ -50,16 +50,73 @@ border-bottom: solid 0.2em var(--non-terminating); } -.bullet { - width: 1.5em; - background: var(--code-bullet); -} - /* More contrasted color for thinner icons. */ .titlebar-thin-icon { fill: var(--text); } +/* -------------------------------------------------------------------------- */ +/* --- Status Bullets --- */ +/* -------------------------------------------------------------------------- */ + +.bullet { + width: 60%; + aspect-ratio: 1 / 1; + text-align: center; + border-radius: 50%; + border: 0.5px solid rgba(0, 0, 0, 0.5); + margin-left: 20%; + margin-top: 25%; +} + +.bullet.dead { + background: var(--status-dead); +} + +.bullet.valid { + background: var(--status-valid); +} + +.bullet.invalid { + background: var(--status-invalid); +} + +.bullet.unknown { + background: var(--status-unknown); +} + +.bullet.never_tried { + background: var(--status-never-tried); +} + +.bullet.inconsistent { + background: var(--status-inconsistent); +} + +.bullet.valid_but_dead { + background: var(--status-valid-but-dead); +} + +.bullet.invalid_but_dead { + background: var(--status-invalid-but-dead); +} + +.bullet.unknown_but_dead { + background: var(--status-unknown-but-dead); +} + +.bullet.valid_under_hyp { + background: var(--status-valid-under-hyp); +} + +.bullet.considered_valid { + background: var(--status-considered-valid); +} + +.bullet.invalid_under_hyp { + background: var(--status-invalid-under-hyp); +} + /* -------------------------------------------------------------------------- */ /* --- Globals --- */ /* -------------------------------------------------------------------------- */ -- GitLab