Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / frame / browser_desktop_window_tree_host_x11.cc
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 #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h"
6
7 #include "chrome/browser/themes/theme_service.h"
8 #include "chrome/browser/themes/theme_service_factory.h"
9 #include "chrome/browser/ui/views/frame/browser_frame.h"
10 #include "chrome/browser/ui/views/frame/browser_view.h"
11 #include "chrome/browser/ui/views/theme_image_mapper.h"
12
13 namespace {
14
15 // DesktopThemeProvider maps resource ids using MapThemeImage(). This is
16 // necessary for BrowserDesktopWindowTreeHostWin so that it uses the windows
17 // theme images rather than the ash theme images.
18 //
19 // This differs from the version in browser_desktop_window_tree_host_win.cc
20 // because we need to also look up whether we're using the native theme.
21 class DesktopThemeProvider : public ui::ThemeProvider {
22  public:
23   explicit DesktopThemeProvider(ThemeService* delegate)
24       : delegate_(delegate) {
25   }
26
27   bool UsingSystemTheme() const override {
28     return delegate_->UsingSystemTheme();
29   }
30   gfx::ImageSkia* GetImageSkiaNamed(int id) const override {
31     if (delegate_->UsingSystemTheme())
32       return delegate_->GetImageSkiaNamed(id);
33
34     return delegate_->GetImageSkiaNamed(
35         chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
36   }
37   SkColor GetColor(int id) const override { return delegate_->GetColor(id); }
38   int GetDisplayProperty(int id) const override {
39     return delegate_->GetDisplayProperty(id);
40   }
41   bool ShouldUseNativeFrame() const override {
42     return delegate_->ShouldUseNativeFrame();
43   }
44   bool HasCustomImage(int id) const override {
45     return delegate_->HasCustomImage(
46         chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
47   }
48   base::RefCountedMemory* GetRawData(int id, ui::ScaleFactor scale_factor)
49       const override {
50     return delegate_->GetRawData(id, scale_factor);
51   }
52
53  private:
54   ThemeService* delegate_;
55
56   DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
57 };
58
59 } // namespace
60
61 ////////////////////////////////////////////////////////////////////////////////
62 // BrowserDesktopWindowTreeHostX11, public:
63
64 BrowserDesktopWindowTreeHostX11::BrowserDesktopWindowTreeHostX11(
65     views::internal::NativeWidgetDelegate* native_widget_delegate,
66     views::DesktopNativeWidgetAura* desktop_native_widget_aura,
67     BrowserView* browser_view,
68     BrowserFrame* browser_frame)
69     : DesktopWindowTreeHostX11(native_widget_delegate,
70                                desktop_native_widget_aura),
71       browser_view_(browser_view) {
72   scoped_ptr<ui::ThemeProvider> theme_provider(
73       new DesktopThemeProvider(ThemeServiceFactory::GetForProfile(
74                                    browser_view->browser()->profile())));
75   browser_frame->SetThemeProvider(theme_provider.Pass());
76 }
77
78 BrowserDesktopWindowTreeHostX11::~BrowserDesktopWindowTreeHostX11() {
79 }
80
81 ////////////////////////////////////////////////////////////////////////////////
82 // BrowserDesktopWindowTreeHostX11,
83 //     BrowserDesktopWindowTreeHost implementation:
84
85 views::DesktopWindowTreeHost*
86     BrowserDesktopWindowTreeHostX11::AsDesktopWindowTreeHost() {
87   return this;
88 }
89
90 int BrowserDesktopWindowTreeHostX11::GetMinimizeButtonOffset() const {
91   return 0;
92 }
93
94 bool BrowserDesktopWindowTreeHostX11::UsesNativeSystemMenu() const {
95   return false;
96 }
97
98 ////////////////////////////////////////////////////////////////////////////////
99 // BrowserDesktopWindowTreeHostX11,
100 //     views::DesktopWindowTreeHostX11 implementation:
101
102 void BrowserDesktopWindowTreeHostX11::Init(
103     aura::Window* content_window,
104     const views::Widget::InitParams& params) {
105   views::DesktopWindowTreeHostX11::Init(content_window, params);
106
107   // We have now created our backing X11 window. We now need to (possibly)
108   // alert Unity that there's a menu bar attached to it.
109   global_menu_bar_x11_.reset(new GlobalMenuBarX11(browser_view_, this));
110 }
111
112 void BrowserDesktopWindowTreeHostX11::CloseNow() {
113   global_menu_bar_x11_.reset();
114   DesktopWindowTreeHostX11::CloseNow();
115 }
116
117 ////////////////////////////////////////////////////////////////////////////////
118 // BrowserDesktopWindowTreeHost, public:
119
120 // static
121 BrowserDesktopWindowTreeHost*
122     BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
123         views::internal::NativeWidgetDelegate* native_widget_delegate,
124         views::DesktopNativeWidgetAura* desktop_native_widget_aura,
125         BrowserView* browser_view,
126         BrowserFrame* browser_frame) {
127   return new BrowserDesktopWindowTreeHostX11(native_widget_delegate,
128                                              desktop_native_widget_aura,
129                                              browser_view,
130                                              browser_frame);
131 }