diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index bf5d9e4d8..3967deed9 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -990,6 +990,7 @@ PREFERENCES_REMEMBERZOOMPAN;Se souvenir de niveau de zoom et de la position de l PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Retient le niveau de zoom et la position de l'image courante lors de l'ouverture d'une nouvelle image.\n\nCette option ne fonctionne que dans le mode "Éditeur unique" et quand "Méthode de dématriçage utilisé pour l'aperçu à un zoom <100%" is set to "Idem PP3". PREFERENCES_RGBDTL_LABEL;Nombre maximum d'unités de calcul pour la Réduction du bruit PREFERENCES_RGBDTL_TOOLTIP;La réduction du bruit nécessite un minimum d'à peu près 128Mo de RAM pour une image de 10MPix ou 512Mo pour une image de 40MPix, ainsi que 128Mo de RAM supplémentaire par unité de calcul. Plus il y aura d'unités de calcul travaillant en parallèle, plus ce sera rapide. Laissez la valeur à "0" pour utiliser automatiquement autant d'unités de calcul que possible. +PREFERENCES_SELECTFONT;Police principale PREFERENCES_SELECTFONT_COLPICKER;Police des pipette à couleur PREFERENCES_SELECTLANG;Choix de la langue PREFERENCES_SELECTTHEME;Choisissez un thème diff --git a/rtdata/languages/default b/rtdata/languages/default index 5431fa6ad..ea763fa2b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1041,6 +1041,7 @@ PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3". PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements. +PREFERENCES_SELECTFONT;Select main font PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font PREFERENCES_SELECTLANG;Select language PREFERENCES_SELECTTHEME;Select theme diff --git a/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css b/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css index 58684c908..e2f1102db 100644 --- a/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css @@ -72,8 +72,6 @@ * { color: @text-color; text-shadow: none; - font-size: 12px; - font-family: Arial; outline-style: none; /* removes the ugly dotted focus line */ border-image: none; transition: none; diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index 1037afe45..154f782f9 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -72,8 +72,6 @@ * { color: @text-color; text-shadow: none; - font-size: 12px; - font-family: Arial; outline-style: none; /* removes the ugly dotted focus line */ border-image: none; transition: none; diff --git a/rtgui/lockablecolorpicker.cc b/rtgui/lockablecolorpicker.cc index 582cbeafe..70a06ddb2 100644 --- a/rtgui/lockablecolorpicker.cc +++ b/rtgui/lockablecolorpicker.cc @@ -48,8 +48,8 @@ void LockableColorPicker::updateBackBuffer () Glib::RefPtr pangoContext = iArea->get_pango_context (); Pango::FontDescription fontd = pangoContext->get_font_description(); // set font family and size - fontd.set_family("sans"); - fontd.set_size(8 * Pango::SCALE); // 8pt, will be scaled by Gtk depending on the screen's DPI + fontd.set_family(options.CPFontFamily == "default" ? "sans" : options.CPFontFamily); + fontd.set_size((options.CPFontFamily == "default" ? 8 : options.CPFontSize) * Pango::SCALE); fontd.set_weight(Pango::WEIGHT_NORMAL); pangoContext->set_font_description (fontd); diff --git a/rtgui/main.cc b/rtgui/main.cc index 8d5a096c0..4d4406c37 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -56,6 +56,7 @@ Glib::ustring creditsPath; Glib::ustring licensePath; Glib::ustring argv1; bool simpleEditor; +Glib::RefPtr cssForced; Glib::RefPtr cssRT; //Glib::Threads::Thread* mainThread; @@ -332,6 +333,19 @@ int main(int argc, char **argv) } catch (...) { printf("Error: Can't load css file \"%s\"\n", filename.c_str()); } + + // Set the font face and size + if (options.fontFamily != "default") { + try { + cssForced = Gtk::CssProvider::create(); + cssForced->load_from_data (Glib::ustring::compose("* { font-family: %1; font-size: %2pt }", options.fontFamily, options.fontSize)); + Gtk::StyleContext::add_provider_for_screen(screen, cssForced, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } catch (Glib::Error &err) { + printf("Error: \"%s\"\n", err.what().c_str()); + } catch (...) { + printf("Error: Can't find the font named \"%s\"\n", options.fontFamily.c_str()); + } + } } #ifndef NDEBUG diff --git a/rtgui/options.cc b/rtgui/options.cc index 7da6c4b6f..192e9bbf9 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -338,6 +338,10 @@ void Options::setDefaults () browserDirPanelOpened = true; editorFilmStripOpened = true; historyPanelWidth = 330; + fontFamily = "default"; + fontSize = 10; + CPFontFamily = "default"; + CPFontSize = 8; lastScale = 5; panAccelFactor = 5; rememberZoomAndPan = true; @@ -1309,6 +1313,22 @@ int Options::readFromFile (Glib::ustring fname) historyPanelWidth = keyFile.get_integer ("GUI", "HistoryPanelWidth"); } + if (keyFile.has_key ("GUI", "FontFamily")) { + fontFamily = keyFile.get_string ("GUI", "FontFamily"); + } + + if (keyFile.has_key ("GUI", "FontSize")) { + fontSize = keyFile.get_integer ("GUI", "FontSize"); + } + + if (keyFile.has_key ("GUI", "CPFontFamily")) { + CPFontFamily = keyFile.get_string ("GUI", "CPFontFamily"); + } + + if (keyFile.has_key ("GUI", "CPFontSize")) { + CPFontSize = keyFile.get_integer ("GUI", "CPFontSize"); + } + if (keyFile.has_key ("GUI", "LastPreviewScale")) { lastScale = keyFile.get_integer ("GUI", "LastPreviewScale"); } @@ -1977,6 +1997,10 @@ int Options::saveToFile (Glib::ustring fname) keyFile.set_boolean ("GUI", "EditorFilmStripOpened", editorFilmStripOpened); keyFile.set_boolean ("GUI", "BrowserDirPanelOpened", browserDirPanelOpened); keyFile.set_integer ("GUI", "HistoryPanelWidth", historyPanelWidth); + keyFile.set_string ("GUI", "FontFamily", fontFamily); + keyFile.set_integer ("GUI", "FontSize", fontSize); + keyFile.set_string ("GUI", "CPFontFamily", CPFontFamily); + keyFile.set_integer ("GUI", "CPFontSize", CPFontSize); keyFile.set_integer ("GUI", "LastPreviewScale", lastScale); keyFile.set_integer ("GUI", "PanAccelFactor", panAccelFactor); keyFile.set_boolean ("GUI", "RememberZoomAndPan", rememberZoomAndPan); diff --git a/rtgui/options.h b/rtgui/options.h index 1cd9e63e6..446e8d2cc 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -135,6 +135,10 @@ public: int lastScale; int panAccelFactor; int lastCropSize; + Glib::ustring fontFamily; // RT's main font family + int fontSize; // RT's main font size (units: pt) + Glib::ustring CPFontFamily; // ColorPicker font family + int CPFontSize; // ColorPicker font size (units: pt) bool fbOnlyRaw; bool fbShowDateTime; bool fbShowBasicExif; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 1c0c2cb57..e96dd3f69 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -32,14 +32,15 @@ extern Options options; extern Glib::ustring argv0; -Glib::RefPtr css; +Glib::RefPtr themecss; +Glib::RefPtr fontcss; Preferences::Preferences (RTWindow *rtwindow) : Gtk::Dialog (M("MAIN_BUTTON_PREFERENCES"), *rtwindow, true) + , splash (nullptr) , rprofiles (nullptr) , iprofiles (nullptr) , parent (rtwindow) - , splash (nullptr) { regex = Glib::Regex::create(THEMEREGEXSTR, Glib::RegexCompileFlags::REGEX_CASELESS); @@ -924,6 +925,26 @@ Gtk::Widget* Preferences::getGeneralPanel () themeGrid->attach_next_to(*themelab, Gtk::POS_LEFT, 1, 1); themeGrid->attach_next_to(*theme, *themelab, Gtk::POS_RIGHT, 1, 1); + Gtk::Label* fontlab = Gtk::manage( new Gtk::Label (M("PREFERENCES_SELECTFONT")) ); + setExpandAlignProperties(fontlab, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE); + fontButton = Gtk::manage( new Gtk::FontButton ()); + setExpandAlignProperties(fontButton, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE); + fontButton->set_use_size(true); + fontButton->set_font_name(Glib::ustring::compose("%1 %2", options.fontFamily == "default" ? "sans" : options.fontFamily, options.fontSize)); + + themeGrid->attach_next_to(*fontlab, *theme, Gtk::POS_RIGHT, 1, 1); + themeGrid->attach_next_to(*fontButton, *fontlab, Gtk::POS_RIGHT, 1, 1); + + Gtk::Label* cpfontlab = Gtk::manage( new Gtk::Label (M("PREFERENCES_SELECTFONT_COLPICKER") + ":") ); + setExpandAlignProperties(cpfontlab, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE); + colorPickerFontButton = Gtk::manage( new Gtk::FontButton ()); + setExpandAlignProperties(fontButton, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE); + colorPickerFontButton->set_use_size(true); + colorPickerFontButton->set_font_name(Glib::ustring::compose("%1 %2", options.CPFontFamily == "default" ? "sans" : options.CPFontFamily, options.CPFontSize)); + + themeGrid->attach_next_to(*cpfontlab, *fontButton, Gtk::POS_RIGHT, 1, 1); + themeGrid->attach_next_to(*colorPickerFontButton, *cpfontlab, Gtk::POS_RIGHT, 1, 1); + Gtk::Label* cutOverlayLabel = Gtk::manage( new Gtk::Label (M("PREFERENCES_CUTOVERLAYBRUSH") + ":") ); setExpandAlignProperties(cutOverlayLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_BASELINE); butCropCol = Gtk::manage( new Gtk::ColorButton() ); @@ -937,7 +958,7 @@ Gtk::Widget* Preferences::getGeneralPanel () butNavGuideCol = Gtk::manage( new Gtk::ColorButton() ); setExpandAlignProperties(butNavGuideCol, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); butNavGuideCol->set_use_alpha(true); - themeGrid->attach_next_to(*navGuideLabel, *butCropCol, Gtk::POS_RIGHT, 1, 1); + themeGrid->attach_next_to(*navGuideLabel, *butCropCol, Gtk::POS_RIGHT, 2, 1); themeGrid->attach_next_to(*butNavGuideCol, *navGuideLabel, Gtk::POS_RIGHT, 1, 1); ftheme->add (*themeGrid); @@ -1069,6 +1090,7 @@ Gtk::Widget* Preferences::getGeneralPanel () langAutoDetectConn = ckbLangAutoDetect->signal_toggled().connect (sigc::mem_fun(*this, &Preferences::langAutoDetectToggled)); tconn = theme->signal_changed().connect( sigc::mem_fun(*this, &Preferences::themeChanged) ); + fconn = fontButton->signal_font_set().connect( sigc::mem_fun(*this, &Preferences::fontChanged) ); return mvbsd; } @@ -1457,6 +1479,14 @@ void Preferences::storePreferences () moptions.navGuideBrush[2] = NavGuideCol.get_blue(); moptions.navGuideBrush[3] = butNavGuideCol->get_alpha() / 65535.0; + Pango::FontDescription fd(fontButton->get_font_name()); + moptions.fontFamily = fd.get_family(); + moptions.fontSize = fd.get_size() / Pango::SCALE; + + Pango::FontDescription cpfd(colorPickerFontButton->get_font_name()); + moptions.CPFontFamily = cpfd.get_family(); + moptions.CPFontSize = cpfd.get_size() / Pango::SCALE; + #ifdef WIN32 moptions.gimpDir = gimpDir->get_filename (); moptions.psDir = psDir->get_filename (); @@ -1602,6 +1632,7 @@ void Preferences::fillPreferences () { tconn.block (true); + fconn.block (true); sconn.block (true); dfconn.block (true); ffconn.block (true); @@ -1672,6 +1703,9 @@ void Preferences::fillPreferences () butNavGuideCol->set_rgba(NavGuideCol); butNavGuideCol->set_alpha ( (unsigned short)(moptions.navGuideBrush[3] * 65535.0)); + fontButton->set_font_name(Glib::ustring::compose("%1 %2", options.fontFamily == "default" ? "sans" : options.fontFamily, options.fontSize)); + colorPickerFontButton->set_font_name(Glib::ustring::compose("%1 %2", options.CPFontFamily == "default" ? "sans" : options.CPFontFamily, options.CPFontSize)); + showDateTime->set_active (moptions.fbShowDateTime); showBasicExif->set_active (moptions.fbShowBasicExif); showExpComp->set_active (moptions.fbShowExpComp); @@ -1787,6 +1821,7 @@ void Preferences::fillPreferences () addc.block (false); setc.block (false); + fconn.block (false); tconn.block (false); sconn.block (false); dfconn.block (false); @@ -1864,6 +1899,12 @@ void Preferences::cancelPressed () switchThemeTo(options.theme); } + // set the initial font back + Pango::FontDescription fd(fontButton->get_font_name()); + if (fd.get_family() != options.fontFamily && (fd.get_size() / Pango::SCALE) != options.fontSize) { + switchFontTo(options.fontFamily == "default" ? "sans" : options.fontFamily, options.fontSize); + } + // update the profileStore if (useBundledProfiles->get_active () != options.useBundledProfiles) { // we have to rescan with the old value; @@ -2038,14 +2079,14 @@ void Preferences::switchThemeTo(Glib::ustring newTheme) Glib::ustring filename(Glib::build_filename(argv0, "themes", newTheme + ".css")); - if (!css) { - css = Gtk::CssProvider::create(); + if (!themecss) { + themecss = Gtk::CssProvider::create(); Glib::RefPtr screen = Gdk::Screen::get_default(); - Gtk::StyleContext::add_provider_for_screen(screen, css, GTK_STYLE_PROVIDER_PRIORITY_USER); + Gtk::StyleContext::add_provider_for_screen(screen, themecss, GTK_STYLE_PROVIDER_PRIORITY_USER); } try { - css->load_from_path (filename); + themecss->load_from_path (filename); } catch (Glib::Error &err) { printf("Error: Can't load css file \"%s\"\nMessage: %s\n", filename.c_str(), err.what().c_str()); } catch (...) { @@ -2053,6 +2094,33 @@ void Preferences::switchThemeTo(Glib::ustring newTheme) } } +void Preferences::fontChanged () +{ + + Pango::FontDescription fd(fontButton->get_font_name()); + switchFontTo(fd.get_family(), fd.get_size() / Pango::SCALE); +} + +void Preferences::switchFontTo(const Glib::ustring &newFontFamily, const int newFontSize) +{ + + if (newFontFamily != "default") { + if (!fontcss) { + fontcss = Gtk::CssProvider::create(); + Glib::RefPtr screen = Gdk::Screen::get_default(); + Gtk::StyleContext::add_provider_for_screen(screen, fontcss, GTK_STYLE_PROVIDER_PRIORITY_USER); + } + + try { + fontcss->load_from_data (Glib::ustring::compose("* { font-family: %1; font-size: %2pt }", newFontFamily, newFontSize)); + } catch (Glib::Error &err) { + printf("Error: \"%s\"\n", err.what().c_str()); + } catch (...) { + printf("Error: Can't find the font named \"%s\"\n", newFontFamily.c_str()); + } + } +} + void Preferences::workflowUpdate () { diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 749b9669b..d014263ed 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -138,6 +138,8 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener Gtk::ComboBoxText* curveBBoxPosC; Gtk::ComboBoxText* theme; + Gtk::FontButton* fontButton; + Gtk::FontButton* colorPickerFontButton; Gtk::ColorButton* butCropCol; Gtk::ColorButton* butNavGuideCol; @@ -200,7 +202,7 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener Glib::ustring storedValueImg; Options moptions; - sigc::connection tconn, sconn, addc, setc, dfconn, ffconn, bpconn, rpconn, ipconn; + sigc::connection tconn, sconn, fconn, addc, setc, dfconn, ffconn, bpconn, rpconn, ipconn; sigc::connection autoMonProfileConn, sndEnableConn, langAutoDetectConn, autocielabConn; Glib::ustring initialTheme; Glib::ustring initialFont; @@ -213,12 +215,14 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener void updateFFinfos (); void workflowUpdate(); void themeChanged (); + void fontChanged (); void forRAWComboChanged (); void forImageComboChanged (); void layoutComboChanged (); void bundledProfilesChanged (); void iccDirChanged (); void switchThemeTo (Glib::ustring newTheme); + void switchFontTo (const Glib::ustring &newFontFamily, const int newFontSize); bool splashClosed(GdkEventAny* event); int getThemeRowNumber(Glib::ustring& longThemeFName);