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

Side by Side Diff: chrome/browser/ui/libgtkui/gtk_ui.cc

Issue 2610883004: Gtk3: Rename Gtk2UI and Get[FB]GColor (Closed)
Patch Set: Rebase Created 3 years, 11 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 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/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 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 // Chrome, but at least avoid lowering windows in response to middle 404 // Chrome, but at least avoid lowering windows in response to middle
405 // clicks to avoid surprising users who expect the KDE behavior. 405 // clicks to avoid surprising users who expect the KDE behavior.
406 return views::LinuxUI::MIDDLE_CLICK_ACTION_NONE; 406 return views::LinuxUI::MIDDLE_CLICK_ACTION_NONE;
407 default: 407 default:
408 return views::LinuxUI::MIDDLE_CLICK_ACTION_LOWER; 408 return views::LinuxUI::MIDDLE_CLICK_ACTION_LOWER;
409 } 409 }
410 } 410 }
411 411
412 } // namespace 412 } // namespace
413 413
414 Gtk2UI::Gtk2UI() : middle_click_action_(GetDefaultMiddleClickAction()) { 414 GtkUi::GtkUi() : middle_click_action_(GetDefaultMiddleClickAction()) {
415 GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess()); 415 GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess());
416 #if GTK_MAJOR_VERSION == 2 416 #if GTK_MAJOR_VERSION == 2
417 native_theme_ = NativeThemeGtk2::instance(); 417 native_theme_ = NativeThemeGtk2::instance();
418 fake_window_ = chrome_gtk_frame_new(); 418 fake_window_ = chrome_gtk_frame_new();
419 gtk_widget_realize(fake_window_); // Is this necessary? 419 gtk_widget_realize(fake_window_); // Is this necessary?
420 #elif GTK_MAJOR_VERSION == 3 420 #elif GTK_MAJOR_VERSION == 3
421 native_theme_ = NativeThemeGtk3::instance(); 421 native_theme_ = NativeThemeGtk3::instance();
422 #else 422 #else
423 #error "Unsupported GTK version" 423 #error "Unsupported GTK version"
424 #endif 424 #endif
425 } 425 }
426 426
427 Gtk2UI::~Gtk2UI() { 427 GtkUi::~GtkUi() {
428 #if GTK_MAJOR_VERSION == 2 428 #if GTK_MAJOR_VERSION == 2
429 gtk_widget_destroy(fake_window_); 429 gtk_widget_destroy(fake_window_);
430 #endif 430 #endif
431 } 431 }
432 432
433 void OnThemeChanged(GObject* obj, GParamSpec* param, Gtk2UI* gtkui) { 433 void OnThemeChanged(GObject* obj, GParamSpec* param, GtkUi* gtkui) {
434 gtkui->ResetStyle(); 434 gtkui->ResetStyle();
435 } 435 }
436 436
437 void Gtk2UI::Initialize() { 437 void GtkUi::Initialize() {
438 GtkSettings* settings = gtk_settings_get_default(); 438 GtkSettings* settings = gtk_settings_get_default();
439 g_signal_connect_after(settings, "notify::gtk-theme-name", 439 g_signal_connect_after(settings, "notify::gtk-theme-name",
440 G_CALLBACK(OnThemeChanged), this); 440 G_CALLBACK(OnThemeChanged), this);
441 g_signal_connect_after(settings, "notify::gtk-icon-theme-name", 441 g_signal_connect_after(settings, "notify::gtk-icon-theme-name",
442 G_CALLBACK(OnThemeChanged), this); 442 G_CALLBACK(OnThemeChanged), this);
443 443
444 LoadGtkValues(); 444 LoadGtkValues();
445 445
446 LoadCursorTheme(); 446 LoadCursorTheme();
447 447
448 #if BUILDFLAG(ENABLE_BASIC_PRINTING) 448 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
449 printing::PrintingContextLinux::SetCreatePrintDialogFunction( 449 printing::PrintingContextLinux::SetCreatePrintDialogFunction(
450 &PrintDialogGtk2::CreatePrintDialog); 450 &PrintDialogGtk2::CreatePrintDialog);
451 printing::PrintingContextLinux::SetPdfPaperSizeFunction( 451 printing::PrintingContextLinux::SetPdfPaperSizeFunction(
452 &GetPdfPaperSizeDeviceUnitsGtk); 452 &GetPdfPaperSizeDeviceUnitsGtk);
453 #endif 453 #endif
454 454
455 #if defined(USE_GCONF) 455 #if defined(USE_GCONF)
456 // We must build this after GTK gets initialized. 456 // We must build this after GTK gets initialized.
457 gconf_listener_.reset(new GConfListener(this)); 457 gconf_listener_.reset(new GConfListener(this));
458 #endif // defined(USE_GCONF) 458 #endif // defined(USE_GCONF)
459 459
460 indicators_count = 0; 460 indicators_count = 0;
461 461
462 // Instantiate the singleton instance of Gtk2EventLoop. 462 // Instantiate the singleton instance of Gtk2EventLoop.
463 Gtk2EventLoop::GetInstance(); 463 Gtk2EventLoop::GetInstance();
464 } 464 }
465 465
466 bool Gtk2UI::GetTint(int id, color_utils::HSL* tint) const { 466 bool GtkUi::GetTint(int id, color_utils::HSL* tint) const {
467 switch (id) { 467 switch (id) {
468 // Tints for which the cross-platform default is fine. Before adding new 468 // Tints for which the cross-platform default is fine. Before adding new
469 // values here, specifically verify they work well on Linux. 469 // values here, specifically verify they work well on Linux.
470 case ThemeProperties::TINT_BACKGROUND_TAB: 470 case ThemeProperties::TINT_BACKGROUND_TAB:
471 // TODO(estade): Return something useful for TINT_BUTTONS so that chrome:// 471 // TODO(estade): Return something useful for TINT_BUTTONS so that chrome://
472 // page icons are colored appropriately. 472 // page icons are colored appropriately.
473 case ThemeProperties::TINT_BUTTONS: 473 case ThemeProperties::TINT_BUTTONS:
474 break; 474 break;
475 default: 475 default:
476 // Assume any tints not specifically verified on Linux aren't usable. 476 // Assume any tints not specifically verified on Linux aren't usable.
477 // TODO(pkasting): Try to remove values from |colors_| that could just be 477 // TODO(pkasting): Try to remove values from |colors_| that could just be
478 // added to the group above instead. 478 // added to the group above instead.
479 NOTREACHED(); 479 NOTREACHED();
480 } 480 }
481 return false; 481 return false;
482 } 482 }
483 483
484 bool Gtk2UI::GetColor(int id, SkColor* color) const { 484 bool GtkUi::GetColor(int id, SkColor* color) const {
485 ColorMap::const_iterator it = colors_.find(id); 485 ColorMap::const_iterator it = colors_.find(id);
486 if (it != colors_.end()) { 486 if (it != colors_.end()) {
487 *color = it->second; 487 *color = it->second;
488 return true; 488 return true;
489 } 489 }
490 490
491 return false; 491 return false;
492 } 492 }
493 493
494 SkColor Gtk2UI::GetFocusRingColor() const { 494 SkColor GtkUi::GetFocusRingColor() const {
495 return focus_ring_color_; 495 return focus_ring_color_;
496 } 496 }
497 497
498 SkColor Gtk2UI::GetThumbActiveColor() const { 498 SkColor GtkUi::GetThumbActiveColor() const {
499 return thumb_active_color_; 499 return thumb_active_color_;
500 } 500 }
501 501
502 SkColor Gtk2UI::GetThumbInactiveColor() const { 502 SkColor GtkUi::GetThumbInactiveColor() const {
503 return thumb_inactive_color_; 503 return thumb_inactive_color_;
504 } 504 }
505 505
506 SkColor Gtk2UI::GetTrackColor() const { 506 SkColor GtkUi::GetTrackColor() const {
507 return track_color_; 507 return track_color_;
508 } 508 }
509 509
510 SkColor Gtk2UI::GetActiveSelectionBgColor() const { 510 SkColor GtkUi::GetActiveSelectionBgColor() const {
511 return active_selection_bg_color_; 511 return active_selection_bg_color_;
512 } 512 }
513 513
514 SkColor Gtk2UI::GetActiveSelectionFgColor() const { 514 SkColor GtkUi::GetActiveSelectionFgColor() const {
515 return active_selection_fg_color_; 515 return active_selection_fg_color_;
516 } 516 }
517 517
518 SkColor Gtk2UI::GetInactiveSelectionBgColor() const { 518 SkColor GtkUi::GetInactiveSelectionBgColor() const {
519 return inactive_selection_bg_color_; 519 return inactive_selection_bg_color_;
520 } 520 }
521 521
522 SkColor Gtk2UI::GetInactiveSelectionFgColor() const { 522 SkColor GtkUi::GetInactiveSelectionFgColor() const {
523 return inactive_selection_fg_color_; 523 return inactive_selection_fg_color_;
524 } 524 }
525 525
526 double Gtk2UI::GetCursorBlinkInterval() const { 526 double GtkUi::GetCursorBlinkInterval() const {
527 // From http://library.gnome.org/devel/gtk/unstable/GtkSettings.html, this is 527 // From http://library.gnome.org/devel/gtk/unstable/GtkSettings.html, this is
528 // the default value for gtk-cursor-blink-time. 528 // the default value for gtk-cursor-blink-time.
529 static const gint kGtkDefaultCursorBlinkTime = 1200; 529 static const gint kGtkDefaultCursorBlinkTime = 1200;
530 530
531 // Dividing GTK's cursor blink cycle time (in milliseconds) by this value 531 // Dividing GTK's cursor blink cycle time (in milliseconds) by this value
532 // yields an appropriate value for 532 // yields an appropriate value for
533 // content::RendererPreferences::caret_blink_interval. This matches the 533 // content::RendererPreferences::caret_blink_interval. This matches the
534 // logic in the WebKit GTK port. 534 // logic in the WebKit GTK port.
535 static const double kGtkCursorBlinkCycleFactor = 2000.0; 535 static const double kGtkCursorBlinkCycleFactor = 2000.0;
536 536
537 gint cursor_blink_time = kGtkDefaultCursorBlinkTime; 537 gint cursor_blink_time = kGtkDefaultCursorBlinkTime;
538 gboolean cursor_blink = TRUE; 538 gboolean cursor_blink = TRUE;
539 g_object_get(gtk_settings_get_default(), "gtk-cursor-blink-time", 539 g_object_get(gtk_settings_get_default(), "gtk-cursor-blink-time",
540 &cursor_blink_time, "gtk-cursor-blink", &cursor_blink, NULL); 540 &cursor_blink_time, "gtk-cursor-blink", &cursor_blink, NULL);
541 return cursor_blink ? (cursor_blink_time / kGtkCursorBlinkCycleFactor) : 0.0; 541 return cursor_blink ? (cursor_blink_time / kGtkCursorBlinkCycleFactor) : 0.0;
542 } 542 }
543 543
544 ui::NativeTheme* Gtk2UI::GetNativeTheme(aura::Window* window) const { 544 ui::NativeTheme* GtkUi::GetNativeTheme(aura::Window* window) const {
545 ui::NativeTheme* native_theme_override = NULL; 545 ui::NativeTheme* native_theme_override = NULL;
546 if (!native_theme_overrider_.is_null()) 546 if (!native_theme_overrider_.is_null())
547 native_theme_override = native_theme_overrider_.Run(window); 547 native_theme_override = native_theme_overrider_.Run(window);
548 548
549 if (native_theme_override) 549 if (native_theme_override)
550 return native_theme_override; 550 return native_theme_override;
551 551
552 return native_theme_; 552 return native_theme_;
553 } 553 }
554 554
555 void Gtk2UI::SetNativeThemeOverride(const NativeThemeGetter& callback) { 555 void GtkUi::SetNativeThemeOverride(const NativeThemeGetter& callback) {
556 native_theme_overrider_ = callback; 556 native_theme_overrider_ = callback;
557 } 557 }
558 558
559 bool Gtk2UI::GetDefaultUsesSystemTheme() const { 559 bool GtkUi::GetDefaultUsesSystemTheme() const {
560 std::unique_ptr<base::Environment> env(base::Environment::Create()); 560 std::unique_ptr<base::Environment> env(base::Environment::Create());
561 561
562 switch (base::nix::GetDesktopEnvironment(env.get())) { 562 switch (base::nix::GetDesktopEnvironment(env.get())) {
563 case base::nix::DESKTOP_ENVIRONMENT_GNOME: 563 case base::nix::DESKTOP_ENVIRONMENT_GNOME:
564 case base::nix::DESKTOP_ENVIRONMENT_UNITY: 564 case base::nix::DESKTOP_ENVIRONMENT_UNITY:
565 case base::nix::DESKTOP_ENVIRONMENT_XFCE: 565 case base::nix::DESKTOP_ENVIRONMENT_XFCE:
566 return true; 566 return true;
567 case base::nix::DESKTOP_ENVIRONMENT_KDE3: 567 case base::nix::DESKTOP_ENVIRONMENT_KDE3:
568 case base::nix::DESKTOP_ENVIRONMENT_KDE4: 568 case base::nix::DESKTOP_ENVIRONMENT_KDE4:
569 case base::nix::DESKTOP_ENVIRONMENT_KDE5: 569 case base::nix::DESKTOP_ENVIRONMENT_KDE5:
570 case base::nix::DESKTOP_ENVIRONMENT_OTHER: 570 case base::nix::DESKTOP_ENVIRONMENT_OTHER:
571 return false; 571 return false;
572 } 572 }
573 // Unless GetDesktopEnvironment() badly misbehaves, this should never happen. 573 // Unless GetDesktopEnvironment() badly misbehaves, this should never happen.
574 NOTREACHED(); 574 NOTREACHED();
575 return false; 575 return false;
576 } 576 }
577 577
578 void Gtk2UI::SetDownloadCount(int count) const { 578 void GtkUi::SetDownloadCount(int count) const {
579 if (unity::IsRunning()) 579 if (unity::IsRunning())
580 unity::SetDownloadCount(count); 580 unity::SetDownloadCount(count);
581 } 581 }
582 582
583 void Gtk2UI::SetProgressFraction(float percentage) const { 583 void GtkUi::SetProgressFraction(float percentage) const {
584 if (unity::IsRunning()) 584 if (unity::IsRunning())
585 unity::SetProgressFraction(percentage); 585 unity::SetProgressFraction(percentage);
586 } 586 }
587 587
588 bool Gtk2UI::IsStatusIconSupported() const { 588 bool GtkUi::IsStatusIconSupported() const {
589 return true; 589 return true;
590 } 590 }
591 591
592 std::unique_ptr<views::StatusIconLinux> Gtk2UI::CreateLinuxStatusIcon( 592 std::unique_ptr<views::StatusIconLinux> GtkUi::CreateLinuxStatusIcon(
593 const gfx::ImageSkia& image, 593 const gfx::ImageSkia& image,
594 const base::string16& tool_tip) const { 594 const base::string16& tool_tip) const {
595 if (AppIndicatorIcon::CouldOpen()) { 595 if (AppIndicatorIcon::CouldOpen()) {
596 ++indicators_count; 596 ++indicators_count;
597 return std::unique_ptr<views::StatusIconLinux>(new AppIndicatorIcon( 597 return std::unique_ptr<views::StatusIconLinux>(new AppIndicatorIcon(
598 base::StringPrintf("%s%d", kAppIndicatorIdPrefix, indicators_count), 598 base::StringPrintf("%s%d", kAppIndicatorIdPrefix, indicators_count),
599 image, tool_tip)); 599 image, tool_tip));
600 } else { 600 } else {
601 return std::unique_ptr<views::StatusIconLinux>( 601 return std::unique_ptr<views::StatusIconLinux>(
602 new Gtk2StatusIcon(image, tool_tip)); 602 new Gtk2StatusIcon(image, tool_tip));
603 } 603 }
604 } 604 }
605 605
606 gfx::Image Gtk2UI::GetIconForContentType(const std::string& content_type, 606 gfx::Image GtkUi::GetIconForContentType(const std::string& content_type,
607 int size) const { 607 int size) const {
608 // This call doesn't take a reference. 608 // This call doesn't take a reference.
609 GtkIconTheme* theme = gtk_icon_theme_get_default(); 609 GtkIconTheme* theme = gtk_icon_theme_get_default();
610 610
611 std::string content_types[] = {content_type, kUnknownContentType}; 611 std::string content_types[] = {content_type, kUnknownContentType};
612 612
613 for (size_t i = 0; i < arraysize(content_types); ++i) { 613 for (size_t i = 0; i < arraysize(content_types); ++i) {
614 ScopedGIcon icon(g_content_type_get_icon(content_types[i].c_str())); 614 ScopedGIcon icon(g_content_type_get_icon(content_types[i].c_str()));
615 ScopedGtkIconInfo icon_info(gtk_icon_theme_lookup_by_gicon( 615 ScopedGtkIconInfo icon_info(gtk_icon_theme_lookup_by_gicon(
616 theme, icon.get(), size, 616 theme, icon.get(), size,
617 static_cast<GtkIconLookupFlags>(GTK_ICON_LOOKUP_FORCE_SIZE))); 617 static_cast<GtkIconLookupFlags>(GTK_ICON_LOOKUP_FORCE_SIZE)));
618 if (!icon_info) 618 if (!icon_info)
619 continue; 619 continue;
620 ScopedGdkPixbuf pixbuf(gtk_icon_info_load_icon(icon_info.get(), NULL)); 620 ScopedGdkPixbuf pixbuf(gtk_icon_info_load_icon(icon_info.get(), NULL));
621 if (!pixbuf) 621 if (!pixbuf)
622 continue; 622 continue;
623 623
624 SkBitmap bitmap = GdkPixbufToImageSkia(pixbuf.get()); 624 SkBitmap bitmap = GdkPixbufToImageSkia(pixbuf.get());
625 DCHECK_EQ(size, bitmap.width()); 625 DCHECK_EQ(size, bitmap.width());
626 DCHECK_EQ(size, bitmap.height()); 626 DCHECK_EQ(size, bitmap.height());
627 gfx::ImageSkia image_skia = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 627 gfx::ImageSkia image_skia = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
628 image_skia.MakeThreadSafe(); 628 image_skia.MakeThreadSafe();
629 return gfx::Image(image_skia); 629 return gfx::Image(image_skia);
630 } 630 }
631 return gfx::Image(); 631 return gfx::Image();
632 } 632 }
633 633
634 std::unique_ptr<views::Border> Gtk2UI::CreateNativeBorder( 634 std::unique_ptr<views::Border> GtkUi::CreateNativeBorder(
635 views::LabelButton* owning_button, 635 views::LabelButton* owning_button,
636 std::unique_ptr<views::LabelButtonBorder> border) { 636 std::unique_ptr<views::LabelButtonBorder> border) {
637 if (owning_button->GetNativeTheme() != native_theme_) 637 if (owning_button->GetNativeTheme() != native_theme_)
638 return std::move(border); 638 return std::move(border);
639 639
640 std::unique_ptr<views::LabelButtonAssetBorder> gtk_border( 640 std::unique_ptr<views::LabelButtonAssetBorder> gtk_border(
641 new views::LabelButtonAssetBorder(owning_button->style())); 641 new views::LabelButtonAssetBorder(owning_button->style()));
642 642
643 gtk_border->set_insets(border->GetInsets()); 643 gtk_border->set_insets(border->GetInsets());
644 644
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 std::string idr = is_blue ? paintstate[i].idr_blue : paintstate[i].idr; 693 std::string idr = is_blue ? paintstate[i].idr_blue : paintstate[i].idr;
694 painter = new GtkButtonPainter(idr); 694 painter = new GtkButtonPainter(idr);
695 } 695 }
696 696
697 gtk_border->SetPainter(paintstate[i].focus, paintstate[i].state, painter); 697 gtk_border->SetPainter(paintstate[i].focus, paintstate[i].state, painter);
698 } 698 }
699 699
700 return std::move(gtk_border); 700 return std::move(gtk_border);
701 } 701 }
702 702
703 void Gtk2UI::AddWindowButtonOrderObserver( 703 void GtkUi::AddWindowButtonOrderObserver(
704 views::WindowButtonOrderObserver* observer) { 704 views::WindowButtonOrderObserver* observer) {
705 if (!leading_buttons_.empty() || !trailing_buttons_.empty()) { 705 if (!leading_buttons_.empty() || !trailing_buttons_.empty()) {
706 observer->OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_); 706 observer->OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_);
707 } 707 }
708 708
709 observer_list_.AddObserver(observer); 709 observer_list_.AddObserver(observer);
710 } 710 }
711 711
712 void Gtk2UI::RemoveWindowButtonOrderObserver( 712 void GtkUi::RemoveWindowButtonOrderObserver(
713 views::WindowButtonOrderObserver* observer) { 713 views::WindowButtonOrderObserver* observer) {
714 observer_list_.RemoveObserver(observer); 714 observer_list_.RemoveObserver(observer);
715 } 715 }
716 716
717 void Gtk2UI::SetWindowButtonOrdering( 717 void GtkUi::SetWindowButtonOrdering(
718 const std::vector<views::FrameButton>& leading_buttons, 718 const std::vector<views::FrameButton>& leading_buttons,
719 const std::vector<views::FrameButton>& trailing_buttons) { 719 const std::vector<views::FrameButton>& trailing_buttons) {
720 leading_buttons_ = leading_buttons; 720 leading_buttons_ = leading_buttons;
721 trailing_buttons_ = trailing_buttons; 721 trailing_buttons_ = trailing_buttons;
722 722
723 for (views::WindowButtonOrderObserver& observer : observer_list_) 723 for (views::WindowButtonOrderObserver& observer : observer_list_)
724 observer.OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_); 724 observer.OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_);
725 } 725 }
726 726
727 void Gtk2UI::SetNonClientMiddleClickAction(NonClientMiddleClickAction action) { 727 void GtkUi::SetNonClientMiddleClickAction(NonClientMiddleClickAction action) {
728 middle_click_action_ = action; 728 middle_click_action_ = action;
729 } 729 }
730 730
731 std::unique_ptr<ui::LinuxInputMethodContext> Gtk2UI::CreateInputMethodContext( 731 std::unique_ptr<ui::LinuxInputMethodContext> GtkUi::CreateInputMethodContext(
732 ui::LinuxInputMethodContextDelegate* delegate, 732 ui::LinuxInputMethodContextDelegate* delegate,
733 bool is_simple) const { 733 bool is_simple) const {
734 return std::unique_ptr<ui::LinuxInputMethodContext>( 734 return std::unique_ptr<ui::LinuxInputMethodContext>(
735 new X11InputMethodContextImplGtk2(delegate, is_simple)); 735 new X11InputMethodContextImplGtk2(delegate, is_simple));
736 } 736 }
737 737
738 gfx::FontRenderParams Gtk2UI::GetDefaultFontRenderParams() const { 738 gfx::FontRenderParams GtkUi::GetDefaultFontRenderParams() const {
739 static gfx::FontRenderParams params = GetGtkFontRenderParams(); 739 static gfx::FontRenderParams params = GetGtkFontRenderParams();
740 return params; 740 return params;
741 } 741 }
742 742
743 void Gtk2UI::GetDefaultFontDescription( 743 void GtkUi::GetDefaultFontDescription(std::string* family_out,
744 std::string* family_out, 744 int* size_pixels_out,
745 int* size_pixels_out, 745 int* style_out,
746 int* style_out, 746 gfx::Font::Weight* weight_out,
747 gfx::Font::Weight* weight_out, 747 gfx::FontRenderParams* params_out) const {
748 gfx::FontRenderParams* params_out) const {
749 *family_out = default_font_family_; 748 *family_out = default_font_family_;
750 *size_pixels_out = default_font_size_pixels_; 749 *size_pixels_out = default_font_size_pixels_;
751 *style_out = default_font_style_; 750 *style_out = default_font_style_;
752 *weight_out = default_font_weight_; 751 *weight_out = default_font_weight_;
753 *params_out = default_font_render_params_; 752 *params_out = default_font_render_params_;
754 } 753 }
755 754
756 ui::SelectFileDialog* Gtk2UI::CreateSelectFileDialog( 755 ui::SelectFileDialog* GtkUi::CreateSelectFileDialog(
757 ui::SelectFileDialog::Listener* listener, 756 ui::SelectFileDialog::Listener* listener,
758 ui::SelectFilePolicy* policy) const { 757 ui::SelectFilePolicy* policy) const {
759 return SelectFileDialogImpl::Create(listener, policy); 758 return SelectFileDialogImpl::Create(listener, policy);
760 } 759 }
761 760
762 bool Gtk2UI::UnityIsRunning() { 761 bool GtkUi::UnityIsRunning() {
763 return unity::IsRunning(); 762 return unity::IsRunning();
764 } 763 }
765 764
766 views::LinuxUI::NonClientMiddleClickAction 765 views::LinuxUI::NonClientMiddleClickAction
767 Gtk2UI::GetNonClientMiddleClickAction() { 766 GtkUi::GetNonClientMiddleClickAction() {
768 return middle_click_action_; 767 return middle_click_action_;
769 } 768 }
770 769
771 void Gtk2UI::NotifyWindowManagerStartupComplete() { 770 void GtkUi::NotifyWindowManagerStartupComplete() {
772 // TODO(port) Implement this using _NET_STARTUP_INFO_BEGIN/_NET_STARTUP_INFO 771 // TODO(port) Implement this using _NET_STARTUP_INFO_BEGIN/_NET_STARTUP_INFO
773 // from http://standards.freedesktop.org/startup-notification-spec/ instead. 772 // from http://standards.freedesktop.org/startup-notification-spec/ instead.
774 gdk_notify_startup_complete(); 773 gdk_notify_startup_complete();
775 } 774 }
776 775
777 bool Gtk2UI::MatchEvent(const ui::Event& event, 776 bool GtkUi::MatchEvent(const ui::Event& event,
778 std::vector<ui::TextEditCommandAuraLinux>* commands) { 777 std::vector<ui::TextEditCommandAuraLinux>* commands) {
779 // Ensure that we have a keyboard handler. 778 // Ensure that we have a keyboard handler.
780 if (!key_bindings_handler_) 779 if (!key_bindings_handler_)
781 key_bindings_handler_.reset(new Gtk2KeyBindingsHandler); 780 key_bindings_handler_.reset(new Gtk2KeyBindingsHandler);
782 781
783 return key_bindings_handler_->MatchEvent(event, commands); 782 return key_bindings_handler_->MatchEvent(event, commands);
784 } 783 }
785 784
786 void Gtk2UI::SetScrollbarColors() { 785 void GtkUi::SetScrollbarColors() {
787 thumb_active_color_ = SkColorSetRGB(244, 244, 244); 786 thumb_active_color_ = SkColorSetRGB(244, 244, 244);
788 thumb_inactive_color_ = SkColorSetRGB(234, 234, 234); 787 thumb_inactive_color_ = SkColorSetRGB(234, 234, 234);
789 track_color_ = SkColorSetRGB(211, 211, 211); 788 track_color_ = SkColorSetRGB(211, 211, 211);
790 789
791 GetChromeStyleColor("scrollbar-slider-prelight-color", &thumb_active_color_); 790 GetChromeStyleColor("scrollbar-slider-prelight-color", &thumb_active_color_);
792 GetChromeStyleColor("scrollbar-slider-normal-color", &thumb_inactive_color_); 791 GetChromeStyleColor("scrollbar-slider-normal-color", &thumb_inactive_color_);
793 GetChromeStyleColor("scrollbar-trough-color", &track_color_); 792 GetChromeStyleColor("scrollbar-trough-color", &track_color_);
794 } 793 }
795 794
796 void Gtk2UI::LoadGtkValues() { 795 void GtkUi::LoadGtkValues() {
797 // TODO(erg): GtkThemeService had a comment here about having to muck with 796 // TODO(erg): GtkThemeService had a comment here about having to muck with
798 // the raw Prefs object to remove prefs::kCurrentThemeImages or else we'd 797 // the raw Prefs object to remove prefs::kCurrentThemeImages or else we'd
799 // regress startup time. Figure out how to do that when we can't access the 798 // regress startup time. Figure out how to do that when we can't access the
800 // prefs system from here. 799 // prefs system from here.
801 800
802 SkColor toolbar_color = 801 SkColor toolbar_color =
803 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); 802 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground);
804 SkColor label_color = native_theme_->GetSystemColor( 803 SkColor label_color = native_theme_->GetSystemColor(
805 ui::NativeTheme::kColorId_LabelEnabledColor); 804 ui::NativeTheme::kColorId_LabelEnabledColor);
806 805
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 native_theme_->GetSystemColor( 877 native_theme_->GetSystemColor(
879 ui::NativeTheme::kColorId_ThrobberWaitingColor); 878 ui::NativeTheme::kColorId_ThrobberWaitingColor);
880 879
881 #if GTK_MAJOR_VERSION > 2 880 #if GTK_MAJOR_VERSION > 2
882 colors_[ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR] = 881 colors_[ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR] =
883 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR] = 882 colors_[ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR] =
884 GetBorderColor("GtkToolbar.primary-toolbar.toolbar"); 883 GetBorderColor("GtkToolbar.primary-toolbar.toolbar");
885 #endif 884 #endif
886 } 885 }
887 886
888 void Gtk2UI::LoadCursorTheme() { 887 void GtkUi::LoadCursorTheme() {
889 GtkSettings* settings = gtk_settings_get_default(); 888 GtkSettings* settings = gtk_settings_get_default();
890 889
891 gchar* theme = nullptr; 890 gchar* theme = nullptr;
892 gint size = 0; 891 gint size = 0;
893 g_object_get(settings, "gtk-cursor-theme-name", &theme, 892 g_object_get(settings, "gtk-cursor-theme-name", &theme,
894 "gtk-cursor-theme-size", &size, nullptr); 893 "gtk-cursor-theme-size", &size, nullptr);
895 894
896 if (theme) 895 if (theme)
897 XcursorSetTheme(gfx::GetXDisplay(), theme); 896 XcursorSetTheme(gfx::GetXDisplay(), theme);
898 if (size) 897 if (size)
899 XcursorSetDefaultSize(gfx::GetXDisplay(), size); 898 XcursorSetDefaultSize(gfx::GetXDisplay(), size);
900 899
901 g_free(theme); 900 g_free(theme);
902 } 901 }
903 902
904 void Gtk2UI::BuildFrameColors() { 903 void GtkUi::BuildFrameColors() {
905 #if GTK_MAJOR_VERSION == 2 904 #if GTK_MAJOR_VERSION == 2
906 color_utils::HSL kDefaultFrameShift = {-1, -1, 0.4}; 905 color_utils::HSL kDefaultFrameShift = {-1, -1, 0.4};
907 SkColor frame_color = 906 SkColor frame_color =
908 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground); 907 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_WindowBackground);
909 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift); 908 frame_color = color_utils::HSLShift(frame_color, kDefaultFrameShift);
910 GetChromeStyleColor("frame-color", &frame_color); 909 GetChromeStyleColor("frame-color", &frame_color);
911 colors_[ThemeProperties::COLOR_FRAME] = frame_color; 910 colors_[ThemeProperties::COLOR_FRAME] = frame_color;
912 911
913 GtkStyle* style = gtk_rc_get_style(fake_window_); 912 GtkStyle* style = gtk_rc_get_style(fake_window_);
914 SkColor temp_color = color_utils::HSLShift( 913 SkColor temp_color = color_utils::HSLShift(
915 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), kDefaultFrameShift); 914 GdkColorToSkColor(style->bg[GTK_STATE_INSENSITIVE]), kDefaultFrameShift);
916 GetChromeStyleColor("inactive-frame-color", &temp_color); 915 GetChromeStyleColor("inactive-frame-color", &temp_color);
917 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color; 916 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = temp_color;
918 917
919 temp_color = color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito); 918 temp_color = color_utils::HSLShift(frame_color, kDefaultTintFrameIncognito);
920 GetChromeStyleColor("incognito-frame-color", &temp_color); 919 GetChromeStyleColor("incognito-frame-color", &temp_color);
921 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color; 920 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = temp_color;
922 921
923 temp_color = 922 temp_color =
924 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognitoInactive); 923 color_utils::HSLShift(frame_color, kDefaultTintFrameIncognitoInactive);
925 GetChromeStyleColor("incognito-inactive-frame-color", &temp_color); 924 GetChromeStyleColor("incognito-inactive-frame-color", &temp_color);
926 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color; 925 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = temp_color;
927 #else 926 #else
928 // TODO(thomasanderson): Render a GtkHeaderBar directly. 927 // TODO(thomasanderson): Render a GtkHeaderBar directly.
929 SkColor color_frame = GetBGColor(".headerbar.header-bar.titlebar"); 928 SkColor color_frame = GetBgColor(".headerbar.header-bar.titlebar");
930 SkColor color_frame_inactive = 929 SkColor color_frame_inactive =
931 GetBGColor(".headerbar.header-bar.titlebar:backdrop"); 930 GetBgColor(".headerbar.header-bar.titlebar:backdrop");
932 colors_[ThemeProperties::COLOR_FRAME] = color_frame; 931 colors_[ThemeProperties::COLOR_FRAME] = color_frame;
933 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = color_frame_inactive; 932 colors_[ThemeProperties::COLOR_FRAME_INACTIVE] = color_frame_inactive;
934 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] = 933 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO] =
935 color_utils::HSLShift(color_frame, kDefaultTintFrameIncognito); 934 color_utils::HSLShift(color_frame, kDefaultTintFrameIncognito);
936 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] = 935 colors_[ThemeProperties::COLOR_FRAME_INCOGNITO_INACTIVE] =
937 color_utils::HSLShift(color_frame_inactive, kDefaultTintFrameIncognito); 936 color_utils::HSLShift(color_frame_inactive, kDefaultTintFrameIncognito);
938 #endif 937 #endif
939 } 938 }
940 939
941 void Gtk2UI::GetNormalButtonTintHSL(color_utils::HSL* tint) const { 940 void GtkUi::GetNormalButtonTintHSL(color_utils::HSL* tint) const {
942 SkColor accent_color = native_theme_->GetSystemColor( 941 SkColor accent_color = native_theme_->GetSystemColor(
943 ui::NativeTheme::kColorId_ProminentButtonColor); 942 ui::NativeTheme::kColorId_ProminentButtonColor);
944 SkColor text_color = native_theme_->GetSystemColor( 943 SkColor text_color = native_theme_->GetSystemColor(
945 ui::NativeTheme::kColorId_LabelEnabledColor); 944 ui::NativeTheme::kColorId_LabelEnabledColor);
946 SkColor base_color = 945 SkColor base_color =
947 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); 946 native_theme_->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground);
948 947
949 PickButtonTintFromColors(accent_color, text_color, base_color, tint); 948 PickButtonTintFromColors(accent_color, text_color, base_color, tint);
950 } 949 }
951 950
952 void Gtk2UI::GetNormalEntryForegroundHSL(color_utils::HSL* tint) const { 951 void GtkUi::GetNormalEntryForegroundHSL(color_utils::HSL* tint) const {
953 SkColor accent_color = native_theme_->GetSystemColor( 952 SkColor accent_color = native_theme_->GetSystemColor(
954 ui::NativeTheme::kColorId_ProminentButtonColor); 953 ui::NativeTheme::kColorId_ProminentButtonColor);
955 SkColor text_color = native_theme_->GetSystemColor( 954 SkColor text_color = native_theme_->GetSystemColor(
956 ui::NativeTheme::kColorId_TextfieldDefaultColor); 955 ui::NativeTheme::kColorId_TextfieldDefaultColor);
957 SkColor base_color = native_theme_->GetSystemColor( 956 SkColor base_color = native_theme_->GetSystemColor(
958 ui::NativeTheme::kColorId_TextfieldDefaultBackground); 957 ui::NativeTheme::kColorId_TextfieldDefaultBackground);
959 958
960 PickButtonTintFromColors(accent_color, text_color, base_color, tint); 959 PickButtonTintFromColors(accent_color, text_color, base_color, tint);
961 } 960 }
962 961
963 void Gtk2UI::GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const { 962 void GtkUi::GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const {
964 // The simplest of all the tints. We just use the selected text in the entry 963 // The simplest of all the tints. We just use the selected text in the entry
965 // since the icons tinted this way will only be displayed against 964 // since the icons tinted this way will only be displayed against
966 // base[GTK_STATE_SELECTED]. 965 // base[GTK_STATE_SELECTED].
967 SkColor color = native_theme_->GetSystemColor( 966 SkColor color = native_theme_->GetSystemColor(
968 ui::NativeTheme::kColorId_TextfieldSelectionColor); 967 ui::NativeTheme::kColorId_TextfieldSelectionColor);
969 968
970 color_utils::SkColorToHSL(color, tint); 969 color_utils::SkColorToHSL(color, tint);
971 } 970 }
972 971
973 void Gtk2UI::UpdateDefaultFont() { 972 void GtkUi::UpdateDefaultFont() {
974 GtkWidget* fake_label = gtk_label_new(nullptr); 973 GtkWidget* fake_label = gtk_label_new(nullptr);
975 g_object_ref_sink(fake_label); // Remove the floating reference. 974 g_object_ref_sink(fake_label); // Remove the floating reference.
976 PangoContext* pc = gtk_widget_get_pango_context(fake_label); 975 PangoContext* pc = gtk_widget_get_pango_context(fake_label);
977 const PangoFontDescription* desc = pango_context_get_font_description(pc); 976 const PangoFontDescription* desc = pango_context_get_font_description(pc);
978 977
979 // Use gfx::FontRenderParams to select a family and determine the rendering 978 // Use gfx::FontRenderParams to select a family and determine the rendering
980 // settings. 979 // settings.
981 gfx::FontRenderParamsQuery query; 980 gfx::FontRenderParamsQuery query;
982 query.families = 981 query.families =
983 base::SplitString(pango_font_description_get_family(desc), ",", 982 base::SplitString(pango_font_description_get_family(desc), ",",
(...skipping 23 matching lines...) Expand all
1007 query.style |= gfx::Font::ITALIC; 1006 query.style |= gfx::Font::ITALIC;
1008 1007
1009 default_font_render_params_ = 1008 default_font_render_params_ =
1010 gfx::GetFontRenderParams(query, &default_font_family_); 1009 gfx::GetFontRenderParams(query, &default_font_family_);
1011 default_font_style_ = query.style; 1010 default_font_style_ = query.style;
1012 1011
1013 gtk_widget_destroy(fake_label); 1012 gtk_widget_destroy(fake_label);
1014 g_object_unref(fake_label); 1013 g_object_unref(fake_label);
1015 } 1014 }
1016 1015
1017 bool Gtk2UI::GetChromeStyleColor(const char* style_property, 1016 bool GtkUi::GetChromeStyleColor(const char* style_property,
1018 SkColor* ret_color) const { 1017 SkColor* ret_color) const {
1019 #if GTK_MAJOR_VERSION == 2 1018 #if GTK_MAJOR_VERSION == 2
1020 GdkColor* style_color = nullptr; 1019 GdkColor* style_color = nullptr;
1021 gtk_widget_style_get(fake_window_, style_property, &style_color, nullptr); 1020 gtk_widget_style_get(fake_window_, style_property, &style_color, nullptr);
1022 if (style_color) { 1021 if (style_color) {
1023 *ret_color = GdkColorToSkColor(*style_color); 1022 *ret_color = GdkColorToSkColor(*style_color);
1024 gdk_color_free(style_color); 1023 gdk_color_free(style_color);
1025 return true; 1024 return true;
1026 } 1025 }
1027 #endif 1026 #endif
1028 1027
1029 return false; 1028 return false;
1030 } 1029 }
1031 1030
1032 void Gtk2UI::ResetStyle() { 1031 void GtkUi::ResetStyle() {
1033 LoadGtkValues(); 1032 LoadGtkValues();
1034 native_theme_->NotifyObservers(); 1033 native_theme_->NotifyObservers();
1035 } 1034 }
1036 1035
1037 void Gtk2UI::UpdateDeviceScaleFactor() { 1036 void GtkUi::UpdateDeviceScaleFactor() {
1038 // Note: Linux chrome currently does not support dynamic DPI 1037 // Note: Linux chrome currently does not support dynamic DPI
1039 // changes. This is to allow flags to override the DPI settings 1038 // changes. This is to allow flags to override the DPI settings
1040 // during startup. 1039 // during startup.
1041 float scale = GetRawDeviceScaleFactor(); 1040 float scale = GetRawDeviceScaleFactor();
1042 // Blacklist scaling factors <120% (crbug.com/484400) and round 1041 // Blacklist scaling factors <120% (crbug.com/484400) and round
1043 // to 1 decimal to prevent rendering problems (crbug.com/485183). 1042 // to 1 decimal to prevent rendering problems (crbug.com/485183).
1044 device_scale_factor_ = scale < 1.2f ? 1.0f : roundf(scale * 10) / 10; 1043 device_scale_factor_ = scale < 1.2f ? 1.0f : roundf(scale * 10) / 10;
1045 UpdateDefaultFont(); 1044 UpdateDefaultFont();
1046 } 1045 }
1047 1046
1048 float Gtk2UI::GetDeviceScaleFactor() const { 1047 float GtkUi::GetDeviceScaleFactor() const {
1049 return device_scale_factor_; 1048 return device_scale_factor_;
1050 } 1049 }
1051 1050
1052 } // namespace libgtkui 1051 } // namespace libgtkui
1053 1052
1054 views::LinuxUI* BuildGtk2UI() { 1053 views::LinuxUI* BuildGtkUi() {
1055 return new libgtkui::Gtk2UI; 1054 return new libgtkui::GtkUi;
1056 } 1055 }
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