// SPDX-License-Identifier: GPL-2.0-or-later /** \file * Gtk helper code. */ /* * Authors: * Jabiertxof * Martin Owens * * Copyright (C) 2017-2021 Authors * * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ #ifndef UI_THEMES_H_SEEN #define UI_THEMES_H_SEEN #include #include #include #include #include #include #include #include #include #include "preferences.h" namespace Inkscape { namespace UI { /** * A simple mediator class that sets the state of a Gtk::ToggleToolButton when * a preference is changed. Unlike the PrefPusher class, this does not provide * the reverse process, so you still need to write your own handler for the * "toggled" signal on the ToggleToolButton. */ typedef std::map gtkThemeList; class ThemeContext { public: ThemeContext(); ~ThemeContext() = default; // Name of theme -> has dark theme typedef std::map gtkThemeList; void inkscape_fill_gtk(const gchar *path, gtkThemeList &themes); std::map get_available_themes(); void add_gtk_css(bool only_providers, bool cached = false); void add_icon_theme(); Glib::ustring get_symbolic_colors(); Glib::RefPtr getColorizeProvider() { return _colorizeprovider;} Glib::RefPtr getContrastThemeProvider() { return _contrastthemeprovider;} Glib::RefPtr getThemeProvider() { return _themeprovider;} Glib::RefPtr getStyleProvider() { return _styleprovider;} Glib::RefPtr getUserProvider() { return _userprovider;} sigc::signal getChangeThemeSignal() { return _signal_change_theme;} void themechangecallback(); /// Set application-wide font size adjustment by a factor, where 1 is 100% (no change) void adjustGlobalFontScale(double factor); /// Get current font scaling factor (50 - 150, percent of "normal" size) double getFontScale() const; /// Save font scaling factor in preferences void saveFontScale(double scale); static Glib::ustring get_font_scale_pref_path() { return "/theme/fontscale"; } /// User-selected monospaced font used by XML dialog and attribute editor Pango::FontDescription getMonospacedFont() const; void saveMonospacedFont(Pango::FontDescription desc); static Glib::ustring get_monospaced_font_pref_path() { return "/ui/mono-font/desc"; } // True if current theme (applied one) is dark bool isCurrentThemeDark(Gtk::Container *window); static std::vector getHighlightColors(Gtk::Window *window); static void initialize_source_syntax_styles(); static void select_default_syntax_style(bool dark_theme); private: // user change theme sigc::signal _signal_change_theme; Glib::RefPtr _styleprovider; Glib::RefPtr _themeprovider; Glib::RefPtr _contrastthemeprovider; Glib::RefPtr _colorizeprovider; Glib::RefPtr _spinbuttonprovider; Glib::RefPtr _userprovider; #if __APPLE__ Glib::RefPtr _macstyleprovider; #endif std::unique_ptr _spinbutton_observer; Glib::RefPtr _fontsizeprovider = Gtk::CssProvider::create(); }; } } #endif /* !UI_THEMES_H_SEEN */ /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) indent-tabs-mode:nil fill-column:99 End: */ // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :