12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/libgtk2ui/native_theme_gtk2.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <gtk/gtk.h> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/libgtk2ui/chrome_gtk_menu_subclasses.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/libgtk2ui/gtk2_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/color_utils.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/path.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size.h" 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "ui/gfx/skia_util.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/common_theme.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Theme colors returned by GetSystemColor(). 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst GdkColor kURLTextColor = GDK_COLOR_RGB(0x00, 0x88, 0x00); 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochGdkColor GdkAlphaBlend(GdkColor foreground, 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GdkColor background, 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SkAlpha alpha) { 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return libgtk2ui::SkColorToGdkColor( 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::AlphaBlend(libgtk2ui::GdkColorToSkColor(foreground), 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch libgtk2ui::GdkColorToSkColor(background), alpha)); 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Generates the normal URL color, a green color used in unhighlighted URL 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// text. It is a mix of |kURLTextColor| and the current text color. Unlike the 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// selected text color, it is more important to match the qualities of the 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// foreground typeface color instead of taking the background into account. 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochGdkColor NormalURLColor(GdkColor foreground) { 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL fg_hsl; 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::SkColorToHSL(libgtk2ui::GdkColorToSkColor(foreground), &fg_hsl); 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL hue_hsl; 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::SkColorToHSL(libgtk2ui::GdkColorToSkColor(kURLTextColor), 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &hue_hsl); 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Only allow colors that have a fair amount of saturation in them (color vs 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // white). This means that our output color will always be fairly green. 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double s = std::max(0.5, fg_hsl.s); 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure the luminance is at least as bright as the |kURLTextColor| green 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // would be if we were to use that. 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double l; 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (fg_hsl.l < hue_hsl.l) 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch l = hue_hsl.l; 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch else 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch l = (fg_hsl.l + hue_hsl.l) / 2; 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL output = { hue_hsl.h, s, l }; 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return libgtk2ui::SkColorToGdkColor(color_utils::HSLToSkColor(output, 255)); 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Generates the selected URL color, a green color used on URL text in the 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// currently highlighted entry in the autocomplete popup. It's a mix of 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// |kURLTextColor|, the current text color, and the background color (the 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// select highlight). It is more important to contrast with the background 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// saturation than to look exactly like the foreground color. 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochGdkColor SelectedURLColor(GdkColor foreground, GdkColor background) { 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL fg_hsl; 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::SkColorToHSL(libgtk2ui::GdkColorToSkColor(foreground), 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &fg_hsl); 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL bg_hsl; 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::SkColorToHSL(libgtk2ui::GdkColorToSkColor(background), 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &bg_hsl); 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL hue_hsl; 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::SkColorToHSL(libgtk2ui::GdkColorToSkColor(kURLTextColor), 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &hue_hsl); 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The saturation of the text should be opposite of the background, clamped 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // to 0.2-0.8. We make sure it's greater than 0.2 so there's some color, but 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // less than 0.8 so it's not the oversaturated neon-color. 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double opposite_s = 1 - bg_hsl.s; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double s = std::max(0.2, std::min(0.8, opposite_s)); 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The luminance should match the luminance of the foreground text. Again, 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // we clamp so as to have at some amount of color (green) in the text. 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double opposite_l = fg_hsl.l; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch double l = std::max(0.1, std::min(0.9, opposite_l)); 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch color_utils::HSL output = { hue_hsl.h, s, l }; 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return libgtk2ui::SkColorToGdkColor(color_utils::HSLToSkColor(output, 255)); 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace libgtk2ui { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NativeThemeGtk2* NativeThemeGtk2::instance() { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CR_DEFINE_STATIC_LOCAL(NativeThemeGtk2, s_native_theme, ()); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return &s_native_theme; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NativeThemeGtk2::NativeThemeGtk2() 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : fake_window_(NULL), 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fake_tooltip_(NULL), 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_menu_item_(NULL) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NativeThemeGtk2::~NativeThemeGtk2() { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (fake_window_) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gtk_widget_destroy(fake_window_); 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (fake_tooltip_) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gtk_widget_destroy(fake_tooltip_); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_entry_.Destroy(); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_label_.Destroy(); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_button_.Destroy(); 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) fake_tree_.Destroy(); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_menu_.Destroy(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)gfx::Size NativeThemeGtk2::GetPartSize(Part part, 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) State state, 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const ExtraParams& extra) const { 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (part == kComboboxArrow) 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return gfx::Size(12, 12); 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ui::NativeThemeBase::GetPartSize(part, state, extra); 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void NativeThemeGtk2::Paint(SkCanvas* canvas, 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Part part, 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) State state, 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& rect, 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const ExtraParams& extra) const { 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (rect.IsEmpty()) 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switch (part) { 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case kComboboxArrow: 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PaintComboboxArrow(canvas, GetGtkState(state), rect); 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default: 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NativeThemeBase::Paint(canvas, part, state, rect, extra); 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SkColor NativeThemeGtk2::GetSystemColor(ColorId color_id) const { 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (color_id == kColorId_BlueButtonShadowColor) 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return SK_ColorTRANSPARENT; 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GdkColorToSkColor(GetSystemGdkColor(color_id)); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NativeThemeGtk2::PaintMenuPopupBackground( 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkCanvas* canvas, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size, 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MenuBackgroundExtraParams& menu_background) const { 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (menu_background.corner_radius > 0) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkPaint paint; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) paint.setStyle(SkPaint::kFill_Style); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) paint.setFlags(SkPaint::kAntiAlias_Flag); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) paint.setColor(GetSystemColor(kColorId_MenuBackgroundColor)); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Path path; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkRect rect = SkRect::MakeWH(SkIntToScalar(size.width()), 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkIntToScalar(size.height())); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkScalar radius = SkIntToScalar(menu_background.corner_radius); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkScalar radii[8] = {radius, radius, radius, radius, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radius, radius, radius, radius}; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path.addRoundRect(rect, radii); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) canvas->drawPath(path, paint); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) canvas->drawColor(GetSystemColor(kColorId_MenuBackgroundColor), 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkXfermode::kSrc_Mode); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 185b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void NativeThemeGtk2::PaintMenuItemBackground( 186b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SkCanvas* canvas, 187b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) State state, 188b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const gfx::Rect& rect, 189b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const MenuListExtraParams& menu_list) const { 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SkColor color; 191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SkPaint paint; 192b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) switch (state) { 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) case NativeTheme::kNormal: 194b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) case NativeTheme::kDisabled: 195b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) color = GetSystemColor(NativeTheme::kColorId_MenuBackgroundColor); 196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) paint.setColor(color); 197b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) break; 198b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) case NativeTheme::kHovered: 199b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) color = GetSystemColor( 200b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) NativeTheme::kColorId_FocusedMenuItemBackgroundColor); 201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) paint.setColor(color); 202b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) break; 203b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) default: 204b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) NOTREACHED() << "Invalid state " << state; 205b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) break; 206b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 207b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) canvas->drawRect(gfx::RectToSkRect(rect), paint); 208b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 209b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GdkColor NativeThemeGtk2::GetSystemGdkColor(ColorId color_id) const { 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (color_id) { 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Windows 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_WindowBackground: 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindowStyle()->bg[GTK_STATE_NORMAL]; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dialogs 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_DialogBackground: 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindowStyle()->bg[GTK_STATE_NORMAL]; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FocusableBorder 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_FocusedBorderColor: 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->bg[GTK_STATE_SELECTED]; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_UnfocusedBorderColor: 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->text_aa[GTK_STATE_NORMAL]; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // MenuItem 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_EnabledMenuItemForegroundColor: 22823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case kColorId_DisabledEmphasizedMenuItemForegroundColor: 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuItemStyle()->text[GTK_STATE_NORMAL]; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_DisabledMenuItemForegroundColor: 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuItemStyle()->text[GTK_STATE_INSENSITIVE]; 232b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) case kColorId_SelectedMenuItemForegroundColor: 233b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return GetMenuItemStyle()->text[GTK_STATE_SELECTED]; 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_FocusedMenuItemBackgroundColor: 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuItemStyle()->bg[GTK_STATE_SELECTED]; 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_HoverMenuItemBackgroundColor: 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuItemStyle()->bg[GTK_STATE_PRELIGHT]; 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_FocusedMenuButtonBorderColor: 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->bg[GTK_STATE_NORMAL]; 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_HoverMenuButtonBorderColor: 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->text_aa[GTK_STATE_PRELIGHT]; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_MenuBorderColor: 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_EnabledMenuButtonBorderColor: 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_MenuSeparatorColor: { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuItemStyle()->text[GTK_STATE_INSENSITIVE]; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_MenuBackgroundColor: 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetMenuStyle()->bg[GTK_STATE_NORMAL]; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Label 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_LabelEnabledColor: 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetLabelStyle()->text[GTK_STATE_NORMAL]; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_LabelDisabledColor: 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetLabelStyle()->text[GTK_STATE_INSENSITIVE]; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_LabelBackgroundColor: 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindowStyle()->bg[GTK_STATE_NORMAL]; 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Button 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case kColorId_ButtonBackgroundColor: 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetButtonStyle()->bg[GTK_STATE_NORMAL]; 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case kColorId_ButtonEnabledColor: 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case kColorId_BlueButtonEnabledColor: 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetButtonStyle()->text[GTK_STATE_NORMAL]; 26490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case kColorId_ButtonDisabledColor: 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case kColorId_BlueButtonDisabledColor: 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetButtonStyle()->text[GTK_STATE_INSENSITIVE]; 26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case kColorId_ButtonHighlightColor: 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetButtonStyle()->base[GTK_STATE_SELECTED]; 26990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case kColorId_ButtonHoverColor: 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case kColorId_BlueButtonHoverColor: 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetButtonStyle()->text[GTK_STATE_PRELIGHT]; 2720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case kColorId_ButtonHoverBackgroundColor: 2730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return GetButtonStyle()->bg[GTK_STATE_PRELIGHT]; 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case kColorId_BlueButtonPressedColor: 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return GetButtonStyle()->text[GTK_STATE_ACTIVE]; 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case kColorId_BlueButtonShadowColor: 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should be handled in GetSystemColor(). 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NOTREACHED(); 27946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GetButtonStyle()->text[GTK_STATE_NORMAL]; 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Textfield 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldDefaultColor: 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->text[GTK_STATE_NORMAL]; 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldDefaultBackground: 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->base[GTK_STATE_NORMAL]; 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldReadOnlyColor: 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->text[GTK_STATE_INSENSITIVE]; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldReadOnlyBackground: 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->base[GTK_STATE_INSENSITIVE]; 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldSelectionColor: 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->text[GTK_STATE_SELECTED]; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kColorId_TextfieldSelectionBackgroundFocused: 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetEntryStyle()->base[GTK_STATE_SELECTED]; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Tooltips 2965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case kColorId_TooltipBackground: 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetTooltipStyle()->bg[GTK_STATE_NORMAL]; 298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case kColorId_TooltipText: 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetTooltipStyle()->fg[GTK_STATE_NORMAL]; 3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Trees and Tables (implemented on GTK using the same class) 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableBackground: 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeBackground: 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->bg[GTK_STATE_NORMAL]; 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableText: 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeText: 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->text[GTK_STATE_NORMAL]; 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableSelectedText: 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableSelectedTextUnfocused: 310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeSelectedText: 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeSelectedTextUnfocused: 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->text[GTK_STATE_SELECTED]; 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableSelectionBackgroundFocused: 314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableSelectionBackgroundUnfocused: 315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeSelectionBackgroundFocused: 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeSelectionBackgroundUnfocused: 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->bg[GTK_STATE_SELECTED]; 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TreeArrow: 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->fg[GTK_STATE_NORMAL]; 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case kColorId_TableGroupingIndicatorColor: 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTreeStyle()->text_aa[GTK_STATE_NORMAL]; 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Results Table 324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableNormalBackground: 325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GetEntryStyle()->base[GTK_STATE_NORMAL]; 326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableHoveredBackground: { 327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* entry_style = GetEntryStyle(); 328c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend( 329c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->base[GTK_STATE_NORMAL], 330c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->base[GTK_STATE_SELECTED], 0x80); 331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableSelectedBackground: 333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GetEntryStyle()->base[GTK_STATE_SELECTED]; 334c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableNormalText: 335c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableHoveredText: 336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GetEntryStyle()->text[GTK_STATE_NORMAL]; 337c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableSelectedText: 338c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GetEntryStyle()->text[GTK_STATE_SELECTED]; 339c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableNormalDimmedText: 340c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableHoveredDimmedText: { 341c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* entry_style = GetEntryStyle(); 342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend( 343c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->text[GTK_STATE_NORMAL], 344c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->base[GTK_STATE_NORMAL], 0x80); 345c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableSelectedDimmedText: { 347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* entry_style = GetEntryStyle(); 348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend( 349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->text[GTK_STATE_SELECTED], 350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->base[GTK_STATE_NORMAL], 0x80); 351c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableNormalUrl: 353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableHoveredUrl: { 354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return NormalURLColor(GetEntryStyle()->text[GTK_STATE_NORMAL]); 355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableSelectedUrl: { 357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* entry_style = GetEntryStyle(); 358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return SelectedURLColor(entry_style->text[GTK_STATE_SELECTED], 359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch entry_style->base[GTK_STATE_SELECTED]); 360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableNormalDivider: { 362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* win_style = GetWindowStyle(); 363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend(win_style->text[GTK_STATE_NORMAL], 364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch win_style->bg[GTK_STATE_NORMAL], 0x34); 365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableHoveredDivider: { 367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* win_style = GetWindowStyle(); 368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend(win_style->text[GTK_STATE_PRELIGHT], 369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch win_style->bg[GTK_STATE_PRELIGHT], 0x34); 370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case kColorId_ResultsTableSelectedDivider: { 372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GtkStyle* win_style = GetWindowStyle(); 373c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return GdkAlphaBlend(win_style->text[GTK_STATE_SELECTED], 374c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch win_style->bg[GTK_STATE_SELECTED], 0x34); 375c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case kColorId_NumColors: 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return SkColorToGdkColor(kInvalidColorIdColor); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkWidget* NativeThemeGtk2::GetRealizedWindow() const { 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_window_) { 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gtk_widget_realize(fake_window_); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return fake_window_; 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetWindowStyle() const { 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(GetRealizedWindow()); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetEntryStyle() const { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_entry_.get()) { 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_entry_.Own(gtk_entry_new()); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 401f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The fake entry needs to be in the window so it can be realized so we can 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // use the computed parts of the style. 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gtk_container_add(GTK_CONTAINER(GetRealizedWindow()), fake_entry_.get()); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gtk_widget_realize(fake_entry_.get()); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(fake_entry_.get()); 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetLabelStyle() const { 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_label_.get()) 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_label_.Own(gtk_label_new("")); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(fake_label_.get()); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetButtonStyle() const { 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_button_.get()) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_button_.Own(gtk_button_new()); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(fake_button_.get()); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)GtkStyle* NativeThemeGtk2::GetTreeStyle() const { 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!fake_tree_.get()) 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) fake_tree_.Own(gtk_tree_view_new()); 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gtk_rc_get_style(fake_tree_.get()); 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GtkStyle* NativeThemeGtk2::GetTooltipStyle() const { 431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!fake_tooltip_) { 432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fake_tooltip_ = gtk_window_new(GTK_WINDOW_TOPLEVEL); 433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gtk_widget_set_name(fake_tooltip_, "gtk-tooltip"); 434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gtk_widget_realize(fake_tooltip_); 435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return gtk_rc_get_style(fake_tooltip_); 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetMenuStyle() const { 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_menu_.get()) 44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) fake_menu_.Own(gtk_custom_menu_new()); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(fake_menu_.get()); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GtkStyle* NativeThemeGtk2::GetMenuItemStyle() const { 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_menu_item_) { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!fake_menu_.get()) 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fake_menu_.Own(gtk_custom_menu_new()); 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fake_menu_item_ = gtk_custom_menu_item_new(); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gtk_menu_shell_append(GTK_MENU_SHELL(fake_menu_.get()), fake_menu_item_); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gtk_rc_get_style(fake_menu_item_); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void NativeThemeGtk2::PaintComboboxArrow(SkCanvas* canvas, 458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GtkStateType state, 459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& rect) const { 460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GdkPixmap* pm = gdk_pixmap_new(gtk_widget_get_window(GetRealizedWindow()), 461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) rect.width(), 462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) rect.height(), 463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) -1); 464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Paint the background. 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gtk_paint_flat_box(GetWindowStyle(), 466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pm, 467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) state, 468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GTK_SHADOW_NONE, 469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetRealizedWindow(), 471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 0, 0, rect.width(), rect.height()); 472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gtk_paint_arrow(GetWindowStyle(), 473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pm, 474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) state, 475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GTK_SHADOW_NONE, 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetRealizedWindow(), 478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GTK_ARROW_DOWN, 480f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 481f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 0, rect.width(), rect.height()); 482f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GdkPixbuf* pb = gdk_pixbuf_get_from_drawable(NULL, 483f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pm, 484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gdk_drawable_get_colormap(pm), 485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 0, 486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 0, 487f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) rect.width(), rect.height()); 488f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkBitmap arrow = GdkPixbufToImageSkia(pb); 489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) canvas->drawBitmap(arrow, rect.x(), rect.y()); 490f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) g_object_unref(pb); 492f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) g_object_unref(pm); 493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 494f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace libgtk2ui 496