fix: backport KDE icon size fix (#17497)

This commit is contained in:
Samuel Attard
2019-03-21 12:19:11 -07:00
committed by Charles Kerr
parent 5b9393c173
commit 7b1f5a9cea
2 changed files with 38 additions and 0 deletions

View File

@@ -92,3 +92,4 @@ tts.patch
do_not_allow_impl_side_invalidations_until_frame_sink_is_fully_active.patch
enable_inputpane_virtual_keyboard_functionality_by_default.patch
merge_m72_filereader_make_a_copy_of_the_arraybuffer_when_returning.patch
fix_system_tray_icons_being_cropped_under_kde.patch

View File

@@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <sattard@slack-corp.com>
Date: Wed, 20 Mar 2019 22:48:27 -0700
Subject: Fix system tray icons being cropped under KDE
The code that adds padding to too small icons was breaking the larger
ones by cutting the minimal size (22x22px) out of their center.
Backports: https://chromium-review.googlesource.com/c/chromium/src/+/1173235
diff --git a/chrome/browser/ui/libgtkui/app_indicator_icon.cc b/chrome/browser/ui/libgtkui/app_indicator_icon.cc
index 5aeb9d4d115ccae7763872aaa50734ead5228ec6..96134270493893c27b1f903028097220a6dd6fcf 100644
--- a/chrome/browser/ui/libgtkui/app_indicator_icon.cc
+++ b/chrome/browser/ui/libgtkui/app_indicator_icon.cc
@@ -285,15 +285,16 @@ AppIndicatorIcon::WriteKDE4TempImageOnWorkerThread(
std::string icon_name = base::StringPrintf(
"chrome_app_indicator2_%s", base::MD5DigestToBase16(digest).c_str());
- // If |bitmap| is not 22x22, KDE does some really ugly resizing. Pad |bitmap|
- // with transparent pixels to make it 22x22.
- const int kDesiredSize = 22;
+ // If |bitmap| is smaller than 22x22, KDE does some really ugly resizing.
+ // Pad |bitmap| with transparent pixels to make it 22x22.
+ const int kMinimalSize = 22;
SkBitmap scaled_bitmap;
- scaled_bitmap.allocN32Pixels(kDesiredSize, kDesiredSize);
+ scaled_bitmap.allocN32Pixels(std::max(bitmap.width(), kMinimalSize),
+ std::max(bitmap.height(), kMinimalSize));
scaled_bitmap.eraseARGB(0, 0, 0, 0);
SkCanvas canvas(scaled_bitmap);
- canvas.drawBitmap(bitmap, (kDesiredSize - bitmap.width()) / 2,
- (kDesiredSize - bitmap.height()) / 2);
+ canvas.drawBitmap(bitmap, (scaled_bitmap.width() - bitmap.width()) / 2,
+ (scaled_bitmap.height() - bitmap.height()) / 2);
base::FilePath image_path = image_dir.Append(icon_name + ".png");
if (!WriteFile(image_path, scaled_bitmap))