1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_GTK_AVATAR_MENU_BUTTON_GTK_H_
6#define CHROME_BROWSER_UI_GTK_AVATAR_MENU_BUTTON_GTK_H_
7
8#include <gtk/gtk.h>
9
10#include "base/memory/scoped_ptr.h"
11#include "chrome/browser/ui/gtk/bubble/bubble_gtk.h"
12#include "ui/base/gtk/gtk_signal.h"
13#include "ui/base/gtk/owned_widget_gtk.h"
14
15class Browser;
16class SkBitmap;
17
18namespace gfx {
19class Image;
20}
21
22// A button used to show the profile avatar. When clicked, it opens the
23// AvatarMenuBubbleGtk.
24class AvatarMenuButtonGtk {
25 public:
26  explicit AvatarMenuButtonGtk(Browser* browser);
27
28  ~AvatarMenuButtonGtk();
29
30  // Returns the button widget.
31  GtkWidget* widget() const { return widget_.get(); }
32
33  // Sets the location the arrow should be displayed on the menu bubble.
34  void set_menu_frame_style(BubbleGtk::FrameStyle frame_style) {
35    frame_style_ = frame_style;
36  }
37
38  // Sets the image to display on the button, typically the profile icon.
39  void SetIcon(const gfx::Image& icon, bool is_gaia_picture);
40
41  // Show the avatar bubble.
42  void ShowAvatarBubble();
43
44 private:
45  CHROMEGTK_CALLBACK_1(AvatarMenuButtonGtk, gboolean, OnButtonPressed,
46                       GdkEventButton*);
47  CHROMEGTK_CALLBACK_1(AvatarMenuButtonGtk, void, OnSizeAllocate,
48                       GtkAllocation*);
49
50  void UpdateButtonIcon();
51
52  // The button widget.
53  ui::OwnedWidgetGtk widget_;
54
55  // A weak pointer to the image widget displayed on the button.
56  GtkWidget* image_;
57
58  // A weak pointer to a browser. Used to create the bubble menu.
59  Browser* browser_;
60
61  // Which side of the bubble to display the arrow.
62  BubbleGtk::FrameStyle frame_style_;
63
64  scoped_ptr<gfx::Image> icon_;
65  bool is_gaia_picture_;
66  int old_height_;
67
68  DISALLOW_COPY_AND_ASSIGN(AvatarMenuButtonGtk);
69};
70
71#endif  // CHROME_BROWSER_UI_GTK_AVATAR_MENU_BUTTON_GTK_H_
72