| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013 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_LIBGTK2UI_GTK2_UI_H_ | |
| 6 #define CHROME_BROWSER_UI_LIBGTK2UI_GTK2_UI_H_ | |
| 7 | |
| 8 #include <map> | |
| 9 #include <memory> | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "base/compiler_specific.h" | |
| 13 #include "base/macros.h" | |
| 14 #include "base/observer_list.h" | |
| 15 #include "chrome/browser/ui/libgtk2ui/gtk2_signal.h" | |
| 16 #include "chrome/browser/ui/libgtk2ui/libgtk2ui_export.h" | |
| 17 #include "ui/gfx/color_utils.h" | |
| 18 #include "ui/views/linux_ui/linux_ui.h" | |
| 19 #include "ui/views/window/frame_buttons.h" | |
| 20 | |
| 21 typedef struct _GtkStyle GtkStyle; | |
| 22 typedef struct _GtkWidget GtkWidget; | |
| 23 | |
| 24 class SkBitmap; | |
| 25 | |
| 26 namespace libgtk2ui { | |
| 27 class Gtk2KeyBindingsHandler; | |
| 28 class GConfListener; | |
| 29 | |
| 30 // Interface to GTK2 desktop features. | |
| 31 // | |
| 32 class Gtk2UI : public views::LinuxUI { | |
| 33 public: | |
| 34 Gtk2UI(); | |
| 35 ~Gtk2UI() override; | |
| 36 | |
| 37 typedef base::Callback<ui::NativeTheme*(aura::Window* window)> | |
| 38 NativeThemeGetter; | |
| 39 | |
| 40 // Setters used by GConfListener: | |
| 41 void SetWindowButtonOrdering( | |
| 42 const std::vector<views::FrameButton>& leading_buttons, | |
| 43 const std::vector<views::FrameButton>& trailing_buttons); | |
| 44 void SetNonClientMiddleClickAction(NonClientMiddleClickAction action); | |
| 45 | |
| 46 // Called when gtk style changes | |
| 47 void ResetStyle(); | |
| 48 | |
| 49 // ui::LinuxInputMethodContextFactory: | |
| 50 std::unique_ptr<ui::LinuxInputMethodContext> CreateInputMethodContext( | |
| 51 ui::LinuxInputMethodContextDelegate* delegate, | |
| 52 bool is_simple) const override; | |
| 53 | |
| 54 // gfx::LinuxFontDelegate: | |
| 55 gfx::FontRenderParams GetDefaultFontRenderParams() const override; | |
| 56 void GetDefaultFontDescription( | |
| 57 std::string* family_out, | |
| 58 int* size_pixels_out, | |
| 59 int* style_out, | |
| 60 gfx::Font::Weight* weight_out, | |
| 61 gfx::FontRenderParams* params_out) const override; | |
| 62 | |
| 63 // ui::ShellDialogLinux: | |
| 64 ui::SelectFileDialog* CreateSelectFileDialog( | |
| 65 ui::SelectFileDialog::Listener* listener, | |
| 66 ui::SelectFilePolicy* policy) const override; | |
| 67 | |
| 68 // ui::LinuxUI: | |
| 69 void Initialize() override; | |
| 70 bool GetTint(int id, color_utils::HSL* tint) const override; | |
| 71 bool GetColor(int id, SkColor* color) const override; | |
| 72 SkColor GetFocusRingColor() const override; | |
| 73 SkColor GetThumbActiveColor() const override; | |
| 74 SkColor GetThumbInactiveColor() const override; | |
| 75 SkColor GetTrackColor() const override; | |
| 76 SkColor GetActiveSelectionBgColor() const override; | |
| 77 SkColor GetActiveSelectionFgColor() const override; | |
| 78 SkColor GetInactiveSelectionBgColor() const override; | |
| 79 SkColor GetInactiveSelectionFgColor() const override; | |
| 80 double GetCursorBlinkInterval() const override; | |
| 81 ui::NativeTheme* GetNativeTheme(aura::Window* window) const override; | |
| 82 void SetNativeThemeOverride(const NativeThemeGetter& callback) override; | |
| 83 bool GetDefaultUsesSystemTheme() const override; | |
| 84 void SetDownloadCount(int count) const override; | |
| 85 void SetProgressFraction(float percentage) const override; | |
| 86 bool IsStatusIconSupported() const override; | |
| 87 std::unique_ptr<views::StatusIconLinux> CreateLinuxStatusIcon( | |
| 88 const gfx::ImageSkia& image, | |
| 89 const base::string16& tool_tip) const override; | |
| 90 gfx::Image GetIconForContentType(const std::string& content_type, | |
| 91 int size) const override; | |
| 92 std::unique_ptr<views::Border> CreateNativeBorder( | |
| 93 views::LabelButton* owning_button, | |
| 94 std::unique_ptr<views::LabelButtonBorder> border) override; | |
| 95 void AddWindowButtonOrderObserver( | |
| 96 views::WindowButtonOrderObserver* observer) override; | |
| 97 void RemoveWindowButtonOrderObserver( | |
| 98 views::WindowButtonOrderObserver* observer) override; | |
| 99 bool UnityIsRunning() override; | |
| 100 NonClientMiddleClickAction GetNonClientMiddleClickAction() override; | |
| 101 void NotifyWindowManagerStartupComplete() override; | |
| 102 | |
| 103 // ui::TextEditKeybindingDelegate: | |
| 104 bool MatchEvent(const ui::Event& event, | |
| 105 std::vector<ui::TextEditCommandAuraLinux>* commands) override; | |
| 106 | |
| 107 // ui::Views::LinuxUI: | |
| 108 void UpdateDeviceScaleFactor(float device_scale_factor) override; | |
| 109 float GetDeviceScaleFactor() const override; | |
| 110 | |
| 111 private: | |
| 112 typedef std::map<int, SkColor> ColorMap; | |
| 113 typedef std::map<int, color_utils::HSL> TintMap; | |
| 114 | |
| 115 // This method returns the colors webkit will use for the scrollbars. When no | |
| 116 // colors are specified by the GTK+ theme, this function averages of the | |
| 117 // thumb part and of the track colors. | |
| 118 void SetScrollbarColors(); | |
| 119 | |
| 120 // Extracts colors and tints from the GTK theme, both for the | |
| 121 // ThemeService interface and the colors we send to webkit. | |
| 122 void LoadGtkValues(); | |
| 123 | |
| 124 // Initialize the Xcursor theme and size with the GTK theme and size. | |
| 125 void LoadCursorTheme(); | |
| 126 | |
| 127 // Reads in explicit theme frame colors from the ChromeGtkFrame style class | |
| 128 // or generates them per our fallback algorithm. | |
| 129 void BuildFrameColors(); | |
| 130 | |
| 131 // Gets a tint which depends on the default for |id| as well as |color|. | |
| 132 color_utils::HSL ColorToTint(int id, SkColor color); | |
| 133 | |
| 134 // Returns the tint for buttons that contrasts with the normal window | |
| 135 // background color. | |
| 136 void GetNormalButtonTintHSL(color_utils::HSL* tint) const; | |
| 137 | |
| 138 // Returns a tint that's the color of the current normal text in an entry. | |
| 139 void GetNormalEntryForegroundHSL(color_utils::HSL* tint) const; | |
| 140 | |
| 141 // Returns a tint that's the color of the current highlighted text in an | |
| 142 // entry. | |
| 143 void GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const; | |
| 144 | |
| 145 // Gets a color for the background of the prominent button. | |
| 146 SkColor GetProminentButtonBgColor(int gtk_state) const; | |
| 147 | |
| 148 // Updates |default_font_*|. | |
| 149 void UpdateDefaultFont(); | |
| 150 | |
| 151 // Colors calculated by LoadGtkValues() that are given to the | |
| 152 // caller while |use_gtk_| is true. | |
| 153 ColorMap colors_; | |
| 154 | |
| 155 // Colors used to tint certain icons. | |
| 156 color_utils::HSL button_tint_; | |
| 157 color_utils::HSL entry_tint_; | |
| 158 color_utils::HSL selected_entry_tint_; | |
| 159 | |
| 160 // Colors that we pass to WebKit. These are generated each time the theme | |
| 161 // changes. | |
| 162 SkColor focus_ring_color_; | |
| 163 SkColor thumb_active_color_; | |
| 164 SkColor thumb_inactive_color_; | |
| 165 SkColor track_color_; | |
| 166 SkColor active_selection_bg_color_; | |
| 167 SkColor active_selection_fg_color_; | |
| 168 SkColor inactive_selection_bg_color_; | |
| 169 SkColor inactive_selection_fg_color_; | |
| 170 | |
| 171 // Details about the default UI font. | |
| 172 std::string default_font_family_; | |
| 173 int default_font_size_pixels_; | |
| 174 int default_font_style_; // Bitfield of gfx::Font::Style values. | |
| 175 gfx::Font::Weight default_font_weight_; | |
| 176 gfx::FontRenderParams default_font_render_params_; | |
| 177 | |
| 178 #if defined(USE_GCONF) | |
| 179 // Currently, the only source of window button configuration. This will | |
| 180 // change if we ever have to support XFCE's configuration system or KDE's. | |
| 181 std::unique_ptr<GConfListener> gconf_listener_; | |
| 182 #endif // defined(USE_GCONF) | |
| 183 | |
| 184 // If either of these vectors are non-empty, they represent the current | |
| 185 // window button configuration. | |
| 186 std::vector<views::FrameButton> leading_buttons_; | |
| 187 std::vector<views::FrameButton> trailing_buttons_; | |
| 188 | |
| 189 std::unique_ptr<Gtk2KeyBindingsHandler> key_bindings_handler_; | |
| 190 | |
| 191 // Objects to notify when the window frame button order changes. | |
| 192 base::ObserverList<views::WindowButtonOrderObserver> observer_list_; | |
| 193 | |
| 194 // Whether we should lower the window on a middle click to the non client | |
| 195 // area. | |
| 196 NonClientMiddleClickAction middle_click_action_; | |
| 197 | |
| 198 // Used to override the native theme for a window. If no override is provided | |
| 199 // or the callback returns NULL, Gtk2UI will default to a NativeThemeGtk2 | |
| 200 // instance. | |
| 201 NativeThemeGetter native_theme_overrider_; | |
| 202 | |
| 203 float device_scale_factor_; | |
| 204 | |
| 205 DISALLOW_COPY_AND_ASSIGN(Gtk2UI); | |
| 206 }; | |
| 207 | |
| 208 } // namespace libgtk2ui | |
| 209 | |
| 210 // Access point to the GTK2 desktop system. This should be the only symbol that | |
| 211 // is exported in the library; everything else should be used through the | |
| 212 // interface, because eventually this .so will be loaded through dlopen at | |
| 213 // runtime so our main binary can conditionally load GTK2 or GTK3 or EFL or | |
| 214 // QT or whatever. | |
| 215 LIBGTK2UI_EXPORT views::LinuxUI* BuildGtk2UI(); | |
| 216 | |
| 217 #endif // CHROME_BROWSER_UI_LIBGTK2UI_GTK2_UI_H_ | |
| OLD | NEW |