diff --git a/includes/TimelessTemplate.php b/includes/TimelessTemplate.php index d8e4326..7a691dc 100644 --- a/includes/TimelessTemplate.php +++ b/includes/TimelessTemplate.php @@ -354,7 +354,7 @@ class TimelessTemplate extends BaseTemplate { ] ); if ( $part !== 'image' ) { - $wordmarkImage = $this->getLogoImage( $config->get( 'TimelessWordmark' ) ); + $wordmarkImage = $this->getLogoImage( $config->get( 'TimelessWordmark' ), true ); $titleClass = ''; if ( !$wordmarkImage ) { @@ -995,10 +995,11 @@ class TimelessTemplate extends BaseTemplate { * Generate img-based logos for proper HiDPI support * * @param string|array|null $logo + * @param bool $doLarge Render extra-large HiDPI logos for mobile devices? * * @return string|false html|we're not doing this */ - protected function getLogoImage( $logo ) { + protected function getLogoImage( $logo, $doLarge = false ) { if ( $logo === null ) { // not set, fall back to generic methods return false; @@ -1020,6 +1021,12 @@ class TimelessTemplate extends BaseTemplate { $bound = $width > $height ? $width : $height; $svg = File::normalizeExtension( $file->getExtension() ) === 'svg'; + // Mobile stuff is generally a lot more than just 2ppp. Let's go with 4x? + // Currently we're just doing this for wordmarks, which shouldn't get that + // big in practice, so this is probably safe enough. And no need to use + // this for desktop logos, so fall back to 2x for 2x as default... + $large = $doLarge ? 4 : 2; + if ( $bound <= 165 ) { // It's a 1x image $logoData['width'] = $width; @@ -1028,7 +1035,7 @@ class TimelessTemplate extends BaseTemplate { if ( $svg ) { $logoData['1x'] = $file->createThumb( $logoData['width'] ); $logoData['1.5x'] = $file->createThumb( $logoData['width'] * 1.5 ); - $logoData['2x'] = $file->createThumb( $logoData['width'] * 2 ); + $logoData['2x'] = $file->createThumb( $logoData['width'] * $large ); } elseif ( $file->mustRender() ) { $logoData['1x'] = $file->createThumb( $logoData['width'] ); } else { @@ -1060,7 +1067,7 @@ class TimelessTemplate extends BaseTemplate { $logoData['1.5x'] = $file->createThumb( $logoData['width'] * 1.5 ); } if ( $svg || $logoData['width'] * 2 <= $width ) { - $logoData['2x'] = $file->createThumb( $logoData['width'] * 2 ); + $logoData['2x'] = $file->createThumb( $logoData['width'] * $large ); } } } elseif ( is_array( $logo ) ) {