diff options
author | Michael Weimann <mail@michael-weimann.eu> | 2018-08-28 13:01:32 +0300 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2018-10-02 09:37:54 +0300 |
commit | 92049c3ceb4121c6e424e8ba902cc6ebc663c690 (patch) | |
tree | eb8a283e260e2b0918d13087c29af96d494fde58 | |
parent | 7526971c95250807ac1ec485297919a27ee0dcfc (diff) |
Switches the default logo color depending on the primary color
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
-rw-r--r-- | apps/theming/css/theming.scss | 11 | ||||
-rw-r--r-- | apps/theming/lib/ImageManager.php | 2 | ||||
-rw-r--r-- | apps/theming/lib/ThemingDefaults.php | 20 | ||||
-rw-r--r-- | apps/theming/tests/ThemingDefaultsTest.php | 67 | ||||
-rw-r--r-- | core/img/logo-blue.png | bin | 0 -> 6112 bytes | |||
-rw-r--r-- | core/img/logo-blue.svg | 76 |
6 files changed, 168 insertions, 8 deletions
diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss index f12ce4d907f..b1b8896d0c1 100644 --- a/apps/theming/css/theming.scss +++ b/apps/theming/css/theming.scss @@ -98,20 +98,21 @@ background-image: url(./img/core/filetypes/folder-drag-accept.svg?v=#{$theming-cachebuster}) !important; } +#theming-preview-logo, +#header .logo { + background-image: $image-logo; +} + /* override styles for login screen in guest.css */ @if variable_exists('theming-logo-mime') and $theming-logo-mime != '' { #theming-preview-logo, #header .logo { - background-image: $image-logo; background-size: contain; } + #body-login #header .logo { margin-bottom: 22px; } -} @else { - #theming-preview-logo { - background-image: $image-logo; - } } @if variable_exists('theming-background-mime') and $theming-background-mime != '' { diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php index dfbdb582da6..6a42c22aba5 100644 --- a/apps/theming/lib/ImageManager.php +++ b/apps/theming/lib/ImageManager.php @@ -84,6 +84,8 @@ class ImageManager { case 'logoheader': case 'favicon': return $this->urlGenerator->imagePath('core', 'logo.png') . '?v=' . $cacheBusterCounter; + case 'logo-blue': + return $this->urlGenerator->imagePath('core', 'logo-blue.png') . '?v=' . $cacheBusterCounter; case 'background': return $this->urlGenerator->imagePath('core', 'background.png') . '?v=' . $cacheBusterCounter; } diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 1df7a9f17bb..5a14e8a7903 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -275,7 +275,7 @@ class ThemingDefaults extends \OC_Defaults { 'theming-favicon-mime' => "'" . $this->config->getAppValue('theming', 'faviconMime') . "'" ]; - $variables['image-logo'] = "url('".$this->imageManager->getImageUrl('logo')."')"; + $variables['image-logo'] = "url('". $this->getLogoUrl() ."')"; $variables['image-logoheader'] = "'".$this->imageManager->getImageUrl('logoheader')."'"; $variables['image-favicon'] = "'".$this->imageManager->getImageUrl('favicon')."'"; $variables['image-login-background'] = "url('".$this->imageManager->getImageUrl('background')."')"; @@ -301,6 +301,24 @@ class ThemingDefaults extends \OC_Defaults { } /** + * Returns the logo url. + * If there is a custom logo, it just returns it. + * For the default logo it returns the white or blue one depending on the color luminance. + * + * @return string + */ + private function getLogoUrl() { + $logoMime = $this->config->getAppValue('theming', 'logoMime'); + $primaryColor = $this->getColorPrimary(); + $luminance = $this->util->calculateLuminance($primaryColor); + if ($logoMime === '' & $luminance > 0.8) { + return $this->imageManager->getImageUrl('logo-blue'); + } else { + return $this->imageManager->getImageUrl('logo'); + } + } + + /** * Check if the image should be replaced by the theming app * and return the new image location then * diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index 5d075709dc5..fc3a737c3c8 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -632,6 +632,66 @@ class ThemingDefaultsTest extends TestCase { $this->assertEquals(['foo'=>'bar'], $this->template->getScssVariables()); } + /** + * Provides test data for the get logo scss variable test. + * + * @return array + */ + public function provideTestGetImageLogoScssVariableTestData(): array { + return [ + // default logo + ['', '#000000', 0.0, 'logo'], + ['', '#cccccc', 0.8, 'logo'], + ['', '#dddddd', 0.81, 'logo-blue'], + ['', '#ffffff', 1.0, 'logo-blue'], + + // custom logo + ['image/png', '#000000', 0.0, 'logo'], + ['image/png', '#cccccc', 0.8, 'logo'], + ['image/png', '#dddddd', 0.81, 'logo'], + ['image/png', '#ffffff', 1.0, 'logo'], + ]; + } + + /** + * Tests chat the logo url scss variable has the expected value + * depending on color and custom logo presence. + * + * @dataProvider provideTestGetImageLogoScssVariableTestData + * @param string $themingLogoMime The custom logo mime type + * @param string $primaryColor The primary theme color + * @param float $luminance The calculated luminance + * @param string $expected The expected requested logo + * @return void + */ + public function testGetImageLogoScssVariable( + string $themingLogoMime, + string $primaryColor, + float $luminance, + string $expected + ) { + $this->config->expects($this->at(5)) + ->method('getAppValue') + ->with('theming', 'logoMime') + ->willReturn($themingLogoMime); + $this->config->expects($this->at(6)) + ->method('getAppValue') + ->with('theming', 'color', $this->defaults->getColorPrimary()) + ->willReturn($primaryColor); + + $this->util + ->method('calculateLuminance') + ->with($primaryColor) + ->willReturn($luminance); + + $this->imageManager->expects($this->at(0)) + ->method('getImageUrl') + ->with($expected) + ->willReturn('custom-logo?v=0'); + + $this->template->getScssVariables(); + } + public function testGetScssVariables() { $this->config->expects($this->at(0))->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('0'); $this->config->expects($this->at(1))->method('getAppValue')->with('theming', 'logoMime', false)->willReturn('jpeg'); @@ -639,10 +699,13 @@ class ThemingDefaultsTest extends TestCase { $this->config->expects($this->at(3))->method('getAppValue')->with('theming', 'logoheaderMime', false)->willReturn('jpeg'); $this->config->expects($this->at(4))->method('getAppValue')->with('theming', 'faviconMime', false)->willReturn('jpeg'); - $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'color', null)->willReturn($this->defaults->getColorPrimary()); + $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'logoMime', false)->willReturn('jpeg'); $this->config->expects($this->at(6))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); - $this->config->expects($this->at(7))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); + + $this->config->expects($this->at(7))->method('getAppValue')->with('theming', 'color', null)->willReturn($this->defaults->getColorPrimary()); $this->config->expects($this->at(8))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); + $this->config->expects($this->at(9))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); + $this->config->expects($this->at(10))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); $this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false); $this->util->expects($this->any())->method('elementColor')->with($this->defaults->getColorPrimary())->willReturn('#aaaaaa'); diff --git a/core/img/logo-blue.png b/core/img/logo-blue.png Binary files differnew file mode 100644 index 00000000000..e1b7352b3f6 --- /dev/null +++ b/core/img/logo-blue.png diff --git a/core/img/logo-blue.svg b/core/img/logo-blue.svg new file mode 100644 index 00000000000..66b17330d12 --- /dev/null +++ b/core/img/logo-blue.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + height="128" + width="256" + viewBox="0 0 256 128" + id="svg10" + sodipodi:docname="logo-blue.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + <metadata + id="metadata16"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs14" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1053" + id="namedview12" + showgrid="false" + inkscape:zoom="1.4296875" + inkscape:cx="128" + inkscape:cy="64" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg10" /> + <g + stroke="#fff" + stroke-width="22" + fill="none" + id="g8" + style="stroke:#0082c9;stroke-opacity:1"> + <circle + cy="64" + cx="40" + r="26" + id="circle2" + style="stroke:#0082c9;stroke-opacity:1" /> + <circle + cy="64" + cx="216" + r="26" + id="circle4" + style="stroke:#0082c9;stroke-opacity:1" /> + <circle + cy="64" + cx="128" + r="46" + id="circle6" + style="stroke:#0082c9;stroke-opacity:1" /> + </g> +</svg> |