diff options
author | Joas Schilling <coding@schilljs.com> | 2020-06-26 10:58:45 +0300 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2020-06-29 15:08:33 +0300 |
commit | 1c2d8faf34e661ce6444b4a1dc257d0c60d6bd94 (patch) | |
tree | 97e393195003d323ea11001f189263120dd295ca /apps/theming | |
parent | e5e833a51954822226ae224f911ad0413cdc0ebd (diff) |
Precalculate the primary element color for dark mode too
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'apps/theming')
-rw-r--r-- | apps/theming/lib/Capabilities.php | 2 | ||||
-rw-r--r-- | apps/theming/lib/Util.php | 17 | ||||
-rw-r--r-- | apps/theming/tests/CapabilitiesTest.php | 14 | ||||
-rw-r--r-- | apps/theming/tests/UtilTest.php | 5 |
4 files changed, 32 insertions, 6 deletions
diff --git a/apps/theming/lib/Capabilities.php b/apps/theming/lib/Capabilities.php index f3ae5e1b715..be8f421a3dc 100644 --- a/apps/theming/lib/Capabilities.php +++ b/apps/theming/lib/Capabilities.php @@ -78,6 +78,8 @@ class Capabilities implements IPublicCapability { 'color' => $color, 'color-text' => $this->theming->getTextColorPrimary(), '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()), 'background' => $backgroundLogo === 'backgroundColor' ? $this->theming->getColorPrimary() : diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php index d3c0043b2a3..5df132f382c 100644 --- a/apps/theming/lib/Util.php +++ b/apps/theming/lib/Util.php @@ -76,14 +76,23 @@ class Util { /** * get color for on-page elements: * theme color by default, grey if theme color is to bright - * @param $color + * @param string $color + * @param bool $brightBackground * @return string */ - public function elementColor($color) { - $l = $this->calculateLuminance($color); - if ($l>0.8) { + public function elementColor($color, bool $brightBackground = true) { + $luminance = $this->calculateLuminance($color); + + if ($brightBackground && $luminance > 0.8) { + // If the color is too bright in bright mode, we fall back to a darker gray 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; } diff --git a/apps/theming/tests/CapabilitiesTest.php b/apps/theming/tests/CapabilitiesTest.php index 60cebb37cf1..216672a881e 100644 --- a/apps/theming/tests/CapabilitiesTest.php +++ b/apps/theming/tests/CapabilitiesTest.php @@ -78,6 +78,8 @@ class CapabilitiesTest extends TestCase { 'color' => '#FFFFFF', 'color-text' => '#000000', 'color-element' => '#aaaaaa', + 'color-element-bright' => '#aaaaaa', + 'color-element-dark' => '#FFFFFF', 'logo' => 'http://absolute/logo', 'background' => 'http://absolute/background', 'background-plain' => false, @@ -92,6 +94,8 @@ class CapabilitiesTest extends TestCase { 'color' => '#01e4a0', 'color-text' => '#ffffff', 'color-element' => '#01e4a0', + 'color-element-bright' => '#01e4a0', + 'color-element-dark' => '#01e4a0', 'logo' => 'http://localhost/logo5', 'background' => 'http://localhost/background6', 'background-plain' => false, @@ -106,6 +110,8 @@ class CapabilitiesTest extends TestCase { 'color' => '#000000', 'color-text' => '#ffffff', 'color-element' => '#000000', + 'color-element-bright' => '#000000', + 'color-element-dark' => '#555555', 'logo' => 'http://localhost/logo5', 'background' => '#000000', 'background-plain' => true, @@ -120,6 +126,8 @@ class CapabilitiesTest extends TestCase { 'color' => '#000000', 'color-text' => '#ffffff', 'color-element' => '#000000', + 'color-element-bright' => '#000000', + 'color-element-dark' => '#555555', 'logo' => 'http://localhost/logo5', 'background' => '#000000', 'background-plain' => true, @@ -167,10 +175,12 @@ class CapabilitiesTest extends TestCase { ->willReturn($textColor); $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') ->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()) ->method('isBackgroundThemed') diff --git a/apps/theming/tests/UtilTest.php b/apps/theming/tests/UtilTest.php index 6f7e195e468..10013e7d61c 100644 --- a/apps/theming/tests/UtilTest.php +++ b/apps/theming/tests/UtilTest.php @@ -106,6 +106,11 @@ class UtilTest extends TestCase { $this->assertEquals('#000000', $elementColor); } + public function testElementColorOnDarkBackground() { + $elementColor = $this->util->elementColor("#000000", false); + $this->assertEquals('#555555', $elementColor); + } + public function testElementColorOnBrightBackground() { $elementColor = $this->util->elementColor('#ffffff'); $this->assertEquals('#aaaaaa', $elementColor); |