Приложения GTK3 могут быть стилизованы и тематически оформлены с помощью CSS.Как заставить GTK использовать исключительно CSS, поставляемый с моим приложением, вместо того, чтобы комбинировать / каскадировать его с темой, установленной в системе пользователя?
Зачем кому-то это нужносделать это ?Теоретически, CSS был бы отличной системой стилей, основанной на правилах, где вы просто добавляете один экран, полный тщательно выбранных правил, чтобы согласованно определять внешний вид вашего приложения.К сожалению, на практике люди склонны добавлять сотни мертвых, повторяющихся определений в свои таблицы стилей, тем самым подделывая саму природу каскадирования.
Фактическая проблема заключается в том, что мое приложение должно получить типичные, приглушенные темныесерый вид приложения обработки мультимедиа, независимо от глобальной темы, установленной в системе пользователя.Прочитав документацию GTK и учебное пособие GTKmm , я пришел к следующему коду для чтения своей собственной таблицы стилей CSS:
auto screen = Gdk::Screen::get_default();
auto css_provider = Gtk::CssProvider::create();
try {
css_provider->load_from_path(lib::resolveModulePath (stylesheetName, resourceSerachPath));
} catch(Glib::Error const& failure) {
WARN(gui, "Failure while loading stylesheet '%s': %s", cStr(stylesheetName), cStr(failure.what()));
}
Gtk::StyleContext::add_provider_for_screen(screen, css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
Технически это работает отлично.Однако - теперь я вынужден работать «против» правил CSS, присутствующих в системе пользователя.Если я начну с установки подходящего цвета рамки в правиле по умолчанию и темно-серого фона и подходящего цвета текста в правиле для GtkWindow, а также с помощью некоторого правила для полей ввода текста, я получу желаемый вид некоторых частей, но всякий раз, когда система пользователятема добавляет определенное определение для некоторого определенного виджета или комбинации виджетов, таким образом явно повторяя цвета вместо того, чтобы наследовать их от общего правила, мне нужно добавить еще одно конкретное правило в мою таблицу стилей приложения, чтобы исправить это конкретноедело.То есть, возможно, неправильно управляемая структура установленной системной темы вынуждает мою таблицу стилей приложения выполнять одну и ту же недобросовестную дурную практику и иметь сотни определений одного случая, повторяющих одни и те же значения снова и снова.
Вопросы
- Как я могу сказать GTK использовать только мою таблицу стилей для моего приложения?
- Есть ли жизнеспособная альтернатива, которая не столь радикальна, но все же позволяет мнеиспользовать CSS так, как это было задумано (минимальный набор правил + каскадирование)?