Index: chrome/browser/media/desktop_media_list.h |
diff --git a/chrome/browser/media/desktop_media_list.h b/chrome/browser/media/desktop_media_list.h |
index d8b2e237f343cd13b8b39c5bfa21605329315296..58e564804993128c4d3d44f6b5daec7d321349ea 100644 |
--- a/chrome/browser/media/desktop_media_list.h |
+++ b/chrome/browser/media/desktop_media_list.h |
@@ -9,6 +9,7 @@ |
#include "base/strings/string16.h" |
#include "base/time/time.h" |
#include "content/public/browser/desktop_media_id.h" |
+#include "ui/gfx/image/image.h" |
#include "ui/gfx/image/image_skia.h" |
class DesktopMediaListObserver; |
@@ -19,6 +20,7 @@ class DesktopMediaListObserver; |
// media picker when something changes. |
class DesktopMediaList { |
public: |
+ enum SourceTypes { SCREENS = 1, WINDOWS = 2, TABS = 4 }; |
// Struct used to represent each entry in the list. |
struct Source { |
// Id of the source. |
@@ -56,6 +58,80 @@ class DesktopMediaList { |
virtual int GetSourceCount() const = 0; |
virtual const Source& GetSource(int index) const = 0; |
+ |
+ protected: |
+ // Create a image with an enlarged favicon on its center and black boundary. |
+ // If fails, an empty image will return. |
+ // The function is used to create a thumbnail for chrome tab preview. |
+ static gfx::ImageSkia CreateImageEncloseFavicon(gfx::Size size, |
qiangchen
2015/12/07 22:45:56
Better to separate the definition from declaration
GeorgeZ
2015/12/09 19:36:37
Done.
|
+ gfx::Image& favicon) { |
+ // Enlarge scale for favicon. |
+ int scale = 3; |
qiangchen
2015/12/07 22:45:56
const?
GeorgeZ
2015/12/09 19:36:37
Done.
|
+ // Thickness of image boundary. |
+ int thick = 5; |
qiangchen
2015/12/07 22:45:56
const?
GeorgeZ
2015/12/09 19:36:37
Done.
|
+ |
+ // Sanity check. If failed, return a empty image. |
+ if (size.width() < favicon.Width() * scale || |
+ size.height() < favicon.Height() * scale) |
+ return gfx::ImageSkia(); |
+ |
+ // Create a SkBitmap for faviocn. |
+ SkBitmap icon = favicon.AsBitmap(); |
+ |
+ // Create a bitmap. |
+ SkBitmap result; |
+ result.allocN32Pixels(size.width(), size.height(), true); |
+ |
+ // Two SkBitmaps' color type need match to merge. |
+ if (icon.colorType() != result.colorType()) |
+ return gfx::ImageSkia(); |
+ |
+ result.lockPixels(); |
+ uint8* pixels_data = reinterpret_cast<uint8*>(result.getPixels()); |
+ |
+ // Set background. |
+ int span = result.rowBytes(); |
+ int bpp = result.bytesPerPixel(); |
qiangchen
2015/12/07 22:45:56
Again my question, the follow code seems to assume
GeorgeZ
2015/12/09 19:36:37
result.allocN32Pixels() guarantees result image's
|
+ for (int y = 0; y < result.height(); ++y) { |
+ for (int x = 0; x < result.width(); ++x) { |
+ if (y < thick || y >= result.height() - thick || x < thick || |
+ x >= result.width() - thick) { |
+ pixels_data[span * y + x * bpp] = 0; |
+ pixels_data[span * y + x * bpp + 1] = 0; |
+ pixels_data[span * y + x * bpp + 2] = 0; |
+ } else { |
+ pixels_data[span * y + x * bpp] = 0xff; |
+ pixels_data[span * y + x * bpp + 1] = 0xff; |
+ pixels_data[span * y + x * bpp + 2] = 0xff; |
+ } |
+ pixels_data[span * y + x * bpp + 3] = 0xff; |
+ } |
+ } |
+ |
+ // Copy enlarged favicon into center of result image. |
+ icon.lockPixels(); |
+ uint8* icon_data = reinterpret_cast<uint8*>(icon.getPixels()); |
+ |
+ int icon_span = icon.rowBytes(); |
+ int icon_bpp = icon.bytesPerPixel(); |
+ int offsety = (result.height() - icon.height() * scale) / 2; |
+ int offsetx = (result.width() - icon.width() * scale) / 2; |
+ for (int y = 0; y < icon.height() * scale; ++y) { |
+ for (int x = 0; x < icon.width() * scale; ++x) { |
+ pixels_data[span * (y + offsety) + (x + offsetx) * bpp] = |
+ icon_data[icon_span * (y / scale) + (x / scale) * icon_bpp]; |
+ pixels_data[span * (y + offsety) + (x + offsetx) * bpp + 1] = |
+ icon_data[icon_span * (y / scale) + (x / scale) * icon_bpp + 1]; |
+ pixels_data[span * (y + offsety) + (x + offsetx) * bpp + 2] = |
+ icon_data[icon_span * (y / scale) + (x / scale) * icon_bpp + 2]; |
+ } |
+ } |
+ icon.unlockPixels(); |
+ result.unlockPixels(); |
+ |
+ // Create a skia image. |
+ return gfx::ImageSkia::CreateFrom1xBitmap(result); |
+ } |
}; |
#endif // CHROME_BROWSER_MEDIA_DESKTOP_MEDIA_LIST_H_ |