diff --git a/.travis.yml b/.travis.yml.fixme similarity index 85% rename from .travis.yml rename to .travis.yml.fixme index 9bf1f651f..0aa85f3b4 100644 --- a/.travis.yml +++ b/.travis.yml.fixme @@ -30,9 +30,10 @@ env: before_install: - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + - sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ xenial main" - sudo apt-get -qq update - - sudo apt-get install gcc-6.2 g++-6.2 - - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6.2 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6.2 + - sudo apt-get install gcc-6 g++-6 + - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 - sudo apt-get install build-essential cmake curl git libbz2-dev libcanberra-gtk3-dev libexiv2-dev libexpat-dev libfftw3-dev libglibmm-2.4-dev libgtk-3-dev libgtkmm-3.0-dev libiptcdata0-dev libjpeg8-dev liblcms2-dev libpng12-dev libsigc++-2.0-dev libtiff5-dev zlib1g-dev before_script: diff --git a/rtengine/cache.h b/rtengine/cache.h index f4c232673..ec284b2ae 100644 --- a/rtengine/cache.h +++ b/rtengine/cache.h @@ -19,11 +19,12 @@ #pragma once -#include -#include -#include -#include #include +#include +#include +#include +#include +#include #include "../rtgui/threadutils.h" @@ -87,9 +88,9 @@ public: lru_list.splice( lru_list.begin(), lru_list, - store_it->second.lru_list_it + store_it->second->lru_list_it ); - value = store_it->second.value; + value = store_it->second->value; } mutex.unlock(); @@ -139,7 +140,7 @@ public: mutex.lock(); if (hook) { for (const auto& entry : store) { - hook->onRemove(entry.first, entry.second.value); + hook->onRemove(entry.first, entry.second->value); } } lru_list.clear(); @@ -152,13 +153,13 @@ private: using Store = typename std::conditional< cache_helper::has_hash::value, - std::unordered_map, - std::map + std::unordered_map>, + std::map> >::type; using StoreIterator = typename Store::iterator; using StoreConstIterator = typename Store::const_iterator; - typedef std::list LruList; + using LruList = std::list; using LruListIterator = typename LruList::iterator; struct Value { @@ -176,7 +177,7 @@ private: { const StoreIterator store_it = lru_list.back(); if (hook) { - hook->onDiscard(store_it->first, store_it->second.value); + hook->onDiscard(store_it->first, store_it->second->value); } store.erase(store_it); lru_list.pop_back(); @@ -193,23 +194,25 @@ private: discard(); } lru_list.push_front(store.end()); - const Value v = { - value, - lru_list.begin() - }; - lru_list.front() = store.emplace(key, v).first; + std::unique_ptr v( + new Value{ + value, + lru_list.begin() + } + ); + lru_list.front() = store.emplace(key, std::move(v)).first; } } else { if (mode == Mode::UNCOND || mode == Mode::KNOWN) { if (hook) { - hook->onDisplace(key, store_it->second.value); + hook->onDisplace(key, store_it->second->value); } lru_list.splice( lru_list.begin(), lru_list, - store_it->second.lru_list_it + store_it->second->lru_list_it ); - store_it->second.value = value; + store_it->second->value = value; } } mutex.unlock(); @@ -220,9 +223,9 @@ private: void remove(const StoreIterator& store_it) { if (hook) { - hook->onRemove(store_it->first, store_it->second.value); + hook->onRemove(store_it->first, store_it->second->value); } - lru_list.erase(store_it->second.lru_list_it); + lru_list.erase(store_it->second->lru_list_it); store.erase(store_it); } diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index ed613c61f..5b28d94c1 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -41,6 +41,8 @@ Preferences::Preferences (RTWindow *rtwindow) , rprofiles (nullptr) , iprofiles (nullptr) , parent (rtwindow) + , newFont (false) + , newCPFont (false) { regex = Glib::Regex::create(THEMEREGEXSTR, Glib::RegexCompileFlags::REGEX_CASELESS); @@ -56,6 +58,10 @@ Preferences::Preferences (RTWindow *rtwindow) set_size_request (650, -1); set_default_size (options.preferencesWidth, options.preferencesHeight); + Pango::FontDescription defaultFont = get_style_context ()->get_font(); + initialFontFamily = defaultFont.get_family (); + initialFontSize = defaultFont.get_size () / Pango::SCALE; + Gtk::Box* mainBox = get_content_area (); //GTK318 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 20 @@ -1032,7 +1038,11 @@ Gtk::Widget* Preferences::getGeneralPanel () 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)); + if (options.fontFamily == "default") { + fontButton->set_font_name (Glib::ustring::compose("%1 %2", initialFontFamily, initialFontSize)); + } else { + fontButton->set_font_name (Glib::ustring::compose("%1 %2", 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); @@ -1042,7 +1052,11 @@ Gtk::Widget* Preferences::getGeneralPanel () 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)); + if (options.fontFamily == "default") { + colorPickerFontButton->set_font_name (Glib::ustring::compose("%1 %2", initialFontFamily, initialFontSize)); + } else { + colorPickerFontButton->set_font_name (Glib::ustring::compose("%1 %2", 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); @@ -1193,6 +1207,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) ); + cpfconn = colorPickerFontButton->signal_font_set().connect( sigc::mem_fun(*this, &Preferences::cpFontChanged) ); return mvbsd; } @@ -1582,12 +1597,16 @@ void Preferences::storePreferences () 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; + if (newFont) { + 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; + if (newCPFont) { + moptions.CPFontFamily = cpfd.get_family(); + moptions.CPFontSize = cpfd.get_size() / Pango::SCALE; + } #ifdef WIN32 moptions.gimpDir = gimpDir->get_filename (); @@ -1758,6 +1777,7 @@ void Preferences::fillPreferences () tconn.block (true); fconn.block (true); + cpfconn.block (true); sconn.block (true); dfconn.block (true); ffconn.block (true); @@ -1843,8 +1863,17 @@ 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)); + if (options.fontFamily == "default") { + fontButton->set_font_name (Glib::ustring::compose("%1 %2", initialFontFamily, initialFontSize)); + } else { + fontButton->set_font_name (Glib::ustring::compose("%1 %2", options.fontFamily, options.fontSize)); + } + + if (options.CPFontFamily == "default") { + colorPickerFontButton->set_font_name (Glib::ustring::compose("%1 %2", initialFontFamily, initialFontSize)); + } else { + colorPickerFontButton->set_font_name (Glib::ustring::compose("%1 %2", options.CPFontFamily, options.CPFontSize)); + } showDateTime->set_active (moptions.fbShowDateTime); showBasicExif->set_active (moptions.fbShowBasicExif); @@ -1965,6 +1994,7 @@ void Preferences::fillPreferences () addc.block (false); setc.block (false); + cpfconn.block (false); fconn.block (false); tconn.block (false); sconn.block (false); @@ -2047,7 +2077,11 @@ void Preferences::cancelPressed () // 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); + if (options.fontFamily == "default") { + switchFontTo(initialFontFamily, initialFontSize); + } else { + switchFontTo(options.fontFamily, options.fontSize); + } } // update the profileStore @@ -2244,10 +2278,17 @@ void Preferences::switchThemeTo(Glib::ustring newTheme) void Preferences::fontChanged () { + newFont = true; Pango::FontDescription fd(fontButton->get_font_name()); switchFontTo(fd.get_family(), fd.get_size() / Pango::SCALE); } +void Preferences::cpFontChanged () +{ + + newCPFont = true; +} + void Preferences::switchFontTo(const Glib::ustring &newFontFamily, const int newFontSize) { @@ -2272,6 +2313,13 @@ void Preferences::switchFontTo(const Glib::ustring &newFontFamily, const int new printf("Error: Can't find the font named \"%s\"\n", newFontFamily.c_str()); } } + else { + if (fontcss) { + fontcss = Gtk::CssProvider::create(); + Glib::RefPtr screen = Gdk::Screen::get_default(); + Gtk::StyleContext::remove_provider_for_screen(screen, fontcss); + } + } } void Preferences::workflowUpdate () diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 50f72a957..18c8a466b 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -208,10 +208,13 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener Glib::ustring storedValueImg; Options moptions; - sigc::connection tconn, sconn, fconn, addc, setc, dfconn, ffconn, bpconn, rpconn, ipconn; + sigc::connection tconn, sconn, fconn, cpfconn, addc, setc, dfconn, ffconn, bpconn, rpconn, ipconn; sigc::connection autoMonProfileConn, sndEnableConn, langAutoDetectConn, autocielabConn; Glib::ustring initialTheme; - Glib::ustring initialFont; + Glib::ustring initialFontFamily; + int initialFontSize; + bool newFont; + bool newCPFont; void fillPreferences (); void storePreferences (); @@ -222,6 +225,7 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener void workflowUpdate(); void themeChanged (); void fontChanged (); + void cpFontChanged (); void forRAWComboChanged (); void forImageComboChanged (); void layoutComboChanged ();