Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2020-06-26 10:58:45 +0300
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2020-06-29 15:08:33 +0300
commit1c2d8faf34e661ce6444b4a1dc257d0c60d6bd94 (patch)
tree97e393195003d323ea11001f189263120dd295ca /apps/theming
parente5e833a51954822226ae224f911ad0413cdc0ebd (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.php2
-rw-r--r--apps/theming/lib/Util.php17
-rw-r--r--apps/theming/tests/CapabilitiesTest.php14
-rw-r--r--apps/theming/tests/UtilTest.php5
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);