diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-11-02 22:47:57 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-11-02 22:47:57 +0000 |
| commit | 9bf2cf3509380663e6943f6b0d22dbec6002c332 (patch) | |
| tree | 86999381629818072353ffb15d78f5815efabf69 /src/wx/fonts_dialog.cc | |
| parent | 8a673bcf0cd26268899face63723c0f201fabcce (diff) | |
Fix incorrect preview of italic subtitles (#728).
This requires fonts to be configured with their italic versions so
that the italic font can be given to FontConfig and hence used to
render text. Bold font configuration is also added here although
bold subtitles aren't yet supported.
Diffstat (limited to 'src/wx/fonts_dialog.cc')
| -rw-r--r-- | src/wx/fonts_dialog.cc | 132 |
1 files changed, 47 insertions, 85 deletions
diff --git a/src/wx/fonts_dialog.cc b/src/wx/fonts_dialog.cc index ff5b107c9..b79580d7c 100644 --- a/src/wx/fonts_dialog.cc +++ b/src/wx/fonts_dialog.cc @@ -20,6 +20,7 @@ #include "fonts_dialog.h" #include "wx_util.h" #include "system_font_dialog.h" +#include "font_files_dialog.h" #include "lib/font.h" #include "lib/subtitle_content.h" #include <wx/wx.h> @@ -34,9 +35,8 @@ using boost::shared_ptr; FontsDialog::FontsDialog (wxWindow* parent, shared_ptr<SubtitleContent> content) : wxDialog (parent, wxID_ANY, _("Fonts")) , _content (content) - , _set_from_system (0) { - _fonts = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize (400, 200), wxLC_REPORT | wxLC_SINGLE_SEL); + _fonts = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize (550, 200), wxLC_REPORT | wxLC_SINGLE_SEL); { wxListItem ip; @@ -49,25 +49,33 @@ FontsDialog::FontsDialog (wxWindow* parent, shared_ptr<SubtitleContent> content) { wxListItem ip; ip.SetId (1); - ip.SetText (_("Font file")); - ip.SetWidth (300); + ip.SetText (_("Normal file")); + ip.SetWidth (150); _fonts->InsertColumn (1, ip); } - wxBoxSizer* sizer = new wxBoxSizer (wxHORIZONTAL); - sizer->Add (_fonts, 1, wxEXPAND); + { + wxListItem ip; + ip.SetId (2); + ip.SetText (_("Italic file")); + ip.SetWidth (150); + _fonts->InsertColumn (2, ip); + } { - wxSizer* s = new wxBoxSizer (wxVERTICAL); - _set_from_file = new wxButton (this, wxID_ANY, _("Set from .ttf file...")); - s->Add (_set_from_file, 0, wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); -#ifdef DCPOMATIC_WINDOWS - _set_from_system = new wxButton (this, wxID_ANY, _("Set from system font...")); - s->Add (_set_from_system, 0, wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); -#endif - sizer->Add (s, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP); + wxListItem ip; + ip.SetId (3); + ip.SetText (_("Bold file")); + ip.SetWidth (150); + _fonts->InsertColumn (3, ip); } + wxBoxSizer* sizer = new wxBoxSizer (wxHORIZONTAL); + sizer->Add (_fonts, 1, wxEXPAND | wxLEFT | wxRIGHT, DCPOMATIC_SIZER_X_GAP); + + _edit = new wxButton (this, wxID_ANY, _("Edit...")); + sizer->Add (_edit, 0, wxTOP | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); overall_sizer->Add (sizer, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_X_GAP); @@ -78,10 +86,7 @@ FontsDialog::FontsDialog (wxWindow* parent, shared_ptr<SubtitleContent> content) SetSizerAndFit (overall_sizer); - _set_from_file->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FontsDialog::set_from_file_clicked, this)); - if (_set_from_system) { - _set_from_system->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FontsDialog::set_from_system_clicked, this)); - } + _edit->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FontsDialog::edit_clicked, this)); _fonts->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, boost::bind (&FontsDialog::selection_changed, this)); _fonts->Bind (wxEVT_COMMAND_LIST_ITEM_DESELECTED, boost::bind (&FontsDialog::selection_changed, this)); @@ -97,15 +102,14 @@ FontsDialog::setup () } _fonts->DeleteAllItems (); - list<shared_ptr<Font> > fonts = content->fonts (); size_t n = 0; - for (list<shared_ptr<Font> >::const_iterator i = fonts.begin(); i != fonts.end(); ++i) { + BOOST_FOREACH (shared_ptr<Font> i, content->fonts ()) { wxListItem item; item.SetId (n); _fonts->InsertItem (item); - _fonts->SetItem (n, 0, std_to_wx ((*i)->id ())); - if ((*i)->file ()) { - _fonts->SetItem (n, 1, (*i)->file().get().leaf().string ()); + _fonts->SetItem (n, 0, std_to_wx (i->id ())); + if (i->file(FontFiles::NORMAL)) { + _fonts->SetItem (n, 1, i->file(FontFiles::NORMAL).get().leaf().string ()); } ++n; } @@ -114,86 +118,44 @@ FontsDialog::setup () } void -FontsDialog::set_from_file_clicked () +FontsDialog::selection_changed () { - /* The wxFD_CHANGE_DIR here prevents a `could not set working directory' error 123 on Windows when using - non-Latin filenames or paths. - */ - wxString default_dir = ""; -#ifdef DCPOMATIC_LINUX - if (boost::filesystem::exists ("/usr/share/fonts/truetype")) { - default_dir = "/usr/share/fonts/truetype"; - } else { - default_dir = "/usr/share/fonts"; - } -#endif -#ifdef DCPOMATIC_OSX - default_dir = "/System/Library/Fonts"; -#endif - - wxFileDialog* d = new wxFileDialog (this, _("Choose a font file"), default_dir, wxT (""), wxT ("*.ttf"), wxFD_CHANGE_DIR); - int const r = d->ShowModal (); - - if (r != wxID_OK) { - d->Destroy (); - return; - } - - set_selected_font_file (wx_to_std (d->GetPath ())); - d->Destroy (); + setup_sensitivity (); } void -FontsDialog::set_from_system_clicked () +FontsDialog::setup_sensitivity () { - SystemFontDialog* d = new SystemFontDialog (this); - int const r = d->ShowModal (); - - if (r != wxID_OK) { - d->Destroy (); - return; - } - - set_selected_font_file (d->get_font().get ()); - d->Destroy (); + int const item = _fonts->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + _edit->Enable (item != -1); } void -FontsDialog::set_selected_font_file (boost::filesystem::path file) +FontsDialog::edit_clicked () { shared_ptr<SubtitleContent> content = _content.lock (); if (!content) { return; } - int item = _fonts->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); - if (item == -1) { - return; - } - - string id = wx_to_std (_fonts->GetItemText (item, 0)); - - BOOST_FOREACH (shared_ptr<Font> i, content->fonts ()) { + int const item = _fonts->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + string const id = wx_to_std (_fonts->GetItemText (item, 0)); + shared_ptr<Font> font; + BOOST_FOREACH (shared_ptr<Font> i, content->fonts()) { if (i->id() == id) { - i->set_file (file); + font = i; } } - setup (); -} - -void -FontsDialog::selection_changed () -{ - setup_sensitivity (); -} + if (!font) { + return; + } -void -FontsDialog::setup_sensitivity () -{ - int const item = _fonts->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); - _set_from_file->Enable (item != -1); - if (_set_from_system) { - _set_from_system->Enable (item != -1); + FontFilesDialog* d = new FontFilesDialog (this, font->files ()); + if (d->ShowModal () == wxID_OK) { + font->set_files (d->get ()); } + d->Destroy (); + + setup (); } |
