Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(316)

Unified Diff: chrome/browser/ui/libgtkui/native_theme_gtk2.cc

Issue 2453243002: Gtk3 UI: Rename files in libgtkui containing gtk2 in their name (Closed)
Patch Set: Fix git cl format mistake Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/libgtkui/native_theme_gtk2.h ('k') | chrome/browser/ui/libgtkui/print_dialog_gtk.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/libgtkui/native_theme_gtk2.cc
diff --git a/chrome/browser/ui/libgtkui/native_theme_gtk2.cc b/chrome/browser/ui/libgtkui/native_theme_gtk2.cc
deleted file mode 100644
index fa179c4024b26d21a5a99230872997bec2a4d28b..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/libgtkui/native_theme_gtk2.cc
+++ /dev/null
@@ -1,574 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/libgtkui/native_theme_gtk2.h"
-
-#include <gtk/gtk.h>
-
-#include "chrome/browser/ui/libgtkui/chrome_gtk_frame.h"
-#include "chrome/browser/ui/libgtkui/chrome_gtk_menu_subclasses.h"
-#include "chrome/browser/ui/libgtkui/gtk2_ui.h"
-#include "chrome/browser/ui/libgtkui/gtk2_util.h"
-#include "chrome/browser/ui/libgtkui/skia_utils_gtk2.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/color_palette.h"
-#include "ui/gfx/color_utils.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/geometry/size.h"
-#include "ui/gfx/path.h"
-#include "ui/gfx/skia_util.h"
-#include "ui/native_theme/common_theme.h"
-#include "ui/native_theme/native_theme_aura.h"
-#include "ui/native_theme/native_theme_dark_aura.h"
-
-namespace libgtkui {
-
-namespace {
-
-// Theme colors returned by GetSystemColor().
-const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128);
-const SkColor kURLTextColor = SkColorSetRGB(0x0b, 0x80, 0x43);
-
-// Generates the normal URL color, a green color used in unhighlighted URL
-// text. It is a mix of |kURLTextColor| and the current text color. Unlike the
-// selected text color, it is more important to match the qualities of the
-// foreground typeface color instead of taking the background into account.
-SkColor NormalURLColor(SkColor foreground) {
- color_utils::HSL fg_hsl, hue_hsl;
- color_utils::SkColorToHSL(foreground, &fg_hsl);
- color_utils::SkColorToHSL(kURLTextColor, &hue_hsl);
-
- // Only allow colors that have a fair amount of saturation in them (color vs
- // white). This means that our output color will always be fairly green.
- double s = std::max(0.5, fg_hsl.s);
-
- // Make sure the luminance is at least as bright as the |kURLTextColor| green
- // would be if we were to use that.
- double l;
- if (fg_hsl.l < hue_hsl.l)
- l = hue_hsl.l;
- else
- l = (fg_hsl.l + hue_hsl.l) / 2;
-
- color_utils::HSL output = { hue_hsl.h, s, l };
- return color_utils::HSLToSkColor(output, 255);
-}
-
-// Generates the selected URL color, a green color used on URL text in the
-// currently highlighted entry in the autocomplete popup. It's a mix of
-// |kURLTextColor|, the current text color, and the background color (the
-// select highlight). It is more important to contrast with the background
-// saturation than to look exactly like the foreground color.
-SkColor SelectedURLColor(SkColor foreground, SkColor background) {
- color_utils::HSL fg_hsl, bg_hsl, hue_hsl;
- color_utils::SkColorToHSL(foreground, &fg_hsl);
- color_utils::SkColorToHSL(background, &bg_hsl);
- color_utils::SkColorToHSL(kURLTextColor, &hue_hsl);
-
- // The saturation of the text should be opposite of the background, clamped
- // to 0.2-0.8. We make sure it's greater than 0.2 so there's some color, but
- // less than 0.8 so it's not the oversaturated neon-color.
- double opposite_s = 1 - bg_hsl.s;
- double s = std::max(0.2, std::min(0.8, opposite_s));
-
- // The luminance should match the luminance of the foreground text. Again,
- // we clamp so as to have at some amount of color (green) in the text.
- double opposite_l = fg_hsl.l;
- double l = std::max(0.1, std::min(0.9, opposite_l));
-
- color_utils::HSL output = { hue_hsl.h, s, l };
- return color_utils::HSLToSkColor(output, 255);
-}
-
-enum WidgetState {
- NORMAL = 0,
- ACTIVE = 1,
- PRELIGHT = 2,
- SELECTED = 3,
- INSENSITIVE = 4,
-};
-
-#if GTK_MAJOR_VERSION == 2
-// Same order as enum WidgetState above
-const GtkStateType stateMap[] = {
- GTK_STATE_NORMAL,
- GTK_STATE_ACTIVE,
- GTK_STATE_PRELIGHT,
- GTK_STATE_SELECTED,
- GTK_STATE_INSENSITIVE,
-};
-
-SkColor GetFGColor(GtkWidget* widget, WidgetState state) {
- return GdkColorToSkColor(gtk_rc_get_style(widget)->fg[stateMap[state]]);
-}
-SkColor GetBGColor(GtkWidget* widget, WidgetState state) {
- return GdkColorToSkColor(gtk_rc_get_style(widget)->bg[stateMap[state]]);
-}
-
-SkColor GetTextColor(GtkWidget* widget, WidgetState state) {
- return GdkColorToSkColor(gtk_rc_get_style(widget)->text[stateMap[state]]);
-}
-SkColor GetTextAAColor(GtkWidget* widget, WidgetState state) {
- return GdkColorToSkColor(gtk_rc_get_style(widget)->text_aa[stateMap[state]]);
-}
-SkColor GetBaseColor(GtkWidget* widget, WidgetState state) {
- return GdkColorToSkColor(gtk_rc_get_style(widget)->base[stateMap[state]]);
-}
-
-#else
-// Same order as enum WidgetState above
-const GtkStateFlags stateMap[] = {
- GTK_STATE_FLAG_NORMAL,
- GTK_STATE_FLAG_ACTIVE,
- GTK_STATE_FLAG_PRELIGHT,
- GTK_STATE_FLAG_SELECTED,
- GTK_STATE_FLAG_INSENSITIVE,
-};
-
-SkColor GetFGColor(GtkWidget* widget, WidgetState state) {
- GdkRGBA color;
- gtk_style_context_get_color(
- gtk_widget_get_style_context(widget), stateMap[state], &color);
- return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255);
-}
-SkColor GetBGColor(GtkWidget* widget, WidgetState state) {
- GdkRGBA color;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- gtk_style_context_get_background_color(
- gtk_widget_get_style_context(widget), stateMap[state], &color);
- G_GNUC_END_IGNORE_DEPRECATIONS
-
- // Hack for default color
- if (color.alpha == 0.0)
- color = {1, 1, 1, 1};
-
- return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255);
-}
-
-SkColor GetTextColor(GtkWidget* widget, WidgetState state) {
- return GetFGColor(widget, state);
-}
-SkColor GetTextAAColor(GtkWidget* widget, WidgetState state) {
- return GetFGColor(widget, state);
-}
-SkColor GetBaseColor(GtkWidget* widget, WidgetState state) {
- return GetBGColor(widget, state);
-}
-
-#endif
-
-} // namespace
-
-// static
-NativeThemeGtk2* NativeThemeGtk2::instance() {
- CR_DEFINE_STATIC_LOCAL(NativeThemeGtk2, s_native_theme, ());
- return &s_native_theme;
-}
-
-// Constructors automatically called
-NativeThemeGtk2::NativeThemeGtk2() {}
-// This doesn't actually get called
-NativeThemeGtk2::~NativeThemeGtk2() {}
-
-void NativeThemeGtk2::PaintMenuPopupBackground(
- SkCanvas* canvas,
- const gfx::Size& size,
- const MenuBackgroundExtraParams& menu_background) const {
- if (menu_background.corner_radius > 0) {
- SkPaint paint;
- paint.setStyle(SkPaint::kFill_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
- paint.setColor(GetSystemColor(kColorId_MenuBackgroundColor));
-
- gfx::Path path;
- SkRect rect = SkRect::MakeWH(SkIntToScalar(size.width()),
- SkIntToScalar(size.height()));
- SkScalar radius = SkIntToScalar(menu_background.corner_radius);
- SkScalar radii[8] = {radius, radius, radius, radius,
- radius, radius, radius, radius};
- path.addRoundRect(rect, radii);
-
- canvas->drawPath(path, paint);
- } else {
- canvas->drawColor(GetSystemColor(kColorId_MenuBackgroundColor),
- SkBlendMode::kSrc);
- }
-}
-
-void NativeThemeGtk2::PaintMenuItemBackground(
- SkCanvas* canvas,
- State state,
- const gfx::Rect& rect,
- const MenuItemExtraParams& menu_item) const {
- SkColor color;
- SkPaint paint;
- switch (state) {
- case NativeTheme::kNormal:
- case NativeTheme::kDisabled:
- color = GetSystemColor(NativeTheme::kColorId_MenuBackgroundColor);
- paint.setColor(color);
- break;
- case NativeTheme::kHovered:
- color = GetSystemColor(
- NativeTheme::kColorId_FocusedMenuItemBackgroundColor);
- paint.setColor(color);
- break;
- default:
- NOTREACHED() << "Invalid state " << state;
- break;
- }
- if (menu_item.corner_radius > 0) {
- const SkScalar radius = SkIntToScalar(menu_item.corner_radius);
- canvas->drawRoundRect(gfx::RectToSkRect(rect), radius, radius, paint);
- return;
- }
- canvas->drawRect(gfx::RectToSkRect(rect), paint);
-}
-
-SkColor NativeThemeGtk2::GetSystemColor(ColorId color_id) const {
- const SkColor kPositiveTextColor = SkColorSetRGB(0x0b, 0x80, 0x43);
- const SkColor kNegativeTextColor = SkColorSetRGB(0xc5, 0x39, 0x29);
-
- switch (color_id) {
- // Windows
- case kColorId_WindowBackground:
- return GetBGColor(GetWindow(), SELECTED);
-
- // Dialogs
- case kColorId_DialogBackground:
- case kColorId_BubbleBackground:
- return GetBGColor(GetWindow(), NORMAL);
-
- // FocusableBorder
- case kColorId_FocusedBorderColor:
- return GetBGColor(GetEntry(), SELECTED);
- case kColorId_UnfocusedBorderColor:
- return GetTextAAColor(GetEntry(), NORMAL);
-
- // MenuItem
- case kColorId_SelectedMenuItemForegroundColor:
- return GetTextColor(GetMenuItem(), SELECTED);
- case kColorId_FocusedMenuItemBackgroundColor:
- return GetBGColor(GetMenuItem(), SELECTED);
-
- case kColorId_EnabledMenuItemForegroundColor:
- return GetTextColor(GetMenuItem(), NORMAL);
- case kColorId_DisabledMenuItemForegroundColor:
- return GetTextColor(GetMenuItem(), INSENSITIVE);
- case kColorId_FocusedMenuButtonBorderColor:
- return GetBGColor(GetEntry(), NORMAL);
- case kColorId_HoverMenuButtonBorderColor:
- return GetTextAAColor(GetEntry(), PRELIGHT);
- case kColorId_MenuBorderColor:
- case kColorId_EnabledMenuButtonBorderColor:
- case kColorId_MenuSeparatorColor: {
- return GetTextColor(GetMenuItem(), INSENSITIVE);
- }
- case kColorId_MenuBackgroundColor:
- return GetBGColor(GetMenu(), NORMAL);
-
- // Label
- case kColorId_LabelEnabledColor:
- return GetTextColor(GetEntry(), NORMAL);
- case kColorId_LabelDisabledColor:
- return GetTextColor(GetLabel(), INSENSITIVE);
-
- // Link
- case kColorId_LinkDisabled:
- return SkColorSetA(GetSystemColor(kColorId_LinkEnabled), 0xBB);
- case kColorId_LinkEnabled: {
- SkColor link_color = SK_ColorTRANSPARENT;
- GetChromeStyleColor("link-color", &link_color);
- if (link_color != SK_ColorTRANSPARENT)
- return link_color;
- // Default color comes from gtklinkbutton.c.
- return SkColorSetRGB(0x00, 0x00, 0xEE);
- }
- case kColorId_LinkPressed:
- return SK_ColorRED;
-
- // Button
- case kColorId_ButtonEnabledColor:
- return GetTextColor(GetButton(), NORMAL);
- case kColorId_BlueButtonEnabledColor:
- return GetTextColor(GetBlueButton(), NORMAL);
- case kColorId_ButtonDisabledColor:
- return GetTextColor(GetButton(), INSENSITIVE);
- case kColorId_BlueButtonDisabledColor:
- return GetTextColor(GetBlueButton(), INSENSITIVE);
- case kColorId_ButtonHoverColor:
- return GetTextColor(GetButton(), PRELIGHT);
- case kColorId_BlueButtonHoverColor:
- return GetTextColor(GetBlueButton(), PRELIGHT);
- case kColorId_BlueButtonPressedColor:
- return GetTextColor(GetBlueButton(), ACTIVE);
- case kColorId_BlueButtonShadowColor:
- return SK_ColorTRANSPARENT;
- case kColorId_ProminentButtonColor:
- return GetSystemColor(kColorId_LinkEnabled);
- case kColorId_TextOnProminentButtonColor:
- return GetTextColor(GetLabel(), SELECTED);
- case kColorId_ButtonPressedShade:
- return SK_ColorTRANSPARENT;
-
- // Textfield
- case kColorId_TextfieldDefaultColor:
- return GetTextColor(GetEntry(), NORMAL);
- case kColorId_TextfieldDefaultBackground:
- return GetBaseColor(GetEntry(), NORMAL);
-
-#if GTK_MAJOR_VERSION == 2
- case kColorId_TextfieldReadOnlyColor:
- return GetTextColor(GetEntry(), ACTIVE);
- case kColorId_TextfieldReadOnlyBackground:
- return GetBaseColor(GetEntry(), ACTIVE);
- case kColorId_TextfieldSelectionColor:
- return GetTextColor(GetEntry(), SELECTED);
- case kColorId_TextfieldSelectionBackgroundFocused:
- return GetBaseColor(GetEntry(), SELECTED);
-#else
- case kColorId_TextfieldReadOnlyColor:
- return GetTextColor(GetEntry(), SELECTED);
- case kColorId_TextfieldReadOnlyBackground:
- return GetBaseColor(GetEntry(), SELECTED);
- case kColorId_TextfieldSelectionColor:
- return GetTextColor(GetLabel(), SELECTED);
- case kColorId_TextfieldSelectionBackgroundFocused:
- return GetBaseColor(GetLabel(), SELECTED);
-#endif
-
-
- // Tooltips
- case kColorId_TooltipBackground:
- return GetBGColor(GetTooltip(), NORMAL);
- case kColorId_TooltipText:
- return GetFGColor(GetTooltip(), NORMAL);
-
- // Trees and Tables (implemented on GTK using the same class)
- case kColorId_TableBackground:
- case kColorId_TreeBackground:
- return GetBGColor(GetTree(), NORMAL);
- case kColorId_TableText:
- case kColorId_TreeText:
- return GetTextColor(GetTree(), NORMAL);
- case kColorId_TableSelectedText:
- case kColorId_TableSelectedTextUnfocused:
- case kColorId_TreeSelectedText:
- case kColorId_TreeSelectedTextUnfocused:
- return GetTextColor(GetTree(), SELECTED);
- case kColorId_TableSelectionBackgroundFocused:
- case kColorId_TableSelectionBackgroundUnfocused:
- case kColorId_TreeSelectionBackgroundFocused:
- case kColorId_TreeSelectionBackgroundUnfocused:
- return GetBGColor(GetTree(), SELECTED);
- case kColorId_TreeArrow:
- return GetFGColor(GetTree(), NORMAL);
- case kColorId_TableGroupingIndicatorColor:
- return GetTextAAColor(GetTree(), NORMAL);
-
- // Results Table
- case kColorId_ResultsTableNormalBackground:
- return GetSystemColor(kColorId_TextfieldDefaultBackground);
- case kColorId_ResultsTableHoveredBackground:
- return color_utils::AlphaBlend(
- GetSystemColor(kColorId_TextfieldDefaultBackground),
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused),
- 0x80);
- case kColorId_ResultsTableSelectedBackground:
- return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused);
- case kColorId_ResultsTableNormalText:
- case kColorId_ResultsTableHoveredText:
- return GetSystemColor(kColorId_TextfieldDefaultColor);
- case kColorId_ResultsTableSelectedText:
- return GetSystemColor(kColorId_TextfieldSelectionColor);
- case kColorId_ResultsTableNormalDimmedText:
- case kColorId_ResultsTableHoveredDimmedText:
- return color_utils::AlphaBlend(
- GetSystemColor(kColorId_TextfieldDefaultColor),
- GetSystemColor(kColorId_TextfieldDefaultBackground),
- 0x80);
- case kColorId_ResultsTableSelectedDimmedText:
- return color_utils::AlphaBlend(
- GetSystemColor(kColorId_TextfieldSelectionColor),
- GetSystemColor(kColorId_TextfieldDefaultBackground),
- 0x80);
- case kColorId_ResultsTableNormalUrl:
- case kColorId_ResultsTableHoveredUrl:
- return NormalURLColor(GetSystemColor(kColorId_TextfieldDefaultColor));
-
- case kColorId_ResultsTableSelectedUrl:
- return SelectedURLColor(
- GetSystemColor(kColorId_TextfieldSelectionColor),
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused));
-
- case kColorId_ResultsTablePositiveText: {
- return color_utils::GetReadableColor(kPositiveTextColor,
- GetBaseColor(GetEntry(), NORMAL));
- }
- case kColorId_ResultsTablePositiveHoveredText: {
- return color_utils::GetReadableColor(kPositiveTextColor,
- GetBaseColor(GetEntry(), PRELIGHT));
- }
- case kColorId_ResultsTablePositiveSelectedText: {
- return color_utils::GetReadableColor(kPositiveTextColor,
- GetBaseColor(GetEntry(), SELECTED));
- }
- case kColorId_ResultsTableNegativeText: {
- return color_utils::GetReadableColor(kNegativeTextColor,
- GetBaseColor(GetEntry(), NORMAL));
- }
- case kColorId_ResultsTableNegativeHoveredText: {
- return color_utils::GetReadableColor(kNegativeTextColor,
- GetBaseColor(GetEntry(), PRELIGHT));
- }
- case kColorId_ResultsTableNegativeSelectedText: {
- return color_utils::GetReadableColor(kNegativeTextColor,
- GetBaseColor(GetEntry(), SELECTED));
- }
-
- // Throbber
- case kColorId_ThrobberSpinningColor:
- case kColorId_ThrobberLightColor:
- return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused);
-
- case kColorId_ThrobberWaitingColor:
- return color_utils::AlphaBlend(
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused),
- GetBGColor(GetWindow(), NORMAL),
- 0x80);
-
- // Alert icons
- // Just fall back to the same colors as Aura.
- case kColorId_AlertSeverityLow:
- case kColorId_AlertSeverityMedium:
- case kColorId_AlertSeverityHigh: {
- ui::NativeTheme* fallback_theme =
- color_utils::IsDark(GetTextColor(GetEntry(), NORMAL))
- ? ui::NativeThemeAura::instance()
- : ui::NativeThemeDarkAura::instance();
- return fallback_theme->GetSystemColor(color_id);
- }
-
- case kColorId_NumColors:
- NOTREACHED();
- break;
- }
-
- return kInvalidColorIdColor;
-}
-
-// Get ChromeGtkFrame theme colors. No-op in GTK3.
-bool NativeThemeGtk2::GetChromeStyleColor(const char* style_property,
- SkColor* ret_color) const {
-#if GTK_MAJOR_VERSION == 2
- GdkColor* style_color = nullptr;
- gtk_widget_style_get(GetWindow(), style_property, &style_color, nullptr);
- if (style_color) {
- *ret_color = GdkColorToSkColor(*style_color);
- gdk_color_free(style_color);
- return true;
- }
-#endif
-
- return false;
-}
-
-GtkWidget* NativeThemeGtk2::GetWindow() const {
- static GtkWidget* fake_window = NULL;
-
- if (!fake_window) {
- fake_window = chrome_gtk_frame_new();
- gtk_widget_realize(fake_window);
- }
-
- return fake_window;
-}
-
-GtkWidget* NativeThemeGtk2::GetEntry() const {
- static GtkWidget* fake_entry = NULL;
-
- if (!fake_entry) {
- fake_entry = gtk_entry_new();
-
- // The fake entry needs to be in the window so it can be realized so we can
- // use the computed parts of the style.
- gtk_container_add(GTK_CONTAINER(GetWindow()), fake_entry);
- gtk_widget_realize(fake_entry);
- }
-
- return fake_entry;
-}
-
-GtkWidget* NativeThemeGtk2::GetLabel() const {
- static GtkWidget* fake_label = NULL;
-
- if (!fake_label)
- fake_label = gtk_label_new("");
-
- return fake_label;
-}
-
-GtkWidget* NativeThemeGtk2::GetButton() const {
- static GtkWidget* fake_button = NULL;
-
- if (!fake_button)
- fake_button = gtk_button_new();
-
- return fake_button;
-}
-
-GtkWidget* NativeThemeGtk2::GetBlueButton() const {
- static GtkWidget* fake_bluebutton = NULL;
-
- if (!fake_bluebutton) {
- fake_bluebutton = gtk_button_new();
- TurnButtonBlue(fake_bluebutton);
- }
-
- return fake_bluebutton;
-}
-
-GtkWidget* NativeThemeGtk2::GetTree() const {
- static GtkWidget* fake_tree = NULL;
-
- if (!fake_tree)
- fake_tree = gtk_tree_view_new();
-
- return fake_tree;
-}
-
-GtkWidget* NativeThemeGtk2::GetTooltip() const {
- static GtkWidget* fake_tooltip = NULL;
-
- if (!fake_tooltip) {
- fake_tooltip = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name(fake_tooltip, "gtk-tooltip");
- gtk_widget_realize(fake_tooltip);
- }
-
- return fake_tooltip;
-}
-
-GtkWidget* NativeThemeGtk2::GetMenu() const {
- static GtkWidget* fake_menu = NULL;
-
- if (!fake_menu)
- fake_menu = gtk_custom_menu_new();
-
- return fake_menu;
-}
-
-GtkWidget* NativeThemeGtk2::GetMenuItem() const {
- static GtkWidget* fake_menu_item = NULL;
-
- if (!fake_menu_item) {
- fake_menu_item = gtk_custom_menu_item_new();
- gtk_menu_shell_append(GTK_MENU_SHELL(GetMenu()), fake_menu_item);
- }
-
- return fake_menu_item;
-}
-
-} // namespace libgtkui
« no previous file with comments | « chrome/browser/ui/libgtkui/native_theme_gtk2.h ('k') | chrome/browser/ui/libgtkui/print_dialog_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698