Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(703)

Unified Diff: chrome/browser/ui/views/avatar_menu_button.cc

Issue 8511064: GAIA Profile info prototype (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/avatar_menu_bubble_view.cc ('k') | chrome/browser/ui/webui/ntp/ntp_login_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/avatar_menu_button.cc
diff --git a/chrome/browser/ui/views/avatar_menu_button.cc b/chrome/browser/ui/views/avatar_menu_button.cc
index a12c75925e7d6adefd011775ea476978e88d15f2..ccea35aec6e88d6330c1ed4d8f25f1a78a8cc8a3 100644
--- a/chrome/browser/ui/views/avatar_menu_button.cc
+++ b/chrome/browser/ui/views/avatar_menu_button.cc
@@ -10,13 +10,13 @@
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "ui/gfx/canvas_skia.h"
#include "views/widget/widget.h"
+#include "skia/ext/image_operations.h"
#if defined(OS_WIN)
#include <shobjidl.h>
#include "base/win/scoped_comptr.h"
#include "base/win/windows_version.h"
-#include "skia/ext/image_operations.h"
#include "ui/gfx/icon_util.h"
#endif
@@ -31,6 +31,7 @@ static inline int Round(double x) {
// See http://msdn.microsoft.com/en-us/library/dd391696(VS.85).aspx for
// more information.
void DrawTaskBarDecoration(const Browser* browser, const SkBitmap* bitmap) {
+ return;
#if defined(OS_WIN) && !defined(USE_AURA)
if (base::win::GetVersion() < base::win::VERSION_WIN7)
return;
@@ -100,26 +101,68 @@ void AvatarMenuButton::OnPaint(gfx::Canvas* canvas) {
if (icon.isNull())
return;
- // Scale the image to fit the width of the button.
- int dst_width = std::min(icon.width(), width());
- // Truncate rather than rounding, so that for odd widths we put the extra
- // pixel on the left.
- int dst_x = (width() - dst_width) / 2;
-
- // Scale the height and maintain aspect ratio. This means that the
- // icon may not fit in the view. That's ok, we just vertically center it.
- float scale =
- static_cast<float>(dst_width) / static_cast<float>(icon.width());
- // Round here so that we minimize the aspect ratio drift.
- int dst_height = Round(icon.height() * scale);
- // Round rather than truncating, so that for odd heights we select an extra
- // pixel below the image center rather than above. This is because the
- // incognito image has shadows at the top that make the apparent center below
- // the real center.
- int dst_y = Round((height() - dst_height) / 2.0);
-
- canvas->DrawBitmapInt(icon, 0, 0, icon.width(), icon.height(),
- dst_x, dst_y, dst_width, dst_height, false);
+ if (icon.width() != icon.height()) {
+ // Scale the image to fit the width of the button.
+ int dst_width = std::min(icon.width(), width());
+ // Truncate rather than rounding, so that for odd widths we put the extra
+ // pixel on the left.
+ int dst_x = (width() - dst_width) / 2;
+
+ // Scale the height and maintain aspect ratio. This means that the
+ // icon may not fit in the view. That's ok, we just vertically center it.
+ float scale =
+ static_cast<float>(dst_width) / static_cast<float>(icon.width());
+ // Round here so that we minimize the aspect ratio drift.
+ int dst_height = Round(icon.height() * scale);
+ // Round rather than truncating, so that for odd heights we select an extra
+ // pixel below the image center rather than above. This is because the
+ // incognito image has shadows at the top that make the apparent center
+ // below the real center.
+ int dst_y = Round((height() - dst_height) / 2.0);
+
+ canvas->DrawBitmapInt(icon, 0, 0, icon.width(), icon.height(),
+ dst_x, dst_y, dst_width, dst_height, false);
+ } else {
+ int dst_width = 28;
+ int dst_x = (width() - dst_width) / 2 + 2;
+ int dst_height = 28;
+ int dst_y = height() - dst_height;
+ canvas->DrawBitmapInt(icon, 0, 0, icon.width(), icon.height(),
+ dst_x, dst_y, dst_width, dst_height, false);
+
+ int x1 = dst_x;
+ int x2 = dst_x + dst_width;
+ int y1 = dst_y;
+ int y2 = dst_y + dst_height;
+
+ // Top highlight
+ canvas->DrawLineInt(SkColorSetARGB(58, 0xff, 0xff, 0xff),
+ x1, y1, x2, y1);
+
+ // Left Border
+ canvas->DrawLineInt(SkColorSetARGB(28, 0, 0, 0),
+ x1, y1 + 1, x1, y2);
+
+ // Right Border
+ canvas->DrawLineInt(SkColorSetARGB(28, 0, 0, 0),
+ x2 - 1, y1 + 1, x2 - 1, y2);
+
+ // Dark Shadow Top
+ canvas->DrawLineInt(SkColorSetARGB(89, 0, 0, 0),
+ x1 - 1, y1 - 1, x2 + 1, y1 - 1);
+ canvas->DrawLineInt(SkColorSetARGB(89, 0, 0, 0),
+ x1 - 1, y1, x1 - 1, y2);
+ canvas->DrawLineInt(SkColorSetARGB(89, 0, 0, 0),
+ x2, y1, x2, y2);
+
+ // Light Shadow Top
+ canvas->DrawLineInt(SkColorSetARGB(29, 0, 0, 0),
+ x1 - 2, y1 - 2, x2 + 2, y1 - 2);
+ canvas->DrawLineInt(SkColorSetARGB(29, 0, 0, 0),
+ x1 - 2, y1 - 1, x1 - 2, y2);
+ canvas->DrawLineInt(SkColorSetARGB(29, 0, 0, 0),
+ x2 + 1, y1 - 1, x2 + 1, y2);
+ }
if (set_taskbar_decoration_) {
// Drawing the taskbar decoration uses lanczos resizing so we really
@@ -137,7 +180,13 @@ bool AvatarMenuButton::HitTest(const gfx::Point& point) const {
// If the icon changes, we need to set the taskbar decoration again.
void AvatarMenuButton::SetIcon(const SkBitmap& icon) {
- views::MenuButton::SetIcon(icon);
+ if (icon.width() == icon.height()) {
+ SkBitmap resized_image = skia::ImageOperations::Resize(
+ icon, skia::ImageOperations::RESIZE_BEST, 28, 28);
+ views::MenuButton::SetIcon(resized_image);
+ } else {
+ views::MenuButton::SetIcon(icon);
+ }
set_taskbar_decoration_ = true;
}
« no previous file with comments | « chrome/browser/ui/views/avatar_menu_bubble_view.cc ('k') | chrome/browser/ui/webui/ntp/ntp_login_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698