_theme-color.template.scss
Unicode text, UTF-8 text
1// When color definition differs for dark and light variant, 2// it gets @if ed depending on $variant 3 4@import 'color-palette'; 5 6@function gtkalpha($color, $alpha) { 7@return unquote("alpha(#{$color}, #{$alpha})"); 8} 9 10// Determine whether the color has alpha. 11@function _has-alpha($color) { 12@return if(alpha($color) < 1, true, false); 13} 14 15// Determine whether the color is dark. 16@function _is-dark($color) { 17// Calculate color brightness as per https://www.w3.org/TR/AERT/#color-contrast 18$brightness: (red($color) * 299 + green($color) * 587 + blue($color) * 114) / 1000; 19 20@return if($brightness < 128, true, false); 21} 22 23$on-light: #000; 24$on-dark: #fff; 25 26// Determine whether to use dark or light color on top of given color 27// to meet accessibility standards for contrast. 28@function on($color) { 29$contrast-color: if(_is-dark($color), $on-dark, $on-light); 30 31@if saturation($color) > 50% or alpha($color) < 1 { 32@return $contrast-color; 33} @else { 34@return rgba($contrast-color, .87); 35} 36} 37 38// Determine the strength of highlight on top of given color. 39@function highlight($color) { 40@if lightness($color) >= 80% { 41@return rgba(white, .4); 42} @else if lightness($color) >= 40% { 43@return rgba(white, .2); 44} @else { 45@return rgba(white, .05); 46} 47} 48 49// Make translucent color opaque by blending with the background color. 50@function opacify($color, $on) { 51@return mix(change-color($color, $alpha: 1), $on, alpha($color) * 100%); 52} 53 54// 55// Main colors 56// 57 58$surface-z0: %BG%; 59$surface-z1: %MATERIA_VIEW%; 60$surface-z8: %MATERIA_SURFACE%; 61$surface-switch-thumb: %MATERIA_SURFACE%; 62$on-surface: %FG%; 63 64$primary-on-light: %SEL_BG%; 65$primary-on-dark: %SEL_BG%; 66$primary: $primary-on-light; 67$on-primary: on($primary); 68 69$error-on-light: %TERMINAL_COLOR9%; 70$error-on-dark: %TERMINAL_COLOR9%; 71$error: $error-on-light; 72$on-error: on($error); 73 74$warning-on-light: %TERMINAL_COLOR11%; 75$warning-on-dark: %TERMINAL_COLOR11%; 76$warning: $warning-on-light; 77$on-warning: on($warning); 78 79$success-on-light: %TERMINAL_COLOR10%; 80$success-on-dark: %TERMINAL_COLOR10%; 81$success: $success-on-light; 82$on-success: on($success); 83 84$visited-on-light: %TERMINAL_COLOR5%; 85$visited-on-dark: %TERMINAL_COLOR5%; 86$visited: $visited-on-light; 87$on-visited: on($visited); 88 89$system: %HDR_BG3%; 90$on-system: %HDR_FG%; 91 92$tooltip: rgba(%HDR_BG%, .9); 93$on-tooltip: %HDR_FG%; 94 95$scrim: rgba(black, %MATERIA_PANEL_OPACITY%); 96$on-scrim: on($scrim); 97 98$scrim-alt: rgba(black, .3); 99$on-scrim-alt: on($scrim-alt); 100 101$panel: %HDR_BG3%; 102$on-panel: %HDR_FG%; 103 104// for Unity panel which doesn't allow translucent colors 105$panel-solid: %HDR_BG3%; 106$on-panel-solid: %HDR_FG%; 107 108$titlebar: %HDR_BG%; 109$titlebar-backdrop: %HDR_BG2%; 110$on-titlebar: %HDR_FG%; 111 112$titlebar-indicator: currentcolor; 113 114@if $dark-theme { 115$surface-z0: if(_is-dark(%BG%), %BG%, %FG%); 116$surface-z1: if(_is-dark(%BG%), %MATERIA_VIEW%, mix(white, $surface-z0, 5%)); 117$surface-z8: if(_is-dark(%BG%), %MATERIA_SURFACE%, mix(white, $surface-z0, 12%)); 118$surface-switch-thumb: if(_is-dark(%BG%), %MATERIA_SURFACE%, mix(white, $surface-z0, 60%)); 119$on-surface: if(_is-dark(%BG%), %FG%, on($surface-z0)); 120 121$primary: $primary-on-dark; 122$on-primary: on($primary); 123 124$error: $error-on-dark; 125$on-error: on($error); 126 127$warning: $warning-on-dark; 128$on-warning: on($warning); 129 130$success: $success-on-dark; 131$on-success: on($success); 132 133$visited: $visited-on-dark; 134$on-visited: on($visited); 135 136$titlebar: if(_is-dark(%BG%), %HDR_BG%, mix(white, $surface-z0, 9%)); 137$titlebar-backdrop: if(_is-dark(%BG%), %HDR_BG2%, $surface-z1); 138$on-titlebar: if(_is-dark(%BG%), %HDR_FG%, on($titlebar)); 139} 140 141@if $light-topbar { 142$panel: $scrim; 143$on-panel: on($panel); 144 145$titlebar-indicator: $primary; 146} 147 148// 149// Overlay state colors 150// 151 152// Determine the overlay color depending on the given color and opacity. 153@function _overlay($color, $opacity, $on) { 154$opacity-modifier: 0; 155 156@if saturation($color) > 50% or saturation($on) > 50% { 157$opacity-modifier: .04; 158} 159 160@return mix(rgba($color, 1), $on, percentage($opacity + $opacity-modifier)); 161} 162 163@function hover-overlay($color, $opacity-modifier: 0, $on: transparent, $alt: false) { 164$opacity: .08; 165 166@if $alt { 167$opacity: .04; 168} 169 170@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on); 171} 172 173@function focus-overlay($color, $opacity-modifier: 0, $on: transparent) { 174$opacity: .08; 175 176@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on); 177} 178 179@function pressed-overlay($color, $opacity-modifier: 0, $on: transparent) { 180$opacity: .12; 181 182@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on); 183} 184 185@function dragged-overlay($color, $opacity-modifier: 0, $on: transparent) { 186$opacity: .08; 187 188@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on); 189} 190 191@function activated-overlay($color, $opacity-modifier: 0, $on: transparent) { 192$opacity: .12; 193 194@return _overlay($color: $color, $opacity: $opacity + $opacity-modifier, $on: $on); 195} 196 197@function selected-overlay($color, $opacity-modifier: 0) { 198$opacity: %MATERIA_SELECTION_OPACITY%; 199 200@if $color == $on-surface { 201$color: $primary; 202} 203 204@return rgba($color, $opacity + $opacity-modifier); 205} 206 207$selected-overlay: selected-overlay($on-surface); 208 209// 210// For “on” colors 211// 212 213@function primary($color) { 214@return if(_is-dark($color), $primary-on-light, $primary-on-dark); 215} 216 217@function error($color) { 218@return if(_is-dark($color), $error-on-light, $error-on-dark); 219} 220 221@function hint($color) { 222@return if(_has-alpha($color), rgba($color, .6), rgba($color, .7)); 223} 224 225@function disabled($color) { 226@return if(_has-alpha($color), rgba($color, .38), rgba($color, .5)); 227} 228 229@function disabled-hint($color) { 230@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3)); 231} 232 233@function stroke($color) { 234@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3)); 235} 236 237@function disabled-stroke($color) { 238@return if(_has-alpha($color), rgba($color, .12), rgba($color, .2)); 239} 240 241@function divider($color) { 242@return if(_has-alpha($color), rgba($color, .12), rgba($color, .2)); 243} 244 245@function fill($color) { 246@return if(_has-alpha($color), rgba($color, .08), rgba($color, .08)); 247} 248 249@function entry-fill($color) { 250@return if(_has-alpha($color), rgba($color, .04), rgba($color, .04)); 251} 252 253@function scrollbar-thumb($color, $state: null) { 254@if $state == null { 255@return if(_has-alpha($color), rgba($color, .38), rgba($color, .5)); 256} @else if $state == "hover" { 257@return if(_has-alpha($color), rgba($color, .48), rgba($color, .6)); 258} @else if $state == "pressed" { 259@return if(_has-alpha($color), rgba($color, .6), rgba($color, .7)); 260} @else if $state == "disabled" { 261@return if(_has-alpha($color), rgba($color, .26), rgba($color, .3)); 262} @else { 263@error "Invalid type: '#{$state}'"; 264} 265} 266