| Index: chrome/browser/gtk/options/fonts_page_gtk.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/gtk/options/fonts_page_gtk.cc	(revision 71352)
 | 
| +++ chrome/browser/gtk/options/fonts_page_gtk.cc	(working copy)
 | 
| @@ -1,188 +0,0 @@
 | 
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "chrome/browser/gtk/options/fonts_page_gtk.h"
 | 
| -
 | 
| -#include <string>
 | 
| -
 | 
| -#include "app/l10n_util.h"
 | 
| -#include "base/stringprintf.h"
 | 
| -#include "base/utf_string_conversions.h"
 | 
| -#include "chrome/browser/default_encoding_combo_model.h"
 | 
| -#include "chrome/browser/gtk/gtk_util.h"
 | 
| -#include "chrome/browser/gtk/options/options_layout_gtk.h"
 | 
| -#include "chrome/browser/profiles/profile.h"
 | 
| -#include "chrome/common/pref_names.h"
 | 
| -#include "gfx/font.h"
 | 
| -#include "grit/generated_resources.h"
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -// Make a Gtk font name string from a font family name and pixel size.
 | 
| -std::string MakeFontName(std::string family_name, int pixel_size) {
 | 
| -  // The given font might not be available (the default fonts we use are not
 | 
| -  // installed by default on some distros).  So figure out which font we are
 | 
| -  // actually falling back to and display that.  (See crbug.com/31381.)
 | 
| -  string16 actual_family_name = gfx::Font(
 | 
| -      UTF8ToUTF16(family_name), pixel_size).GetFontName();
 | 
| -  std::string fontname;
 | 
| -  // TODO(mattm): We can pass in the size in pixels (px), and the font button
 | 
| -  // actually honors it, but when you open the selector it interprets it as
 | 
| -  // points.  See crbug.com/17857
 | 
| -  base::SStringPrintf(&fontname, "%s, %dpx",
 | 
| -                      UTF16ToUTF8(actual_family_name).c_str(), pixel_size);
 | 
| -  return fontname;
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -FontsPageGtk::FontsPageGtk(Profile* profile) : OptionsPageBase(profile) {
 | 
| -  Init();
 | 
| -}
 | 
| -
 | 
| -FontsPageGtk::~FontsPageGtk() {
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::Init() {
 | 
| -  scoped_ptr<OptionsLayoutBuilderGtk>
 | 
| -    options_builder(OptionsLayoutBuilderGtk::Create());
 | 
| -  serif_font_button_ = gtk_font_button_new();
 | 
| -  gtk_font_button_set_use_font(GTK_FONT_BUTTON(serif_font_button_), TRUE);
 | 
| -  gtk_font_button_set_use_size(GTK_FONT_BUTTON(serif_font_button_), TRUE);
 | 
| -  g_signal_connect(serif_font_button_, "font-set",
 | 
| -                   G_CALLBACK(OnSerifFontSetThunk), this);
 | 
| -
 | 
| -  sans_font_button_ = gtk_font_button_new();
 | 
| -  gtk_font_button_set_use_font(GTK_FONT_BUTTON(sans_font_button_), TRUE);
 | 
| -  gtk_font_button_set_use_size(GTK_FONT_BUTTON(sans_font_button_), TRUE);
 | 
| -  g_signal_connect(sans_font_button_, "font-set",
 | 
| -                   G_CALLBACK(OnSansFontSetThunk), this);
 | 
| -
 | 
| -  fixed_font_button_ = gtk_font_button_new();
 | 
| -  gtk_font_button_set_use_font(GTK_FONT_BUTTON(fixed_font_button_), TRUE);
 | 
| -  gtk_font_button_set_use_size(GTK_FONT_BUTTON(fixed_font_button_), TRUE);
 | 
| -  g_signal_connect(fixed_font_button_, "font-set",
 | 
| -                   G_CALLBACK(OnFixedFontSetThunk), this);
 | 
| -
 | 
| -  GtkWidget* font_controls = gtk_util::CreateLabeledControlsGroup(NULL,
 | 
| -      l10n_util::GetStringUTF8(
 | 
| -          IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SERIF_LABEL).c_str(),
 | 
| -      serif_font_button_,
 | 
| -      l10n_util::GetStringUTF8(
 | 
| -        IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SANS_SERIF_LABEL).c_str(),
 | 
| -      sans_font_button_,
 | 
| -      l10n_util::GetStringUTF8(
 | 
| -        IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_FIXED_WIDTH_LABEL).c_str(),
 | 
| -      fixed_font_button_,
 | 
| -      NULL);
 | 
| -
 | 
| -  options_builder->AddOptionGroup(l10n_util::GetStringUTF8(
 | 
| -        IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_FONT_TITLE),
 | 
| -      font_controls, false);
 | 
| -
 | 
| -  InitDefaultEncodingComboBox();
 | 
| -  std::string encoding_group_description = l10n_util::GetStringUTF8(
 | 
| -      IDS_FONT_LANGUAGE_SETTING_FONT_DEFAULT_ENCODING_SELECTOR_LABEL);
 | 
| -  GtkWidget* encoding_controls = gtk_util::CreateLabeledControlsGroup(NULL,
 | 
| -      encoding_group_description.c_str(),
 | 
| -      default_encoding_combobox_,
 | 
| -      NULL);
 | 
| -  options_builder->AddOptionGroup(l10n_util::GetStringUTF8(
 | 
| -        IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_ENCODING_TITLE),
 | 
| -      encoding_controls, false);
 | 
| -
 | 
| -  page_ = options_builder->get_page_widget();
 | 
| -
 | 
| -  serif_name_.Init(prefs::kWebKitSerifFontFamily, profile()->GetPrefs(), this);
 | 
| -  sans_serif_name_.Init(prefs::kWebKitSansSerifFontFamily,
 | 
| -                        profile()->GetPrefs(), this);
 | 
| -  variable_width_size_.Init(prefs::kWebKitDefaultFontSize,
 | 
| -                            profile()->GetPrefs(), this);
 | 
| -
 | 
| -  fixed_width_name_.Init(prefs::kWebKitFixedFontFamily, profile()->GetPrefs(),
 | 
| -                         this);
 | 
| -  fixed_width_size_.Init(prefs::kWebKitDefaultFixedFontSize,
 | 
| -                         profile()->GetPrefs(), this);
 | 
| -
 | 
| -  default_encoding_.Init(prefs::kDefaultCharset, profile()->GetPrefs(), this);
 | 
| -
 | 
| -  NotifyPrefChanged(NULL);
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::InitDefaultEncodingComboBox() {
 | 
| -  default_encoding_combobox_ = gtk_combo_box_new_text();
 | 
| -  g_signal_connect(default_encoding_combobox_, "changed",
 | 
| -                   G_CALLBACK(OnDefaultEncodingChangedThunk), this);
 | 
| -  default_encoding_combobox_model_.reset(new DefaultEncodingComboboxModel);
 | 
| -  for (int i = 0; i < default_encoding_combobox_model_->GetItemCount(); ++i) {
 | 
| -    gtk_combo_box_append_text(
 | 
| -        GTK_COMBO_BOX(default_encoding_combobox_),
 | 
| -        UTF16ToUTF8(default_encoding_combobox_model_->GetItemAt(i)).c_str());
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::NotifyPrefChanged(const std::string* pref_name) {
 | 
| -  if (!pref_name || *pref_name == prefs::kWebKitSerifFontFamily ||
 | 
| -      *pref_name == prefs::kWebKitDefaultFontSize) {
 | 
| -    gtk_font_button_set_font_name(GTK_FONT_BUTTON(serif_font_button_),
 | 
| -        MakeFontName(serif_name_.GetValue(),
 | 
| -          variable_width_size_.GetValue()).c_str());
 | 
| -  }
 | 
| -  if (!pref_name || *pref_name == prefs::kWebKitSansSerifFontFamily ||
 | 
| -      *pref_name == prefs::kWebKitDefaultFontSize) {
 | 
| -    gtk_font_button_set_font_name(GTK_FONT_BUTTON(sans_font_button_),
 | 
| -        MakeFontName(sans_serif_name_.GetValue(),
 | 
| -          variable_width_size_.GetValue()).c_str());
 | 
| -  }
 | 
| -  if (!pref_name || *pref_name == prefs::kWebKitFixedFontFamily ||
 | 
| -      *pref_name == prefs::kWebKitDefaultFixedFontSize) {
 | 
| -    gtk_font_button_set_font_name(GTK_FONT_BUTTON(fixed_font_button_),
 | 
| -        MakeFontName(fixed_width_name_.GetValue(),
 | 
| -          fixed_width_size_.GetValue()).c_str());
 | 
| -  }
 | 
| -  if (!pref_name || *pref_name == prefs::kDefaultCharset) {
 | 
| -    gtk_combo_box_set_active(
 | 
| -        GTK_COMBO_BOX(default_encoding_combobox_),
 | 
| -        default_encoding_combobox_model_->GetSelectedEncodingIndex(profile()));
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::SetFontsFromButton(StringPrefMember* name_pref,
 | 
| -                                      IntegerPrefMember* size_pref,
 | 
| -                                      GtkWidget* font_button) {
 | 
| -  PangoFontDescription* desc = pango_font_description_from_string(
 | 
| -      gtk_font_button_get_font_name(GTK_FONT_BUTTON(font_button)));
 | 
| -  int size = pango_font_description_get_size(desc);
 | 
| -  name_pref->SetValue(pango_font_description_get_family(desc));
 | 
| -  size_pref->SetValue(size / PANGO_SCALE);
 | 
| -  pango_font_description_free(desc);
 | 
| -  // Reset the button font in px, since the chooser will have set it in points.
 | 
| -  // Also, both sans and serif share the same size so we need to update them
 | 
| -  // both.
 | 
| -  NotifyPrefChanged(NULL);
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::OnSerifFontSet(GtkWidget* font_button) {
 | 
| -  SetFontsFromButton(&serif_name_,
 | 
| -                     &variable_width_size_,
 | 
| -                     font_button);
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::OnSansFontSet(GtkWidget* font_button) {
 | 
| -  SetFontsFromButton(&sans_serif_name_,
 | 
| -                     &variable_width_size_,
 | 
| -                     font_button);
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::OnFixedFontSet(GtkWidget* font_button) {
 | 
| -  SetFontsFromButton(&fixed_width_name_,
 | 
| -                     &fixed_width_size_,
 | 
| -                     font_button);
 | 
| -}
 | 
| -
 | 
| -void FontsPageGtk::OnDefaultEncodingChanged(GtkWidget* combo_box) {
 | 
| -  int index = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box));
 | 
| -  default_encoding_.SetValue(default_encoding_combobox_model_->
 | 
| -      GetEncodingCharsetByIndex(index));
 | 
| -}
 | 
| 
 |