Precalculate the primary element color for dark mode too
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
e5e833a519
commit
1c2d8faf34
|
@ -78,6 +78,8 @@ class Capabilities implements IPublicCapability {
|
||||||
'color' => $color,
|
'color' => $color,
|
||||||
'color-text' => $this->theming->getTextColorPrimary(),
|
'color-text' => $this->theming->getTextColorPrimary(),
|
||||||
'color-element' => $this->util->elementColor($color),
|
'color-element' => $this->util->elementColor($color),
|
||||||
|
'color-element-bright' => $this->util->elementColor($color),
|
||||||
|
'color-element-dark' => $this->util->elementColor($color, false),
|
||||||
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
|
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
|
||||||
'background' => $backgroundLogo === 'backgroundColor' ?
|
'background' => $backgroundLogo === 'backgroundColor' ?
|
||||||
$this->theming->getColorPrimary() :
|
$this->theming->getColorPrimary() :
|
||||||
|
|
|
@ -76,14 +76,23 @@ class Util {
|
||||||
/**
|
/**
|
||||||
* get color for on-page elements:
|
* get color for on-page elements:
|
||||||
* theme color by default, grey if theme color is to bright
|
* theme color by default, grey if theme color is to bright
|
||||||
* @param $color
|
* @param string $color
|
||||||
|
* @param bool $brightBackground
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function elementColor($color) {
|
public function elementColor($color, bool $brightBackground = true) {
|
||||||
$l = $this->calculateLuminance($color);
|
$luminance = $this->calculateLuminance($color);
|
||||||
if ($l>0.8) {
|
|
||||||
|
if ($brightBackground && $luminance > 0.8) {
|
||||||
|
// If the color is too bright in bright mode, we fall back to a darker gray
|
||||||
return '#aaaaaa';
|
return '#aaaaaa';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$brightBackground && $luminance < 0.2) {
|
||||||
|
// If the color is too dark in dark mode, we fall back to a brighter gray
|
||||||
|
return '#555555';
|
||||||
|
}
|
||||||
|
|
||||||
return $color;
|
return $color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,8 @@ class CapabilitiesTest extends TestCase {
|
||||||
'color' => '#FFFFFF',
|
'color' => '#FFFFFF',
|
||||||
'color-text' => '#000000',
|
'color-text' => '#000000',
|
||||||
'color-element' => '#aaaaaa',
|
'color-element' => '#aaaaaa',
|
||||||
|
'color-element-bright' => '#aaaaaa',
|
||||||
|
'color-element-dark' => '#FFFFFF',
|
||||||
'logo' => 'http://absolute/logo',
|
'logo' => 'http://absolute/logo',
|
||||||
'background' => 'http://absolute/background',
|
'background' => 'http://absolute/background',
|
||||||
'background-plain' => false,
|
'background-plain' => false,
|
||||||
|
@ -92,6 +94,8 @@ class CapabilitiesTest extends TestCase {
|
||||||
'color' => '#01e4a0',
|
'color' => '#01e4a0',
|
||||||
'color-text' => '#ffffff',
|
'color-text' => '#ffffff',
|
||||||
'color-element' => '#01e4a0',
|
'color-element' => '#01e4a0',
|
||||||
|
'color-element-bright' => '#01e4a0',
|
||||||
|
'color-element-dark' => '#01e4a0',
|
||||||
'logo' => 'http://localhost/logo5',
|
'logo' => 'http://localhost/logo5',
|
||||||
'background' => 'http://localhost/background6',
|
'background' => 'http://localhost/background6',
|
||||||
'background-plain' => false,
|
'background-plain' => false,
|
||||||
|
@ -106,6 +110,8 @@ class CapabilitiesTest extends TestCase {
|
||||||
'color' => '#000000',
|
'color' => '#000000',
|
||||||
'color-text' => '#ffffff',
|
'color-text' => '#ffffff',
|
||||||
'color-element' => '#000000',
|
'color-element' => '#000000',
|
||||||
|
'color-element-bright' => '#000000',
|
||||||
|
'color-element-dark' => '#555555',
|
||||||
'logo' => 'http://localhost/logo5',
|
'logo' => 'http://localhost/logo5',
|
||||||
'background' => '#000000',
|
'background' => '#000000',
|
||||||
'background-plain' => true,
|
'background-plain' => true,
|
||||||
|
@ -120,6 +126,8 @@ class CapabilitiesTest extends TestCase {
|
||||||
'color' => '#000000',
|
'color' => '#000000',
|
||||||
'color-text' => '#ffffff',
|
'color-text' => '#ffffff',
|
||||||
'color-element' => '#000000',
|
'color-element' => '#000000',
|
||||||
|
'color-element-bright' => '#000000',
|
||||||
|
'color-element-dark' => '#555555',
|
||||||
'logo' => 'http://localhost/logo5',
|
'logo' => 'http://localhost/logo5',
|
||||||
'background' => '#000000',
|
'background' => '#000000',
|
||||||
'background-plain' => true,
|
'background-plain' => true,
|
||||||
|
@ -167,10 +175,12 @@ class CapabilitiesTest extends TestCase {
|
||||||
->willReturn($textColor);
|
->willReturn($textColor);
|
||||||
|
|
||||||
$util = new Util($this->config, $this->createMock(IAppManager::class), $this->createMock(IAppData::class));
|
$util = new Util($this->config, $this->createMock(IAppManager::class), $this->createMock(IAppData::class));
|
||||||
$this->util->expects($this->once())
|
$this->util->expects($this->exactly(3))
|
||||||
->method('elementColor')
|
->method('elementColor')
|
||||||
->with($color)
|
->with($color)
|
||||||
->willReturn($util->elementColor($color));
|
->willReturnCallback(static function(string $color, bool $brightBackground = true) use ($util) {
|
||||||
|
return $util->elementColor($color, $brightBackground);
|
||||||
|
});
|
||||||
|
|
||||||
$this->util->expects($this->once())
|
$this->util->expects($this->once())
|
||||||
->method('isBackgroundThemed')
|
->method('isBackgroundThemed')
|
||||||
|
|
|
@ -106,6 +106,11 @@ class UtilTest extends TestCase {
|
||||||
$this->assertEquals('#000000', $elementColor);
|
$this->assertEquals('#000000', $elementColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testElementColorOnDarkBackground() {
|
||||||
|
$elementColor = $this->util->elementColor("#000000", false);
|
||||||
|
$this->assertEquals('#555555', $elementColor);
|
||||||
|
}
|
||||||
|
|
||||||
public function testElementColorOnBrightBackground() {
|
public function testElementColorOnBrightBackground() {
|
||||||
$elementColor = $this->util->elementColor('#ffffff');
|
$elementColor = $this->util->elementColor('#ffffff');
|
||||||
$this->assertEquals('#aaaaaa', $elementColor);
|
$this->assertEquals('#aaaaaa', $elementColor);
|
||||||
|
|
Loading…
Reference in New Issue