OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/libgtkui/gtk_ui.h" | 5 #include "chrome/browser/ui/libgtkui/gtk_ui.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <pango/pango.h> | 8 #include <pango/pango.h> |
9 #include <X11/Xcursor/Xcursor.h> | 9 #include <X11/Xcursor/Xcursor.h> |
10 | 10 |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 // Starting with KDE 4.4, windows' titlebars can be dragged with the | 372 // Starting with KDE 4.4, windows' titlebars can be dragged with the |
373 // middle mouse button to create tab groups. We don't support that in | 373 // middle mouse button to create tab groups. We don't support that in |
374 // Chrome, but at least avoid lowering windows in response to middle | 374 // Chrome, but at least avoid lowering windows in response to middle |
375 // clicks to avoid surprising users who expect the KDE behavior. | 375 // clicks to avoid surprising users who expect the KDE behavior. |
376 return views::LinuxUI::MIDDLE_CLICK_ACTION_NONE; | 376 return views::LinuxUI::MIDDLE_CLICK_ACTION_NONE; |
377 default: | 377 default: |
378 return views::LinuxUI::MIDDLE_CLICK_ACTION_LOWER; | 378 return views::LinuxUI::MIDDLE_CLICK_ACTION_LOWER; |
379 } | 379 } |
380 } | 380 } |
381 | 381 |
| 382 #if GTK_MAJOR_VERSION > 2 |
| 383 // COLOR_TOOLBAR_TOP_SEPARATOR represents the border between tabs and the |
| 384 // frame, as well as the border between tabs and the toolbar. For this |
| 385 // reason, it is difficult to calculate the One True Color that works well on |
| 386 // all themes and is opaque. However, we can cheat to get a good color that |
| 387 // works well for both borders. The idea is we have two variables: alpha and |
| 388 // lightness. And we have two constraints (on lightness): |
| 389 // 1. the border color, when painted on |header_bg|, should give |header_fg| |
| 390 // 2. the border color, when painted on |toolbar_bg|, should give |toolbar_fg| |
| 391 // This gives the equations: |
| 392 // alpha*lightness + (1 - alpha)*header_bg = header_fg |
| 393 // alpha*lightness + (1 - alpha)*toolbar_bg = toolbar_fg |
| 394 // The algorithm below is just a result of solving those equations for alpha |
| 395 // and lightness. If a problem is encountered, like division by zero, or |
| 396 // |a| or |l| not in [0, 1], then fallback on |header_fg| or |toolbar_fg|. |
| 397 SkColor GetToolbarTopSeparatorColor(SkColor header_fg, |
| 398 SkColor header_bg, |
| 399 SkColor toolbar_fg, |
| 400 SkColor toolbar_bg) { |
| 401 using namespace color_utils; |
| 402 |
| 403 SkColor default_color = SkColorGetA(header_fg) ? header_fg : toolbar_fg; |
| 404 if (!SkColorGetA(default_color)) |
| 405 return SK_ColorTRANSPARENT; |
| 406 |
| 407 auto get_lightness = [](SkColor color) { |
| 408 HSL hsl; |
| 409 SkColorToHSL(color, &hsl); |
| 410 return hsl.l; |
| 411 }; |
| 412 |
| 413 double f1 = get_lightness(GetResultingPaintColor(header_fg, header_bg)); |
| 414 double b1 = get_lightness(header_bg); |
| 415 double f2 = get_lightness(GetResultingPaintColor(toolbar_fg, toolbar_bg)); |
| 416 double b2 = get_lightness(toolbar_bg); |
| 417 |
| 418 if (b1 == b2) |
| 419 return default_color; |
| 420 double a = (f1 - f2 - b1 + b2) / (b2 - b1); |
| 421 if (a == 0) |
| 422 return default_color; |
| 423 double l = (f1 - (1 - a) * b1) / a; |
| 424 if (a < 0 || a > 1 || l < 0 || l > 1) |
| 425 return default_color; |
| 426 // Take the hue and saturation from |default_color|, but use the |
| 427 // calculated lightness. |
| 428 HSL border; |
| 429 SkColorToHSL(default_color, &border); |
| 430 border.l = l; |
| 431 return HSLToSkColor(border, a * 0xff); |
| 432 } |
| 433 #endif |
| 434 |
382 } // namespace | 435 } // namespace |
383 | 436 |
384 GtkUi::GtkUi() : middle_click_action_(GetDefaultMiddleClickAction()) { | 437 GtkUi::GtkUi() : middle_click_action_(GetDefaultMiddleClickAction()) { |
385 GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess()); | 438 GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess()); |
386 #if GTK_MAJOR_VERSION == 2 | 439 #if GTK_MAJOR_VERSION == 2 |
387 native_theme_ = NativeThemeGtk2::instance(); | 440 native_theme_ = NativeThemeGtk2::instance(); |
388 fake_window_ = chrome_gtk_frame_new(); | 441 fake_window_ = chrome_gtk_frame_new(); |
389 gtk_widget_realize(fake_window_); // Is this necessary? | 442 gtk_widget_realize(fake_window_); // Is this necessary? |
390 #elif GTK_MAJOR_VERSION == 3 | 443 #elif GTK_MAJOR_VERSION == 3 |
391 native_theme_ = NativeThemeGtk3::instance(); | 444 native_theme_ = NativeThemeGtk3::instance(); |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 | 814 |
762 void GtkUi::LoadGtkValues() { | 815 void GtkUi::LoadGtkValues() { |
763 // TODO(erg): GtkThemeService had a comment here about having to muck with | 816 // TODO(erg): GtkThemeService had a comment here about having to muck with |
764 // the raw Prefs object to remove prefs::kCurrentThemeImages or else we'd | 817 // the raw Prefs object to remove prefs::kCurrentThemeImages or else we'd |
765 // regress startup time. Figure out how to do that when we can't access the | 818 // regress startup time. Figure out how to do that when we can't access the |
766 // prefs system from here. | 819 // prefs system from here. |
767 | 820 |
768 UpdateDeviceScaleFactor(); | 821 UpdateDeviceScaleFactor(); |
769 UpdateCursorTheme(); | 822 UpdateCursorTheme(); |
770 | 823 |
771 BuildFrameColors(); | 824 #if GTK_MAJOR_VERSION == 2 |
| 825 const color_utils::HSL kDefaultFrameShift = {-1, -1, 0.4}; |
| 826 SkColor frame_color = |
| 827 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground); |
| 828 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift); |
| 829 GetChromeStyleColor("frame-color", &frame_color); |
| 830 colors_[ThemeProperties::COLOR_FRAME] = frame_color; |
772 | 831 |
773 #if GTK_MAJOR_VERSION == 2 | 832 GtkStyle* style = gtk_rc_get_style(fake_window_); |
| 833 SkColor temp_color = color_utils::HSLShift( |
| 834 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), kDefaultFrameShift); |
| 835 GetChromeStyleColor("inactive-frame-color", &temp_color); |
| 836 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color; |
| 837 |
| 838 temp_color = color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito); |
| 839 GetChromeStyleColor("incognito-frame-color", &temp_color); |
| 840 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color; |
| 841 |
| 842 temp_color = |
| 843 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognitoInactive); |
| 844 GetChromeStyleColor("incognito-inactive-frame-color", &temp_color); |
| 845 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color; |
| 846 |
774 SkColor toolbar_color = | 847 SkColor toolbar_color = |
775 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); | 848 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); |
776 SkColor label_color = native_theme_->GetSystemColor( | 849 SkColor label_color = native_theme_->GetSystemColor( |
777 ui::NativeTheme::kColorId_LabelEnabledColor); | 850 ui::NativeTheme::kColorId_LabelEnabledColor); |
778 | 851 |
779 colors_[ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON] = | 852 colors_[ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON] = |
780 color_utils::DeriveDefaultIconColor(label_color); | 853 color_utils::DeriveDefaultIconColor(label_color); |
781 | 854 |
782 colors_[ThemeProperties::COLOR_TAB_TEXT] = label_color; | 855 colors_[ThemeProperties::COLOR_TAB_TEXT] = label_color; |
783 colors_[ThemeProperties::COLOR_BOOKMARK_TEXT] = label_color; | 856 colors_[ThemeProperties::COLOR_BOOKMARK_TEXT] = label_color; |
(...skipping 17 matching lines...) Expand all Loading... |
801 colors_[ThemeProperties::COLOR_NTP_TEXT] = native_theme_->GetSystemColor( | 874 colors_[ThemeProperties::COLOR_NTP_TEXT] = native_theme_->GetSystemColor( |
802 ui::NativeTheme::kColorId_TextfieldDefaultColor); | 875 ui::NativeTheme::kColorId_TextfieldDefaultColor); |
803 // The NTP header is the color that surrounds the current active | 876 // The NTP header is the color that surrounds the current active |
804 // thumbnail on the NTP, and acts as the border of the "Recent | 877 // thumbnail on the NTP, and acts as the border of the "Recent |
805 // Links" box. It would be awesome if they were separated so we | 878 // Links" box. It would be awesome if they were separated so we |
806 // could use GetBorderColor() for the border around the "Recent | 879 // could use GetBorderColor() for the border around the "Recent |
807 // Links" section, but matching the frame color is more important. | 880 // Links" section, but matching the frame color is more important. |
808 colors_[ThemeProperties::COLOR_NTP_HEADER] = | 881 colors_[ThemeProperties::COLOR_NTP_HEADER] = |
809 colors_[ThemeProperties::COLOR_FRAME]; | 882 colors_[ThemeProperties::COLOR_FRAME]; |
810 #else | 883 #else |
| 884 SkColor frame_color = GetBgColor("#headerbar.header-bar.titlebar"); |
| 885 SkColor frame_color_inactive = |
| 886 GetBgColor("#headerbar.header-bar.titlebar:backdrop"); |
| 887 colors_[ThemeProperties::COLOR_FRAME] = frame_color; |
| 888 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = frame_color_inactive; |
| 889 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = |
| 890 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito); |
| 891 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = |
| 892 color_utils::HSLShift(frame_color_inactive, kDefaultTintFrameIncognito); |
| 893 |
811 SkColor toolbar_color = GetBgColor("GtkToolbar#toolbar"); | 894 SkColor toolbar_color = GetBgColor("GtkToolbar#toolbar"); |
812 SkColor toolbar_text_color = color_utils::GetReadableColor( | 895 SkColor toolbar_text_color = color_utils::GetReadableColor( |
813 GetFgColor("GtkToolbar#toolbar GtkLabel#label"), | 896 GetFgColor("GtkToolbar#toolbar GtkLabel#label"), |
814 toolbar_color); | 897 toolbar_color); |
815 | 898 |
816 colors_[ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON] = toolbar_text_color; | 899 colors_[ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON] = toolbar_text_color; |
817 | 900 |
818 // Tabs use the same background color as the toolbar, so use the | 901 // Tabs use the same background color as the toolbar, so use the |
819 // toolbar text color as the tab text color. | 902 // toolbar text color as the tab text color. |
820 colors_[ThemeProperties::COLOR_TAB_TEXT] = toolbar_text_color; | 903 colors_[ThemeProperties::COLOR_TAB_TEXT] = toolbar_text_color; |
821 colors_[ThemeProperties::COLOR_BOOKMARK_TEXT] = toolbar_text_color; | 904 colors_[ThemeProperties::COLOR_BOOKMARK_TEXT] = toolbar_text_color; |
822 colors_[ThemeProperties::COLOR_BACKGROUND_TAB_TEXT] = | 905 colors_[ThemeProperties::COLOR_BACKGROUND_TAB_TEXT] = |
823 color_utils::BlendTowardOppositeLuma(toolbar_text_color, 50); | 906 color_utils::BlendTowardOppositeLuma(toolbar_text_color, 50); |
824 | 907 |
825 SkColor location_bar_border = | 908 SkColor location_bar_border = |
826 GetBorderColor("GtkToolbar#toolbar GtkEntry#entry"); | 909 GetBorderColor("GtkToolbar#toolbar GtkEntry#entry"); |
827 if (SkColorGetA(location_bar_border)) { | 910 if (SkColorGetA(location_bar_border)) |
828 colors_[ThemeProperties::COLOR_LOCATION_BAR_BORDER] = location_bar_border; | 911 colors_[ThemeProperties::COLOR_LOCATION_BAR_BORDER] = location_bar_border; |
829 } | |
830 | 912 |
831 inactive_selection_bg_color_ = GetSelectedBgColor("GtkEntry#entry:backdrop"); | 913 inactive_selection_bg_color_ = |
| 914 GetSelectedBgColor("GtkTextView#textview.view:backdrop"); |
832 inactive_selection_fg_color_ = | 915 inactive_selection_fg_color_ = |
833 GetSelectedTextColor("GtkEntry#entry:backdrop"); | 916 GetSelectedTextColor("GtkTextView#textview.view:backdrop"); |
834 | 917 |
835 SkColor toolbar_separator_horizontal = | 918 SkColor toolbar_button_border = |
836 GetSeparatorColor("GtkToolbar#toolbar GtkSeparator#separator.horizontal"); | 919 GetBorderColor("GtkToolbar#toolbar GtkButton#button"); |
837 SkColor toolbar_separator_vertical = | |
838 GetSeparatorColor("GtkToolbar#toolbar GtkSeparator#separator.vertical"); | |
839 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND] = | 920 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND] = |
840 toolbar_color; | 921 toolbar_color; |
841 colors_[ThemeProperties::COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT] = | 922 colors_[ThemeProperties::COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT] = |
842 toolbar_text_color; | 923 toolbar_text_color; |
843 // Separates the toolbar from the bookmark bar or butter bars. | 924 // Separates the toolbar from the bookmark bar or butter bars. |
844 colors_[ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR] = | 925 colors_[ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR] = |
845 toolbar_separator_horizontal; | 926 toolbar_button_border; |
846 // Separates entries in the downloads bar. | 927 // Separates entries in the downloads bar. |
847 colors_[ThemeProperties::COLOR_TOOLBAR_VERTICAL_SEPARATOR] = | 928 colors_[ThemeProperties::COLOR_TOOLBAR_VERTICAL_SEPARATOR] = |
848 toolbar_separator_vertical; | 929 toolbar_button_border; |
849 // Separates the bookmark bar from the web content. | 930 // Separates the bookmark bar from the web content. |
850 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR] = | 931 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR] = |
851 toolbar_separator_horizontal; | 932 toolbar_button_border; |
852 | 933 |
853 // These colors represent the border drawn around tabs and between | 934 // These colors represent the border drawn around tabs and between |
854 // the tabstrip and toolbar. | 935 // the tabstrip and toolbar. |
855 SkColor header_button_border = | 936 SkColor toolbar_top_separator = GetToolbarTopSeparatorColor( |
856 GetBorderColor("#headerbar.header-bar.titlebar GtkButton#button"); | 937 GetBorderColor("#headerbar.header-bar.titlebar GtkButton#button"), |
857 SkColor header_button_inactive_border = GetBorderColor( | 938 frame_color, toolbar_button_border, toolbar_color); |
858 "#headerbar.header-bar.titlebar:backdrop GtkButton#button"); | 939 SkColor toolbar_top_separator_inactive = GetToolbarTopSeparatorColor( |
| 940 GetBorderColor( |
| 941 "#headerbar.header-bar.titlebar:backdrop GtkButton#button"), |
| 942 frame_color_inactive, toolbar_button_border, toolbar_color); |
859 // Unlike with toolbars, we always want a border around tabs, so let | 943 // Unlike with toolbars, we always want a border around tabs, so let |
860 // ThemeService choose the border color if the theme doesn't provide one. | 944 // ThemeService choose the border color if the theme doesn't provide one. |
861 if (SkColorGetA(header_button_border) && | 945 if (SkColorGetA(toolbar_top_separator) && |
862 SkColorGetA(header_button_inactive_border)) { | 946 SkColorGetA(toolbar_top_separator_inactive)) { |
863 colors_[ThemeProperties::COLOR_TOOLBAR_TOP_SEPARATOR] = | 947 colors_[ThemeProperties::COLOR_TOOLBAR_TOP_SEPARATOR] = |
864 header_button_border; | 948 toolbar_top_separator; |
865 colors_[ThemeProperties::COLOR_TOOLBAR_TOP_SEPARATOR_INACTIVE] = | 949 colors_[ThemeProperties::COLOR_TOOLBAR_TOP_SEPARATOR_INACTIVE] = |
866 header_button_inactive_border; | 950 toolbar_top_separator_inactive; |
867 } | 951 } |
868 | 952 |
869 colors_[ThemeProperties::COLOR_NTP_BACKGROUND] = GetBgColor("GtkEntry#entry"); | 953 colors_[ThemeProperties::COLOR_NTP_BACKGROUND] = |
870 colors_[ThemeProperties::COLOR_NTP_TEXT] = GetFgColor("GtkEntry#entry"); | 954 native_theme_->GetSystemColor( |
| 955 ui::NativeTheme::kColorId_TextfieldDefaultBackground); |
| 956 colors_[ThemeProperties::COLOR_NTP_TEXT] = native_theme_->GetSystemColor( |
| 957 ui::NativeTheme::kColorId_TextfieldDefaultColor); |
871 colors_[ThemeProperties::COLOR_NTP_HEADER] = | 958 colors_[ThemeProperties::COLOR_NTP_HEADER] = |
872 GetBorderColor("GtkButton#button"); | 959 GetBorderColor("GtkButton#button"); |
873 #endif | 960 #endif |
874 | 961 |
875 colors_[ThemeProperties::COLOR_TOOLBAR] = toolbar_color; | 962 colors_[ThemeProperties::COLOR_TOOLBAR] = toolbar_color; |
876 colors_[ThemeProperties::COLOR_CONTROL_BACKGROUND] = toolbar_color; | 963 colors_[ThemeProperties::COLOR_CONTROL_BACKGROUND] = toolbar_color; |
877 | 964 |
878 colors_[ThemeProperties::COLOR_NTP_LINK] = native_theme_->GetSystemColor( | 965 colors_[ThemeProperties::COLOR_NTP_LINK] = native_theme_->GetSystemColor( |
879 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused); | 966 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused); |
880 | 967 |
881 // Generate the colors that we pass to WebKit. | 968 // Generate the colors that we pass to WebKit. |
882 SetScrollbarColors(); | 969 SetScrollbarColors(); |
883 focus_ring_color_ = | 970 focus_ring_color_ = native_theme_->GetSystemColor( |
884 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_LinkEnabled); | 971 ui::NativeTheme::kColorId_FocusedBorderColor); |
885 | 972 |
886 // Some GTK themes only define the text selection colors on the GtkEntry | 973 // Some GTK themes only define the text selection colors on the GtkEntry |
887 // class, so we need to use that for getting selection colors. | 974 // class, so we need to use that for getting selection colors. |
888 active_selection_bg_color_ = native_theme_->GetSystemColor( | 975 active_selection_bg_color_ = native_theme_->GetSystemColor( |
889 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused); | 976 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused); |
890 active_selection_fg_color_ = native_theme_->GetSystemColor( | 977 active_selection_fg_color_ = native_theme_->GetSystemColor( |
891 ui::NativeTheme::kColorId_TextfieldSelectionColor); | 978 ui::NativeTheme::kColorId_TextfieldSelectionColor); |
892 | 979 |
| 980 SkColor throbber_spinning = native_theme_->GetSystemColor( |
| 981 ui::NativeTheme::kColorId_ThrobberSpinningColor); |
893 colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] = | 982 colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] = |
894 native_theme_->GetSystemColor( | 983 color_utils::GetReadableColor(throbber_spinning, toolbar_color); |
895 ui::NativeTheme::kColorId_ThrobberSpinningColor); | 984 SkColor throbber_waiting = native_theme_->GetSystemColor( |
| 985 ui::NativeTheme::kColorId_ThrobberWaitingColor); |
896 colors_[ThemeProperties::COLOR_TAB_THROBBER_WAITING] = | 986 colors_[ThemeProperties::COLOR_TAB_THROBBER_WAITING] = |
897 native_theme_->GetSystemColor( | 987 color_utils::GetReadableColor(throbber_waiting, toolbar_color); |
898 ui::NativeTheme::kColorId_ThrobberWaitingColor); | |
899 } | 988 } |
900 | 989 |
901 void GtkUi::UpdateCursorTheme() { | 990 void GtkUi::UpdateCursorTheme() { |
902 GtkSettings* settings = gtk_settings_get_default(); | 991 GtkSettings* settings = gtk_settings_get_default(); |
903 | 992 |
904 gchar* theme = nullptr; | 993 gchar* theme = nullptr; |
905 gint size = 0; | 994 gint size = 0; |
906 g_object_get(settings, "gtk-cursor-theme-name", &theme, | 995 g_object_get(settings, "gtk-cursor-theme-name", &theme, |
907 "gtk-cursor-theme-size", &size, nullptr); | 996 "gtk-cursor-theme-size", &size, nullptr); |
908 | 997 |
909 if (theme) | 998 if (theme) |
910 XcursorSetTheme(gfx::GetXDisplay(), theme); | 999 XcursorSetTheme(gfx::GetXDisplay(), theme); |
911 if (size) | 1000 if (size) |
912 XcursorSetDefaultSize(gfx::GetXDisplay(), size); | 1001 XcursorSetDefaultSize(gfx::GetXDisplay(), size); |
913 | 1002 |
914 g_free(theme); | 1003 g_free(theme); |
915 } | 1004 } |
916 | 1005 |
917 void GtkUi::BuildFrameColors() { | |
918 #if GTK_MAJOR_VERSION == 2 | |
919 const color_utils::HSL kDefaultFrameShift = {-1, -1, 0.4}; | |
920 SkColor frame_color = | |
921 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground); | |
922 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift); | |
923 GetChromeStyleColor("frame-color", &frame_color); | |
924 colors_[ThemeProperties::COLOR_FRAME] = frame_color; | |
925 | |
926 GtkStyle* style = gtk_rc_get_style(fake_window_); | |
927 SkColor temp_color = color_utils::HSLShift( | |
928 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), kDefaultFrameShift); | |
929 GetChromeStyleColor("inactive-frame-color", &temp_color); | |
930 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color; | |
931 | |
932 temp_color = color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito); | |
933 GetChromeStyleColor("incognito-frame-color", &temp_color); | |
934 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color; | |
935 | |
936 temp_color = | |
937 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognitoInactive); | |
938 GetChromeStyleColor("incognito-inactive-frame-color", &temp_color); | |
939 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color; | |
940 #else | |
941 SkColor color_frame = GetBgColor("#headerbar.header-bar.titlebar"); | |
942 SkColor color_frame_inactive = | |
943 GetBgColor("#headerbar.header-bar.titlebar:backdrop"); | |
944 colors_[ThemeProperties::COLOR_FRAME] = color_frame; | |
945 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = color_frame_inactive; | |
946 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = | |
947 color_utils::HSLShift(color_frame, kDefaultTintFrameIncognito); | |
948 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = | |
949 color_utils::HSLShift(color_frame_inactive, kDefaultTintFrameIncognito); | |
950 #endif | |
951 } | |
952 | |
953 void GtkUi::UpdateDefaultFont() { | 1006 void GtkUi::UpdateDefaultFont() { |
954 GtkWidget* fake_label = gtk_label_new(nullptr); | 1007 GtkWidget* fake_label = gtk_label_new(nullptr); |
955 g_object_ref_sink(fake_label); // Remove the floating reference. | 1008 g_object_ref_sink(fake_label); // Remove the floating reference. |
956 PangoContext* pc = gtk_widget_get_pango_context(fake_label); | 1009 PangoContext* pc = gtk_widget_get_pango_context(fake_label); |
957 const PangoFontDescription* desc = pango_context_get_font_description(pc); | 1010 const PangoFontDescription* desc = pango_context_get_font_description(pc); |
958 | 1011 |
959 // Use gfx::FontRenderParams to select a family and determine the rendering | 1012 // Use gfx::FontRenderParams to select a family and determine the rendering |
960 // settings. | 1013 // settings. |
961 gfx::FontRenderParamsQuery query; | 1014 gfx::FontRenderParamsQuery query; |
962 query.families = | 1015 query.families = |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 | 1080 |
1028 float GtkUi::GetDeviceScaleFactor() const { | 1081 float GtkUi::GetDeviceScaleFactor() const { |
1029 return device_scale_factor_; | 1082 return device_scale_factor_; |
1030 } | 1083 } |
1031 | 1084 |
1032 } // namespace libgtkui | 1085 } // namespace libgtkui |
1033 | 1086 |
1034 views::LinuxUI* BuildGtkUi() { | 1087 views::LinuxUI* BuildGtkUi() { |
1035 return new libgtkui::GtkUi; | 1088 return new libgtkui::GtkUi; |
1036 } | 1089 } |
OLD | NEW |