From f0f2435db22d3ca76a0812975588dd73d2e1bf00 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 13 Oct 2014 07:15:12 -0700 Subject: [PATCH] Add HiDPI PNG variants for 'Powered by MediaWiki' footer icon Added 1.5x and 2x-density variants of the 'Powered by MediaWiki' footer icon, built from this SVG version on Commons: https://commons.wikimedia.org/wiki/File:Powered_by_MediaWiki.svg Note the SVG version is too large to use directly right now as it contains a huge amount of detail; the PNGs are only a few KiB. Renderings from Commons taken and run through pngcrush. Note that adding 'srcset' attributes to footer icons appears to work just fine here, so can be done for others. Bug: T65872 Change-Id: I785d21add456eeddb6ed1ee36a1906d178323e63 --- includes/DefaultSettings.php | 3 ++- includes/Setup.php | 3 +++ includes/skins/Skin.php | 9 ++++++--- resources/assets/poweredby_mediawiki_132x47.png | Bin 0 -> 6011 bytes resources/assets/poweredby_mediawiki_176x62.png | Bin 0 -> 8796 bytes 5 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 resources/assets/poweredby_mediawiki_132x47.png create mode 100644 resources/assets/poweredby_mediawiki_176x62.png diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 80609836dc..f9dc1ed222 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3154,6 +3154,7 @@ $wgExperimentalHtmlIds = false; * for the icon, the following keys are used: * - src: An absolute url to the image to use for the icon, this is recommended * but not required, however some skins will ignore icons without an image + * - srcset: optional additional-resolution images; see HTML5 specs * - url: The url to use in the a element around the text or icon, if not set an a element will * not be outputted * - alt: This is the text form of the icon, it will be displayed without an image in @@ -3170,7 +3171,7 @@ $wgFooterIcons = array( ), "poweredby" => array( "mediawiki" => array( - "src" => null, // Defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" + "src" => null, // Defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" plus srcset for 1.5x, 2x "url" => "//www.mediawiki.org/", "alt" => "Powered by MediaWiki", ) diff --git a/includes/Setup.php b/includes/Setup.php index c75429efc9..4e63d9186e 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -140,6 +140,9 @@ if ( isset( $wgFooterIcons['poweredby'] ) ) { $wgFooterIcons['poweredby']['mediawiki']['src'] = "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"; + $wgFooterIcons['poweredby']['mediawiki']['srcset'] = + "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " . + "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x"; } /** diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php index 999dda87ee..752387b592 100644 --- a/includes/skins/Skin.php +++ b/includes/skins/Skin.php @@ -837,9 +837,12 @@ abstract class Skin extends ContextSource { function getPoweredBy() { global $wgResourceBasePath; - $url = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" ); - $text = 'Powered by MediaWiki'; + $url1 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" ); + $url1_5 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png" ); + $url2 = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png" ); + $text = 'Powered by MediaWiki'; Hooks::run( 'SkinGetPoweredBy', array( &$text, $this ) ); return $text; } diff --git a/resources/assets/poweredby_mediawiki_132x47.png b/resources/assets/poweredby_mediawiki_132x47.png new file mode 100644 index 0000000000000000000000000000000000000000..a784ecff9f1189fe7064d69deda2a4f25f93d22c GIT binary patch literal 6011 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 SLFm%}0000