Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / gtk / autofill / autofill_popup_view_gtk.h
1 // Copyright (c) 2012 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_AUTOFILL_AUTOFILL_POPUP_VIEW_GTK_H_
6 #define CHROME_BROWSER_UI_GTK_AUTOFILL_AUTOFILL_POPUP_VIEW_GTK_H_
7
8 #include <pango/pango.h>
9 #include <vector>
10
11 #include "base/compiler_specific.h"
12 #include "base/strings/string16.h"
13 #include "chrome/browser/ui/autofill/autofill_popup_view.h"
14 #include "ui/base/glib/glib_integers.h"
15 #include "ui/base/gtk/gtk_signal.h"
16 #include "ui/base/gtk/gtk_signal_registrar.h"
17
18 class Profile;
19
20 namespace content {
21 class RenderViewHost;
22 }
23
24 namespace gfx {
25 class FontList;
26 class Rect;
27 }
28
29 typedef struct _GdkEventButton GdkEventButton;
30 typedef struct _GdkEventConfigure GdkEventConfigure;
31 typedef struct _GdkEventCrossing GdkEventCrossing;
32 typedef struct _GdkEventExpose GdkEventExpose;
33 typedef struct _GdkEventKey GdkEventKey;
34 typedef struct _GdkEventMotion GdkEventMotion;
35 typedef struct _GdkColor GdkColor;
36 typedef struct _GtkWidget GtkWidget;
37
38 namespace autofill {
39
40 class AutofillPopupController;
41
42 // Gtk implementation for AutofillPopupView interface.
43 class AutofillPopupViewGtk : public AutofillPopupView {
44  public:
45   explicit AutofillPopupViewGtk(AutofillPopupController* controller);
46
47  private:
48   virtual ~AutofillPopupViewGtk();
49
50   // AutofillPopupView implementation.
51   virtual void Hide() OVERRIDE;
52   virtual void Show() OVERRIDE;
53   virtual void InvalidateRow(size_t row) OVERRIDE;
54   virtual void UpdateBoundsAndRedrawPopup() OVERRIDE;
55
56   CHROMEGTK_CALLBACK_1(AutofillPopupViewGtk, gboolean, HandleConfigure,
57                        GdkEventConfigure*);
58   CHROMEGTK_CALLBACK_1(AutofillPopupViewGtk, gboolean, HandleButtonRelease,
59                        GdkEventButton*);
60   CHROMEGTK_CALLBACK_1(AutofillPopupViewGtk, gboolean, HandleExpose,
61                        GdkEventExpose*);
62   CHROMEGTK_CALLBACK_1(AutofillPopupViewGtk, gboolean, HandleLeave,
63                        GdkEventCrossing*)
64   CHROMEGTK_CALLBACK_1(AutofillPopupViewGtk, gboolean, HandleMotion,
65                        GdkEventMotion*);
66
67   // Set up the pango layout to display the autofill results.
68   void SetUpLayout();
69
70   // Set up the pango layout to print the given text and have it's width match
71   // the text's (this gives us better control when placing the text box).
72   void SetLayoutText(const base::string16& text,
73                      const gfx::FontList& font_list,
74                      const GdkColor text_color);
75
76   // Draw the separator as the given |separator_rect|.
77   void DrawSeparator(cairo_t* cairo_context, const gfx::Rect& separator_rect);
78
79   // Draw the given autofill entry in |entry_rect|.
80   void DrawAutofillEntry(cairo_t* cairo_context,
81                          size_t index,
82                          const gfx::Rect& entry_rect);
83
84   // Set the initial bounds of the popup to show, including the placement
85   // of it.
86   void SetInitialBounds();
87
88   AutofillPopupController* controller_;  // Weak reference.
89
90   ui::GtkSignalRegistrar signals_;
91
92   GtkWidget* window_;  // Strong reference.
93   PangoLayout* layout_;  // Strong reference.
94
95   DISALLOW_COPY_AND_ASSIGN(AutofillPopupViewGtk);
96 };
97
98 }  // namespace autofill
99
100 #endif  // CHROME_BROWSER_UI_GTK_AUTOFILL_AUTOFILL_POPUP_VIEW_GTK_H_