diff options
Diffstat (limited to 'chrome/browser/views/options/fonts_page_view.cc')
-rw-r--r-- | chrome/browser/views/options/fonts_page_view.cc | 435 |
1 files changed, 0 insertions, 435 deletions
diff --git a/chrome/browser/views/options/fonts_page_view.cc b/chrome/browser/views/options/fonts_page_view.cc deleted file mode 100644 index 3a98b15..0000000 --- a/chrome/browser/views/options/fonts_page_view.cc +++ /dev/null @@ -1,435 +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/views/options/fonts_page_view.h" - -#include <windows.h> -#include <shlobj.h> -#include <vsstyle.h> -#include <vssym32.h> - -#include <vector> - -#include "app/l10n_util.h" -#include "app/resource_bundle.h" -#include "base/file_util.h" -#include "base/string_util.h" -#include "base/utf_string_conversions.h" -#include "chrome/browser/default_encoding_combo_model.h" -#include "chrome/browser/prefs/pref_service.h" -#include "chrome/browser/profile.h" -#include "chrome/browser/shell_dialogs.h" -#include "chrome/common/pref_names.h" -#include "gfx/canvas_skia.h" -#include "gfx/font.h" -#include "gfx/native_theme_win.h" -#include "grit/generated_resources.h" -#include "grit/theme_resources.h" -#include "grit/locale_settings.h" -#include "third_party/skia/include/core/SkBitmap.h" -#include "views/controls/button/native_button.h" -#include "views/grid_layout.h" -#include "views/standard_layout.h" -#include "views/widget/widget.h" - -//////////////////////////////////////////////////////////////////////////////// -// FontDisplayView - -class FontDisplayView : public views::View { - public: - FontDisplayView(); - virtual ~FontDisplayView(); - - // This method takes in font size in pixel units, instead of the normal point - // unit because users expect the font size number to represent pixels and not - // points. - void SetFontType(const std::wstring& font_name, - int font_size); - - std::wstring font_name() { return font_name_; } - int font_size() { return font_size_; } - - // views::View overrides: - virtual void Paint(gfx::Canvas* canvas); - virtual void Layout(); - virtual gfx::Size GetPreferredSize(); - - private: - views::Label* font_text_label_; - std::wstring font_name_; - int font_size_; - std::wstring font_text_label_string_; - - static const int kFontDisplayMaxWidthChars = 50; - static const int kFontDisplayMaxHeightChars = 1; - static const int kFontDisplayLabelPadding = 5; - - DISALLOW_COPY_AND_ASSIGN(FontDisplayView); -}; - -FontDisplayView::FontDisplayView() - : font_text_label_(new views::Label) { - AddChildView(font_text_label_); -} - -FontDisplayView::~FontDisplayView() { -} - -void FontDisplayView::SetFontType(const std::wstring& font_name, - int font_size) { - if (font_name.empty()) - return; - - font_name_ = font_name; - font_size_ = font_size; - std::wstring displayed_text = font_name_; - - // Append the font type and size. - displayed_text += L", "; - displayed_text += UTF8ToWide(::StringPrintf("%d", font_size_)); - HDC hdc = GetDC(NULL); - int font_size_point = MulDiv(font_size, 72, GetDeviceCaps(hdc, LOGPIXELSY)); - gfx::Font font = gfx::Font(font_name, font_size_point); - font_text_label_->SetFont(font); - font_text_label_->SetText(displayed_text); -} - -void FontDisplayView::Paint(gfx::Canvas* canvas) { - HDC dc = canvas->BeginPlatformPaint(); - RECT rect = { 0, 0, width(), height() }; - gfx::NativeTheme::instance()->PaintTextField( - dc, EP_BACKGROUND, EBS_NORMAL, 0, &rect, ::GetSysColor(COLOR_3DFACE), - true, true); - canvas->EndPlatformPaint(); -} - -void FontDisplayView::Layout() { - font_text_label_->SetBounds(0, 0, width(), height()); -} - -gfx::Size FontDisplayView::GetPreferredSize() { - gfx::Size size = font_text_label_->GetPreferredSize(); - size.set_width(size.width() + 2 * kFontDisplayLabelPadding); - size.set_height(size.height() + 2 * kFontDisplayLabelPadding); - return size; -} - -void EmbellishTitle(views::Label* title_label) { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - gfx::Font title_font = - rb.GetFont(ResourceBundle::BaseFont).DeriveFont(0, gfx::Font::BOLD); - title_label->SetFont(title_font); - SkColor title_color = - gfx::NativeTheme::instance()->GetThemeColorWithDefault( - gfx::NativeTheme::BUTTON, BP_GROUPBOX, GBS_NORMAL, TMT_TEXTCOLOR, - COLOR_WINDOWTEXT); - title_label->SetColor(title_color); -} - -FontsPageView::FontsPageView(Profile* profile) - : ALLOW_THIS_IN_INITIALIZER_LIST( - select_font_dialog_(SelectFontDialog::Create(this))), - fonts_group_title_(NULL), - encoding_group_title_(NULL), - fixed_width_font_change_page_button_(NULL), - serif_font_change_page_button_(NULL), - sans_serif_font_change_page_button_(NULL), - fixed_width_font_label_(NULL), - serif_font_label_(NULL), - sans_serif_font_label_(NULL), - default_encoding_combobox_(NULL), - serif_button_pressed_(false), - sans_serif_button_pressed_(false), - fixed_width_button_pressed_(false), - encoding_dropdown_clicked_(false), - font_type_being_changed_(NONE), - OptionsPageView(profile), - font_changed_(false), - default_encoding_changed_(false), - serif_font_size_pixel_(0), - sans_serif_font_size_pixel_(0), - fixed_width_font_size_pixel_(0) { - serif_name_.Init(prefs::kWebKitSerifFontFamily, profile->GetPrefs(), NULL); - serif_size_.Init(prefs::kWebKitDefaultFontSize, profile->GetPrefs(), NULL); - - sans_serif_name_.Init(prefs::kWebKitSansSerifFontFamily, profile->GetPrefs(), - NULL); - sans_serif_size_.Init(prefs::kWebKitDefaultFontSize, profile->GetPrefs(), - NULL); - - fixed_width_name_.Init(prefs::kWebKitFixedFontFamily, profile->GetPrefs(), - NULL); - fixed_width_size_.Init(prefs::kWebKitDefaultFixedFontSize, - profile->GetPrefs(), NULL); - - default_encoding_.Init(prefs::kDefaultCharset, profile->GetPrefs(), NULL); -} - -FontsPageView::~FontsPageView() { -} - -void FontsPageView::ButtonPressed( - views::Button* sender, const views::Event& event) { - HWND owning_hwnd = GetAncestor(GetWidget()->GetNativeView(), GA_ROOT); - std::wstring font_name; - int font_size = 0; - if (sender == serif_font_change_page_button_) { - font_type_being_changed_ = SERIF; - font_name = serif_font_display_view_->font_name(); - font_size = serif_font_size_pixel_; - } else if (sender == sans_serif_font_change_page_button_) { - font_type_being_changed_ = SANS_SERIF; - font_name = sans_serif_font_display_view_->font_name(); - font_size = sans_serif_font_size_pixel_; - } else if (sender == fixed_width_font_change_page_button_) { - font_type_being_changed_ = FIXED_WIDTH; - font_name = fixed_width_font_display_view_->font_name(); - font_size = fixed_width_font_size_pixel_; - } else { - NOTREACHED(); - return; - } - - select_font_dialog_->SelectFont(owning_hwnd, NULL, font_name, font_size); -} - -void FontsPageView::ItemChanged(views::Combobox* combo_box, - int prev_index, int new_index) { - if (combo_box == default_encoding_combobox_) { - if (prev_index != new_index) { // Default-Encoding has been changed. - encoding_dropdown_clicked_ = true; - default_encoding_selected_ = default_encoding_combobox_model_-> - GetEncodingCharsetByIndex(new_index); - default_encoding_changed_ = true; - } - } -} - -void FontsPageView::FontSelected(const gfx::Font& font, void* params) { - if (font.GetFontName().empty()) - return; - int font_size = font.GetFontSize(); - // Currently we do not have separate font sizes for Serif and Sans Serif. - // Therefore, when Serif font size is changed, Sans-Serif font size changes, - // and vice versa. - if (font_type_being_changed_ == SERIF) { - sans_serif_font_size_pixel_ = serif_font_size_pixel_ = font_size; - serif_font_display_view_->SetFontType( - font.GetFontName(), - serif_font_size_pixel_); - sans_serif_font_display_view_->SetFontType( - sans_serif_font_display_view_->font_name(), - sans_serif_font_size_pixel_); - } else if (font_type_being_changed_ == SANS_SERIF) { - sans_serif_font_size_pixel_ = serif_font_size_pixel_ = font_size; - sans_serif_font_display_view_->SetFontType( - font.GetFontName(), - sans_serif_font_size_pixel_); - serif_font_display_view_->SetFontType( - serif_font_display_view_->font_name(), - sans_serif_font_size_pixel_); - } else if (font_type_being_changed_ == FIXED_WIDTH) { - fixed_width_font_size_pixel_ = font_size; - fixed_width_font_display_view_->SetFontType(font.GetFontName(), font_size); - } - font_changed_ = true; -} - -void FontsPageView::SaveChanges() { - // Set Fonts. - if (font_changed_) { - serif_name_.SetValue(WideToUTF8(serif_font_display_view_->font_name())); - serif_size_.SetValue(serif_font_size_pixel_); - sans_serif_name_.SetValue( - WideToUTF8(sans_serif_font_display_view_->font_name())); - sans_serif_size_.SetValue(sans_serif_font_size_pixel_); - fixed_width_name_.SetValue(WideToUTF8( - fixed_width_font_display_view_->font_name())); - fixed_width_size_.SetValue(fixed_width_font_size_pixel_); - } - // Set Encoding. - if (default_encoding_changed_) - default_encoding_.SetValue(default_encoding_selected_); -} - -void FontsPageView::InitControlLayout() { - using views::GridLayout; - using views::ColumnSet; - - GridLayout* layout = CreatePanelGridLayout(this); - SetLayoutManager(layout); - - const int single_column_view_set_id = 0; - ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id); - - // Fonts group. - column_set->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, - GridLayout::USE_PREF, 0, 0); - fonts_group_title_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_FONT_TITLE)); - EmbellishTitle(fonts_group_title_); - fonts_group_title_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - layout->StartRow(0, single_column_view_set_id); - layout->AddView(fonts_group_title_); - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); - layout->StartRow(0, single_column_view_set_id); - InitFontLayout(); - layout->AddView(fonts_contents_); - layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing); - - // Encoding group. - encoding_group_title_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_ENCODING_TITLE)); - EmbellishTitle(encoding_group_title_); - encoding_group_title_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - layout->StartRow(0, single_column_view_set_id); - layout->AddView(encoding_group_title_); - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); - layout->StartRow(0, single_column_view_set_id); - InitEncodingLayout(); - layout->AddView(encoding_contents_); -} - -void FontsPageView::NotifyPrefChanged(const std::string* pref_name) { - if (!pref_name || *pref_name == prefs::kWebKitFixedFontFamily) { - fixed_width_font_size_pixel_ = fixed_width_size_.GetValue(); - fixed_width_font_display_view_->SetFontType( - UTF8ToWide(fixed_width_name_.GetValue()), - fixed_width_font_size_pixel_); - } - if (!pref_name || *pref_name == prefs::kWebKitSerifFontFamily) { - serif_font_size_pixel_ = serif_size_.GetValue(); - serif_font_display_view_->SetFontType( - UTF8ToWide(serif_name_.GetValue()), - serif_font_size_pixel_); - } - if (!pref_name || *pref_name == prefs::kWebKitSansSerifFontFamily) { - sans_serif_font_size_pixel_ = sans_serif_size_.GetValue(); - sans_serif_font_display_view_->SetFontType( - UTF8ToWide(sans_serif_name_.GetValue()), - sans_serif_font_size_pixel_); - } -} - -void FontsPageView::InitFontLayout() { - // Fixed width. - fixed_width_font_display_view_ = new FontDisplayView; - fixed_width_font_change_page_button_ = new views::NativeButton( - this, - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_BUTTON_LABEL)); - - fixed_width_font_label_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_FIXED_WIDTH_LABEL)); - fixed_width_font_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - - // Serif font. - serif_font_display_view_ = new FontDisplayView; - serif_font_change_page_button_ = new views::NativeButton( - this, - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_BUTTON_LABEL)); - - serif_font_label_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SERIF_LABEL)); - serif_font_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - - // Sans Serif font. - sans_serif_font_display_view_ = new FontDisplayView; - sans_serif_font_change_page_button_ = new views::NativeButton( - this, - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_BUTTON_LABEL)); - - sans_serif_font_label_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SANS_SERIF_LABEL)); - sans_serif_font_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - - // Now add the views. - using views::GridLayout; - using views::ColumnSet; - - fonts_contents_ = new views::View; - GridLayout* layout = new GridLayout(fonts_contents_); - fonts_contents_->SetLayoutManager(layout); - - const int triple_column_view_set_id = 0; - ColumnSet* column_set = layout->AddColumnSet(triple_column_view_set_id); - - column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, - GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, - GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, - GridLayout::USE_PREF, 0, 0); - - // Serif font controls. - layout->StartRow(0, triple_column_view_set_id); - layout->AddView(serif_font_label_); - layout->AddView(serif_font_display_view_, 1, 1, - GridLayout::FILL, GridLayout::CENTER); - layout->AddView(serif_font_change_page_button_); - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); - - // Sans serif font controls. - layout->StartRow(0, triple_column_view_set_id); - layout->AddView(sans_serif_font_label_); - layout->AddView(sans_serif_font_display_view_, 1, 1, - GridLayout::FILL, GridLayout::CENTER); - layout->AddView(sans_serif_font_change_page_button_); - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); - - // Fixed-width font controls. - layout->StartRow(0, triple_column_view_set_id); - layout->AddView(fixed_width_font_label_); - layout->AddView(fixed_width_font_display_view_, 1, 1, - GridLayout::FILL, GridLayout::CENTER); - layout->AddView(fixed_width_font_change_page_button_); - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); -} - -void FontsPageView::InitEncodingLayout() { - default_encoding_combobox_label_ = new views::Label( - l10n_util::GetString( - IDS_FONT_LANGUAGE_SETTING_FONT_DEFAULT_ENCODING_SELECTOR_LABEL)); - default_encoding_combobox_model_.reset(new DefaultEncodingComboboxModel); - default_encoding_combobox_ = new views::Combobox( - default_encoding_combobox_model_.get()); - int selected_encoding_index = default_encoding_combobox_model_-> - GetSelectedEncodingIndex(profile()); - default_encoding_combobox_->SetSelectedItem(selected_encoding_index); - default_encoding_selected_ = default_encoding_combobox_model_-> - GetEncodingCharsetByIndex(selected_encoding_index); - default_encoding_combobox_->set_listener(this); - - // Now add the views. - using views::GridLayout; - using views::ColumnSet; - - encoding_contents_ = new views::View; - GridLayout* layout = new GridLayout(encoding_contents_); - encoding_contents_->SetLayoutManager(layout); - - // Double column. - const int double_column_view_set_id = 2; - ColumnSet* column_set = layout->AddColumnSet(double_column_view_set_id); - column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, - GridLayout::USE_PREF, 0, 0); - column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing); - column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, - GridLayout::USE_PREF, 0, 0); - - // Add Encoding Combobox. - layout->StartRow(0, double_column_view_set_id); - layout->AddView(default_encoding_combobox_label_); - layout->AddView(default_encoding_combobox_, 1, 1, GridLayout::FILL, - GridLayout::CENTER); -} |