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

Side by Side Diff: chrome/browser/ui/libgtkui/gtk_ui.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, 1 month 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/ui/libgtkui/gtk_ui.h ('k') | chrome/browser/ui/libgtkui/gtk_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/gtk2_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 #include <set> 10 #include <set>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/debug/leak_annotations.h" 14 #include "base/debug/leak_annotations.h"
15 #include "base/environment.h" 15 #include "base/environment.h"
16 #include "base/i18n/rtl.h" 16 #include "base/i18n/rtl.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/macros.h" 18 #include "base/macros.h"
19 #include "base/nix/mime_util_xdg.h" 19 #include "base/nix/mime_util_xdg.h"
20 #include "base/nix/xdg_util.h" 20 #include "base/nix/xdg_util.h"
21 #include "base/stl_util.h" 21 #include "base/stl_util.h"
22 #include "base/strings/string_split.h" 22 #include "base/strings/string_split.h"
23 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
24 #include "chrome/browser/themes/theme_properties.h" 24 #include "chrome/browser/themes/theme_properties.h"
25 #include "chrome/browser/ui/libgtkui/app_indicator_icon.h" 25 #include "chrome/browser/ui/libgtkui/app_indicator_icon.h"
26 #include "chrome/browser/ui/libgtkui/gtk2_event_loop.h" 26 #include "chrome/browser/ui/libgtkui/gtk_event_loop.h"
27 #include "chrome/browser/ui/libgtkui/gtk2_key_bindings_handler.h" 27 #include "chrome/browser/ui/libgtkui/gtk_key_bindings_handler.h"
28 #include "chrome/browser/ui/libgtkui/gtk2_status_icon.h" 28 #include "chrome/browser/ui/libgtkui/gtk_status_icon.h"
29 #include "chrome/browser/ui/libgtkui/gtk2_util.h" 29 #include "chrome/browser/ui/libgtkui/gtk_util.h"
30 #include "chrome/browser/ui/libgtkui/native_theme_gtk2.h" 30 #include "chrome/browser/ui/libgtkui/native_theme_gtk.h"
31 #include "chrome/browser/ui/libgtkui/print_dialog_gtk2.h" 31 #include "chrome/browser/ui/libgtkui/print_dialog_gtk.h"
32 #include "chrome/browser/ui/libgtkui/printing_gtk2_util.h" 32 #include "chrome/browser/ui/libgtkui/printing_gtk_util.h"
33 #include "chrome/browser/ui/libgtkui/select_file_dialog_impl.h" 33 #include "chrome/browser/ui/libgtkui/select_file_dialog_impl.h"
34 #include "chrome/browser/ui/libgtkui/skia_utils_gtk2.h" 34 #include "chrome/browser/ui/libgtkui/skia_utils_gtk.h"
35 #include "chrome/browser/ui/libgtkui/unity_service.h" 35 #include "chrome/browser/ui/libgtkui/unity_service.h"
36 #include "chrome/browser/ui/libgtkui/x11_input_method_context_impl_gtk2.h" 36 #include "chrome/browser/ui/libgtkui/x11_input_method_context_impl_gtk.h"
37 #include "chrome/grit/theme_resources.h" 37 #include "chrome/grit/theme_resources.h"
38 #include "components/grit/components_scaled_resources.h" 38 #include "components/grit/components_scaled_resources.h"
39 #include "third_party/skia/include/core/SkBitmap.h" 39 #include "third_party/skia/include/core/SkBitmap.h"
40 #include "third_party/skia/include/core/SkCanvas.h" 40 #include "third_party/skia/include/core/SkCanvas.h"
41 #include "third_party/skia/include/core/SkColor.h" 41 #include "third_party/skia/include/core/SkColor.h"
42 #include "third_party/skia/include/core/SkShader.h" 42 #include "third_party/skia/include/core/SkShader.h"
43 #include "ui/base/resource/resource_bundle.h" 43 #include "ui/base/resource/resource_bundle.h"
44 #include "ui/display/display.h" 44 #include "ui/display/display.h"
45 #include "ui/gfx/canvas.h" 45 #include "ui/gfx/canvas.h"
46 #include "ui/gfx/geometry/rect.h" 46 #include "ui/gfx/geometry/rect.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 gtk_widget_set_size_request(button, width, height); 124 gtk_widget_set_size_request(button, width, height);
125 gtk_container_add(GTK_CONTAINER(window), button); 125 gtk_container_add(GTK_CONTAINER(window), button);
126 126
127 if (is_blue_) 127 if (is_blue_)
128 TurnButtonBlue(button); 128 TurnButtonBlue(button);
129 129
130 gtk_widget_show_all(window); 130 gtk_widget_show_all(window);
131 131
132 cairo_surface_t* surface = cairo_image_surface_create_for_data( 132 cairo_surface_t* surface = cairo_image_surface_create_for_data(
133 static_cast<unsigned char*>(border.getAddr(0, 0)), 133 static_cast<unsigned char*>(border.getAddr(0, 0)), CAIRO_FORMAT_ARGB32,
134 CAIRO_FORMAT_ARGB32, width, height, width * 4); 134 width, height, width * 4);
135 cairo_t* cr = cairo_create(surface); 135 cairo_t* cr = cairo_create(surface);
136 136
137 #if GTK_MAJOR_VERSION == 2 137 #if GTK_MAJOR_VERSION == 2
138 if (focus_) 138 if (focus_)
139 GTK_WIDGET_SET_FLAGS(button, GTK_HAS_FOCUS); 139 GTK_WIDGET_SET_FLAGS(button, GTK_HAS_FOCUS);
140 140
141 int w, h; 141 int w, h;
142 GdkPixmap* pixmap; 142 GdkPixmap* pixmap;
143 143
144 { 144 {
(...skipping 10 matching lines...) Expand all
155 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); 155 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
156 cairo_paint(cr); 156 cairo_paint(cr);
157 157
158 g_object_unref(pixbuf); 158 g_object_unref(pixbuf);
159 g_object_unref(pixmap); 159 g_object_unref(pixmap);
160 #else 160 #else
161 gtk_widget_draw(button, cr); 161 gtk_widget_draw(button, cr);
162 162
163 // There's probably a better way to do this 163 // There's probably a better way to do this
164 if (focus_) 164 if (focus_)
165 gtk_render_focus(gtk_widget_get_style_context(button), cr, 0, 0, 165 gtk_render_focus(gtk_widget_get_style_context(button), cr, 0, 0, width,
166 width, height); 166 height);
167 #endif 167 #endif
168 168
169 cairo_destroy(cr); 169 cairo_destroy(cr);
170 cairo_surface_destroy(surface); 170 cairo_surface_destroy(surface);
171 171
172 gtk_widget_destroy(window); 172 gtk_widget_destroy(window);
173 173
174 return gfx::ImageSkiaRep(border, scale); 174 return gfx::ImageSkiaRep(border, scale);
175 } 175 }
176 176
(...skipping 19 matching lines...) Expand all
196 canvas->DrawImageInt(image, 0, 0); 196 canvas->DrawImageInt(image, 0, 0);
197 } 197 }
198 198
199 private: 199 private:
200 std::string idr_; 200 std::string idr_;
201 201
202 DISALLOW_COPY_AND_ASSIGN(GtkButtonPainter); 202 DISALLOW_COPY_AND_ASSIGN(GtkButtonPainter);
203 }; 203 };
204 204
205 struct GObjectDeleter { 205 struct GObjectDeleter {
206 void operator()(void* ptr) { 206 void operator()(void* ptr) { g_object_unref(ptr); }
207 g_object_unref(ptr);
208 }
209 }; 207 };
210 struct GtkIconInfoDeleter { 208 struct GtkIconInfoDeleter {
211 void operator()(GtkIconInfo* ptr) { 209 void operator()(GtkIconInfo* ptr) {
212 G_GNUC_BEGIN_IGNORE_DEPRECATIONS 210 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
213 gtk_icon_info_free(ptr); 211 gtk_icon_info_free(ptr);
214 G_GNUC_END_IGNORE_DEPRECATIONS 212 G_GNUC_END_IGNORE_DEPRECATIONS
215 } 213 }
216 }; 214 };
217 typedef std::unique_ptr<GIcon, GObjectDeleter> ScopedGIcon; 215 typedef std::unique_ptr<GIcon, GObjectDeleter> ScopedGIcon;
218 typedef std::unique_ptr<GtkIconInfo, GtkIconInfoDeleter> ScopedGtkIconInfo; 216 typedef std::unique_ptr<GtkIconInfo, GtkIconInfoDeleter> ScopedGtkIconInfo;
219 typedef std::unique_ptr<GdkPixbuf, GObjectDeleter> ScopedGdkPixbuf; 217 typedef std::unique_ptr<GdkPixbuf, GObjectDeleter> ScopedGdkPixbuf;
220 218
221 // Prefix for app indicator ids 219 // Prefix for app indicator ids
222 const char kAppIndicatorIdPrefix[] = "chrome_app_indicator_"; 220 const char kAppIndicatorIdPrefix[] = "chrome_app_indicator_";
223 221
224 // Number of app indicators used (used as part of app-indicator id). 222 // Number of app indicators used (used as part of app-indicator id).
225 int indicators_count; 223 int indicators_count;
226 224
227 // The unknown content type. 225 // The unknown content type.
228 const char* kUnknownContentType = "application/octet-stream"; 226 const char* kUnknownContentType = "application/octet-stream";
229 227
230 // TODO(erg): ThemeService has a whole interface just for reading default 228 // TODO(erg): ThemeService has a whole interface just for reading default
231 // constants. Figure out what to do with that more long term; for now, just 229 // constants. Figure out what to do with that more long term; for now, just
232 // copy the constants themselves here. 230 // copy the constants themselves here.
233 // 231 //
234 // Default tints. 232 // Default tints.
235 const color_utils::HSL kDefaultTintFrameIncognito = { -1, 0.2f, 0.35f }; 233 const color_utils::HSL kDefaultTintFrameIncognito = {-1, 0.2f, 0.35f};
236 const color_utils::HSL kDefaultTintFrameIncognitoInactive = { -1, 0.3f, 0.6f }; 234 const color_utils::HSL kDefaultTintFrameIncognitoInactive = {-1, 0.3f, 0.6f};
237 235
238 #if GTK_MAJOR_VERSION == 3 236 #if GTK_MAJOR_VERSION == 3
239 const color_utils::HSL kDefaultTintFrameInactive = { -1, -1, 0.75f }; 237 const color_utils::HSL kDefaultTintFrameInactive = {-1, -1, 0.75f};
240 #endif // GTK_MAJOR_VERSION == 3 238 #endif // GTK_MAJOR_VERSION == 3
241 239
242 // Picks a button tint from a set of background colors. While 240 // Picks a button tint from a set of background colors. While
243 // |accent_color| will usually be the same color through a theme, this 241 // |accent_color| will usually be the same color through a theme, this
244 // function will get called with the normal GtkLabel |text_color|/GtkWindow 242 // function will get called with the normal GtkLabel |text_color|/GtkWindow
245 // |background_color| pair and the GtkEntry |text_color|/|background_color| 243 // |background_color| pair and the GtkEntry |text_color|/|background_color|
246 // pair. While 3/4 of the time the resulting tint will be the same, themes that 244 // pair. While 3/4 of the time the resulting tint will be the same, themes that
247 // have a dark window background (with light text) and a light text entry (with 245 // have a dark window background (with light text) and a light text entry (with
248 // dark text) will get better icons with this separated out. 246 // dark text) will get better icons with this separated out.
249 void PickButtonTintFromColors(SkColor accent_color, 247 void PickButtonTintFromColors(SkColor accent_color,
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 } 417 }
420 418
421 Gtk2UI::~Gtk2UI() {} 419 Gtk2UI::~Gtk2UI() {}
422 420
423 void OnThemeChanged(GObject* obj, GParamSpec* param, Gtk2UI* gtkui) { 421 void OnThemeChanged(GObject* obj, GParamSpec* param, Gtk2UI* gtkui) {
424 gtkui->ResetStyle(); 422 gtkui->ResetStyle();
425 } 423 }
426 424
427 void Gtk2UI::Initialize() { 425 void Gtk2UI::Initialize() {
428 GtkSettings* settings = gtk_settings_get_default(); 426 GtkSettings* settings = gtk_settings_get_default();
429 g_signal_connect_after(settings, 427 g_signal_connect_after(settings, "notify::gtk-theme-name",
430 "notify::gtk-theme-name", 428 G_CALLBACK(OnThemeChanged), this);
431 G_CALLBACK(OnThemeChanged), 429 g_signal_connect_after(settings, "notify::gtk-icon-theme-name",
432 this); 430 G_CALLBACK(OnThemeChanged), this);
433 g_signal_connect_after(settings,
434 "notify::gtk-icon-theme-name",
435 G_CALLBACK(OnThemeChanged),
436 this);
437 431
438 LoadGtkValues(); 432 LoadGtkValues();
439 433
440 LoadCursorTheme(); 434 LoadCursorTheme();
441 435
442 #if defined(ENABLE_BASIC_PRINTING) 436 #if defined(ENABLE_BASIC_PRINTING)
443 printing::PrintingContextLinux::SetCreatePrintDialogFunction( 437 printing::PrintingContextLinux::SetCreatePrintDialogFunction(
444 &PrintDialogGtk2::CreatePrintDialog); 438 &PrintDialogGtk2::CreatePrintDialog);
445 printing::PrintingContextLinux::SetPdfPaperSizeFunction( 439 printing::PrintingContextLinux::SetPdfPaperSizeFunction(
446 &GetPdfPaperSizeDeviceUnitsGtk); 440 &GetPdfPaperSizeDeviceUnitsGtk);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 ++indicators_count; 586 ++indicators_count;
593 return std::unique_ptr<views::StatusIconLinux>(new AppIndicatorIcon( 587 return std::unique_ptr<views::StatusIconLinux>(new AppIndicatorIcon(
594 base::StringPrintf("%s%d", kAppIndicatorIdPrefix, indicators_count), 588 base::StringPrintf("%s%d", kAppIndicatorIdPrefix, indicators_count),
595 image, tool_tip)); 589 image, tool_tip));
596 } else { 590 } else {
597 return std::unique_ptr<views::StatusIconLinux>( 591 return std::unique_ptr<views::StatusIconLinux>(
598 new Gtk2StatusIcon(image, tool_tip)); 592 new Gtk2StatusIcon(image, tool_tip));
599 } 593 }
600 } 594 }
601 595
602 gfx::Image Gtk2UI::GetIconForContentType( 596 gfx::Image Gtk2UI::GetIconForContentType(const std::string& content_type,
603 const std::string& content_type, 597 int size) const {
604 int size) const {
605 // This call doesn't take a reference. 598 // This call doesn't take a reference.
606 GtkIconTheme* theme = gtk_icon_theme_get_default(); 599 GtkIconTheme* theme = gtk_icon_theme_get_default();
607 600
608 std::string content_types[] = { 601 std::string content_types[] = {content_type, kUnknownContentType};
609 content_type, kUnknownContentType
610 };
611 602
612 for (size_t i = 0; i < arraysize(content_types); ++i) { 603 for (size_t i = 0; i < arraysize(content_types); ++i) {
613 ScopedGIcon icon(g_content_type_get_icon(content_types[i].c_str())); 604 ScopedGIcon icon(g_content_type_get_icon(content_types[i].c_str()));
614 ScopedGtkIconInfo icon_info( 605 ScopedGtkIconInfo icon_info(gtk_icon_theme_lookup_by_gicon(
615 gtk_icon_theme_lookup_by_gicon( 606 theme, icon.get(), size,
616 theme, icon.get(), size, 607 static_cast<GtkIconLookupFlags>(GTK_ICON_LOOKUP_FORCE_SIZE)));
617 static_cast<GtkIconLookupFlags>(GTK_ICON_LOOKUP_FORCE_SIZE)));
618 if (!icon_info) 608 if (!icon_info)
619 continue; 609 continue;
620 ScopedGdkPixbuf pixbuf(gtk_icon_info_load_icon(icon_info.get(), NULL)); 610 ScopedGdkPixbuf pixbuf(gtk_icon_info_load_icon(icon_info.get(), NULL));
621 if (!pixbuf) 611 if (!pixbuf)
622 continue; 612 continue;
623 613
624 SkBitmap bitmap = GdkPixbufToImageSkia(pixbuf.get()); 614 SkBitmap bitmap = GdkPixbufToImageSkia(pixbuf.get());
625 DCHECK_EQ(size, bitmap.width()); 615 DCHECK_EQ(size, bitmap.width());
626 DCHECK_EQ(size, bitmap.height()); 616 DCHECK_EQ(size, bitmap.height());
627 gfx::ImageSkia image_skia = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 617 gfx::ImageSkia image_skia = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
(...skipping 13 matching lines...) Expand all
641 new views::LabelButtonAssetBorder(owning_button->style())); 631 new views::LabelButtonAssetBorder(owning_button->style()));
642 632
643 gtk_border->set_insets(border->GetInsets()); 633 gtk_border->set_insets(border->GetInsets());
644 634
645 static struct { 635 static struct {
646 const char* idr; 636 const char* idr;
647 const char* idr_blue; 637 const char* idr_blue;
648 bool focus; 638 bool focus;
649 views::Button::ButtonState state; 639 views::Button::ButtonState state;
650 } const paintstate[] = { 640 } const paintstate[] = {
651 { "IDR_BUTTON_NORMAL", 641 {
652 "IDR_BLUE_BUTTON_NORMAL", 642 "IDR_BUTTON_NORMAL", "IDR_BLUE_BUTTON_NORMAL", false,
653 false, views::Button::STATE_NORMAL, }, 643 views::Button::STATE_NORMAL,
654 { "IDR_BUTTON_HOVER", 644 },
655 "IDR_BLUE_BUTTON_HOVER", 645 {
656 false, views::Button::STATE_HOVERED, }, 646 "IDR_BUTTON_HOVER", "IDR_BLUE_BUTTON_HOVER", false,
657 { "IDR_BUTTON_PRESSED", 647 views::Button::STATE_HOVERED,
658 "IDR_BLUE_BUTTON_PRESSED", 648 },
659 false, views::Button::STATE_PRESSED, }, 649 {
660 { "IDR_BUTTON_DISABLED", 650 "IDR_BUTTON_PRESSED", "IDR_BLUE_BUTTON_PRESSED", false,
661 "IDR_BLUE_BUTTON_DISABLED", 651 views::Button::STATE_PRESSED,
662 false, views::Button::STATE_DISABLED, }, 652 },
653 {
654 "IDR_BUTTON_DISABLED", "IDR_BLUE_BUTTON_DISABLED", false,
655 views::Button::STATE_DISABLED,
656 },
663 657
664 { "IDR_BUTTON_FOCUSED_NORMAL", 658 {
665 "IDR_BLUE_BUTTON_FOCUSED_NORMAL", 659 "IDR_BUTTON_FOCUSED_NORMAL", "IDR_BLUE_BUTTON_FOCUSED_NORMAL", true,
666 true, views::Button::STATE_NORMAL, }, 660 views::Button::STATE_NORMAL,
667 { "IDR_BUTTON_FOCUSED_HOVER", 661 },
668 "IDR_BLUE_BUTTON_FOCUSED_HOVER", 662 {
669 true, views::Button::STATE_HOVERED, }, 663 "IDR_BUTTON_FOCUSED_HOVER", "IDR_BLUE_BUTTON_FOCUSED_HOVER", true,
670 { "IDR_BUTTON_FOCUSED_PRESSED", 664 views::Button::STATE_HOVERED,
671 "IDR_BLUE_BUTTON_FOCUSED_PRESSED", 665 },
672 true, views::Button::STATE_PRESSED, }, 666 {
673 { "IDR_BUTTON_DISABLED", 667 "IDR_BUTTON_FOCUSED_PRESSED", "IDR_BLUE_BUTTON_FOCUSED_PRESSED", true,
674 "IDR_BLUE_BUTTON_DISABLED", 668 views::Button::STATE_PRESSED,
675 true, views::Button::STATE_DISABLED, }, 669 },
670 {
671 "IDR_BUTTON_DISABLED", "IDR_BLUE_BUTTON_DISABLED", true,
672 views::Button::STATE_DISABLED,
673 },
676 }; 674 };
677 675
678 bool is_blue = 676 bool is_blue =
679 owning_button->GetClassName() == views::BlueButton::kViewClassName; 677 owning_button->GetClassName() == views::BlueButton::kViewClassName;
680 678
681 for (unsigned i = 0; i < arraysize(paintstate); i++) { 679 for (unsigned i = 0; i < arraysize(paintstate); i++) {
682 views::Painter* painter = nullptr; 680 views::Painter* painter = nullptr;
683 681
684 if (border->PaintsButtonState(paintstate[i].focus, paintstate[i].state)) { 682 if (border->PaintsButtonState(paintstate[i].focus, paintstate[i].state)) {
685 std::string idr = is_blue ? paintstate[i].idr_blue : paintstate[i].idr; 683 std::string idr = is_blue ? paintstate[i].idr_blue : paintstate[i].idr;
686 painter = new GtkButtonPainter(idr); 684 painter = new GtkButtonPainter(idr);
687 } 685 }
688 686
689 gtk_border->SetPainter(paintstate[i].focus, paintstate[i].state, painter); 687 gtk_border->SetPainter(paintstate[i].focus, paintstate[i].state, painter);
690 } 688 }
691 689
692 return std::move(gtk_border); 690 return std::move(gtk_border);
693 } 691 }
694 692
695 void Gtk2UI::AddWindowButtonOrderObserver( 693 void Gtk2UI::AddWindowButtonOrderObserver(
696 views::WindowButtonOrderObserver* observer) { 694 views::WindowButtonOrderObserver* observer) {
697 if (!leading_buttons_.empty() || !trailing_buttons_.empty()) { 695 if (!leading_buttons_.empty() || !trailing_buttons_.empty()) {
698 observer->OnWindowButtonOrderingChange(leading_buttons_, 696 observer->OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_);
699 trailing_buttons_);
700 } 697 }
701 698
702 observer_list_.AddObserver(observer); 699 observer_list_.AddObserver(observer);
703 } 700 }
704 701
705 void Gtk2UI::RemoveWindowButtonOrderObserver( 702 void Gtk2UI::RemoveWindowButtonOrderObserver(
706 views::WindowButtonOrderObserver* observer) { 703 views::WindowButtonOrderObserver* observer) {
707 observer_list_.RemoveObserver(observer); 704 observer_list_.RemoveObserver(observer);
708 } 705 }
709 706
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 GetNormalButtonTintHSL(&button_tint_); 816 GetNormalButtonTintHSL(&button_tint_);
820 GetNormalEntryForegroundHSL(&entry_tint_); 817 GetNormalEntryForegroundHSL(&entry_tint_);
821 GetSelectedEntryForegroundHSL(&selected_entry_tint_); 818 GetSelectedEntryForegroundHSL(&selected_entry_tint_);
822 819
823 // We pick the text and background colors for the NTP out of the colors for a 820 // We pick the text and background colors for the NTP out of the colors for a
824 // GtkEntry. We do this because GtkEntries background color is never the same 821 // GtkEntry. We do this because GtkEntries background color is never the same
825 // as |toolbar_color|, is usually a white, and when it isn't a white, 822 // as |toolbar_color|, is usually a white, and when it isn't a white,
826 // provides sufficient contrast to |toolbar_color|. Try this out with 823 // provides sufficient contrast to |toolbar_color|. Try this out with
827 // Darklooks, HighContrastInverse or ThinIce. 824 // Darklooks, HighContrastInverse or ThinIce.
828 825
829 SkColor ntp_background = 826 SkColor ntp_background = theme->GetSystemColor(
830 theme->GetSystemColor( 827 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
831 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
832 SkColor ntp_foreground = 828 SkColor ntp_foreground =
833 theme->GetSystemColor( 829 theme->GetSystemColor(ui::NativeTheme::kColorId_TextfieldDefaultColor);
834 ui::NativeTheme::kColorId_TextfieldDefaultColor);
835 830
836 colors_[ThemeProperties::COLOR_NTP_BACKGROUND] = ntp_background; 831 colors_[ThemeProperties::COLOR_NTP_BACKGROUND] = ntp_background;
837 colors_[ThemeProperties::COLOR_NTP_TEXT] = ntp_foreground; 832 colors_[ThemeProperties::COLOR_NTP_TEXT] = ntp_foreground;
838 833
839 // The NTP header is the color that surrounds the current active thumbnail on 834 // The NTP header is the color that surrounds the current active thumbnail on
840 // the NTP, and acts as the border of the "Recent Links" box. It would be 835 // the NTP, and acts as the border of the "Recent Links" box. It would be
841 // awesome if they were separated so we could use GetBorderColor() for the 836 // awesome if they were separated so we could use GetBorderColor() for the
842 // border around the "Recent Links" section, but matching the frame color is 837 // border around the "Recent Links" section, but matching the frame color is
843 // more important. 838 // more important.
844 839
(...skipping 10 matching lines...) Expand all
855 colors_[ThemeProperties::COLOR_NTP_SECTION_LINK] = link_color; 850 colors_[ThemeProperties::COLOR_NTP_SECTION_LINK] = link_color;
856 colors_[ThemeProperties::COLOR_NTP_SECTION_LINK_UNDERLINE] = link_color; 851 colors_[ThemeProperties::COLOR_NTP_SECTION_LINK_UNDERLINE] = link_color;
857 852
858 // Generate the colors that we pass to WebKit. 853 // Generate the colors that we pass to WebKit.
859 focus_ring_color_ = frame_color; 854 focus_ring_color_ = frame_color;
860 855
861 SetScrollbarColors(); 856 SetScrollbarColors();
862 857
863 // Some GTK themes only define the text selection colors on the GtkEntry 858 // Some GTK themes only define the text selection colors on the GtkEntry
864 // class, so we need to use that for getting selection colors. 859 // class, so we need to use that for getting selection colors.
865 active_selection_bg_color_ = 860 active_selection_bg_color_ = theme->GetSystemColor(
866 theme->GetSystemColor( 861 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
867 ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused);
868 active_selection_fg_color_ = 862 active_selection_fg_color_ =
869 theme->GetSystemColor( 863 theme->GetSystemColor(ui::NativeTheme::kColorId_TextfieldSelectionColor);
870 ui::NativeTheme::kColorId_TextfieldSelectionColor); 864 inactive_selection_bg_color_ = theme->GetSystemColor(
871 inactive_selection_bg_color_ = 865 ui::NativeTheme::kColorId_TextfieldReadOnlyBackground);
872 theme->GetSystemColor(
873 ui::NativeTheme::kColorId_TextfieldReadOnlyBackground);
874 inactive_selection_fg_color_ = 866 inactive_selection_fg_color_ =
875 theme->GetSystemColor( 867 theme->GetSystemColor(ui::NativeTheme::kColorId_TextfieldReadOnlyColor);
876 ui::NativeTheme::kColorId_TextfieldReadOnlyColor);
877 868
878 colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] = 869 colors_[ThemeProperties::COLOR_TAB_THROBBER_SPINNING] =
879 theme->GetSystemColor(ui::NativeTheme::kColorId_ThrobberSpinningColor); 870 theme->GetSystemColor(ui::NativeTheme::kColorId_ThrobberSpinningColor);
880 colors_[ThemeProperties::COLOR_TAB_THROBBER_WAITING] = 871 colors_[ThemeProperties::COLOR_TAB_THROBBER_WAITING] =
881 theme->GetSystemColor(ui::NativeTheme::kColorId_ThrobberWaitingColor); 872 theme->GetSystemColor(ui::NativeTheme::kColorId_ThrobberWaitingColor);
882 } 873 }
883 874
884 void Gtk2UI::LoadCursorTheme() { 875 void Gtk2UI::LoadCursorTheme() {
885 GtkSettings* settings = gtk_settings_get_default(); 876 GtkSettings* settings = gtk_settings_get_default();
886 877
887 gchar* theme = nullptr; 878 gchar* theme = nullptr;
888 gint size = 0; 879 gint size = 0;
889 g_object_get(settings, 880 g_object_get(settings,
890 "gtk-cursor-theme-name", &theme, 881 "gtk-cursor-theme-name", &theme,
891 "gtk-cursor-theme-size", &size, 882 "gtk-cursor-theme-size", &size,
892 nullptr); 883 nullptr);
893 884
894 if (theme) 885 if (theme)
895 XcursorSetTheme(gfx::GetXDisplay(), theme); 886 XcursorSetTheme(gfx::GetXDisplay(), theme);
896 if (size) 887 if (size)
897 XcursorSetDefaultSize(gfx::GetXDisplay(), size); 888 XcursorSetDefaultSize(gfx::GetXDisplay(), size);
898 889
899 g_free(theme); 890 g_free(theme);
900 } 891 }
901 892
902 void Gtk2UI::BuildFrameColors() { 893 void Gtk2UI::BuildFrameColors() {
903 #if GTK_MAJOR_VERSION == 2 894 #if GTK_MAJOR_VERSION == 2
904 NativeThemeGtk2* theme = NativeThemeGtk2::instance(); 895 NativeThemeGtk2* theme = NativeThemeGtk2::instance();
905 color_utils::HSL kDefaultFrameShift = { -1, -1, 0.4 }; 896 color_utils::HSL kDefaultFrameShift = {-1, -1, 0.4};
906 SkColor frame_color = 897 SkColor frame_color =
907 theme->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground); 898 theme->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground);
908 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift); 899 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift);
909 theme->GetChromeStyleColor("frame-color", &frame_color); 900 theme->GetChromeStyleColor("frame-color", &frame_color);
910 colors_[ThemeProperties::COLOR_FRAME] = frame_color; 901 colors_[ThemeProperties::COLOR_FRAME] = frame_color;
911 902
912 GtkStyle* style = gtk_rc_get_style(theme->GetWindow()); 903 GtkStyle* style = gtk_rc_get_style(theme->GetWindow());
913 SkColor temp_color = color_utils::HSLShift( 904 SkColor temp_color = color_utils::HSLShift(
914 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), 905 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), kDefaultFrameShift);
915 kDefaultFrameShift);
916 theme->GetChromeStyleColor("inactive-frame-color", &temp_color); 906 theme->GetChromeStyleColor("inactive-frame-color", &temp_color);
917 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color; 907 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color;
918 908
919 temp_color = color_utils::HSLShift( 909 temp_color = color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito);
920 frame_color,
921 kDefaultTintFrameIncognito);
922 theme->GetChromeStyleColor("incognito-frame-color", &temp_color); 910 theme->GetChromeStyleColor("incognito-frame-color", &temp_color);
923 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color; 911 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color;
924 912
925 temp_color = color_utils::HSLShift( 913 temp_color =
926 frame_color, 914 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognitoInactive);
927 kDefaultTintFrameIncognitoInactive);
928 theme->GetChromeStyleColor("incognito-inactive-frame-color", &temp_color); 915 theme->GetChromeStyleColor("incognito-inactive-frame-color", &temp_color);
929 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color; 916 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color;
930 #else 917 #else
931 auto set_frame_color = [this](int color_id) { 918 auto set_frame_color = [this](int color_id) {
932 // Render a GtkHeaderBar as our title bar, cropping out any curved edges 919 // Render a GtkHeaderBar as our title bar, cropping out any curved edges
933 // on the left and right sides. Also remove the bottom border for good 920 // on the left and right sides. Also remove the bottom border for good
934 // measure. 921 // measure.
935 SkBitmap bitmap; 922 SkBitmap bitmap;
936 bitmap.allocN32Pixels(1, 1); 923 bitmap.allocN32Pixels(1, 1);
937 bitmap.eraseColor(0); 924 bitmap.eraseColor(0);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 set_frame_color(ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE); 969 set_frame_color(ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE);
983 #endif 970 #endif
984 } 971 }
985 972
986 void Gtk2UI::GetNormalButtonTintHSL(color_utils::HSL* tint) const { 973 void Gtk2UI::GetNormalButtonTintHSL(color_utils::HSL* tint) const {
987 NativeThemeGtk2* theme = NativeThemeGtk2::instance(); 974 NativeThemeGtk2* theme = NativeThemeGtk2::instance();
988 975
989 SkColor accent_color = 976 SkColor accent_color =
990 theme->GetSystemColor(ui::NativeTheme::kColorId_ProminentButtonColor); 977 theme->GetSystemColor(ui::NativeTheme::kColorId_ProminentButtonColor);
991 SkColor text_color = 978 SkColor text_color =
992 theme->GetSystemColor( 979 theme->GetSystemColor(ui::NativeTheme::kColorId_LabelEnabledColor);
993 ui::NativeTheme::kColorId_LabelEnabledColor);
994 SkColor base_color = 980 SkColor base_color =
995 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); 981 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground);
996 982
997 PickButtonTintFromColors(accent_color, text_color, base_color, tint); 983 PickButtonTintFromColors(accent_color, text_color, base_color, tint);
998 } 984 }
999 985
1000 void Gtk2UI::GetNormalEntryForegroundHSL(color_utils::HSL* tint) const { 986 void Gtk2UI::GetNormalEntryForegroundHSL(color_utils::HSL* tint) const {
1001 NativeThemeGtk2* theme = NativeThemeGtk2::instance(); 987 NativeThemeGtk2* theme = NativeThemeGtk2::instance();
1002 988
1003 SkColor accent_color = 989 SkColor accent_color =
1004 theme->GetSystemColor(ui::NativeTheme::kColorId_ProminentButtonColor); 990 theme->GetSystemColor(ui::NativeTheme::kColorId_ProminentButtonColor);
1005 SkColor text_color = 991 SkColor text_color =
1006 theme->GetSystemColor( 992 theme->GetSystemColor(ui::NativeTheme::kColorId_TextfieldDefaultColor);
1007 ui::NativeTheme::kColorId_TextfieldDefaultColor); 993 SkColor base_color = theme->GetSystemColor(
1008 SkColor base_color = 994 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
1009 theme->GetSystemColor(
1010 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
1011 995
1012 PickButtonTintFromColors(accent_color, text_color, base_color, tint); 996 PickButtonTintFromColors(accent_color, text_color, base_color, tint);
1013 } 997 }
1014 998
1015 void Gtk2UI::GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const { 999 void Gtk2UI::GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const {
1016 // The simplest of all the tints. We just use the selected text in the entry 1000 // The simplest of all the tints. We just use the selected text in the entry
1017 // since the icons tinted this way will only be displayed against 1001 // since the icons tinted this way will only be displayed against
1018 // base[GTK_STATE_SELECTED]. 1002 // base[GTK_STATE_SELECTED].
1019 SkColor color = 1003 SkColor color = NativeThemeGtk2::instance()->GetSystemColor(
1020 NativeThemeGtk2::instance()->GetSystemColor( 1004 ui::NativeTheme::kColorId_TextfieldSelectionColor);
1021 ui::NativeTheme::kColorId_TextfieldSelectionColor);
1022 1005
1023 color_utils::SkColorToHSL(color, tint); 1006 color_utils::SkColorToHSL(color, tint);
1024 } 1007 }
1025 1008
1026 void Gtk2UI::UpdateDefaultFont() { 1009 void Gtk2UI::UpdateDefaultFont() {
1027 PangoContext* pc = gtk_widget_get_pango_context( 1010 PangoContext* pc =
1028 NativeThemeGtk2::instance()->GetLabel()); 1011 gtk_widget_get_pango_context(NativeThemeGtk2::instance()->GetLabel());
1029 const PangoFontDescription* desc = pango_context_get_font_description(pc); 1012 const PangoFontDescription* desc = pango_context_get_font_description(pc);
1030 1013
1031 // Use gfx::FontRenderParams to select a family and determine the rendering 1014 // Use gfx::FontRenderParams to select a family and determine the rendering
1032 // settings. 1015 // settings.
1033 gfx::FontRenderParamsQuery query; 1016 gfx::FontRenderParamsQuery query;
1034 query.families = base::SplitString(pango_font_description_get_family(desc), 1017 query.families =
1035 ",", base::TRIM_WHITESPACE, 1018 base::SplitString(pango_font_description_get_family(desc), ",",
1036 base::SPLIT_WANT_ALL); 1019 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
1037 1020
1038 if (pango_font_description_get_size_is_absolute(desc)) { 1021 if (pango_font_description_get_size_is_absolute(desc)) {
1039 // If the size is absolute, it's specified in Pango units. There are 1022 // If the size is absolute, it's specified in Pango units. There are
1040 // PANGO_SCALE Pango units in a device unit (pixel). 1023 // PANGO_SCALE Pango units in a device unit (pixel).
1041 const int size_pixels = pango_font_description_get_size(desc) / PANGO_SCALE; 1024 const int size_pixels = pango_font_description_get_size(desc) / PANGO_SCALE;
1042 default_font_size_pixels_ = size_pixels; 1025 default_font_size_pixels_ = size_pixels;
1043 query.pixel_size = size_pixels; 1026 query.pixel_size = size_pixels;
1044 } else { 1027 } else {
1045 // Non-absolute sizes are in points (again scaled by PANGO_SIZE). 1028 // Non-absolute sizes are in points (again scaled by PANGO_SIZE).
1046 // Round the value when converting to pixels to match GTK's logic. 1029 // Round the value when converting to pixels to match GTK's logic.
1047 const double size_points = pango_font_description_get_size(desc) / 1030 const double size_points = pango_font_description_get_size(desc) /
1048 static_cast<double>(PANGO_SCALE); 1031 static_cast<double>(PANGO_SCALE);
1049 default_font_size_pixels_ = static_cast<int>( 1032 default_font_size_pixels_ = static_cast<int>(
1050 GetPixelsInPoint(device_scale_factor_) * size_points + 0.5); 1033 GetPixelsInPoint(device_scale_factor_) * size_points + 0.5);
1051 query.point_size = static_cast<int>(size_points); 1034 query.point_size = static_cast<int>(size_points);
1052 } 1035 }
1053 1036
1054 query.style = gfx::Font::NORMAL; 1037 query.style = gfx::Font::NORMAL;
1055 query.weight = 1038 query.weight =
1056 static_cast<gfx::Font::Weight>(pango_font_description_get_weight(desc)); 1039 static_cast<gfx::Font::Weight>(pango_font_description_get_weight(desc));
1057 // TODO(davemoore): What about PANGO_STYLE_OBLIQUE? 1040 // TODO(davemoore): What about PANGO_STYLE_OBLIQUE?
1058 if (pango_font_description_get_style(desc) == PANGO_STYLE_ITALIC) 1041 if (pango_font_description_get_style(desc) == PANGO_STYLE_ITALIC)
(...skipping 23 matching lines...) Expand all
1082 // Blacklist scaling factors <130% (crbug.com/484400) and round 1065 // Blacklist scaling factors <130% (crbug.com/484400) and round
1083 // to 1 decimal to prevent rendering problems (crbug.com/485183). 1066 // to 1 decimal to prevent rendering problems (crbug.com/485183).
1084 return scale < 1.3f ? 1.0f : roundf(scale * 10) / 10; 1067 return scale < 1.3f ? 1.0f : roundf(scale * 10) / 10;
1085 } 1068 }
1086 1069
1087 } // namespace libgtkui 1070 } // namespace libgtkui
1088 1071
1089 views::LinuxUI* BuildGtk2UI() { 1072 views::LinuxUI* BuildGtk2UI() {
1090 return new libgtkui::Gtk2UI; 1073 return new libgtkui::Gtk2UI;
1091 } 1074 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtkui/gtk_ui.h ('k') | chrome/browser/ui/libgtkui/gtk_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698