- add sources.
[platform/framework/web/crosswalk.git] / src / ui / native_theme / native_theme_gtk.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 "ui/native_theme/native_theme_gtk.h"
6
7 #include <gtk/gtk.h>
8
9 #include "base/basictypes.h"
10 #include "base/logging.h"
11 #include "ui/gfx/skia_utils_gtk.h"
12
13 namespace {
14
15 const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128);
16
17 // Theme colors returned by GetSystemColor().
18
19 // FocusableBorder:
20 const SkColor kFocusedBorderColor = SkColorSetRGB(0x4D, 0x90, 0xFE);
21 const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xD9, 0xD9, 0xD9);
22
23 // MenuItem
24 const SkColor kFocusedMenuItemBackgroundColor = SkColorSetARGB(13, 0, 0, 0);
25 const SkColor kHoverMenuItemBackgroundColor = SkColorSetRGB(204, 204, 204);
26
27 // MenuButton
28 const SkColor kEnabledMenuButtonBorderColor = SkColorSetARGB(36, 0, 0, 0);
29 const SkColor kFocusedMenuButtonBorderColor = SkColorSetARGB(72, 0, 0, 0);
30 const SkColor kHoverMenuButtonBorderColor = SkColorSetARGB(72, 0, 0, 0);
31
32 // Button:
33 const SkColor kButtonBackgroundColor = SkColorSetRGB(0xde, 0xde, 0xde);
34 const SkColor kButtonEnabledColor = SkColorSetRGB(6, 45, 117);
35 const SkColor kButtonDisabledColor = SkColorSetRGB(161, 161, 146);
36 const SkColor kButtonHighlightColor = SkColorSetARGB(200, 255, 255, 255);
37 const SkColor kButtonHoverColor = kButtonEnabledColor;
38
39 }  // namespace
40
41 namespace ui {
42
43 // static
44 NativeTheme* NativeTheme::instance() {
45   return NativeThemeGtk::instance();
46 }
47
48 // static
49 NativeThemeGtk* NativeThemeGtk::instance() {
50   CR_DEFINE_STATIC_LOCAL(NativeThemeGtk, s_native_theme, ());
51   return &s_native_theme;
52 }
53
54 SkColor NativeThemeGtk::GetSystemColor(ColorId color_id) const {
55   switch (color_id) {
56     case kColorId_DialogBackground:
57       // TODO(benrg): This code used to call gtk_widget_get_style() on the
58       // widget being styled. After refactoring, that widget is not available
59       // and we have to call gtk_widget_get_default_style(). Unfortunately,
60       // it turns out that this breaks everything (chromium bug 105609,
61       // chromium-os bug 23461). Need to figure out the right thing and do it.
62       return gfx::GdkColorToSkColor(
63                      gtk_widget_get_default_style()->bg[GTK_STATE_NORMAL]);
64
65     // FocusableBorder:
66     case kColorId_FocusedBorderColor:
67       return kFocusedBorderColor;
68     case kColorId_UnfocusedBorderColor:
69       return kUnfocusedBorderColor;
70
71     // MenuItem
72     case kColorId_FocusedMenuItemBackgroundColor:
73       return kFocusedMenuItemBackgroundColor;
74     case kColorId_HoverMenuItemBackgroundColor:
75       return kHoverMenuItemBackgroundColor;
76     case kColorId_EnabledMenuButtonBorderColor:
77       return kEnabledMenuButtonBorderColor;
78     case kColorId_FocusedMenuButtonBorderColor:
79       return kFocusedMenuButtonBorderColor;
80     case kColorId_HoverMenuButtonBorderColor:
81       return kHoverMenuButtonBorderColor;
82
83     // Button:
84     case kColorId_ButtonBackgroundColor:
85       return kButtonBackgroundColor;
86     case kColorId_ButtonEnabledColor:
87       return kButtonEnabledColor;
88     case kColorId_ButtonDisabledColor:
89       return kButtonDisabledColor;
90     case kColorId_ButtonHighlightColor:
91       return kButtonHighlightColor;
92     case kColorId_ButtonHoverColor:
93       return kButtonHoverColor;
94
95     default:
96       NOTREACHED() << "Invalid color_id: " << color_id;
97       break;
98   }
99   return kInvalidColorIdColor;
100 }
101
102 NativeThemeGtk::NativeThemeGtk() {
103 }
104
105 NativeThemeGtk::~NativeThemeGtk() {
106 }
107
108 }  // namespace ui