From 2c12cd615526552533fcd14783c270baa65a8ab8 Mon Sep 17 00:00:00 2001 From: Adis Durakovic Date: Wed, 1 Jun 2022 12:26:52 +0200 Subject: [PATCH 1/4] feat: show default page labels --- src/object/sp-page.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/object/sp-page.cpp b/src/object/sp-page.cpp index 7107c10e71..c7c51d54d9 100644 --- a/src/object/sp-page.cpp +++ b/src/object/sp-page.cpp @@ -10,10 +10,10 @@ * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ -#include - #include "sp-page.h" +#include + #include "attributes.h" #include "desktop.h" #include "display/control/canvas-page.h" @@ -367,8 +367,7 @@ void SPPage::swapPage(SPPage *other, bool with_objects) // Swapping with the viewport page must be handled gracefully. if (this->isViewportPage()) { auto other_rect = other->getDesktopRect(); - auto new_rect = Geom::Rect(Geom::Point(0, 0), - Geom::Point(other_rect.width(), other_rect.height())); + auto new_rect = Geom::Rect(Geom::Point(0, 0), Geom::Point(other_rect.width(), other_rect.height())); this->document->fitToRect(new_rect, false); } else if (other->isViewportPage()) { other->swapPage(this, with_objects); @@ -384,7 +383,7 @@ void SPPage::swapPage(SPPage *other, bool with_objects) void SPPage::update(SPCtx * /*ctx*/, unsigned int /*flags*/) { // This is manual because this is not an SPItem, but it's own visual identity. - _canvas_item->update(getDesktopRect(), this->label()); + _canvas_item->update(getDesktopRect(), this->getLabel().c_str()); } /** -- GitLab From ae686d05c1a905e748a991b0a6267a539ca27e05 Mon Sep 17 00:00:00 2001 From: Adis Durakovic Date: Fri, 3 Jun 2022 10:47:04 +0200 Subject: [PATCH 2/4] feat: add default labels in preferences --- src/ui/dialog/inkscape-preferences.cpp | 2420 +++++++++++++----------- 1 file changed, 1359 insertions(+), 1061 deletions(-) diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index d8163e9d95..d190d6434b 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -15,87 +15,76 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" // only include where actually required! +#include "config.h" // only include where actually required! #endif -#include "inkscape-preferences.h" - -#include -#include -#include -#include #include - +#include #include -#include #include +#include #include +#include +#include +#include +#include #include "auto-save.h" #include "cms-system.h" +#include "display/control/canvas-grid.h" +#include "display/nr-filter-gaussian.h" #include "document.h" #include "enums.h" +#include "extension/internal/gdkpixbuf-input.h" +#include "inkscape-preferences.h" #include "inkscape-window.h" #include "inkscape.h" +#include "io/resource.h" #include "message-stack.h" +#include "object/color-profile.h" #include "path-prefix.h" #include "preferences.h" #include "selcue.h" #include "selection-chemistry.h" #include "selection.h" #include "style.h" - -#include "display/control/canvas-grid.h" -#include "display/nr-filter-gaussian.h" - -#include "extension/internal/gdkpixbuf-input.h" - -#include "io/resource.h" - -#include "object/color-profile.h" - #include "svg/svg-color.h" - #include "ui/desktop/menubar.h" #include "ui/interface.h" -#include "ui/shortcuts.h" #include "ui/modifiers.h" +#include "ui/shortcuts.h" +#include "ui/themes.h" #include "ui/util.h" -#include "ui/widget/style-swatch.h" #include "ui/widget/canvas.h" -#include "ui/themes.h" - +#include "ui/widget/style-swatch.h" #include "util/trim.h" - #include "widgets/desktop-widget.h" -#include "widgets/toolbox.h" #include "widgets/spw-utilities.h" - -#include +#include "widgets/toolbox.h" #if WITH_GSPELL -# include "ui/dialog/spellcheck.h" // for get_available_langs -# ifdef _WIN32 -# include -# endif +#include "ui/dialog/spellcheck.h" // for get_available_langs +#ifdef _WIN32 +#include +#endif #endif namespace Inkscape { namespace UI { namespace Dialog { +using Inkscape::CMSSystem; +using Inkscape::IO::Resource::get_filename; +using Inkscape::IO::Resource::UIS; using Inkscape::UI::Widget::DialogPage; using Inkscape::UI::Widget::PrefCheckButton; -using Inkscape::UI::Widget::PrefRadioButton; using Inkscape::UI::Widget::PrefItem; +using Inkscape::UI::Widget::PrefRadioButton; using Inkscape::UI::Widget::PrefRadioButtons; using Inkscape::UI::Widget::PrefSpinButton; using Inkscape::UI::Widget::StyleSwatch; -using Inkscape::CMSSystem; -using Inkscape::IO::Resource::get_filename; -using Inkscape::IO::Resource::UIS; -std::function reset_icon = []() { +std::function reset_icon = []() { auto image = Gtk::make_managed(); image->set_from_icon_name("reset", Gtk::ICON_SIZE_BUTTON); image->set_opacity(0.6); @@ -199,16 +188,16 @@ void InkscapePreferences::remove_highlight(Gtk::Label *label) } InkscapePreferences::InkscapePreferences() - : DialogBase("/dialogs/preferences", "Preferences"), - _minimum_width(0), - _minimum_height(0), - _natural_width(900), - _natural_height(700), - _current_page(nullptr), - _init(true) -{ - //get the width of a spinbutton - Inkscape::UI::Widget::SpinButton* sb = new Inkscape::UI::Widget::SpinButton; + : DialogBase("/dialogs/preferences", "Preferences") + , _minimum_width(0) + , _minimum_height(0) + , _natural_width(900) + , _natural_height(700) + , _current_page(nullptr) + , _init(true) +{ + // get the width of a spinbutton + Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton; sb->set_width_chars(6); add(*sb); show_all_children(); @@ -219,15 +208,15 @@ InkscapePreferences::InkscapePreferences() remove(*sb); delete sb; - //Main HBox + // Main HBox auto hbox_list_page = Gtk::manage(new Gtk::Box()); hbox_list_page->set_border_width(12); hbox_list_page->set_spacing(12); add(*hbox_list_page); - //Pagelist + // Pagelist auto list_box = Gtk::manage(new Gtk::Box(Gtk::Orientation::ORIENTATION_VERTICAL, 3)); - Gtk::ScrolledWindow* scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); + Gtk::ScrolledWindow *scrolled_window = Gtk::manage(new Gtk::ScrolledWindow()); _search.set_valign(Gtk::Align::ALIGN_START); list_box->pack_start(_search, false, true, 0); list_box->pack_start(*scrolled_window, false, true, 0); @@ -247,9 +236,10 @@ InkscapePreferences::InkscapePreferences() _page_list_model_sort->set_sort_column(_page_list_columns._col_name, Gtk::SortType::SORT_ASCENDING); _page_list.set_enable_search(false); _page_list.set_model(_page_list_model_sort); - _page_list.append_column("name",_page_list_columns._col_name); + _page_list.append_column("name", _page_list_columns._col_name); Glib::RefPtr page_list_selection = _page_list.get_selection(); - page_list_selection->signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::on_pagelist_selection_changed)); + page_list_selection->signal_changed().connect( + sigc::mem_fun(*this, &InkscapePreferences::on_pagelist_selection_changed)); page_list_selection->set_mode(Gtk::SELECTION_BROWSE); // Search @@ -317,11 +307,11 @@ InkscapePreferences::InkscapePreferences() return recursive_filter(key_lower, row); }); - //Pages + // Pages auto vbox_page = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); - Gtk::Frame* title_frame = Gtk::manage(new Gtk::Frame()); + Gtk::Frame *title_frame = Gtk::manage(new Gtk::Frame()); - Gtk::ScrolledWindow* pageScroller = Gtk::manage(new Gtk::ScrolledWindow()); + Gtk::ScrolledWindow *pageScroller = Gtk::manage(new Gtk::ScrolledWindow()); pageScroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); pageScroller->set_propagate_natural_width(); pageScroller->set_propagate_natural_height(); @@ -346,20 +336,17 @@ InkscapePreferences::InkscapePreferences() signal_map().connect(sigc::mem_fun(*this, &InkscapePreferences::showPage)); - //calculate the size request for this dialog + // calculate the size request for this dialog _page_list.expand_all(); _page_list_model->foreach_iter(sigc::mem_fun(*this, &InkscapePreferences::GetSizeRequest)); _page_list.collapse_all(); // Set Custom theme Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - _theme_oberver = prefs->createObserver("/theme/", [=]() { - prefs->setString("/options/boot/theme", "custom"); - }); + _theme_oberver = prefs->createObserver("/theme/", [=]() { prefs->setString("/options/boot/theme", "custom"); }); } -InkscapePreferences::~InkscapePreferences() -= default; +InkscapePreferences::~InkscapePreferences() = default; /** * Get child Labels that match a key in a widget grid @@ -416,14 +403,12 @@ int InkscapePreferences::num_widgets_in_grid(Glib::ustring const &key, Gtk::Widg return results; } - bool InkscapePreferences::on_outline_overlay_changed(GdkEventFocus * /* focus_event */) { if (auto *desktop = SP_ACTIVE_DESKTOP) { desktop->getCanvas()->redraw_all(); } return false; - } /** @@ -662,7 +647,7 @@ void InkscapePreferences::highlight_results(Glib::ustring const &key, Gtk::TreeM */ bool InkscapePreferences::recursive_filter(Glib::ustring &key, Gtk::TreeModel::const_iterator const &iter) { - if(_show_all) + if (_show_all) return true; auto row_label = iter->get_value(_page_list_columns._col_name).lowercase(); if (key == "") { @@ -689,18 +674,19 @@ bool InkscapePreferences::recursive_filter(Glib::ustring &key, Gtk::TreeModel::c return false; } -Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, int id) +Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage &p, Glib::ustring title, int id) { - return AddPage(p, title, Gtk::TreeModel::iterator() , id); + return AddPage(p, title, Gtk::TreeModel::iterator(), id); } -Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent, int id) +Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage &p, Glib::ustring title, + Gtk::TreeModel::iterator parent, int id) { Gtk::TreeModel::iterator iter; if (parent) - iter = _page_list_model->append((*parent).children()); + iter = _page_list_model->append((*parent).children()); else - iter = _page_list_model->append(); + iter = _page_list_model->append(); Gtk::TreeModel::Row row = *iter; row[_page_list_columns._col_name] = title; row[_page_list_columns._col_id] = id; @@ -710,43 +696,43 @@ Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustri void InkscapePreferences::AddSelcueCheckbox(DialogPage &p, Glib::ustring const &prefs_path, bool def_value) { - PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); - cb->init ( _("Show selection cue"), prefs_path + "/selcue", def_value); - p.add_line( false, "", *cb, "", _("Whether selected objects display a selection cue (the same as in selector)")); + PrefCheckButton *cb = Gtk::manage(new PrefCheckButton); + cb->init(_("Show selection cue"), prefs_path + "/selcue", def_value); + p.add_line(false, "", *cb, "", _("Whether selected objects display a selection cue (the same as in selector)")); } void InkscapePreferences::AddGradientCheckbox(DialogPage &p, Glib::ustring const &prefs_path, bool def_value) { - PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); - cb->init ( _("Enable gradient editing"), prefs_path + "/gradientdrag", def_value); - p.add_line( false, "", *cb, "", _("Whether selected objects display gradient editing controls")); + PrefCheckButton *cb = Gtk::manage(new PrefCheckButton); + cb->init(_("Enable gradient editing"), prefs_path + "/gradientdrag", def_value); + p.add_line(false, "", *cb, "", _("Whether selected objects display gradient editing controls")); } -void InkscapePreferences::AddConvertGuidesCheckbox(DialogPage &p, Glib::ustring const &prefs_path, bool def_value) { - PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); - cb->init ( _("Conversion to guides uses edges instead of bounding box"), prefs_path + "/convertguides", def_value); - p.add_line( false, "", *cb, "", _("Converting an object to guides places these along the object's true edges (imitating the object's shape), not along the bounding box")); +void InkscapePreferences::AddConvertGuidesCheckbox(DialogPage &p, Glib::ustring const &prefs_path, bool def_value) +{ + PrefCheckButton *cb = Gtk::manage(new PrefCheckButton); + cb->init(_("Conversion to guides uses edges instead of bounding box"), prefs_path + "/convertguides", def_value); + p.add_line(false, "", *cb, "", + _("Converting an object to guides places these along the object's true edges (imitating the object's " + "shape), not along the bounding box")); } void InkscapePreferences::AddDotSizeSpinbutton(DialogPage &p, Glib::ustring const &prefs_path, double def_value) { - PrefSpinButton* sb = Gtk::manage( new PrefSpinButton); - sb->init ( prefs_path + "/dot-size", 0.0, 1000.0, 0.1, 10.0, def_value, false, false); - p.add_line( false, _("Ctrl+click _dot size:"), *sb, _("times current stroke width"), - _("Size of dots created with Ctrl+click (relative to current stroke width)"), - false ); + PrefSpinButton *sb = Gtk::manage(new PrefSpinButton); + sb->init(prefs_path + "/dot-size", 0.0, 1000.0, 0.1, 10.0, def_value, false, false); + p.add_line(false, _("Ctrl+click _dot size:"), *sb, _("times current stroke width"), + _("Size of dots created with Ctrl+click (relative to current stroke width)"), false); } void InkscapePreferences::AddBaseSimplifySpinbutton(DialogPage &p, Glib::ustring const &prefs_path, double def_value) { - PrefSpinButton* sb = Gtk::manage( new PrefSpinButton); - sb->init ( prefs_path + "/base-simplify", 0.0, 100.0, 1.0, 10.0, def_value, false, false); - p.add_line( false, _("Base simplify:"), *sb, _("on dynamic LPE simplify"), - _("Base simplify of dynamic LPE based simplify"), - false ); + PrefSpinButton *sb = Gtk::manage(new PrefSpinButton); + sb->init(prefs_path + "/base-simplify", 0.0, 100.0, 1.0, 10.0, def_value, false, false); + p.add_line(false, _("Base simplify:"), *sb, _("on dynamic LPE simplify"), + _("Base simplify of dynamic LPE based simplify"), false); } - static void StyleFromSelectionToTool(Glib::ustring const &prefs_path, StyleSwatch *swatch) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; @@ -757,7 +743,7 @@ static void StyleFromSelectionToTool(Glib::ustring const &prefs_path, StyleSwatc if (selection->isEmpty()) { desktop->getMessageStack()->flash(Inkscape::ERROR_MESSAGE, - _("No objects selected to take the style from.")); + _("No objects selected to take the style from.")); return; } SPItem *item = selection->singleItem(); @@ -765,34 +751,36 @@ static void StyleFromSelectionToTool(Glib::ustring const &prefs_path, StyleSwatc /* TODO: If each item in the selection has the same style then don't consider it an error. * Maybe we should try to handle multiple selections anyway, e.g. the intersection of the * style attributes for the selected items. */ - desktop->getMessageStack()->flash(Inkscape::ERROR_MESSAGE, - _("More than one object selected. Cannot take style from multiple objects.")); + desktop->getMessageStack()->flash( + Inkscape::ERROR_MESSAGE, + _("More than one object selected. Cannot take style from multiple objects.")); return; } - SPCSSAttr *css = take_style_from_item (item); + SPCSSAttr *css = take_style_from_item(item); - if (!css) return; + if (!css) + return; // remove black-listed properties - css = sp_css_attr_unset_blacklist (css); + css = sp_css_attr_unset_blacklist(css); // only store text style for the text tool if (prefs_path != "/tools/text") { - css = sp_css_attr_unset_text (css); + css = sp_css_attr_unset_text(css); } // we cannot store properties with uris - they will be invalid in other documents - css = sp_css_attr_unset_uris (css); + css = sp_css_attr_unset_uris(css); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setStyle(prefs_path + "/style", css); - sp_repr_css_attr_unref (css); + sp_repr_css_attr_unref(css); // update the swatch if (swatch) { SPCSSAttr *css = prefs->getInheritedStyle(prefs_path + "/style"); - swatch->setStyle (css); + swatch->setStyle(css); sp_repr_css_attr_unref(css); } } @@ -802,23 +790,24 @@ void InkscapePreferences::AddNewObjectsStyle(DialogPage &p, Glib::ustring const if (banner) p.add_group_header(banner); else - p.add_group_header( _("Style of new objects")); - PrefRadioButton* current = Gtk::manage( new PrefRadioButton); - current->init ( _("Last used style"), prefs_path + "/usecurrent", 1, true, nullptr); - p.add_line( true, "", *current, "", - _("Apply the style you last set on an object")); - - PrefRadioButton* own = Gtk::manage( new PrefRadioButton); - auto hb = Gtk::manage( new Gtk::Box); - own->init ( _("This tool's own style:"), prefs_path + "/usecurrent", 0, false, current); + p.add_group_header(_("Style of new objects")); + PrefRadioButton *current = Gtk::manage(new PrefRadioButton); + current->init(_("Last used style"), prefs_path + "/usecurrent", 1, true, nullptr); + p.add_line(true, "", *current, "", _("Apply the style you last set on an object")); + + PrefRadioButton *own = Gtk::manage(new PrefRadioButton); + auto hb = Gtk::manage(new Gtk::Box); + own->init(_("This tool's own style:"), prefs_path + "/usecurrent", 0, false, current); own->set_halign(Gtk::ALIGN_START); own->set_valign(Gtk::ALIGN_START); hb->add(*own); - p.set_tip( *own, _("Each tool may store its own style to apply to the newly created objects. Use the button below to set it.")); - p.add_line( true, "", *hb, "", ""); + p.set_tip( + *own, + _("Each tool may store its own style to apply to the newly created objects. Use the button below to set it.")); + p.add_line(true, "", *hb, "", ""); // style swatch - Gtk::Button* button = Gtk::manage( new Gtk::Button(_("Take from selection"), true)); + Gtk::Button *button = Gtk::manage(new Gtk::Button(_("Take from selection"), true)); StyleSwatch *swatch = nullptr; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -831,10 +820,9 @@ void InkscapePreferences::AddNewObjectsStyle(DialogPage &p, Glib::ustring const hb->add(*swatch); sp_repr_css_attr_unref(css); - button->signal_clicked().connect( sigc::bind( sigc::ptr_fun(StyleFromSelectionToTool), prefs_path, swatch) ); - own->changed_signal.connect( sigc::mem_fun(*button, &Gtk::Button::set_sensitive) ); - p.add_line( true, "", *button, "", - _("Remember the style of the (first) selected object as this tool's style")); + button->signal_clicked().connect(sigc::bind(sigc::ptr_fun(StyleFromSelectionToTool), prefs_path, swatch)); + own->changed_signal.connect(sigc::mem_fun(*button, &Gtk::Button::set_sensitive)); + p.add_line(true, "", *button, "", _("Remember the style of the (first) selected object as this tool's style")); } void InkscapePreferences::initPageTools() @@ -844,7 +832,8 @@ void InkscapePreferences::initPageTools() this->AddPage(_page_node, _("Node"), iter_tools, PREFS_PAGE_TOOLS_NODE); // shapes - Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES); + Gtk::TreeModel::iterator iter_shapes = + this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES); this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_RECT); this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE); this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR); @@ -870,184 +859,215 @@ void InkscapePreferences::initPageTools() this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM); this->AddPage(_page_measure, C_("ContextVerb", "Measure"), iter_tools, PREFS_PAGE_TOOLS_MEASURE); - _page_tools.add_group_header( _("Bounding box to use")); - _t_bbox_visual.init ( _("Visual bounding box"), "/tools/bounding_box", 0, false, nullptr); // 0 means visual - _page_tools.add_line( true, "", _t_bbox_visual, "", - _("This bounding box includes stroke width, markers, filter margins, etc.")); - _t_bbox_geometric.init ( _("Geometric bounding box"), "/tools/bounding_box", 1, true, &_t_bbox_visual); // 1 means geometric - _page_tools.add_line( true, "", _t_bbox_geometric, "", - _("This bounding box includes only the bare path")); - - _page_tools.add_group_header( _("Conversion to guides")); - _t_cvg_keep_objects.init ( _("Keep objects after conversion to guides"), "/tools/cvg_keep_objects", false); - _page_tools.add_line( true, "", _t_cvg_keep_objects, "", - _("When converting an object to guides, don't delete the object after the conversion")); - _t_cvg_convert_whole_groups.init ( _("Treat groups as a single object"), "/tools/cvg_convert_whole_groups", false); - _page_tools.add_line( true, "", _t_cvg_convert_whole_groups, "", - _("Treat groups as a single object during conversion to guides rather than converting each child separately")); - - _pencil_average_all_sketches.init ( _("Average all sketches"), "/tools/freehand/pencil/average_all_sketches", false); - _calligrapy_keep_selected.init ( _("Select new path"), "/tools/calligraphic/keep_selected", true); - _connector_ignore_text.init( _("Don't attach connectors to text objects"), "/tools/connector/ignoretext", true); - - //Selector - + _page_tools.add_group_header(_("Bounding box to use")); + _t_bbox_visual.init(_("Visual bounding box"), "/tools/bounding_box", 0, false, nullptr); // 0 means visual + _page_tools.add_line(true, "", _t_bbox_visual, "", + _("This bounding box includes stroke width, markers, filter margins, etc.")); + _t_bbox_geometric.init(_("Geometric bounding box"), "/tools/bounding_box", 1, true, + &_t_bbox_visual); // 1 means geometric + _page_tools.add_line(true, "", _t_bbox_geometric, "", _("This bounding box includes only the bare path")); + + _page_tools.add_group_header(_("Conversion to guides")); + _t_cvg_keep_objects.init(_("Keep objects after conversion to guides"), "/tools/cvg_keep_objects", false); + _page_tools.add_line(true, "", _t_cvg_keep_objects, "", + _("When converting an object to guides, don't delete the object after the conversion")); + _t_cvg_convert_whole_groups.init(_("Treat groups as a single object"), "/tools/cvg_convert_whole_groups", false); + _page_tools.add_line( + true, "", _t_cvg_convert_whole_groups, "", + _("Treat groups as a single object during conversion to guides rather than converting each child separately")); + + _pencil_average_all_sketches.init(_("Average all sketches"), "/tools/freehand/pencil/average_all_sketches", false); + _calligrapy_keep_selected.init(_("Select new path"), "/tools/calligraphic/keep_selected", true); + _connector_ignore_text.init(_("Don't attach connectors to text objects"), "/tools/connector/ignoretext", true); + + // Selector AddSelcueCheckbox(_page_selector, "/tools/select", false); AddGradientCheckbox(_page_selector, "/tools/select", false); - _page_selector.add_group_header( _("When transforming, show")); - _t_sel_trans_obj.init ( _("Objects"), "/tools/select/show", "content", true, nullptr); - _page_selector.add_line( true, "", _t_sel_trans_obj, "", - _("Show the actual objects when moving or transforming")); - _t_sel_trans_outl.init ( _("Box outline"), "/tools/select/show", "outline", false, &_t_sel_trans_obj); - _page_selector.add_line( true, "", _t_sel_trans_outl, "", + _page_selector.add_group_header(_("When transforming, show")); + _t_sel_trans_obj.init(_("Objects"), "/tools/select/show", "content", true, nullptr); + _page_selector.add_line(true, "", _t_sel_trans_obj, "", _("Show the actual objects when moving or transforming")); + _t_sel_trans_outl.init(_("Box outline"), "/tools/select/show", "outline", false, &_t_sel_trans_obj); + _page_selector.add_line(true, "", _t_sel_trans_outl, "", _("Show only a box outline of the objects when moving or transforming")); - _page_selector.add_group_header( _("Per-object selection cue")); - _t_sel_cue_none.init ( C_("Selection cue", "None"), "/options/selcue/value", Inkscape::SelCue::NONE, false, nullptr); - _page_selector.add_line( true, "", _t_sel_cue_none, "", - _("No per-object selection indication")); - _t_sel_cue_mark.init ( _("Mark"), "/options/selcue/value", Inkscape::SelCue::MARK, true, &_t_sel_cue_none); - _page_selector.add_line( true, "", _t_sel_cue_mark, "", + _page_selector.add_group_header(_("Per-object selection cue")); + _t_sel_cue_none.init(C_("Selection cue", "None"), "/options/selcue/value", Inkscape::SelCue::NONE, false, nullptr); + _page_selector.add_line(true, "", _t_sel_cue_none, "", _("No per-object selection indication")); + _t_sel_cue_mark.init(_("Mark"), "/options/selcue/value", Inkscape::SelCue::MARK, true, &_t_sel_cue_none); + _page_selector.add_line(true, "", _t_sel_cue_mark, "", _("Each selected object has a diamond mark in the top left corner")); - _t_sel_cue_box.init ( _("Box"), "/options/selcue/value", Inkscape::SelCue::BBOX, false, &_t_sel_cue_none); - _page_selector.add_line( true, "", _t_sel_cue_box, "", - _("Each selected object displays its bounding box")); + _t_sel_cue_box.init(_("Box"), "/options/selcue/value", Inkscape::SelCue::BBOX, false, &_t_sel_cue_none); + _page_selector.add_line(true, "", _t_sel_cue_box, "", _("Each selected object displays its bounding box")); - //Node + // Node AddSelcueCheckbox(_page_node, "/tools/nodes", true); AddGradientCheckbox(_page_node, "/tools/nodes", true); - _page_node.add_group_header( _("Path outline")); + _page_node.add_group_header(_("Path outline")); _t_node_pathoutline_color.init(_("Path outline color"), "/tools/nodes/highlight_color", 0xff0000ff); - _page_node.add_line( false, "", _t_node_pathoutline_color, "", _("Selects the color used for showing the path outline"), false); + _page_node.add_line(false, "", _t_node_pathoutline_color, "", + _("Selects the color used for showing the path outline"), false); _t_node_show_outline.init(_("Always show outline"), "/tools/nodes/show_outline", false); - _page_node.add_line( true, "", _t_node_show_outline, "", _("Show outlines for all paths, not only invisible paths")); + _page_node.add_line(true, "", _t_node_show_outline, "", _("Show outlines for all paths, not only invisible paths")); _t_node_live_outline.init(_("Update outline when dragging nodes"), "/tools/nodes/live_outline", false); - _page_node.add_line( true, "", _t_node_live_outline, "", _("Update the outline when dragging or transforming nodes; if this is off, the outline will only update when completing a drag")); + _page_node.add_line(true, "", _t_node_live_outline, "", + _("Update the outline when dragging or transforming nodes; if this is off, the outline will " + "only update when completing a drag")); _t_node_live_objects.init(_("Update paths when dragging nodes"), "/tools/nodes/live_objects", false); - _page_node.add_line( true, "", _t_node_live_objects, "", _("Update paths when dragging or transforming nodes; if this is off, paths will only be updated when completing a drag")); + _page_node.add_line(true, "", _t_node_live_objects, "", + _("Update paths when dragging or transforming nodes; if this is off, paths will only be " + "updated when completing a drag")); _t_node_show_path_direction.init(_("Show path direction on outlines"), "/tools/nodes/show_path_direction", false); - _page_node.add_line( true, "", _t_node_show_path_direction, "", _("Visualize the direction of selected paths by drawing small arrows in the middle of each outline segment")); - _t_node_pathflash_enabled.init ( _("Show temporary path outline"), "/tools/nodes/pathflash_enabled", false); - _page_node.add_line( true, "", _t_node_pathflash_enabled, "", _("When hovering over a path, briefly flash its outline")); - _t_node_pathflash_selected.init ( _("Show temporary outline for selected paths"), "/tools/nodes/pathflash_selected", false); - _page_node.add_line( true, "", _t_node_pathflash_selected, "", _("Show temporary outline even when a path is selected for editing")); + _page_node.add_line( + true, "", _t_node_show_path_direction, "", + _("Visualize the direction of selected paths by drawing small arrows in the middle of each outline segment")); + _t_node_pathflash_enabled.init(_("Show temporary path outline"), "/tools/nodes/pathflash_enabled", false); + _page_node.add_line(true, "", _t_node_pathflash_enabled, "", + _("When hovering over a path, briefly flash its outline")); + _t_node_pathflash_selected.init(_("Show temporary outline for selected paths"), "/tools/nodes/pathflash_selected", + false); + _page_node.add_line(true, "", _t_node_pathflash_selected, "", + _("Show temporary outline even when a path is selected for editing")); _t_node_pathflash_timeout.init("/tools/nodes/pathflash_timeout", 0, 10000.0, 100.0, 100.0, 1000.0, true, false); - _page_node.add_line( false, _("_Flash time:"), _t_node_pathflash_timeout, "ms", _("Specifies how long the path outline will be visible after a mouse-over (in milliseconds); specify 0 to have the outline shown until mouse leaves the path"), false); + _page_node.add_line(false, _("_Flash time:"), _t_node_pathflash_timeout, "ms", + _("Specifies how long the path outline will be visible after a mouse-over (in milliseconds); " + "specify 0 to have the outline shown until mouse leaves the path"), + false); _page_node.add_group_header(_("Editing preferences")); - _t_node_single_node_transform_handles.init(_("Show transform handles for single nodes"), "/tools/nodes/single_node_transform_handles", false); - _page_node.add_line( true, "", _t_node_single_node_transform_handles, "", _("Show transform handles even when only a single node is selected")); - _t_node_delete_preserves_shape.init(_("Deleting nodes preserves shape"), "/tools/nodes/delete_preserves_shape", true); - _page_node.add_line( true, "", _t_node_delete_preserves_shape, "", _("Move handles next to deleted nodes to resemble original shape; hold Ctrl to get the other behavior")); - - //Tweak + _t_node_single_node_transform_handles.init(_("Show transform handles for single nodes"), + "/tools/nodes/single_node_transform_handles", false); + _page_node.add_line(true, "", _t_node_single_node_transform_handles, "", + _("Show transform handles even when only a single node is selected")); + _t_node_delete_preserves_shape.init(_("Deleting nodes preserves shape"), "/tools/nodes/delete_preserves_shape", + true); + _page_node.add_line( + true, "", _t_node_delete_preserves_shape, "", + _("Move handles next to deleted nodes to resemble original shape; hold Ctrl to get the other behavior")); + + // Tweak this->AddNewObjectsStyle(_page_tweak, "/tools/tweak", _("Object paint style")); AddSelcueCheckbox(_page_tweak, "/tools/tweak", true); AddGradientCheckbox(_page_tweak, "/tools/tweak", false); - //Zoom + // Zoom AddSelcueCheckbox(_page_zoom, "/tools/zoom", true); AddGradientCheckbox(_page_zoom, "/tools/zoom", false); - //Measure - PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); - cb->init ( _("Ignore first and last points"), "/tools/measure/ignore_1st_and_last", true); - _page_measure.add_line( false, "", *cb, "", _("The start and end of the measurement tool's control line will not be considered for calculating lengths. Only lengths between actual curve intersections will be displayed.")); + // Measure + PrefCheckButton *cb = Gtk::manage(new PrefCheckButton); + cb->init(_("Ignore first and last points"), "/tools/measure/ignore_1st_and_last", true); + _page_measure.add_line( + false, "", *cb, "", + _("The start and end of the measurement tool's control line will not be considered for calculating lengths. " + "Only lengths between actual curve intersections will be displayed.")); - //Shapes + // Shapes this->AddSelcueCheckbox(_page_shapes, "/tools/shapes", true); this->AddGradientCheckbox(_page_shapes, "/tools/shapes", true); - //Rectangle + // Rectangle this->AddNewObjectsStyle(_page_rectangle, "/tools/shapes/rect"); this->AddConvertGuidesCheckbox(_page_rectangle, "/tools/shapes/rect", true); - //3D box + // 3D box this->AddNewObjectsStyle(_page_3dbox, "/tools/shapes/3dbox"); this->AddConvertGuidesCheckbox(_page_3dbox, "/tools/shapes/3dbox", true); - //Ellipse + // Ellipse this->AddNewObjectsStyle(_page_ellipse, "/tools/shapes/arc"); - //Star + // Star this->AddNewObjectsStyle(_page_star, "/tools/shapes/star"); - //Spiral + // Spiral this->AddNewObjectsStyle(_page_spiral, "/tools/shapes/spiral"); - //Pencil + // Pencil this->AddSelcueCheckbox(_page_pencil, "/tools/freehand/pencil", true); this->AddNewObjectsStyle(_page_pencil, "/tools/freehand/pencil"); this->AddDotSizeSpinbutton(_page_pencil, "/tools/freehand/pencil", 3.0); this->AddBaseSimplifySpinbutton(_page_pencil, "/tools/freehand/pencil", 25.0); - _page_pencil.add_group_header( _("Sketch mode")); - _page_pencil.add_line( true, "", _pencil_average_all_sketches, "", - _("If on, the sketch result will be the normal average of all sketches made, instead of averaging the old result with the new sketch")); + _page_pencil.add_group_header(_("Sketch mode")); + _page_pencil.add_line(true, "", _pencil_average_all_sketches, "", + _("If on, the sketch result will be the normal average of all sketches made, instead of " + "averaging the old result with the new sketch")); - //Pen + // Pen this->AddSelcueCheckbox(_page_pen, "/tools/freehand/pen", true); this->AddNewObjectsStyle(_page_pen, "/tools/freehand/pen"); this->AddDotSizeSpinbutton(_page_pen, "/tools/freehand/pen", 3.0); - //Calligraphy + // Calligraphy this->AddSelcueCheckbox(_page_calligraphy, "/tools/calligraphic", false); this->AddNewObjectsStyle(_page_calligraphy, "/tools/calligraphic"); - _page_calligraphy.add_line( false, "", _calligrapy_keep_selected, "", - _("If on, each newly created object will be selected (deselecting previous selection)")); + _page_calligraphy.add_line(false, "", _calligrapy_keep_selected, "", + _("If on, each newly created object will be selected (deselecting previous selection)")); - //Text + // Text this->AddSelcueCheckbox(_page_text, "/tools/text", true); this->AddGradientCheckbox(_page_text, "/tools/text", true); { - PrefCheckButton* cb = Gtk::manage( new PrefCheckButton); - cb->init ( _("Show font samples in the drop-down list"), "/tools/text/show_sample_in_list", true); - _page_text.add_line( false, "", *cb, "", _("Show font samples alongside font names in the drop-down list in Text bar")); + PrefCheckButton *cb = Gtk::manage(new PrefCheckButton); + cb->init(_("Show font samples in the drop-down list"), "/tools/text/show_sample_in_list", true); + _page_text.add_line(false, "", *cb, "", + _("Show font samples alongside font names in the drop-down list in Text bar")); _font_dialog.init(_("Show font substitution warning dialog"), "/options/font/substitutedlg", false); - _page_text.add_line( false, "", _font_dialog, "", _("Show font substitution warning dialog when requested fonts are not available on the system")); + _page_text.add_line( + false, "", _font_dialog, "", + _("Show font substitution warning dialog when requested fonts are not available on the system")); _font_sample.init("/tools/text/font_sample", true); - _page_text.add_line( false, _("Font sample"), _font_sample, "", _("Change font preview sample text"), true); + _page_text.add_line(false, _("Font sample"), _font_sample, "", _("Change font preview sample text"), true); cb = Gtk::manage(new PrefCheckButton); - cb->init ( _("Use SVG2 auto-flowed text"), "/tools/text/use_svg2", true); - _page_text.add_line( false, "", *cb, "", _("Use SVG2 auto-flowed text instead of SVG1.2 auto-flowed text. (Recommended)")); + cb->init(_("Use SVG2 auto-flowed text"), "/tools/text/use_svg2", true); + _page_text.add_line(false, "", *cb, "", + _("Use SVG2 auto-flowed text instead of SVG1.2 auto-flowed text. (Recommended)")); } //_page_text.add_group_header( _("Text units")); //_font_output_px.init ( _("Always output text size in pixels (px)"), "/options/font/textOutputPx", true); - //_page_text.add_line( true, "", _font_output_px, "", _("Always convert the text size units above into pixels (px) before saving to file")); - - _page_text.add_group_header( _("Font directories")); - _font_fontsdir_system.init( _("Use Inkscape's fonts directory"), "/options/font/use_fontsdir_system", true); - _page_text.add_line( true, "", _font_fontsdir_system, "", _("Load additional fonts from \"fonts\" directory located in Inkscape's global \"share\" directory")); - _font_fontsdir_user.init( _("Use user's fonts directory"), "/options/font/use_fontsdir_user", true); - _page_text.add_line( true, "", _font_fontsdir_user, "", _("Load additional fonts from \"fonts\" directory located in Inkscape's user configuration directory")); + //_page_text.add_line( true, "", _font_output_px, "", _("Always convert the text size units above into pixels (px) + // before saving to file")); + + _page_text.add_group_header(_("Font directories")); + _font_fontsdir_system.init(_("Use Inkscape's fonts directory"), "/options/font/use_fontsdir_system", true); + _page_text.add_line( + true, "", _font_fontsdir_system, "", + _("Load additional fonts from \"fonts\" directory located in Inkscape's global \"share\" directory")); + _font_fontsdir_user.init(_("Use user's fonts directory"), "/options/font/use_fontsdir_user", true); + _page_text.add_line( + true, "", _font_fontsdir_user, "", + _("Load additional fonts from \"fonts\" directory located in Inkscape's user configuration directory")); _font_fontdirs_custom.init("/options/font/custom_fontdirs", 50); - _page_text.add_line(true, _("Additional font directories"), _font_fontdirs_custom, "", _("Load additional fonts from custom locations (one path per line)"), true); - + _page_text.add_line(true, _("Additional font directories"), _font_fontdirs_custom, "", + _("Load additional fonts from custom locations (one path per line)"), true); this->AddNewObjectsStyle(_page_text, "/tools/text"); - //Spray + // Spray AddSelcueCheckbox(_page_spray, "/tools/spray", true); AddGradientCheckbox(_page_spray, "/tools/spray", false); - //Eraser + // Eraser this->AddNewObjectsStyle(_page_eraser, "/tools/eraser"); - //Paint Bucket + // Paint Bucket this->AddSelcueCheckbox(_page_paintbucket, "/tools/paintbucket", false); this->AddNewObjectsStyle(_page_paintbucket, "/tools/paintbucket"); - //Gradient + // Gradient this->AddSelcueCheckbox(_page_gradient, "/tools/gradient", true); - _misc_forkvectors.init( _("Prevent sharing of gradient definitions"), "/options/forkgradientvectors/value", true); - _page_gradient.add_line( false, "", _misc_forkvectors, "", - _("When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"), true); + _misc_forkvectors.init(_("Prevent sharing of gradient definitions"), "/options/forkgradientvectors/value", true); + _page_gradient.add_line( + false, "", _misc_forkvectors, "", + _("When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of " + "gradient definitions so that editing one object may affect other objects using the same gradient"), + true); _misc_gradientangle.init("/dialogs/gradienteditor/angle", -359, 359, 1, 90, 0, false, false); - _page_gradient.add_line( false, _("Linear gradient _angle:"), _misc_gradientangle, "", - _("Default angle of new linear gradients in degrees (clockwise from horizontal)"), false); + _page_gradient.add_line(false, _("Linear gradient _angle:"), _misc_gradientangle, "", + _("Default angle of new linear gradients in degrees (clockwise from horizontal)"), false); _misc_gradient_collect.init(_("Auto-delete unused gradients"), "/option/gradient/auto_collect", true); _page_gradient.add_line( @@ -1057,18 +1077,18 @@ void InkscapePreferences::initPageTools() "the file for later use. (Note: This setting only affects new gradients.)"), true); - //Dropper + // Dropper this->AddSelcueCheckbox(_page_dropper, "/tools/dropper", true); this->AddGradientCheckbox(_page_dropper, "/tools/dropper", true); - //Connector + // Connector this->AddSelcueCheckbox(_page_connector, "/tools/connector", true); _page_connector.add_line(false, "", _connector_ignore_text, "", - _("If on, connector attachment points will not be shown for text objects")); + _("If on, connector attachment points will not be shown for text objects")); #ifdef WITH_LPETOOL - //LPETool - //disabled, because the LPETool is not finished yet. + // LPETool + // disabled, because the LPETool is not finished yet. this->AddNewObjectsStyle(_page_lpetool, "/tools/lpetool"); #endif // WITH_LPETOOL } @@ -1170,7 +1190,7 @@ void InkscapePreferences::resetIconsColors(bool themechange) base_color = get_background_color(sc); } SPColor base_color_sp(base_color.get_red(), base_color.get_green(), base_color.get_blue()); - //we copy highlight to not use + // we copy highlight to not use guint32 colorsetbase = base_color_sp.toRGBA32(base_color.get_alpha()); guint32 colorsetsuccess = colorsetbase; guint32 colorsetwarning = colorsetbase; @@ -1194,7 +1214,7 @@ void InkscapePreferences::resetIconsColors(bool themechange) SPColor success_color_sp(success_color.get_red(), success_color.get_green(), success_color.get_blue()); SPColor warning_color_sp(warning_color.get_red(), warning_color.get_green(), warning_color.get_blue()); SPColor error_color_sp(error_color.get_red(), error_color.get_green(), error_color.get_blue()); - //we copy base to not use + // we copy base to not use guint32 colorsetbase = success_color_sp.toRGBA32(success_color.get_alpha()); guint32 colorsetsuccess = success_color_sp.toRGBA32(success_color.get_alpha()); guint32 colorsetwarning = warning_color_sp.toRGBA32(warning_color.get_alpha()); @@ -1218,7 +1238,10 @@ void InkscapePreferences::resetIconsColors(bool themechange) } } -void InkscapePreferences::resetIconsColorsWrapper() { resetIconsColors(false); } +void InkscapePreferences::resetIconsColorsWrapper() +{ + resetIconsColors(false); +} void InkscapePreferences::changeIconsColors() { @@ -1255,13 +1278,14 @@ void InkscapePreferences::toggleSymbolic() Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Gtk::Window *window = SP_ACTIVE_DESKTOP->getToplevel(); if (prefs->getBool("/theme/symbolicIcons", false)) { - if (window ) { + if (window) { window->get_style_context()->add_class("symbolic"); window->get_style_context()->remove_class("regular"); } _symbolic_base_colors.set_sensitive(true); _symbolic_highlight_colors.set_sensitive(true); - Glib::ustring themeiconname = prefs->getString("/theme/iconTheme", prefs->getString("/theme/defaultIconTheme", "")); + Glib::ustring themeiconname = + prefs->getString("/theme/iconTheme", prefs->getString("/theme/defaultIconTheme", "")); if (prefs->getBool("/theme/symbolicDefaultColors", true) || !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) { resetIconsColors(); @@ -1291,10 +1315,10 @@ bool InkscapePreferences::contrastChange(GdkEventButton *button_event) void InkscapePreferences::comboThemeChange() { - //we reset theming on combo change + // we reset theming on combo change _dark_theme.set_active(false); _symbolic_base_colors.set_active(true); - if (_contrast_theme.getSpinButton()->get_value() != 10.0){ + if (_contrast_theme.getSpinButton()->get_value() != 10.0) { _contrast_theme.getSpinButton()->set_value(10.0); } else { themeChange(); @@ -1302,7 +1326,7 @@ void InkscapePreferences::comboThemeChange() } void InkscapePreferences::contrastThemeChange() { - //we reset theming on combo change + // we reset theming on combo change themeChange(true); } @@ -1314,11 +1338,12 @@ void InkscapePreferences::themeChange(bool contrastslider) if (INKSCAPE.themecontext->getContrastThemeProvider()) { Gtk::StyleContext::remove_provider_for_screen(screen, INKSCAPE.themecontext->getContrastThemeProvider()); } - if (INKSCAPE.themecontext->getThemeProvider() ) { - Gtk::StyleContext::remove_provider_for_screen(screen, INKSCAPE.themecontext->getThemeProvider() ); + if (INKSCAPE.themecontext->getThemeProvider()) { + Gtk::StyleContext::remove_provider_for_screen(screen, INKSCAPE.themecontext->getThemeProvider()); } Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Glib::ustring current_theme = prefs->getString("/theme/gtkTheme", prefs->getString("/theme/defaultGtkTheme", "")); + Glib::ustring current_theme = + prefs->getString("/theme/gtkTheme", prefs->getString("/theme/defaultGtkTheme", "")); _dark_theme.get_parent()->set_no_show_all(false); if (dark_themes[current_theme]) { _dark_theme.get_parent()->show_all(); @@ -1389,8 +1414,7 @@ void InkscapePreferences::symbolicThemeCheck() } // we always show symbolic in default theme (relays in hicolor theme) if (themeiconname != prefs->getString("/theme/defaultIconTheme", "")) { - - auto folders = get_foldernames(ICONS, { "application" }); + auto folders = get_foldernames(ICONS, {"application"}); for (auto &folder : folders) { auto path = folder; const size_t last_slash_idx = folder.find_last_of("\\/"); @@ -1403,7 +1427,7 @@ void InkscapePreferences::symbolicThemeCheck() #else path += "/symbolic/actions"; #endif - std::vector symbolic_icons = get_filenames(path, { ".svg" }, {}); + std::vector symbolic_icons = get_filenames(path, {".svg"}, {}); if (symbolic_icons.size() > 0) { symbolic = true; symbolic_icons.clear(); @@ -1502,147 +1526,213 @@ void InkscapePreferences::initPageUI() Gtk::TreeModel::iterator iter_ui = this->AddPage(_page_ui, _("Interface"), PREFS_PAGE_UI); Glib::ustring languages[] = {_("System default"), - _("Albanian (sq)"), _("Arabic (ar)"), _("Armenian (hy)"), _("Assamese (as)"), _("Azerbaijani (az)"), - _("Basque (eu)"), _("Belarusian (be)"), _("Bulgarian (bg)"), _("Bengali (bn)"), _("Bengali/Bangladesh (bn_BD)"), _("Bodo (brx)"), _("Breton (br)"), - _("Catalan (ca)"), _("Valencian Catalan (ca@valencia)"), _("Chinese/China (zh_CN)"), _("Chinese/Taiwan (zh_TW)"), _("Croatian (hr)"), _("Czech (cs)"), - _("Danish (da)"), _("Dogri (doi)"), _("Dutch (nl)"), _("Dzongkha (dz)"), - _("German (de)"), _("Greek (el)"), - _("English (en)"), _("English/Australia (en_AU)"), _("English/Canada (en_CA)"), _("English/Great Britain (en_GB)"), _("Esperanto (eo)"), _("Estonian (et)"), - _("Farsi (fa)"), _("Finnish (fi)"), _("French (fr)"), - _("Galician (gl)"), _("Gujarati (gu)"), - _("Hebrew (he)"), _("Hindi (hi)"), _("Hungarian (hu)"), - _("Icelandic (is)"), _("Indonesian (id)"), _("Irish (ga)"), _("Italian (it)"), - _("Japanese (ja)"), - _("Kannada (kn)"), _("Kashmiri in Perso-Arabic script (ks@aran)"), _("Kashmiri in Devanagari script (ks@deva)"), _("Khmer (km)"), _("Kinyarwanda (rw)"), _("Konkani (kok)"), _("Konkani in Latin script (kok@latin)"), _("Korean (ko)"), - _("Latvian (lv)"), _("Lithuanian (lt)"), - _("Macedonian (mk)"), _("Maithili (mai)"), _("Malayalam (ml)"), _("Manipuri (mni)"), _("Manipuri in Bengali script (mni@beng)"), _("Marathi (mr)"), _("Mongolian (mn)"), - _("Nepali (ne)"), _("Norwegian Bokmål (nb)"), _("Norwegian Nynorsk (nn)"), - _("Odia (or)"), - _("Panjabi (pa)"), _("Polish (pl)"), _("Portuguese (pt)"), _("Portuguese/Brazil (pt_BR)"), - _("Romanian (ro)"), _("Russian (ru)"), - _("Sanskrit (sa)"), _("Santali (sat)"), _("Santali in Devanagari script (sat@deva)"), _("Serbian (sr)"), _("Serbian in Latin script (sr@latin)"), - _("Sindhi (sd)"), _("Sindhi in Devanagari script (sd@deva)"), _("Slovak (sk)"), _("Slovenian (sl)"), _("Spanish (es)"), _("Spanish/Mexico (es_MX)"), _("Swedish (sv)"), - _("Tamil (ta)"), _("Telugu (te)"), _("Thai (th)"), _("Turkish (tr)"), - _("Ukrainian (uk)"), _("Urdu (ur)"), - _("Vietnamese (vi)")}; - Glib::ustring langValues[] = {"", - "sq", "ar", "hy", "as", "az", - "eu", "be", "bg", "bn", "bn_BD", "brx", "br", - "ca", "ca@valencia", "zh_CN", "zh_TW", "hr", "cs", - "da", "doi", "nl", "dz", - "de", "el", - "en", "en_AU", "en_CA", "en_GB", "eo", "et", - "fa", "fi", "fr", - "gl", "gu", - "he", "hi", "hu", - "is", "id", "ga", "it", - "ja", - "kn", "ks@aran", "ks@deva", "km", "rw", "kok", "kok@latin", "ko", - "lv", "lt", - "mk", "mai", "ml", "mni", "mni@beng", "mr", "mn", - "ne", "nb", "nn", - "or", - "pa", "pl", "pt", "pt_BR", - "ro", "ru", - "sa", "sat", "sat@deva", "sr", "sr@latin", - "sd", "sd@deva", "sk", "sl", "es", "es_MX", "sv", - "ta", "te", "th", "tr", - "uk", "ur", - "vi" }; + _("Albanian (sq)"), + _("Arabic (ar)"), + _("Armenian (hy)"), + _("Assamese (as)"), + _("Azerbaijani (az)"), + _("Basque (eu)"), + _("Belarusian (be)"), + _("Bulgarian (bg)"), + _("Bengali (bn)"), + _("Bengali/Bangladesh (bn_BD)"), + _("Bodo (brx)"), + _("Breton (br)"), + _("Catalan (ca)"), + _("Valencian Catalan (ca@valencia)"), + _("Chinese/China (zh_CN)"), + _("Chinese/Taiwan (zh_TW)"), + _("Croatian (hr)"), + _("Czech (cs)"), + _("Danish (da)"), + _("Dogri (doi)"), + _("Dutch (nl)"), + _("Dzongkha (dz)"), + _("German (de)"), + _("Greek (el)"), + _("English (en)"), + _("English/Australia (en_AU)"), + _("English/Canada (en_CA)"), + _("English/Great Britain (en_GB)"), + _("Esperanto (eo)"), + _("Estonian (et)"), + _("Farsi (fa)"), + _("Finnish (fi)"), + _("French (fr)"), + _("Galician (gl)"), + _("Gujarati (gu)"), + _("Hebrew (he)"), + _("Hindi (hi)"), + _("Hungarian (hu)"), + _("Icelandic (is)"), + _("Indonesian (id)"), + _("Irish (ga)"), + _("Italian (it)"), + _("Japanese (ja)"), + _("Kannada (kn)"), + _("Kashmiri in Perso-Arabic script (ks@aran)"), + _("Kashmiri in Devanagari script (ks@deva)"), + _("Khmer (km)"), + _("Kinyarwanda (rw)"), + _("Konkani (kok)"), + _("Konkani in Latin script (kok@latin)"), + _("Korean (ko)"), + _("Latvian (lv)"), + _("Lithuanian (lt)"), + _("Macedonian (mk)"), + _("Maithili (mai)"), + _("Malayalam (ml)"), + _("Manipuri (mni)"), + _("Manipuri in Bengali script (mni@beng)"), + _("Marathi (mr)"), + _("Mongolian (mn)"), + _("Nepali (ne)"), + _("Norwegian Bokmål (nb)"), + _("Norwegian Nynorsk (nn)"), + _("Odia (or)"), + _("Panjabi (pa)"), + _("Polish (pl)"), + _("Portuguese (pt)"), + _("Portuguese/Brazil (pt_BR)"), + _("Romanian (ro)"), + _("Russian (ru)"), + _("Sanskrit (sa)"), + _("Santali (sat)"), + _("Santali in Devanagari script (sat@deva)"), + _("Serbian (sr)"), + _("Serbian in Latin script (sr@latin)"), + _("Sindhi (sd)"), + _("Sindhi in Devanagari script (sd@deva)"), + _("Slovak (sk)"), + _("Slovenian (sl)"), + _("Spanish (es)"), + _("Spanish/Mexico (es_MX)"), + _("Swedish (sv)"), + _("Tamil (ta)"), + _("Telugu (te)"), + _("Thai (th)"), + _("Turkish (tr)"), + _("Ukrainian (uk)"), + _("Urdu (ur)"), + _("Vietnamese (vi)")}; + Glib::ustring langValues[] = { + "", "sq", "ar", "hy", "as", "az", "eu", "be", "bg", "bn", + "bn_BD", "brx", "br", "ca", "ca@valencia", "zh_CN", "zh_TW", "hr", "cs", "da", + "doi", "nl", "dz", "de", "el", "en", "en_AU", "en_CA", "en_GB", "eo", + "et", "fa", "fi", "fr", "gl", "gu", "he", "hi", "hu", "is", + "id", "ga", "it", "ja", "kn", "ks@aran", "ks@deva", "km", "rw", "kok", + "kok@latin", "ko", "lv", "lt", "mk", "mai", "ml", "mni", "mni@beng", "mr", + "mn", "ne", "nb", "nn", "or", "pa", "pl", "pt", "pt_BR", "ro", + "ru", "sa", "sat", "sat@deva", "sr", "sr@latin", "sd", "sd@deva", "sk", "sl", + "es", "es_MX", "sv", "ta", "te", "th", "tr", "uk", "ur", "vi"}; { // sorting languages according to translated name int i = 0; int j = 0; - int n = sizeof( languages ) / sizeof( Glib::ustring ); + int n = sizeof(languages) / sizeof(Glib::ustring); Glib::ustring key_language; Glib::ustring key_langValue; - for ( j = 1 ; j < n ; j++ ) { + for (j = 1; j < n; j++) { key_language = languages[j]; key_langValue = langValues[j]; - i = j-1; - while ( i >= 0 - && ( ( languages[i] > key_language - && langValues[i] != "" ) - || key_langValue == "" ) ) - { - languages[i+1] = languages[i]; - langValues[i+1] = langValues[i]; + i = j - 1; + while (i >= 0 && ((languages[i] > key_language && langValues[i] != "") || key_langValue == "")) { + languages[i + 1] = languages[i]; + langValues[i + 1] = langValues[i]; i--; } - languages[i+1] = key_language; - langValues[i+1] = key_langValue; + languages[i + 1] = key_language; + langValues[i + 1] = key_langValue; } } - _ui_languages.init( "/ui/language", languages, langValues, G_N_ELEMENTS(languages), languages[0]); - _page_ui.add_line( false, _("Language:"), _ui_languages, "", - _("Set the language for menus and number formats"), false, reset_icon()); + _ui_languages.init("/ui/language", languages, langValues, G_N_ELEMENTS(languages), languages[0]); + _page_ui.add_line(false, _("Language:"), _ui_languages, "", _("Set the language for menus and number formats"), + false, reset_icon()); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - _ui_colorsliders_top.init( _("Work-around color sliders not drawing"), "/options/workarounds/colorsontop", false); - _page_ui.add_line( false, "", _ui_colorsliders_top, "", - _("When on, will attempt to work around bugs in certain GTK themes drawing color sliders"), true); - + _ui_colorsliders_top.init(_("Work-around color sliders not drawing"), "/options/workarounds/colorsontop", false); + _page_ui.add_line(false, "", _ui_colorsliders_top, "", + _("When on, will attempt to work around bugs in certain GTK themes drawing color sliders"), true); _misc_recent.init("/options/maxrecentdocuments/value", 0.0, 1000.0, 1.0, 1.0, 1.0, true, false); - Gtk::Button* reset_recent = Gtk::manage(new Gtk::Button(_("Clear list"))); + Gtk::Button *reset_recent = Gtk::manage(new Gtk::Button(_("Clear list"))); reset_recent->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::on_reset_open_recent_clicked)); - _page_ui.add_line( false, _("Maximum documents in Open _Recent:"), _misc_recent, "", - _("Set the maximum length of the Open Recent list in the File menu, or clear the list"), false, reset_recent); + _page_ui.add_line(false, _("Maximum documents in Open _Recent:"), _misc_recent, "", + _("Set the maximum length of the Open Recent list in the File menu, or clear the list"), false, + reset_recent); _page_ui.add_group_header(_("_Zoom correction factor (in %)")); - _page_ui.add_group_note(_("Adjust the slider until the length of the ruler on your screen matches its real length. This information is used when zooming to 1:1, 1:2, etc., to display objects in their true sizes")); + _page_ui.add_group_note( + _("Adjust the slider until the length of the ruler on your screen matches its real length. This information is " + "used when zooming to 1:1, 1:2, etc., to display objects in their true sizes")); _ui_zoom_correction.init(300, 30, 0.01, 500.0, 1.0, 10.0, 1.0); - _page_ui.add_line( true, "", _ui_zoom_correction, "", "", true); + _page_ui.add_line(true, "", _ui_zoom_correction, "", "", true); - _ui_realworldzoom.init( _("Show zoom percentage corrected by factor"), "/options/zoomcorrection/shown", true); - _page_ui.add_line( false, "", _ui_realworldzoom, "", _("Zoom percentage can be either by the physical units or by pixels.")); + _ui_realworldzoom.init(_("Show zoom percentage corrected by factor"), "/options/zoomcorrection/shown", true); + _page_ui.add_line(false, "", _ui_realworldzoom, "", + _("Zoom percentage can be either by the physical units or by pixels.")); /* show infobox */ - _show_filters_info_box.init( _("Show filter primitives infobox"), "/options/showfiltersinfobox/value", true); + _show_filters_info_box.init(_("Show filter primitives infobox"), "/options/showfiltersinfobox/value", true); _page_ui.add_line(false, "", _show_filters_info_box, "", - _("Show icons and descriptions for the filter primitives available at the filter effects dialog"), false, reset_icon()); + _("Show icons and descriptions for the filter primitives available at the filter effects dialog"), + false, reset_icon()); - _ui_yaxisdown.init( _("Origin at upper left with y-axis pointing down"), "/options/yaxisdown", true); - _page_ui.add_line( false, "", _ui_yaxisdown, "", - _("When off, origin is at lower left corner and y-axis points up"), false, reset_icon()); + _ui_yaxisdown.init(_("Origin at upper left with y-axis pointing down"), "/options/yaxisdown", true); + _page_ui.add_line(false, "", _ui_yaxisdown, "", _("When off, origin is at lower left corner and y-axis points up"), + false, reset_icon()); _ui_rotationlock.init(_("Lock canvas rotation by default"), "/options/rotationlock", false); - _page_ui.add_line(false, "", _ui_rotationlock, "", - _("Prevent accidental canvas rotation by disabling on-canvas keyboard and mouse actions for rotation"), true); + _page_ui.add_line( + false, "", _ui_rotationlock, "", + _("Prevent accidental canvas rotation by disabling on-canvas keyboard and mouse actions for rotation"), true); _page_ui.add_group_header(_("User Interface")); // _page_ui.add_group_header(_("Handle size")); _mouse_grabsize.init("/options/grabsize/value", 1, 15, 1, 2, 3, 0); _page_ui.add_line(true, _("Handle size"), _mouse_grabsize, "", _("Set the relative size of node handles"), true); _narrow_spinbutton.init(_("Use narrow number entry boxes"), "/theme/narrowSpinButton", false); - _page_ui.add_line(false, "", _narrow_spinbutton, "", _("Make number editing boxes smaller by limiting padding"), false); + _page_ui.add_line(false, "", _narrow_spinbutton, "", _("Make number editing boxes smaller by limiting padding"), + false); _compact_colorselector.init(_("Use compact color selector mode switch"), "/colorselector/switcher", true); - _page_ui.add_line(false, "", _compact_colorselector, "", _("Use compact combo box for selecting color modes"), false); + _page_ui.add_line(false, "", _compact_colorselector, "", _("Use compact combo box for selecting color modes"), + false); _page_ui.add_group_header(_("Status bar")); auto sb_style = Gtk::make_managed(); sb_style->init(_("Show current style"), "/statusbar/visibility/style", true); - _page_ui.add_line(false, "", *sb_style, "", _("Control visibility of current fill, stroke and opacity in status bar."), true); + _page_ui.add_line(false, "", *sb_style, "", + _("Control visibility of current fill, stroke and opacity in status bar."), true); auto sb_layer = Gtk::make_managed(); sb_layer->init(_("Show layer selector"), "/statusbar/visibility/layer", true); _page_ui.add_line(false, "", *sb_layer, "", _("Control visibility of layer selection menu in status bar."), true); auto sb_coords = Gtk::make_managed(); sb_coords->init(_("Show mouse coordinates"), "/statusbar/visibility/coordinates", true); - _page_ui.add_line(false, "", *sb_coords, "", _("Control visibility of mouse coordinates X & Y in status bar."), true); + _page_ui.add_line(false, "", *sb_coords, "", _("Control visibility of mouse coordinates X & Y in status bar."), + true); auto sb_rotate = Gtk::make_managed(); sb_rotate->init(_("Show canvas rotation"), "/statusbar/visibility/rotation", true); _page_ui.add_line(false, "", *sb_rotate, "", _("Control visibility of canvas rotation in status bar."), true); _page_ui.add_group_header(_("Mouse cursors")); _ui_cursorscaling.init(_("Enable scaling"), "/options/cursorscaling", true); - _page_ui.add_line(false, "", _ui_cursorscaling, "", _("When off, cursor scaling is disabled. Cursor scaling may be broken when fractional scaling is enabled."), true); + _page_ui.add_line( + false, "", _ui_cursorscaling, "", + _("When off, cursor scaling is disabled. Cursor scaling may be broken when fractional scaling is enabled."), + true); _ui_cursor_shadow.init(_("Show drop shadow"), "/options/cursor-drop-shadow", true); - _page_ui.add_line(false, "", _ui_cursor_shadow, "", _("Control visibility of drop shadow for Inkscape cursors."), true); + _page_ui.add_line(false, "", _ui_cursor_shadow, "", _("Control visibility of drop shadow for Inkscape cursors."), + true); + + _page_ui.add_group_header(_("Pages")); + auto sb_pagelabels = Gtk::make_managed(); + sb_pagelabels->init(_("Show default page labels"), "/pages/visibility/labels", true); + _page_ui.add_line(false, "", *sb_pagelabels, "", _("If no page label set, show the default label instead"), true); // Theme _page_theme.add_group_header(_("Theme")); @@ -1680,7 +1770,8 @@ void InkscapePreferences::initPageUI() } _sys_user_themes_dir_copy.init(g_build_filename(g_get_user_data_dir(), "themes", nullptr), _("Open themes folder")); - _page_theme.add_line(true, _("User themes:"), _sys_user_themes_dir_copy, "", _("Location of the user’s themes"), true, Gtk::manage(new Gtk::Box())); + _page_theme.add_line(true, _("User themes:"), _sys_user_themes_dir_copy, "", _("Location of the user’s themes"), + true, Gtk::manage(new Gtk::Box())); _contrast_theme.init("/theme/contrast", 1, 10, 1, 2, 10, 1); _page_theme.add_line(true, "", _dark_theme, "", _("Use dark theme"), true); @@ -1688,12 +1779,11 @@ void InkscapePreferences::initPageUI() auto font_scale = new Inkscape::UI::Widget::PrefSlider(); font_scale = Gtk::manage(font_scale); font_scale->init("/theme/fontscale", 50, 150, 5, 5, 100, 0); // 50% to 150% - font_scale->getSlider()->signal_format_value().connect([=](double val) { - return Glib::ustring::format(std::fixed, std::setprecision(0), val) + "%"; - }); + font_scale->getSlider()->signal_format_value().connect( + [=](double val) { return Glib::ustring::format(std::fixed, std::setprecision(0), val) + "%"; }); // Live updates commented out; too disruptive // font_scale->getSlider()->signal_value_changed().connect([=](){ - // INKSCAPE.themecontext->adjust_global_font_scale(font_scale->getSlider()->get_value() / 100.0); + // INKSCAPE.themecontext->adjust_global_font_scale(font_scale->getSlider()->get_value() / 100.0); // }); auto space = Gtk::make_managed(Gtk::ORIENTATION_HORIZONTAL); space->set_valign(Gtk::ALIGN_CENTER); @@ -1708,20 +1798,20 @@ void InkscapePreferences::initPageUI() reset->set_valign(Gtk::ALIGN_FILL); space->add(*apply); space->add(*reset); - reset->signal_clicked().connect([=](){ + reset->signal_clicked().connect([=]() { font_scale->getSlider()->set_value(100); INKSCAPE.themecontext->adjust_global_font_scale(1.0); }); - apply->signal_clicked().connect([=](){ - INKSCAPE.themecontext->adjust_global_font_scale(font_scale->getSlider()->get_value() / 100.0); - }); + apply->signal_clicked().connect( + [=]() { INKSCAPE.themecontext->adjust_global_font_scale(font_scale->getSlider()->get_value() / 100.0); }); _page_theme.add_line(false, _("_Font scale:"), *font_scale, "", _("Adjust size of UI fonts"), true, space); } auto space = Gtk::make_managed(Gtk::ORIENTATION_HORIZONTAL); space->set_size_request(_sb_width / 3, -1); _page_theme.add_line(false, _("_Contrast:"), _contrast_theme, "", _("Make background brighter or darker to adjust contrast"), true, space); - _contrast_theme.getSlider()->signal_value_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::contrastThemeChange)); + _contrast_theme.getSlider()->signal_value_changed().connect( + sigc::mem_fun(*this, &InkscapePreferences::contrastThemeChange)); if (dark_themes[current_theme]) { _dark_theme.get_parent()->set_no_show_all(false); @@ -1735,7 +1825,7 @@ void InkscapePreferences::initPageUI() _page_theme.add_group_header(_("Icons")); { using namespace Inkscape::IO::Resource; - auto folders = get_foldernames(ICONS, { "application" }); + auto folders = get_foldernames(ICONS, {"application"}); std::vector labels; std::vector values; Glib::ustring default_icon_theme = prefs->getString("/theme/defaultIconTheme"); @@ -1768,8 +1858,9 @@ void InkscapePreferences::initPageUI() _page_theme.add_line(false, _("Change icon theme:"), _icon_theme, "", "", false); _icon_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicThemeCheck)); _sys_user_icons_dir_copy.init((char const *)IO::Resource::get_path(IO::Resource::USER, IO::Resource::ICONS, ""), - _("Open icons folder")); - _page_theme.add_line(true, _("User icons: "), _sys_user_icons_dir_copy, "", _("Location of the user’s icons"), true, Gtk::manage(new Gtk::Box())); + _("Open icons folder")); + _page_theme.add_line(true, _("User icons: "), _sys_user_icons_dir_copy, "", _("Location of the user’s icons"), + true, Gtk::manage(new Gtk::Box())); } Glib::ustring themeiconname = prefs->getString("/theme/iconTheme", prefs->getString("/theme/defaultIconTheme", "")); _symbolic_icons.init(_("Use symbolic icons"), "/theme/symbolicIcons", false); @@ -1778,8 +1869,10 @@ void InkscapePreferences::initPageUI() _symbolic_base_colors.init(_("Use default base color for icons"), "/theme/symbolicDefaultBaseColors", true); _symbolic_base_colors.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::resetIconsColorsWrapper)); _page_theme.add_line(true, "", _symbolic_base_colors, "", "", true); - _symbolic_highlight_colors.init(_("Use default highlight colors for icons"), "/theme/symbolicDefaultHighColors", true); - _symbolic_highlight_colors.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::resetIconsColorsWrapper)); + _symbolic_highlight_colors.init(_("Use default highlight colors for icons"), "/theme/symbolicDefaultHighColors", + true); + _symbolic_highlight_colors.signal_clicked().connect( + sigc::mem_fun(*this, &InkscapePreferences::resetIconsColorsWrapper)); _page_theme.add_line(true, "", _symbolic_highlight_colors, "", "", true); _symbolic_base_color.init(_("Color for symbolic icons:"), "/theme/" + themeiconname + "/symbolicBaseColor", 0x2E3436ff); @@ -1804,28 +1897,26 @@ void InkscapePreferences::initPageUI() /* _complementary_colors = Gtk::manage(new Gtk::Image()); */ Gtk::Box *icon_buttons = Gtk::manage(new Gtk::Box()); icon_buttons->pack_start(_symbolic_base_color, true, true, 4); - _page_theme.add_line(false, "", *icon_buttons, _("Icon color base"), - _("Base color for icons"), false); + _page_theme.add_line(false, "", *icon_buttons, _("Icon color base"), _("Base color for icons"), false); Gtk::Box *icon_buttons_hight = Gtk::manage(new Gtk::Box()); icon_buttons_hight->pack_start(_symbolic_success_color, true, true, 4); icon_buttons_hight->pack_start(_symbolic_warning_color, true, true, 4); icon_buttons_hight->pack_start(_symbolic_error_color, true, true, 4); /* icon_buttons_hight->pack_start(*_complementary_colors, true, true, 4); */ _page_theme.add_line(false, "", *icon_buttons_hight, _("Icon color highlights"), - _("Highlight colors supported by some symbolic icon themes"), - false); + _("Highlight colors supported by some symbolic icon themes"), false); Gtk::Box *icon_buttons_def = Gtk::manage(new Gtk::Box()); resetIconsColors(); changeIconsColor(0xffffffff); - _page_theme.add_line(false, "", *icon_buttons_def, "", - _("Reset theme colors for some symbolic icon themes"), + _page_theme.add_line(false, "", *icon_buttons_def, "", _("Reset theme colors for some symbolic icon themes"), false); - Glib::ustring menu_icons_labels[] = {_("Yes"), _("No"), _("Theme decides")}; - int menu_icons_values[] = {1, -1, 0}; - _menu_icons.init("/theme/menuIcons", menu_icons_labels, menu_icons_values, G_N_ELEMENTS(menu_icons_labels), 0); - _page_theme.add_line(false, _("Show icons in menus:"), _menu_icons, "", - _("You can either enable or disable all icons in menus. By default, the setting for the 'use-icon' attribute in the 'menus.ui' file determines whether to display icons in menus."), false, reset_icon()); - + Glib::ustring menu_icons_labels[] = {_("Yes"), _("No"), _("Theme decides")}; + int menu_icons_values[] = {1, -1, 0}; + _menu_icons.init("/theme/menuIcons", menu_icons_labels, menu_icons_values, G_N_ELEMENTS(menu_icons_labels), 0); + _page_theme.add_line(false, _("Show icons in menus:"), _menu_icons, "", + _("You can either enable or disable all icons in menus. By default, the setting for the " + "'use-icon' attribute in the 'menus.ui' file determines whether to display icons in menus."), + false, reset_icon()); this->AddPage(_page_theme, _("Theming"), iter_ui, PREFS_PAGE_UI_THEME); symbolicThemeCheck(); @@ -1834,11 +1925,11 @@ void InkscapePreferences::initPageUI() _page_toolbars.add_group_header(_("Toolbars")); try { auto builder = Gtk::Builder::create_from_file(get_filename(UIS, "toolbar-tool-prefs.ui")); - Gtk::Widget* toolbox = nullptr; + Gtk::Widget *toolbox = nullptr; builder->get_widget("tool-toolbar-prefs", toolbox); - sp_traverse_widget_tree(toolbox, [=](Gtk::Widget* widget){ - if (auto button = dynamic_cast(widget)) { + sp_traverse_widget_tree(toolbox, [=](Gtk::Widget *widget) { + if (auto button = dynamic_cast(widget)) { assert(GTK_IS_ACTIONABLE(widget->gobj())); // do not execute any action: gtk_actionable_set_action_name(GTK_ACTIONABLE(widget->gobj()), ""); @@ -1847,38 +1938,42 @@ void InkscapePreferences::initPageUI() auto path = ToolboxFactory::get_tool_visible_buttons_path(sp_get_action_target(button)); auto visible = Inkscape::Preferences::get()->getBool(path, true); button->set_active(visible); - button->signal_toggled().connect([=](){ - Inkscape::Preferences::get()->setBool(path, button->get_active()); - }); + button->signal_toggled().connect( + [=]() { Inkscape::Preferences::get()->setBool(path, button->get_active()); }); } return false; }); _page_toolbars.add_line(false, "", *toolbox, "", _("Select visible tool buttons"), true); - struct tbar_info {const char* label; const char* prefs;} toolbars[] = { - {_("Toolbox icon size:"), ToolboxFactory::tools_icon_size}, + struct tbar_info + { + const char *label; + const char *prefs; + } toolbars[] = { + {_("Toolbox icon size:"), ToolboxFactory::tools_icon_size}, {_("Control bar icon size:"), ToolboxFactory::ctrlbars_icon_size}, }; - for (auto&& tbox : toolbars) { + for (auto &&tbox : toolbars) { auto slider = Gtk::manage(new UI::Widget::PrefSlider(false)); const int min = ToolboxFactory::min_pixel_size; const int max = ToolboxFactory::max_pixel_size; slider->init(tbox.prefs, min, max, 1, 4, min, 0); - slider->getSlider()->signal_format_value().connect([](double val){ + slider->getSlider()->signal_format_value().connect([](double val) { return Glib::ustring::format(std::fixed, std::setprecision(0), val * 100.0 / min) + "%"; }); slider->getSlider()->get_style_context()->add_class("small-marks"); for (int i = min; i <= max; i += 8) { - slider->getSlider()->add_mark(i, Gtk::POS_BOTTOM, i % min ? "" : (std::to_string(100 * i / min) + "%").c_str()); + slider->getSlider()->add_mark(i, Gtk::POS_BOTTOM, + i % min ? "" : (std::to_string(100 * i / min) + "%").c_str()); } _page_toolbars.add_line(false, tbox.label, *slider, "", _("Adjust toolbar icon size")); } std::vector snap = { - { _("Simple"), 1, _("Present simplified snapping options that manage all advanced settings"), true }, - { _("Advanced"), 0, _("Expose all snapping options for manual control") } - }; - _page_toolbars.add_line(false, _("Snap controls bar:"), *Gtk::make_managed(snap, "/toolbox/simplesnap"), "", ""); + {_("Simple"), 1, _("Present simplified snapping options that manage all advanced settings"), true}, + {_("Advanced"), 0, _("Expose all snapping options for manual control")}}; + _page_toolbars.add_line(false, _("Snap controls bar:"), + *Gtk::make_managed(snap, "/toolbox/simplesnap"), "", ""); } catch (const Glib::Error &ex) { g_error("Couldn't load toolbar-tool-prefs user interface file."); } @@ -1886,210 +1981,236 @@ void InkscapePreferences::initPageUI() this->AddPage(_page_toolbars, _("Toolbars"), iter_ui, PREFS_PAGE_UI_TOOLBARS); // Windows - _win_save_geom.init ( _("Save and restore window geometry for each document"), "/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_FILE, true, nullptr); - _win_save_geom_prefs.init ( _("Remember and use last window's geometry"), "/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_LAST, false, &_win_save_geom); - _win_save_geom_off.init ( _("Don't save window geometry"), "/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_NONE, false, &_win_save_geom); - - _win_native.init ( _("Native open/save dialogs"), "/options/desktopintegration/value", 1, true, nullptr); - _win_gtk.init ( _("GTK open/save dialogs"), "/options/desktopintegration/value", 0, false, &_win_native); - - _win_show_boot.init ( _("Show Welcome dialog"), "/options/boot/enabled", true); - _win_hide_task.init ( _("Dialogs are hidden in taskbar"), "/options/dialogsskiptaskbar/value", true); - _win_save_viewport.init ( _("Save and restore documents viewport"), "/options/savedocviewport/value", true); - _win_zoom_resize.init ( _("Zoom when window is resized"), "/options/stickyzoom/value", false); - _win_ontop_none.init ( C_("Dialog on top", "None"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_NONE, false, nullptr); - _win_ontop_normal.init ( _("Normal"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_NORMAL, true, &_win_ontop_none); - _win_ontop_agressive.init ( _("Aggressive"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_AGGRESSIVE, false, &_win_ontop_none); - - _win_dialogs_labels_auto.init( _("Automatic"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_AUTO, true, nullptr); - _win_dialogs_labels_active.init( _("Active"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_ACTIVE, true, nullptr); - _win_dialogs_labels_off.init( _("Off"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_OFF, false, &_win_dialogs_labels_auto); + _win_save_geom.init(_("Save and restore window geometry for each document"), "/options/savewindowgeometry/value", + PREFS_WINDOW_GEOMETRY_FILE, true, nullptr); + _win_save_geom_prefs.init(_("Remember and use last window's geometry"), "/options/savewindowgeometry/value", + PREFS_WINDOW_GEOMETRY_LAST, false, &_win_save_geom); + _win_save_geom_off.init(_("Don't save window geometry"), "/options/savewindowgeometry/value", + PREFS_WINDOW_GEOMETRY_NONE, false, &_win_save_geom); + + _win_native.init(_("Native open/save dialogs"), "/options/desktopintegration/value", 1, true, nullptr); + _win_gtk.init(_("GTK open/save dialogs"), "/options/desktopintegration/value", 0, false, &_win_native); + + _win_show_boot.init(_("Show Welcome dialog"), "/options/boot/enabled", true); + _win_hide_task.init(_("Dialogs are hidden in taskbar"), "/options/dialogsskiptaskbar/value", true); + _win_save_viewport.init(_("Save and restore documents viewport"), "/options/savedocviewport/value", true); + _win_zoom_resize.init(_("Zoom when window is resized"), "/options/stickyzoom/value", false); + _win_ontop_none.init(C_("Dialog on top", "None"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_NONE, + false, nullptr); + _win_ontop_normal.init(_("Normal"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_NORMAL, true, + &_win_ontop_none); + _win_ontop_agressive.init(_("Aggressive"), "/options/transientpolicy/value", PREFS_DIALOGS_WINDOWS_AGGRESSIVE, + false, &_win_ontop_none); + + _win_dialogs_labels_auto.init(_("Automatic"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_AUTO, true, + nullptr); + _win_dialogs_labels_active.init(_("Active"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_ACTIVE, true, + nullptr); + _win_dialogs_labels_off.init(_("Off"), "/options/notebooklabels/value", PREFS_NOTEBOOK_LABELS_OFF, false, + &_win_dialogs_labels_auto); { - Glib::ustring defaultSizeLabels[] = {C_("Window size", "Default"), - C_("Window size", "Small"), - C_("Window size", "Large"), - C_("Window size", "Maximized")}; - int defaultSizeValues[] = {PREFS_WINDOW_SIZE_NATURAL, - PREFS_WINDOW_SIZE_SMALL, - PREFS_WINDOW_SIZE_LARGE, + Glib::ustring defaultSizeLabels[] = {C_("Window size", "Default"), C_("Window size", "Small"), + C_("Window size", "Large"), C_("Window size", "Maximized")}; + int defaultSizeValues[] = {PREFS_WINDOW_SIZE_NATURAL, PREFS_WINDOW_SIZE_SMALL, PREFS_WINDOW_SIZE_LARGE, PREFS_WINDOW_SIZE_MAXIMIZED}; - _win_default_size.init( "/options/defaultwindowsize/value", defaultSizeLabels, defaultSizeValues, G_N_ELEMENTS(defaultSizeLabels), PREFS_WINDOW_SIZE_NATURAL); - _page_windows.add_line( false, _("Default window size:"), _win_default_size, "", - _("Set the default window size"), false); + _win_default_size.init("/options/defaultwindowsize/value", defaultSizeLabels, defaultSizeValues, + G_N_ELEMENTS(defaultSizeLabels), PREFS_WINDOW_SIZE_NATURAL); + _page_windows.add_line(false, _("Default window size:"), _win_default_size, "", + _("Set the default window size"), false); } - _page_windows.add_group_header( _("Saving window size and position"), 4); - _page_windows.add_line( true, "", _win_save_geom_off, "", - _("Let the window manager determine placement of all windows")); - _page_windows.add_line( true, "", _win_save_geom_prefs, "", - _("Remember and use the last window's geometry (saves geometry to user preferences)")); - _page_windows.add_line( true, "", _win_save_geom, "", - _("Save and restore window geometry for each document (saves geometry in the document)")); + _page_windows.add_group_header(_("Saving window size and position"), 4); + _page_windows.add_line(true, "", _win_save_geom_off, "", + _("Let the window manager determine placement of all windows")); + _page_windows.add_line(true, "", _win_save_geom_prefs, "", + _("Remember and use the last window's geometry (saves geometry to user preferences)")); + _page_windows.add_line(true, "", _win_save_geom, "", + _("Save and restore window geometry for each document (saves geometry in the document)")); #ifdef _WIN32 - _page_windows.add_group_header( _("Desktop integration")); - _page_windows.add_line( true, "", _win_native, "", - _("Use Windows like open and save dialogs")); - _page_windows.add_line( true, "", _win_gtk, "", - _("Use GTK open and save dialogs ")); + _page_windows.add_group_header(_("Desktop integration")); + _page_windows.add_line(true, "", _win_native, "", _("Use Windows like open and save dialogs")); + _page_windows.add_line(true, "", _win_gtk, "", _("Use GTK open and save dialogs ")); #endif _page_windows.add_group_header(_("Dialogs settings"), 4); - std::vector dock = { - { _("Docked"), PREFS_DIALOGS_BEHAVIOR_DOCKABLE, _("Allow dialog docking"), true }, - { _("Floating"), PREFS_DIALOGS_BEHAVIOR_FLOATING, _("Disable dialog docking") } - }; - _page_windows.add_line(true, _("Dialog behavior"), *Gtk::make_managed(dock, "/options/dialogtype/value"), "", "", false, reset_icon()); + std::vector dock = {{_("Docked"), PREFS_DIALOGS_BEHAVIOR_DOCKABLE, _("Allow dialog docking"), true}, + {_("Floating"), PREFS_DIALOGS_BEHAVIOR_FLOATING, _("Disable dialog docking")}}; + _page_windows.add_line(true, _("Dialog behavior"), + *Gtk::make_managed(dock, "/options/dialogtype/value"), "", "", false, + reset_icon()); #ifndef _WIN32 // non-Win32 special code to enable transient dialogs std::vector on_top = { - { C_("Dialog on top", "None"), PREFS_DIALOGS_WINDOWS_NONE, _("Dialogs are treated as regular windows") }, - { _("Normal"), PREFS_DIALOGS_WINDOWS_NORMAL, _("Dialogs stay on top of document windows"), true }, - { _("Aggressive"), PREFS_DIALOGS_WINDOWS_AGGRESSIVE, _("Same as Normal but may work better with some window managers") } - }; - _page_windows.add_line(true, _("Dialog on top"), *Gtk::make_managed(on_top, "/options/transientpolicy/value"), "", ""); + {C_("Dialog on top", "None"), PREFS_DIALOGS_WINDOWS_NONE, _("Dialogs are treated as regular windows")}, + {_("Normal"), PREFS_DIALOGS_WINDOWS_NORMAL, _("Dialogs stay on top of document windows"), true}, + {_("Aggressive"), PREFS_DIALOGS_WINDOWS_AGGRESSIVE, + _("Same as Normal but may work better with some window managers")}}; + _page_windows.add_line(true, _("Dialog on top"), + *Gtk::make_managed(on_top, "/options/transientpolicy/value"), "", ""); #endif - std::vector labels = { - { _("Automatic"), PREFS_NOTEBOOK_LABELS_AUTO, _("Dialog names will be displayed when there is enough space"), true }, - { _("Active"), PREFS_NOTEBOOK_LABELS_ACTIVE, _("Only show label on active") }, - { _("Off"), PREFS_NOTEBOOK_LABELS_OFF, _("Only show dialog icons") } - }; - _page_windows.add_line(true, _("Labels behavior"), *Gtk::make_managed(labels, "/options/notebooklabels/value"), "", "", false, reset_icon()); + std::vector labels = {{_("Automatic"), PREFS_NOTEBOOK_LABELS_AUTO, + _("Dialog names will be displayed when there is enough space"), true}, + {_("Active"), PREFS_NOTEBOOK_LABELS_ACTIVE, _("Only show label on active")}, + {_("Off"), PREFS_NOTEBOOK_LABELS_OFF, _("Only show dialog icons")}}; + _page_windows.add_line(true, _("Labels behavior"), + *Gtk::make_managed(labels, "/options/notebooklabels/value"), "", "", false, + reset_icon()); auto save_dlg = Gtk::make_managed(); save_dlg->init(_("Save and restore dialogs' status"), "/options/savedialogposition/value", true); - _page_windows.add_line(true, "", *save_dlg, "", _("Save and restore dialogs' status (the last open windows dialogs are saved when it closes)")); + _page_windows.add_line( + true, "", *save_dlg, "", + _("Save and restore dialogs' status (the last open windows dialogs are saved when it closes)")); #ifndef _WIN32 // FIXME: Temporary Win32 special code to enable transient dialogs - _page_windows.add_line( true, "", _win_hide_task, "", - _("Whether dialog windows are to be hidden in the window manager taskbar")); + _page_windows.add_line(true, "", _win_hide_task, "", + _("Whether dialog windows are to be hidden in the window manager taskbar")); #endif - _page_windows.add_group_header( _("Miscellaneous")); + _page_windows.add_group_header(_("Miscellaneous")); - _page_windows.add_line( true, "", _win_show_boot, "", - _("Whether the Welcome dialog will be shown when Inkscape starts.")); - _page_windows.add_line( true, "", _win_zoom_resize, "", - _("Zoom drawing when document window is resized, to keep the same area visible (this is the default which can be changed in any window using the button above the right scrollbar)")); - _page_windows.add_line( true, "", _win_save_viewport, "", - _("Save documents viewport (zoom and panning position). Useful to turn off when sharing version controlled files.")); + _page_windows.add_line(true, "", _win_show_boot, "", + _("Whether the Welcome dialog will be shown when Inkscape starts.")); + _page_windows.add_line(true, "", _win_zoom_resize, "", + _("Zoom drawing when document window is resized, to keep the same area visible (this is the " + "default which can be changed in any window using the button above the right scrollbar)")); + _page_windows.add_line(true, "", _win_save_viewport, "", + _("Save documents viewport (zoom and panning position). Useful to turn off when sharing " + "version controlled files.")); this->AddPage(_page_windows, _("Windows"), iter_ui, PREFS_PAGE_UI_WINDOWS); // Grids - _page_grids.add_group_header( _("Line color when zooming out")); - - _grids_no_emphasize_on_zoom.init( _("Minor grid line color"), "/options/grids/no_emphasize_when_zoomedout", 1, true, nullptr); - _page_grids.add_line( true, "", _grids_no_emphasize_on_zoom, "", _("The gridlines will be shown in minor grid line color"), false); - _grids_emphasize_on_zoom.init( _("Major grid line color"), "/options/grids/no_emphasize_when_zoomedout", 0, false, &_grids_no_emphasize_on_zoom); - _page_grids.add_line( true, "", _grids_emphasize_on_zoom, "", _("The gridlines will be shown in major grid line color"), false); - - _page_grids.add_group_header( _("Default grid settings")); - - _page_grids.add_line( true, "", _grids_notebook, "", "", false); - _grids_notebook.append_page(_grids_xy, CanvasGrid::getName( GRID_RECTANGULAR )); - _grids_notebook.append_page(_grids_axonom, CanvasGrid::getName( GRID_AXONOMETRIC )); - _grids_xy_units.init("/options/grids/xy/units"); - _grids_xy.add_line( false, _("Grid units:"), _grids_xy_units, "", "", false); - _grids_xy_origin_x.init("/options/grids/xy/origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); - _grids_xy_origin_y.init("/options/grids/xy/origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); - _grids_xy_origin_x.set_digits(3); - _grids_xy_origin_y.set_digits(3); - _grids_xy.add_line( false, _("Origin X:"), _grids_xy_origin_x, "", _("X coordinate of grid origin"), false); - _grids_xy.add_line( false, _("Origin Y:"), _grids_xy_origin_y, "", _("Y coordinate of grid origin"), false); - _grids_xy_spacing_x.init("/options/grids/xy/spacing_x", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); - _grids_xy_spacing_y.init("/options/grids/xy/spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); - _grids_xy_spacing_x.set_digits(3); - _grids_xy_spacing_y.set_digits(3); - _grids_xy.add_line( false, _("Spacing X:"), _grids_xy_spacing_x, "", _("Distance between vertical grid lines"), false); - _grids_xy.add_line( false, _("Spacing Y:"), _grids_xy_spacing_y, "", _("Distance between horizontal grid lines"), false); - - _grids_xy_color.init(_("Minor grid line color:"), "/options/grids/xy/color", GRID_DEFAULT_COLOR); - _grids_xy.add_line( false, _("Minor grid line color:"), _grids_xy_color, "", _("Color used for normal grid lines"), false); - _grids_xy_empcolor.init(_("Major grid line color:"), "/options/grids/xy/empcolor", GRID_DEFAULT_EMPCOLOR); - _grids_xy.add_line( false, _("Major grid line color:"), _grids_xy_empcolor, "", _("Color used for major (highlighted) grid lines"), false); - _grids_xy_empspacing.init("/options/grids/xy/empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false); - _grids_xy.add_line( false, _("Major grid line every:"), _grids_xy_empspacing, "", "", false); - _grids_xy_dotted.init( _("Show dots instead of lines"), "/options/grids/xy/dotted", false); - _grids_xy.add_line( false, "", _grids_xy_dotted, "", _("If set, display dots at gridpoints instead of gridlines"), false); + _page_grids.add_group_header(_("Line color when zooming out")); + + _grids_no_emphasize_on_zoom.init(_("Minor grid line color"), "/options/grids/no_emphasize_when_zoomedout", 1, true, + nullptr); + _page_grids.add_line(true, "", _grids_no_emphasize_on_zoom, "", + _("The gridlines will be shown in minor grid line color"), false); + _grids_emphasize_on_zoom.init(_("Major grid line color"), "/options/grids/no_emphasize_when_zoomedout", 0, false, + &_grids_no_emphasize_on_zoom); + _page_grids.add_line(true, "", _grids_emphasize_on_zoom, "", + _("The gridlines will be shown in major grid line color"), false); + + _page_grids.add_group_header(_("Default grid settings")); + + _page_grids.add_line(true, "", _grids_notebook, "", "", false); + _grids_notebook.append_page(_grids_xy, CanvasGrid::getName(GRID_RECTANGULAR)); + _grids_notebook.append_page(_grids_axonom, CanvasGrid::getName(GRID_AXONOMETRIC)); + _grids_xy_units.init("/options/grids/xy/units"); + _grids_xy.add_line(false, _("Grid units:"), _grids_xy_units, "", "", false); + _grids_xy_origin_x.init("/options/grids/xy/origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); + _grids_xy_origin_y.init("/options/grids/xy/origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); + _grids_xy_origin_x.set_digits(3); + _grids_xy_origin_y.set_digits(3); + _grids_xy.add_line(false, _("Origin X:"), _grids_xy_origin_x, "", _("X coordinate of grid origin"), false); + _grids_xy.add_line(false, _("Origin Y:"), _grids_xy_origin_y, "", _("Y coordinate of grid origin"), false); + _grids_xy_spacing_x.init("/options/grids/xy/spacing_x", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); + _grids_xy_spacing_y.init("/options/grids/xy/spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); + _grids_xy_spacing_x.set_digits(3); + _grids_xy_spacing_y.set_digits(3); + _grids_xy.add_line(false, _("Spacing X:"), _grids_xy_spacing_x, "", _("Distance between vertical grid lines"), + false); + _grids_xy.add_line(false, _("Spacing Y:"), _grids_xy_spacing_y, "", _("Distance between horizontal grid lines"), + false); + + _grids_xy_color.init(_("Minor grid line color:"), "/options/grids/xy/color", GRID_DEFAULT_COLOR); + _grids_xy.add_line(false, _("Minor grid line color:"), _grids_xy_color, "", _("Color used for normal grid lines"), + false); + _grids_xy_empcolor.init(_("Major grid line color:"), "/options/grids/xy/empcolor", GRID_DEFAULT_EMPCOLOR); + _grids_xy.add_line(false, _("Major grid line color:"), _grids_xy_empcolor, "", + _("Color used for major (highlighted) grid lines"), false); + _grids_xy_empspacing.init("/options/grids/xy/empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false); + _grids_xy.add_line(false, _("Major grid line every:"), _grids_xy_empspacing, "", "", false); + _grids_xy_dotted.init(_("Show dots instead of lines"), "/options/grids/xy/dotted", false); + _grids_xy.add_line(false, "", _grids_xy_dotted, "", _("If set, display dots at gridpoints instead of gridlines"), + false); // CanvasAxonomGrid properties: - _grids_axonom_units.init("/options/grids/axonom/units"); - _grids_axonom.add_line( false, _("Grid units:"), _grids_axonom_units, "", "", false); - _grids_axonom_origin_x.init("/options/grids/axonom/origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); - _grids_axonom_origin_y.init("/options/grids/axonom/origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); - _grids_axonom_origin_x.set_digits(3); - _grids_axonom_origin_y.set_digits(3); - _grids_axonom.add_line( false, _("Origin X:"), _grids_axonom_origin_x, "", _("X coordinate of grid origin"), false); - _grids_axonom.add_line( false, _("Origin Y:"), _grids_axonom_origin_y, "", _("Y coordinate of grid origin"), false); - _grids_axonom_spacing_y.init("/options/grids/axonom/spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); - _grids_axonom_spacing_y.set_digits(3); - _grids_axonom.add_line( false, _("Spacing Y:"), _grids_axonom_spacing_y, "", _("Base length of z-axis"), false); - _grids_axonom_angle_x.init("/options/grids/axonom/angle_x", -360.0, 360.0, 1.0, 10.0, 30.0, false, false); - _grids_axonom_angle_z.init("/options/grids/axonom/angle_z", -360.0, 360.0, 1.0, 10.0, 30.0, false, false); - _grids_axonom.add_line( false, _("Angle X:"), _grids_axonom_angle_x, "", _("Angle of x-axis"), false); - _grids_axonom.add_line( false, _("Angle Z:"), _grids_axonom_angle_z, "", _("Angle of z-axis"), false); - _grids_axonom_color.init(_("Minor grid line color:"), "/options/grids/axonom/color", GRID_DEFAULT_COLOR); - _grids_axonom.add_line( false, _("Minor grid line color:"), _grids_axonom_color, "", _("Color used for normal grid lines"), false); - _grids_axonom_empcolor.init(_("Major grid line color:"), "/options/grids/axonom/empcolor", GRID_DEFAULT_EMPCOLOR); - _grids_axonom.add_line( false, _("Major grid line color:"), _grids_axonom_empcolor, "", _("Color used for major (highlighted) grid lines"), false); - _grids_axonom_empspacing.init("/options/grids/axonom/empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false); - _grids_axonom.add_line( false, _("Major grid line every:"), _grids_axonom_empspacing, "", "", false); + _grids_axonom_units.init("/options/grids/axonom/units"); + _grids_axonom.add_line(false, _("Grid units:"), _grids_axonom_units, "", "", false); + _grids_axonom_origin_x.init("/options/grids/axonom/origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); + _grids_axonom_origin_y.init("/options/grids/axonom/origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false); + _grids_axonom_origin_x.set_digits(3); + _grids_axonom_origin_y.set_digits(3); + _grids_axonom.add_line(false, _("Origin X:"), _grids_axonom_origin_x, "", _("X coordinate of grid origin"), false); + _grids_axonom.add_line(false, _("Origin Y:"), _grids_axonom_origin_y, "", _("Y coordinate of grid origin"), false); + _grids_axonom_spacing_y.init("/options/grids/axonom/spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false); + _grids_axonom_spacing_y.set_digits(3); + _grids_axonom.add_line(false, _("Spacing Y:"), _grids_axonom_spacing_y, "", _("Base length of z-axis"), false); + _grids_axonom_angle_x.init("/options/grids/axonom/angle_x", -360.0, 360.0, 1.0, 10.0, 30.0, false, false); + _grids_axonom_angle_z.init("/options/grids/axonom/angle_z", -360.0, 360.0, 1.0, 10.0, 30.0, false, false); + _grids_axonom.add_line(false, _("Angle X:"), _grids_axonom_angle_x, "", _("Angle of x-axis"), false); + _grids_axonom.add_line(false, _("Angle Z:"), _grids_axonom_angle_z, "", _("Angle of z-axis"), false); + _grids_axonom_color.init(_("Minor grid line color:"), "/options/grids/axonom/color", GRID_DEFAULT_COLOR); + _grids_axonom.add_line(false, _("Minor grid line color:"), _grids_axonom_color, "", + _("Color used for normal grid lines"), false); + _grids_axonom_empcolor.init(_("Major grid line color:"), "/options/grids/axonom/empcolor", GRID_DEFAULT_EMPCOLOR); + _grids_axonom.add_line(false, _("Major grid line color:"), _grids_axonom_empcolor, "", + _("Color used for major (highlighted) grid lines"), false); + _grids_axonom_empspacing.init("/options/grids/axonom/empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false); + _grids_axonom.add_line(false, _("Major grid line every:"), _grids_axonom_empspacing, "", "", false); this->AddPage(_page_grids, _("Grids"), iter_ui, PREFS_PAGE_UI_GRIDS); // Command Palette _page_command_palette.add_group_header(_("Display Options")); - _cp_show_full_action_name.init(_("Show command line argument names"), "/options/commandpalette/showfullactionname/value", false); - _page_command_palette.add_line(true, "", _cp_show_full_action_name, "", _("Show action argument names in the command palette suggestions, most useful for using them on the command line")); + _cp_show_full_action_name.init(_("Show command line argument names"), + "/options/commandpalette/showfullactionname/value", false); + _page_command_palette.add_line(true, "", _cp_show_full_action_name, "", + _("Show action argument names in the command palette suggestions, most useful for " + "using them on the command line")); - _cp_show_untranslated_name.init(_("Show untranslated (English) names"), "/options/commandpalette/showuntranslatedname/value", true); - _page_command_palette.add_line(true, "", _cp_show_untranslated_name, "", _("Also show the English names of the command")); + _cp_show_untranslated_name.init(_("Show untranslated (English) names"), + "/options/commandpalette/showuntranslatedname/value", true); + _page_command_palette.add_line(true, "", _cp_show_untranslated_name, "", + _("Also show the English names of the command")); this->AddPage(_page_command_palette, _("Command Palette"), iter_ui, PREFS_PAGE_COMMAND_PALETTE); // /Command Palette - initKeyboardShortcuts(iter_ui); } -static void profileComboChanged( Gtk::ComboBoxText* combo ) +static void profileComboChanged(Gtk::ComboBoxText *combo) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int rowNum = combo->get_active_row_number(); - if ( rowNum < 1 ) { + if (rowNum < 1) { prefs->setString("/options/displayprofile/uri", ""); } else { Glib::ustring active = combo->get_active_text(); Glib::ustring path = CMSSystem::getPathForProfile(active); - if ( !path.empty() ) { + if (!path.empty()) { prefs->setString("/options/displayprofile/uri", path); } } } -static void proofComboChanged( Gtk::ComboBoxText* combo ) +static void proofComboChanged(Gtk::ComboBoxText *combo) { Glib::ustring active = combo->get_active_text(); Glib::ustring path = CMSSystem::getPathForProfile(active); - if ( !path.empty() ) { + if (!path.empty()) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setString("/options/softproof/uri", path); } } -static void gamutColorChanged( Gtk::ColorButton* btn ) { +static void gamutColorChanged(Gtk::ColorButton *btn) +{ auto rgba = btn->get_rgba(); auto r = rgba.get_red_u(); auto g = rgba.get_green_u(); auto b = rgba.get_blue_u(); - gchar* tmp = g_strdup_printf("#%02x%02x%02x", (r >> 8), (g >> 8), (b >> 8) ); + gchar *tmp = g_strdup_printf("#%02x%02x%02x", (r >> 8), (g >> 8), (b >> 8)); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setString("/options/softproof/gamutcolor", tmp); @@ -2100,251 +2221,319 @@ void InkscapePreferences::initPageIO() { Gtk::TreeModel::iterator iter_io = this->AddPage(_page_io, _("Input/Output"), PREFS_PAGE_IO); - _save_use_current_dir.init( _("Use current directory for \"Save As ...\""), "/dialogs/save_as/use_current_dir", true); - _page_io.add_line( false, "", _save_use_current_dir, "", - _("When this option is on, the \"Save as...\" and \"Save a Copy...\" dialogs will always open in the directory where the currently open document is; when it's off, each will open in the directory where you last saved a file using it"), true); - - _misc_default_metadata.init( _("Add default metadata to new documents"), "/metadata/addToNewFile", false); - _page_io.add_line( false, "", _misc_default_metadata, "", - _("Add default metadata to new documents. Default metadata can be set from Document Properties->Metadata."), true); + _save_use_current_dir.init(_("Use current directory for \"Save As ...\""), "/dialogs/save_as/use_current_dir", + true); + _page_io.add_line(false, "", _save_use_current_dir, "", + _("When this option is on, the \"Save as...\" and \"Save a Copy...\" dialogs will always open in " + "the directory where the currently open document is; when it's off, each will open in the " + "directory where you last saved a file using it"), + true); + + _misc_default_metadata.init(_("Add default metadata to new documents"), "/metadata/addToNewFile", false); + _page_io.add_line( + false, "", _misc_default_metadata, "", + _("Add default metadata to new documents. Default metadata can be set from Document Properties->Metadata."), + true); - _export_all_extensions.init( _("Show all outputs in Export Dialog"), "/dialogs/export/show_all_extensions", false); - _page_io.add_line( false, "", _export_all_extensions, "", - _("Will list all possible output extensions in the Export Dialog selection."), true); + _export_all_extensions.init(_("Show all outputs in Export Dialog"), "/dialogs/export/show_all_extensions", false); + _page_io.add_line(false, "", _export_all_extensions, "", + _("Will list all possible output extensions in the Export Dialog selection."), true); // Input devices options - _mouse_sens.init ( "/options/cursortolerance/value", 0.0, 30.0, 1.0, 1.0, 8.0, true, false); - _page_mouse.add_line( false, _("_Grab sensitivity:"), _mouse_sens, _("pixels"), - _("How close on the screen you need to be to an object to be able to grab it with mouse (in screen pixels)"), false, reset_icon()); - _mouse_thres.init ( "/options/dragtolerance/value", 0.0, 100.0, 1.0, 1.0, 8.0, true, false); - _page_mouse.add_line( false, _("_Click/drag threshold:"), _mouse_thres, _("pixels"), - _("Maximum mouse drag (in screen pixels) which is considered a click, not a drag"), false); - - _mouse_use_ext_input.init( _("Use pressure-sensitive tablet"), "/options/useextinput/value", true); - _page_mouse.add_line(false, "",_mouse_use_ext_input, "", - _("Use the capabilities of a tablet or other pressure-sensitive device. Disable this only if you have problems with the tablet (you can still use it as a mouse)"), false, reset_icon()); - - _mouse_switch_on_ext_input.init( _("Switch tool based on tablet device"), "/options/switchonextinput/value", false); - _page_mouse.add_line(false, "",_mouse_switch_on_ext_input, "", - _("Change tool as different devices are used on the tablet (pen, eraser, mouse)"), false, reset_icon()); + _mouse_sens.init("/options/cursortolerance/value", 0.0, 30.0, 1.0, 1.0, 8.0, true, false); + _page_mouse.add_line( + false, _("_Grab sensitivity:"), _mouse_sens, _("pixels"), + _("How close on the screen you need to be to an object to be able to grab it with mouse (in screen pixels)"), + false, reset_icon()); + _mouse_thres.init("/options/dragtolerance/value", 0.0, 100.0, 1.0, 1.0, 8.0, true, false); + _page_mouse.add_line(false, _("_Click/drag threshold:"), _mouse_thres, _("pixels"), + _("Maximum mouse drag (in screen pixels) which is considered a click, not a drag"), false); + + _mouse_use_ext_input.init(_("Use pressure-sensitive tablet"), "/options/useextinput/value", true); + _page_mouse.add_line(false, "", _mouse_use_ext_input, "", + _("Use the capabilities of a tablet or other pressure-sensitive device. Disable this only if " + "you have problems with the tablet (you can still use it as a mouse)"), + false, reset_icon()); + + _mouse_switch_on_ext_input.init(_("Switch tool based on tablet device"), "/options/switchonextinput/value", false); + _page_mouse.add_line(false, "", _mouse_switch_on_ext_input, "", + _("Change tool as different devices are used on the tablet (pen, eraser, mouse)"), false, + reset_icon()); this->AddPage(_page_mouse, _("Input devices"), iter_io, PREFS_PAGE_IO_MOUSE); // SVG output options - _svgoutput_usenamedcolors.init( _("Use named colors"), "/options/svgoutput/usenamedcolors", false); - _page_svgoutput.add_line( false, "", _svgoutput_usenamedcolors, "", _("If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') instead of the numeric value"), false); + _svgoutput_usenamedcolors.init(_("Use named colors"), "/options/svgoutput/usenamedcolors", false); + _page_svgoutput.add_line(false, "", _svgoutput_usenamedcolors, "", + _("If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') " + "instead of the numeric value"), + false); - _page_svgoutput.add_group_header( _("XML formatting")); + _page_svgoutput.add_group_header(_("XML formatting")); - _svgoutput_inlineattrs.init( _("Inline attributes"), "/options/svgoutput/inlineattrs", false); - _page_svgoutput.add_line( true, "", _svgoutput_inlineattrs, "", _("Put attributes on the same line as the element tag"), false); + _svgoutput_inlineattrs.init(_("Inline attributes"), "/options/svgoutput/inlineattrs", false); + _page_svgoutput.add_line(true, "", _svgoutput_inlineattrs, "", + _("Put attributes on the same line as the element tag"), false); _svgoutput_indent.init("/options/svgoutput/indent", 0.0, 1000.0, 1.0, 2.0, 2.0, true, false); - _page_svgoutput.add_line( true, _("_Indent, spaces:"), _svgoutput_indent, "", _("The number of spaces to use for indenting nested elements; set to 0 for no indentation"), false); + _page_svgoutput.add_line( + true, _("_Indent, spaces:"), _svgoutput_indent, "", + _("The number of spaces to use for indenting nested elements; set to 0 for no indentation"), false); - _page_svgoutput.add_group_header( _("Path data")); + _page_svgoutput.add_group_header(_("Path data")); int const numPathstringFormat = 3; Glib::ustring pathstringFormatLabels[numPathstringFormat] = {_("Absolute"), _("Relative"), _("Optimized")}; int pathstringFormatValues[numPathstringFormat] = {0, 1, 2}; - _svgoutput_pathformat.init("/options/svgoutput/pathstring_format", pathstringFormatLabels, pathstringFormatValues, numPathstringFormat, 2); - _page_svgoutput.add_line( true, _("Path string format:"), _svgoutput_pathformat, "", _("Path data should be written: only with absolute coordinates, only with relative coordinates, or optimized for string length (mixed absolute and relative coordinates)"), false); + _svgoutput_pathformat.init("/options/svgoutput/pathstring_format", pathstringFormatLabels, pathstringFormatValues, + numPathstringFormat, 2); + _page_svgoutput.add_line(true, _("Path string format:"), _svgoutput_pathformat, "", + _("Path data should be written: only with absolute coordinates, only with relative " + "coordinates, or optimized for string length (mixed absolute and relative coordinates)"), + false); - _svgoutput_forcerepeatcommands.init( _("Force repeat commands"), "/options/svgoutput/forcerepeatcommands", false); - _page_svgoutput.add_line( true, "", _svgoutput_forcerepeatcommands, "", _("Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"), false); + _svgoutput_forcerepeatcommands.init(_("Force repeat commands"), "/options/svgoutput/forcerepeatcommands", false); + _page_svgoutput.add_line( + true, "", _svgoutput_forcerepeatcommands, "", + _("Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"), false); - _page_svgoutput.add_group_header( _("Numbers")); + _page_svgoutput.add_group_header(_("Numbers")); _svgoutput_numericprecision.init("/options/svgoutput/numericprecision", 1.0, 16.0, 1.0, 2.0, 8.0, true, false); - _page_svgoutput.add_line( true, _("_Numeric precision:"), _svgoutput_numericprecision, "", _("Significant figures of the values written to the SVG file"), false); + _page_svgoutput.add_line(true, _("_Numeric precision:"), _svgoutput_numericprecision, "", + _("Significant figures of the values written to the SVG file"), false); _svgoutput_minimumexponent.init("/options/svgoutput/minimumexponent", -32.0, -1, 1.0, 2.0, -8.0, true, false); - _page_svgoutput.add_line( true, _("Minimum _exponent:"), _svgoutput_minimumexponent, "", _("The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero"), false); + _page_svgoutput.add_line(true, _("Minimum _exponent:"), _svgoutput_minimumexponent, "", + _("The smallest number written to SVG is 10 to the power of this exponent; anything " + "smaller is written as zero"), + false); /* Code to add controls for attribute checking options */ /* Add incorrect style properties options */ - _page_svgoutput.add_group_header( _("Improper Attributes Actions")); + _page_svgoutput.add_group_header(_("Improper Attributes Actions")); - _svgoutput_attrwarn.init( _("Print warnings"), "/options/svgoutput/incorrect_attributes_warn", true); - _page_svgoutput.add_line( true, "", _svgoutput_attrwarn, "", _("Print warning if invalid or non-useful attributes found. Database files located in inkscape_data_dir/attributes."), false); - _svgoutput_attrremove.init( _("Remove attributes"), "/options/svgoutput/incorrect_attributes_remove", false); - _page_svgoutput.add_line( true, "", _svgoutput_attrremove, "", _("Delete invalid or non-useful attributes from element tag"), false); + _svgoutput_attrwarn.init(_("Print warnings"), "/options/svgoutput/incorrect_attributes_warn", true); + _page_svgoutput.add_line(true, "", _svgoutput_attrwarn, "", + _("Print warning if invalid or non-useful attributes found. Database files located in " + "inkscape_data_dir/attributes."), + false); + _svgoutput_attrremove.init(_("Remove attributes"), "/options/svgoutput/incorrect_attributes_remove", false); + _page_svgoutput.add_line(true, "", _svgoutput_attrremove, "", + _("Delete invalid or non-useful attributes from element tag"), false); /* Add incorrect style properties options */ - _page_svgoutput.add_group_header( _("Inappropriate Style Properties Actions")); - - _svgoutput_stylepropwarn.init( _("Print warnings"), "/options/svgoutput/incorrect_style_properties_warn", true); - _page_svgoutput.add_line( true, "", _svgoutput_stylepropwarn, "", _("Print warning if inappropriate style properties found (i.e. 'font-family' set on a ). Database files located in inkscape_data_dir/attributes."), false); - _svgoutput_stylepropremove.init( _("Remove style properties"), "/options/svgoutput/incorrect_style_properties_remove", false); - _page_svgoutput.add_line( true, "", _svgoutput_stylepropremove, "", _("Delete inappropriate style properties"), false); + _page_svgoutput.add_group_header(_("Inappropriate Style Properties Actions")); + + _svgoutput_stylepropwarn.init(_("Print warnings"), "/options/svgoutput/incorrect_style_properties_warn", true); + _page_svgoutput.add_line(true, "", _svgoutput_stylepropwarn, "", + _("Print warning if inappropriate style properties found (i.e. 'font-family' set on a " + "). Database files located in inkscape_data_dir/attributes."), + false); + _svgoutput_stylepropremove.init(_("Remove style properties"), + "/options/svgoutput/incorrect_style_properties_remove", false); + _page_svgoutput.add_line(true, "", _svgoutput_stylepropremove, "", _("Delete inappropriate style properties"), + false); /* Add default or inherited style properties options */ - _page_svgoutput.add_group_header( _("Non-useful Style Properties Actions")); - - _svgoutput_styledefaultswarn.init( _("Print warnings"), "/options/svgoutput/style_defaults_warn", true); - _page_svgoutput.add_line( true, "", _svgoutput_styledefaultswarn, "", _("Print warning if redundant style properties found (i.e. if a property has the default value and a different value is not inherited or if value is the same as would be inherited). Database files located in inkscape_data_dir/attributes."), false); - _svgoutput_styledefaultsremove.init( _("Remove style properties"), "/options/svgoutput/style_defaults_remove", false); - _page_svgoutput.add_line( true, "", _svgoutput_styledefaultsremove, "", _("Delete redundant style properties"), false); - - _page_svgoutput.add_group_header( _("Check Attributes and Style Properties on")); - - _svgoutput_check_reading.init( _("Reading"), "/options/svgoutput/check_on_reading", false); - _page_svgoutput.add_line( true, "", _svgoutput_check_reading, "", _("Check attributes and style properties on reading in SVG files (including those internal to Inkscape which will slow down startup)"), false); - _svgoutput_check_editing.init( _("Editing"), "/options/svgoutput/check_on_editing", false); - _page_svgoutput.add_line( true, "", _svgoutput_check_editing, "", _("Check attributes and style properties while editing SVG files (may slow down Inkscape, mostly useful for debugging)"), false); - _svgoutput_check_writing.init( _("Writing"), "/options/svgoutput/check_on_writing", true); - _page_svgoutput.add_line( true, "", _svgoutput_check_writing, "", _("Check attributes and style properties on writing out SVG files"), false); + _page_svgoutput.add_group_header(_("Non-useful Style Properties Actions")); + + _svgoutput_styledefaultswarn.init(_("Print warnings"), "/options/svgoutput/style_defaults_warn", true); + _page_svgoutput.add_line(true, "", _svgoutput_styledefaultswarn, "", + _("Print warning if redundant style properties found (i.e. if a property has the default " + "value and a different value is not inherited or if value is the same as would be " + "inherited). Database files located in inkscape_data_dir/attributes."), + false); + _svgoutput_styledefaultsremove.init(_("Remove style properties"), "/options/svgoutput/style_defaults_remove", + false); + _page_svgoutput.add_line(true, "", _svgoutput_styledefaultsremove, "", _("Delete redundant style properties"), + false); + + _page_svgoutput.add_group_header(_("Check Attributes and Style Properties on")); + + _svgoutput_check_reading.init(_("Reading"), "/options/svgoutput/check_on_reading", false); + _page_svgoutput.add_line(true, "", _svgoutput_check_reading, "", + _("Check attributes and style properties on reading in SVG files (including those " + "internal to Inkscape which will slow down startup)"), + false); + _svgoutput_check_editing.init(_("Editing"), "/options/svgoutput/check_on_editing", false); + _page_svgoutput.add_line(true, "", _svgoutput_check_editing, "", + _("Check attributes and style properties while editing SVG files (may slow down Inkscape, " + "mostly useful for debugging)"), + false); + _svgoutput_check_writing.init(_("Writing"), "/options/svgoutput/check_on_writing", true); + _page_svgoutput.add_line(true, "", _svgoutput_check_writing, "", + _("Check attributes and style properties on writing out SVG files"), false); this->AddPage(_page_svgoutput, _("SVG output"), iter_io, PREFS_PAGE_IO_SVGOUTPUT); // SVG Export Options ========================================== // SVG 2 Fallbacks - _page_svgexport.add_group_header( _("SVG 2")); - _svgexport_insert_text_fallback.init( _("Insert SVG 1.1 fallback in text"), "/options/svgexport/text_insertfallback", true ); - _svgexport_insert_mesh_polyfill.init( _("Insert JavaScript code for mesh gradients"), "/options/svgexport/mesh_insertpolyfill", true ); - _svgexport_insert_hatch_polyfill.init( _("Insert JavaScript code for SVG2 hatches"), "/options/svgexport/hatch_insertpolyfill", true ); - - _page_svgexport.add_line( false, "", _svgexport_insert_text_fallback, "", _("Adds fallback options for non-SVG 2 renderers."), false); - _page_svgexport.add_line( false, "", _svgexport_insert_mesh_polyfill, "", _("Adds a JavaScript polyfill for rendering meshes in web browsers."), false); - _page_svgexport.add_line( false, "", _svgexport_insert_hatch_polyfill, "", _("Adds a JavaScript polyfill for rendering hatches in web browsers."), false); + _page_svgexport.add_group_header(_("SVG 2")); + _svgexport_insert_text_fallback.init(_("Insert SVG 1.1 fallback in text"), "/options/svgexport/text_insertfallback", + true); + _svgexport_insert_mesh_polyfill.init(_("Insert JavaScript code for mesh gradients"), + "/options/svgexport/mesh_insertpolyfill", true); + _svgexport_insert_hatch_polyfill.init(_("Insert JavaScript code for SVG2 hatches"), + "/options/svgexport/hatch_insertpolyfill", true); + + _page_svgexport.add_line(false, "", _svgexport_insert_text_fallback, "", + _("Adds fallback options for non-SVG 2 renderers."), false); + _page_svgexport.add_line(false, "", _svgexport_insert_mesh_polyfill, "", + _("Adds a JavaScript polyfill for rendering meshes in web browsers."), false); + _page_svgexport.add_line(false, "", _svgexport_insert_hatch_polyfill, "", + _("Adds a JavaScript polyfill for rendering hatches in web browsers."), false); // SVG Export Options (SVG 2 -> SVG 1) - _page_svgexport.add_group_header( _("SVG 2 to SVG 1.1")); - - _svgexport_remove_marker_auto_start_reverse.init( _("Use correct marker direction in SVG 1.1 renderers"), "/options/svgexport/marker_autostartreverse", false); - _svgexport_remove_marker_context_paint.init( _("Use correct marker colors in SVG 1.1 renderers"), "/options/svgexport/marker_contextpaint", false); - - _page_svgexport.add_line( false, "", _svgexport_remove_marker_auto_start_reverse, "", _("SVG 2 allows markers to automatically be reversed at the start of a path with 'auto_start_reverse'. This adds a rotated duplicate of the marker's definition."), false); - _page_svgexport.add_line( false, "", _svgexport_remove_marker_context_paint, "", _("SVG 2 allows markers to automatically match the stroke color by using 'context_paint' or 'context_fill'. This adjusts the markers own colors."), false); + _page_svgexport.add_group_header(_("SVG 2 to SVG 1.1")); + + _svgexport_remove_marker_auto_start_reverse.init(_("Use correct marker direction in SVG 1.1 renderers"), + "/options/svgexport/marker_autostartreverse", false); + _svgexport_remove_marker_context_paint.init(_("Use correct marker colors in SVG 1.1 renderers"), + "/options/svgexport/marker_contextpaint", false); + + _page_svgexport.add_line(false, "", _svgexport_remove_marker_auto_start_reverse, "", + _("SVG 2 allows markers to automatically be reversed at the start of a path with " + "'auto_start_reverse'. This adds a rotated duplicate of the marker's definition."), + false); + _page_svgexport.add_line(false, "", _svgexport_remove_marker_context_paint, "", + _("SVG 2 allows markers to automatically match the stroke color by using 'context_paint' " + "or 'context_fill'. This adjusts the markers own colors."), + false); this->AddPage(_page_svgexport, _("SVG export"), iter_io, PREFS_PAGE_IO_SVGEXPORT); - // CMS options Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int const numIntents = 4; /* TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm */ - Glib::ustring intentLabels[numIntents] = {_("Perceptual"), _("Relative Colorimetric"), _("Saturation"), _("Absolute Colorimetric")}; + Glib::ustring intentLabels[numIntents] = {_("Perceptual"), _("Relative Colorimetric"), _("Saturation"), + _("Absolute Colorimetric")}; int intentValues[numIntents] = {0, 1, 2, 3}; - _page_cms.add_group_header( _("Display adjustment")); + _page_cms.add_group_header(_("Display adjustment")); Glib::ustring tmpStr; - for (auto &profile: ColorProfile::getBaseProfileDirs()) { - gchar* part = g_strdup_printf( "\n%s", profile.filename.c_str() ); + for (auto &profile : ColorProfile::getBaseProfileDirs()) { + gchar *part = g_strdup_printf("\n%s", profile.filename.c_str()); tmpStr += part; g_free(part); } - gchar* profileTip = g_strdup_printf(_("The ICC profile to use to calibrate display output.\nSearched directories:%s"), tmpStr.c_str()); - _page_cms.add_line( true, _("Display profile:"), _cms_display_profile, "", - profileTip, false); + gchar *profileTip = g_strdup_printf( + _("The ICC profile to use to calibrate display output.\nSearched directories:%s"), tmpStr.c_str()); + _page_cms.add_line(true, _("Display profile:"), _cms_display_profile, "", profileTip, false); g_free(profileTip); profileTip = nullptr; - _cms_from_display.init( _("Retrieve profile from display"), "/options/displayprofile/from_display", false); - _page_cms.add_line( true, "", _cms_from_display, "", + _cms_from_display.init(_("Retrieve profile from display"), "/options/displayprofile/from_display", false); + _page_cms.add_line(true, "", _cms_from_display, "", #ifdef GDK_WINDOWING_X11 - _("Retrieve profiles from those attached to displays via XICC"), false); + _("Retrieve profiles from those attached to displays via XICC"), false); #else - _("Retrieve profiles from those attached to displays"), false); + _("Retrieve profiles from those attached to displays"), false); #endif // GDK_WINDOWING_X11 - _cms_intent.init("/options/displayprofile/intent", intentLabels, intentValues, numIntents, 0); - _page_cms.add_line( true, _("Display rendering intent:"), _cms_intent, "", - _("The rendering intent to use to calibrate display output"), false); + _page_cms.add_line(true, _("Display rendering intent:"), _cms_intent, "", + _("The rendering intent to use to calibrate display output"), false); - _page_cms.add_group_header( _("Proofing")); + _page_cms.add_group_header(_("Proofing")); - _cms_softproof.init( _("Simulate output on screen"), "/options/softproof/enable", false); - _page_cms.add_line( true, "", _cms_softproof, "", - _("Simulates output of target device"), false); + _cms_softproof.init(_("Simulate output on screen"), "/options/softproof/enable", false); + _page_cms.add_line(true, "", _cms_softproof, "", _("Simulates output of target device"), false); - _cms_gamutwarn.init( _("Mark out of gamut colors"), "/options/softproof/gamutwarn", false); - _page_cms.add_line( true, "", _cms_gamutwarn, "", - _("Highlights colors that are out of gamut for the target device"), false); + _cms_gamutwarn.init(_("Mark out of gamut colors"), "/options/softproof/gamutwarn", false); + _page_cms.add_line(true, "", _cms_gamutwarn, "", _("Highlights colors that are out of gamut for the target device"), + false); Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); - Gdk::RGBA tmpColor( colorStr.empty() ? "#00ff00" : colorStr); - _cms_gamutcolor.set_rgba( tmpColor ); + Gdk::RGBA tmpColor(colorStr.empty() ? "#00ff00" : colorStr); + _cms_gamutcolor.set_rgba(tmpColor); - _page_cms.add_line( true, _("Out of gamut warning color:"), _cms_gamutcolor, "", - _("Selects the color used for out of gamut warning"), false); + _page_cms.add_line(true, _("Out of gamut warning color:"), _cms_gamutcolor, "", + _("Selects the color used for out of gamut warning"), false); - _page_cms.add_line( true, _("Device profile:"), _cms_proof_profile, "", - _("The ICC profile to use to simulate device output"), false); + _page_cms.add_line(true, _("Device profile:"), _cms_proof_profile, "", + _("The ICC profile to use to simulate device output"), false); _cms_proof_intent.init("/options/softproof/intent", intentLabels, intentValues, numIntents, 0); - _page_cms.add_line( true, _("Device rendering intent:"), _cms_proof_intent, "", - _("The rendering intent to use to calibrate device output"), false); + _page_cms.add_line(true, _("Device rendering intent:"), _cms_proof_intent, "", + _("The rendering intent to use to calibrate device output"), false); - _cms_proof_blackpoint.init( _("Black point compensation"), "/options/softproof/bpc", false); - _page_cms.add_line( true, "", _cms_proof_blackpoint, "", - _("Enables black point compensation"), false); + _cms_proof_blackpoint.init(_("Black point compensation"), "/options/softproof/bpc", false); + _page_cms.add_line(true, "", _cms_proof_blackpoint, "", _("Enables black point compensation"), false); - _cms_proof_preserveblack.init( _("Preserve black"), "/options/softproof/preserveblack", false); + _cms_proof_preserveblack.init(_("Preserve black"), "/options/softproof/preserveblack", false); #if !defined(cmsFLAGS_PRESERVEBLACK) - _cms_proof_preserveblack.set_sensitive( false ); + _cms_proof_preserveblack.set_sensitive(false); #endif // !defined(cmsFLAGS_PRESERVEBLACK) - { std::vector names = ::Inkscape::CMSSystem::getDisplayNames(); - Glib::ustring current = prefs->getString( "/options/displayprofile/uri" ); + Glib::ustring current = prefs->getString("/options/displayprofile/uri"); gint index = 0; _cms_display_profile.append(_("")); index++; - for (auto & name : names) { - _cms_display_profile.append( name ); + for (auto &name : names) { + _cms_display_profile.append(name); Glib::ustring path = CMSSystem::getPathForProfile(name); - if ( !path.empty() && path == current ) { + if (!path.empty() && path == current) { _cms_display_profile.set_active(index); } index++; } - if ( current.empty() ) { + if (current.empty()) { _cms_display_profile.set_active(0); } names = ::Inkscape::CMSSystem::getSoftproofNames(); current = prefs->getString("/options/softproof/uri"); index = 0; - for (auto & name : names) { - _cms_proof_profile.append( name ); + for (auto &name : names) { + _cms_proof_profile.append(name); Glib::ustring path = CMSSystem::getPathForProfile(name); - if ( !path.empty() && path == current ) { + if (!path.empty() && path == current) { _cms_proof_profile.set_active(index); } index++; } } - _cms_gamutcolor.signal_color_set().connect( sigc::bind( sigc::ptr_fun(gamutColorChanged), &_cms_gamutcolor) ); + _cms_gamutcolor.signal_color_set().connect(sigc::bind(sigc::ptr_fun(gamutColorChanged), &_cms_gamutcolor)); - _cms_display_profile.signal_changed().connect( sigc::bind( sigc::ptr_fun(profileComboChanged), &_cms_display_profile) ); - _cms_proof_profile.signal_changed().connect( sigc::bind( sigc::ptr_fun(proofComboChanged), &_cms_proof_profile) ); + _cms_display_profile.signal_changed().connect( + sigc::bind(sigc::ptr_fun(profileComboChanged), &_cms_display_profile)); + _cms_proof_profile.signal_changed().connect(sigc::bind(sigc::ptr_fun(proofComboChanged), &_cms_proof_profile)); this->AddPage(_page_cms, _("Color management"), iter_io, PREFS_PAGE_IO_CMS); // Autosave options - _save_autosave_enable.init( _("Enable autosave"), "/options/autosave/enable", true); - _page_autosave.add_line(false, "", _save_autosave_enable, "", _("Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"), false); + _save_autosave_enable.init(_("Enable autosave"), "/options/autosave/enable", true); + _page_autosave.add_line( + false, "", _save_autosave_enable, "", + _("Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"), + false); _save_autosave_path.init("/options/autosave/path", true); if (prefs->getString("/options/autosave/path").empty()) { // Show the default fallback "tmp dir" if autosave path is not set. _save_autosave_path.set_text(Glib::build_filename(Glib::get_user_cache_dir(), "inkscape")); } - _page_autosave.add_line(false, C_("Filesystem", "Autosave _directory:"), _save_autosave_path, "", _("The directory where autosaves will be written. This should be an absolute path (starts with / on UNIX or a drive letter such as C: on Windows)."), false); + _page_autosave.add_line(false, C_("Filesystem", "Autosave _directory:"), _save_autosave_path, "", + _("The directory where autosaves will be written. This should be an absolute path (starts " + "with / on UNIX or a drive letter such as C: on Windows)."), + false); _save_autosave_interval.init("/options/autosave/interval", 1.0, 10800.0, 1.0, 10.0, 10.0, true, false); - _page_autosave.add_line(false, _("_Interval (in minutes):"), _save_autosave_interval, "", _("Interval (in minutes) at which document will be autosaved"), false); + _page_autosave.add_line(false, _("_Interval (in minutes):"), _save_autosave_interval, "", + _("Interval (in minutes) at which document will be autosaved"), false); _save_autosave_max.init("/options/autosave/max", 1.0, 10000.0, 1.0, 10.0, 10.0, true, false); - _page_autosave.add_line(false, _("_Maximum number of autosaves:"), _save_autosave_max, "", _("Maximum number of autosaved files; use this to limit the storage space used"), false); + _page_autosave.add_line(false, _("_Maximum number of autosaves:"), _save_autosave_max, "", + _("Maximum number of autosaved files; use this to limit the storage space used"), false); // When changing the interval or enabling/disabling the autosave function, // update our running configuration @@ -2362,367 +2551,424 @@ void InkscapePreferences::initPageBehavior() Gtk::TreeModel::iterator iter_behavior = this->AddPage(_page_behavior, _("Behavior"), PREFS_PAGE_BEHAVIOR); _misc_simpl.init("/options/simplifythreshold/value", 0.0001, 1.0, 0.0001, 0.0010, 0.0010, false, false); - _page_behavior.add_line( false, _("_Simplification threshold:"), _misc_simpl, "", - _("How strong is the Node tool's Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."), false); - - _markers_color_stock.init ( _("Color stock markers the same color as object"), "/options/markers/colorStockMarkers", true); - _markers_color_custom.init ( _("Color custom markers the same color as object"), "/options/markers/colorCustomMarkers", false); - _markers_color_update.init ( _("Update marker color when object color changes"), "/options/markers/colorUpdateMarkers", true); + _page_behavior.add_line(false, _("_Simplification threshold:"), _misc_simpl, "", + _("How strong is the Node tool's Simplify command by default. If you invoke this command " + "several times in quick succession, it will act more and more aggressively; invoking it " + "again after a pause restores the default threshold."), + false); + + _markers_color_stock.init(_("Color stock markers the same color as object"), "/options/markers/colorStockMarkers", + true); + _markers_color_custom.init(_("Color custom markers the same color as object"), + "/options/markers/colorCustomMarkers", false); + _markers_color_update.init(_("Update marker color when object color changes"), + "/options/markers/colorUpdateMarkers", true); // Selecting options - _sel_all.init ( _("Select in all layers"), "/options/kbselection/inlayer", PREFS_SELECTION_ALL, false, nullptr); - _sel_current.init ( _("Select only within current layer"), "/options/kbselection/inlayer", PREFS_SELECTION_LAYER, true, &_sel_all); - _sel_recursive.init ( _("Select in current layer and sublayers"), "/options/kbselection/inlayer", PREFS_SELECTION_LAYER_RECURSIVE, false, &_sel_all); - _sel_hidden.init ( _("Ignore hidden objects and layers"), "/options/kbselection/onlyvisible", true); - _sel_locked.init ( _("Ignore locked objects and layers"), "/options/kbselection/onlysensitive", true); - _sel_inlayer_same.init ( _("Select same behaves like select all"), "/options/selection/samelikeall", false); - - _sel_layer_deselects.init ( _("Deselect upon layer change"), "/options/selection/layerdeselect", true); - _sel_touch_topmost_only.init ( _("Select the topmost items only when in touch selection mode"), "/options/selection/touchsel_topmost_only", true); - - _page_select.add_line( false, "", _sel_layer_deselects, "", - _("Uncheck this to be able to keep the current objects selected when the current layer changes")); - - _page_select.add_line( false, "", _sel_touch_topmost_only, "", - _("In touch selection mode, if multiple items overlap at a point, select only the topmost item")); - - _page_select.add_group_header( _("Ctrl+A, Tab, Shift+Tab")); - _page_select.add_line( true, "", _sel_all, "", - _("Make keyboard selection commands work on objects in all layers")); - _page_select.add_line( true, "", _sel_current, "", - _("Make keyboard selection commands work on objects in current layer only")); - _page_select.add_line( true, "", _sel_recursive, "", - _("Make keyboard selection commands work on objects in current layer and all its sublayers")); - _page_select.add_line( true, "", _sel_hidden, "", - _("Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden layer)")); - _page_select.add_line( true, "", _sel_locked, "", - _("Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)")); - _page_select.add_line( true, "", _sel_inlayer_same, "", - _("Check this to make the 'select same' functions work like the select all functions, restricting to current layer only.")); - - _sel_cycle.init ( _("Wrap when cycling objects in z-order"), "/options/selection/cycleWrap", true); - - _page_select.add_group_header( _("Alt+Scroll Wheel")); - _page_select.add_line( true, "", _sel_cycle, "", - _("Wrap around at start and end when cycling objects in z-order")); + _sel_all.init(_("Select in all layers"), "/options/kbselection/inlayer", PREFS_SELECTION_ALL, false, nullptr); + _sel_current.init(_("Select only within current layer"), "/options/kbselection/inlayer", PREFS_SELECTION_LAYER, + true, &_sel_all); + _sel_recursive.init(_("Select in current layer and sublayers"), "/options/kbselection/inlayer", + PREFS_SELECTION_LAYER_RECURSIVE, false, &_sel_all); + _sel_hidden.init(_("Ignore hidden objects and layers"), "/options/kbselection/onlyvisible", true); + _sel_locked.init(_("Ignore locked objects and layers"), "/options/kbselection/onlysensitive", true); + _sel_inlayer_same.init(_("Select same behaves like select all"), "/options/selection/samelikeall", false); + + _sel_layer_deselects.init(_("Deselect upon layer change"), "/options/selection/layerdeselect", true); + _sel_touch_topmost_only.init(_("Select the topmost items only when in touch selection mode"), + "/options/selection/touchsel_topmost_only", true); + + _page_select.add_line( + false, "", _sel_layer_deselects, "", + _("Uncheck this to be able to keep the current objects selected when the current layer changes")); + + _page_select.add_line( + false, "", _sel_touch_topmost_only, "", + _("In touch selection mode, if multiple items overlap at a point, select only the topmost item")); + + _page_select.add_group_header(_("Ctrl+A, Tab, Shift+Tab")); + _page_select.add_line(true, "", _sel_all, "", _("Make keyboard selection commands work on objects in all layers")); + _page_select.add_line(true, "", _sel_current, "", + _("Make keyboard selection commands work on objects in current layer only")); + _page_select.add_line(true, "", _sel_recursive, "", + _("Make keyboard selection commands work on objects in current layer and all its sublayers")); + _page_select.add_line(true, "", _sel_hidden, "", + _("Uncheck this to be able to select objects that are hidden (either by themselves or by " + "being in a hidden layer)")); + _page_select.add_line(true, "", _sel_locked, "", + _("Uncheck this to be able to select objects that are locked (either by themselves or by " + "being in a locked layer)")); + _page_select.add_line(true, "", _sel_inlayer_same, "", + _("Check this to make the 'select same' functions work like the select all functions, " + "restricting to current layer only.")); + + _sel_cycle.init(_("Wrap when cycling objects in z-order"), "/options/selection/cycleWrap", true); + + _page_select.add_group_header(_("Alt+Scroll Wheel")); + _page_select.add_line(true, "", _sel_cycle, "", _("Wrap around at start and end when cycling objects in z-order")); auto paste_above_selected = Gtk::manage(new UI::Widget::PrefCheckButton()); paste_above_selected->init(_("Paste above selection instead of layer-top"), "/options/paste/aboveselected", true); - _page_select.add_line(false, "", *paste_above_selected, "", - _("If checked, pasted items and imported documents will be placed immediately above the " - "current selection (z-order). Otherwise, insertion happens on top of all objects in the current layer.")); + _page_select.add_line( + false, "", *paste_above_selected, "", + _("If checked, pasted items and imported documents will be placed immediately above the " + "current selection (z-order). Otherwise, insertion happens on top of all objects in the current layer.")); this->AddPage(_page_select, _("Selecting"), iter_behavior, PREFS_PAGE_BEHAVIOR_SELECTING); // Transforms options - _trans_scale_stroke.init ( _("Scale stroke width"), "/options/transform/stroke", true); - _trans_scale_corner.init ( _("Scale rounded corners in rectangles"), "/options/transform/rectcorners", false); - _trans_gradient.init ( _("Transform gradients"), "/options/transform/gradient", true); - _trans_pattern.init ( _("Transform patterns"), "/options/transform/pattern", false); + _trans_scale_stroke.init(_("Scale stroke width"), "/options/transform/stroke", true); + _trans_scale_corner.init(_("Scale rounded corners in rectangles"), "/options/transform/rectcorners", false); + _trans_gradient.init(_("Transform gradients"), "/options/transform/gradient", true); + _trans_pattern.init(_("Transform patterns"), "/options/transform/pattern", false); _trans_dash_scale.init(_("Scale dashes with stroke"), "/options/dash/scale", true); - _trans_optimized.init ( _("Optimized"), "/options/preservetransform/value", 0, true, nullptr); - _trans_preserved.init ( _("Preserved"), "/options/preservetransform/value", 1, false, &_trans_optimized); - - _page_transforms.add_line( false, "", _trans_scale_stroke, "", - _("When scaling objects, scale the stroke width by the same proportion")); - _page_transforms.add_line( false, "", _trans_scale_corner, "", - _("When scaling rectangles, scale the radii of rounded corners")); - _page_transforms.add_line( false, "", _trans_gradient, "", - _("Move gradients (in fill or stroke) along with the objects")); - _page_transforms.add_line( false, "", _trans_pattern, "", - _("Move patterns (in fill or stroke) along with the objects")); + _trans_optimized.init(_("Optimized"), "/options/preservetransform/value", 0, true, nullptr); + _trans_preserved.init(_("Preserved"), "/options/preservetransform/value", 1, false, &_trans_optimized); + + _page_transforms.add_line(false, "", _trans_scale_stroke, "", + _("When scaling objects, scale the stroke width by the same proportion")); + _page_transforms.add_line(false, "", _trans_scale_corner, "", + _("When scaling rectangles, scale the radii of rounded corners")); + _page_transforms.add_line(false, "", _trans_gradient, "", + _("Move gradients (in fill or stroke) along with the objects")); + _page_transforms.add_line(false, "", _trans_pattern, "", + _("Move patterns (in fill or stroke) along with the objects")); _page_transforms.add_line(false, "", _trans_dash_scale, "", _("When changing stroke width, scale dash array")); - _page_transforms.add_group_header( _("Store transformation")); - _page_transforms.add_line( true, "", _trans_optimized, "", - _("If possible, apply transformation to objects without adding a transform= attribute")); - _page_transforms.add_line( true, "", _trans_preserved, "", - _("Always store transformation as a transform= attribute on objects")); - + _page_transforms.add_group_header(_("Store transformation")); + _page_transforms.add_line(true, "", _trans_optimized, "", + _("If possible, apply transformation to objects without adding a transform= attribute")); + _page_transforms.add_line(true, "", _trans_preserved, "", + _("Always store transformation as a transform= attribute on objects")); + this->AddPage(_page_transforms, _("Transforms"), iter_behavior, PREFS_PAGE_BEHAVIOR_TRANSFORMS); // Scrolling options - _scroll_wheel.init ( "/options/wheelscroll/value", 0.0, 1000.0, 1.0, 1.0, 40.0, true, false); - _page_scrolling.add_line( false, _("Mouse _wheel scrolls by:"), _scroll_wheel, _("pixels"), - _("One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"), false); - _page_scrolling.add_group_header( _("Ctrl+arrows")); - _scroll_arrow_px.init ( "/options/keyscroll/value", 0.0, 1000.0, 1.0, 1.0, 10.0, true, false); - _page_scrolling.add_line( true, _("Sc_roll by:"), _scroll_arrow_px, _("pixels"), - _("Pressing Ctrl+arrow key scrolls by this distance (in screen pixels)"), false); - _scroll_arrow_acc.init ( "/options/scrollingacceleration/value", 0.0, 5.0, 0.01, 1.0, 0.35, false, false); - _page_scrolling.add_line( true, _("_Acceleration:"), _scroll_arrow_acc, "", - _("Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"), false); - _page_scrolling.add_group_header( _("Autoscrolling")); - _scroll_auto_speed.init ( "/options/autoscrollspeed/value", 0.0, 5.0, 0.01, 1.0, 0.7, false, false); - _page_scrolling.add_line( true, _("_Speed:"), _scroll_auto_speed, "", - _("How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"), false); - _scroll_auto_thres.init ( "/options/autoscrolldistance/value", -600.0, 600.0, 1.0, 1.0, -10.0, true, false); - _page_scrolling.add_line( true, _("_Threshold:"), _scroll_auto_thres, _("pixels"), - _("How far (in screen pixels) you need to be from the canvas edge to trigger autoscroll; positive is outside the canvas, negative is within the canvas"), false); - _scroll_space.init ( _("Mouse move pans when Space is pressed"), "/options/spacebarpans/value", true); - _page_scrolling.add_line( true, "", _scroll_space, "", - _("When on, pressing and holding Space and dragging pans canvas")); + _scroll_wheel.init("/options/wheelscroll/value", 0.0, 1000.0, 1.0, 1.0, 40.0, true, false); + _page_scrolling.add_line( + false, _("Mouse _wheel scrolls by:"), _scroll_wheel, _("pixels"), + _("One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"), false); + _page_scrolling.add_group_header(_("Ctrl+arrows")); + _scroll_arrow_px.init("/options/keyscroll/value", 0.0, 1000.0, 1.0, 1.0, 10.0, true, false); + _page_scrolling.add_line(true, _("Sc_roll by:"), _scroll_arrow_px, _("pixels"), + _("Pressing Ctrl+arrow key scrolls by this distance (in screen pixels)"), false); + _scroll_arrow_acc.init("/options/scrollingacceleration/value", 0.0, 5.0, 0.01, 1.0, 0.35, false, false); + _page_scrolling.add_line( + true, _("_Acceleration:"), _scroll_arrow_acc, "", + _("Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"), false); + _page_scrolling.add_group_header(_("Autoscrolling")); + _scroll_auto_speed.init("/options/autoscrollspeed/value", 0.0, 5.0, 0.01, 1.0, 0.7, false, false); + _page_scrolling.add_line( + true, _("_Speed:"), _scroll_auto_speed, "", + _("How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"), false); + _scroll_auto_thres.init("/options/autoscrolldistance/value", -600.0, 600.0, 1.0, 1.0, -10.0, true, false); + _page_scrolling.add_line(true, _("_Threshold:"), _scroll_auto_thres, _("pixels"), + _("How far (in screen pixels) you need to be from the canvas edge to trigger autoscroll; " + "positive is outside the canvas, negative is within the canvas"), + false); + _scroll_space.init(_("Mouse move pans when Space is pressed"), "/options/spacebarpans/value", true); + _page_scrolling.add_line(true, "", _scroll_space, "", + _("When on, pressing and holding Space and dragging pans canvas")); this->AddPage(_page_scrolling, _("Scrolling"), iter_behavior, PREFS_PAGE_BEHAVIOR_SCROLLING); // Snapping options - _page_snapping.add_group_header( _("Snap indicator")); + _page_snapping.add_group_header(_("Snap indicator")); - _snap_indicator.init( _("Enable snap indicator"), "/options/snapindicator/value", true); - _page_snapping.add_line( true, "", _snap_indicator, "", - _("After snapping, a symbol is drawn at the point that has snapped")); + _snap_indicator.init(_("Enable snap indicator"), "/options/snapindicator/value", true); + _page_snapping.add_line(true, "", _snap_indicator, "", + _("After snapping, a symbol is drawn at the point that has snapped")); - _snap_indicator.changed_signal.connect( sigc::mem_fun(_snap_persistence, &Gtk::Widget::set_sensitive) ); + _snap_indicator.changed_signal.connect(sigc::mem_fun(_snap_persistence, &Gtk::Widget::set_sensitive)); _snap_persistence.init("/options/snapindicatorpersistence/value", 0.1, 10, 0.1, 1, 2, 1); - _page_snapping.add_line( true, _("Snap indicator persistence (in seconds):"), _snap_persistence, "", - _("Controls how long the snap indicator message will be shown, before it disappears"), true); + _page_snapping.add_line(true, _("Snap indicator persistence (in seconds):"), _snap_persistence, "", + _("Controls how long the snap indicator message will be shown, before it disappears"), + true); - _snap_indicator_distance.init( _("Show snap distance in case of alignment or distribution snap"), "/options/snapindicatordistance/value", false); - _page_snapping.add_line( true, "", _snap_indicator_distance, "", - _("Show snap distance in case of alignment or distribution snap")); + _snap_indicator_distance.init(_("Show snap distance in case of alignment or distribution snap"), + "/options/snapindicatordistance/value", false); + _page_snapping.add_line(true, "", _snap_indicator_distance, "", + _("Show snap distance in case of alignment or distribution snap")); - _page_snapping.add_group_header( _("What should snap")); + _page_snapping.add_group_header(_("What should snap")); - _snap_closest_only.init( _("Only snap the node closest to the pointer"), "/options/snapclosestonly/value", false); - _page_snapping.add_line( true, "", _snap_closest_only, "", - _("Only try to snap the node that is initially closest to the mouse pointer")); + _snap_closest_only.init(_("Only snap the node closest to the pointer"), "/options/snapclosestonly/value", false); + _page_snapping.add_line(true, "", _snap_closest_only, "", + _("Only try to snap the node that is initially closest to the mouse pointer")); _snap_weight.init("/options/snapweight/value", 0, 1, 0.1, 0.2, 0.5, 1); - _page_snapping.add_line( true, _("_Weight factor:"), _snap_weight, "", - _("When multiple snap solutions are found, then Inkscape can either prefer the closest transformation (when set to 0), or prefer the node that was initially the closest to the pointer (when set to 1)"), true); + _page_snapping.add_line( + true, _("_Weight factor:"), _snap_weight, "", + _("When multiple snap solutions are found, then Inkscape can either prefer the closest transformation (when " + "set to 0), or prefer the node that was initially the closest to the pointer (when set to 1)"), + true); - _snap_mouse_pointer.init( _("Snap the mouse pointer when dragging a constrained knot"), "/options/snapmousepointer/value", false); - _page_snapping.add_line( true, "", _snap_mouse_pointer, "", - _("When dragging a knot along a constraint line, then snap the position of the mouse pointer instead of snapping the projection of the knot onto the constraint line")); + _snap_mouse_pointer.init(_("Snap the mouse pointer when dragging a constrained knot"), + "/options/snapmousepointer/value", false); + _page_snapping.add_line(true, "", _snap_mouse_pointer, "", + _("When dragging a knot along a constraint line, then snap the position of the mouse " + "pointer instead of snapping the projection of the knot onto the constraint line")); - _page_snapping.add_group_header( _("Delayed snap")); + _page_snapping.add_group_header(_("Delayed snap")); _snap_delay.init("/options/snapdelay/value", 0, 1, 0.1, 0.2, 0, 1); - _page_snapping.add_line( true, _("Delay (in seconds):"), _snap_delay, "", - _("Postpone snapping as long as the mouse is moving, and then wait an additional fraction of a second. This additional delay is specified here. When set to zero or to a very small number, snapping will be immediate."), true); - + _page_snapping.add_line(true, _("Delay (in seconds):"), _snap_delay, "", + _("Postpone snapping as long as the mouse is moving, and then wait an additional fraction " + "of a second. This additional delay is specified here. When set to zero or to a very " + "small number, snapping will be immediate."), + true); this->AddPage(_page_snapping, _("Snapping"), iter_behavior, PREFS_PAGE_BEHAVIOR_SNAPPING); // Steps options - _steps_arrow.init ( "/options/nudgedistance/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); - //nudgedistance is limited to 1000 in select-context.cpp: use the same limit here - _page_steps.add_line( false, _("_Arrow keys move by:"), _steps_arrow, "", - _("Pressing an arrow key moves selected object(s) or node(s) by this distance"), false); - _steps_scale.init ( "/options/defaultscale/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); - //defaultscale is limited to 1000 in select-context.cpp: use the same limit here - _page_steps.add_line( false, _("> and < _scale by:"), _steps_scale, "", - _("Pressing > or < scales selection up or down by this increment"), false); - _steps_inset.init ( "/options/defaultoffsetwidth/value", 0.0, 3000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); - _page_steps.add_line( false, _("_Inset/Outset by:"), _steps_inset, "", - _("Inset and Outset commands displace the path by this distance"), false); - _steps_compass.init ( _("Compass-like display of angles"), "/options/compassangledisplay/value", true); - _page_steps.add_line( false, "", _steps_compass, "", - _("When on, angles are displayed with 0 at north, 0 to 360 range, positive clockwise; otherwise with 0 at east, -180 to 180 range, positive counterclockwise")); + _steps_arrow.init("/options/nudgedistance/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); + // nudgedistance is limited to 1000 in select-context.cpp: use the same limit here + _page_steps.add_line(false, _("_Arrow keys move by:"), _steps_arrow, "", + _("Pressing an arrow key moves selected object(s) or node(s) by this distance"), false); + _steps_scale.init("/options/defaultscale/value", 0.0, 1000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); + // defaultscale is limited to 1000 in select-context.cpp: use the same limit here + _page_steps.add_line(false, _("> and < _scale by:"), _steps_scale, "", + _("Pressing > or < scales selection up or down by this increment"), false); + _steps_inset.init("/options/defaultoffsetwidth/value", 0.0, 3000.0, 0.01, 2.0, UNIT_TYPE_LINEAR, "px"); + _page_steps.add_line(false, _("_Inset/Outset by:"), _steps_inset, "", + _("Inset and Outset commands displace the path by this distance"), false); + _steps_compass.init(_("Compass-like display of angles"), "/options/compassangledisplay/value", true); + _page_steps.add_line(false, "", _steps_compass, "", + _("When on, angles are displayed with 0 at north, 0 to 360 range, positive clockwise; " + "otherwise with 0 at east, -180 to 180 range, positive counterclockwise")); int const num_items = 18; - Glib::ustring labels[num_items] = {"90", "60", "45", "36", "30", "22.5", "18", "15", "12", "10", "7.5", "6", "5", "3", "2", "1", "0.5", C_("Rotation angle", "None")}; + Glib::ustring labels[num_items] = {"90", "60", "45", "36", "30", "22.5", + "18", "15", "12", "10", "7.5", "6", + "5", "3", "2", "1", "0.5", C_("Rotation angle", "None")}; int values[num_items] = {2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 24, 30, 36, 60, 90, 180, 360, 0}; _steps_rot_snap.set_size_request(_sb_width); _steps_rot_snap.init("/options/rotationsnapsperpi/value", labels, values, num_items, 12); - _page_steps.add_line( false, _("_Rotation snaps every:"), _steps_rot_snap, _("degrees"), - _("Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"), false); - _steps_rot_relative.init ( _("Relative snapping of guideline angles"), "/options/relativeguiderotationsnap/value", false); - _page_steps.add_line( false, "", _steps_rot_relative, "", - _("When on, the snap angles when rotating a guideline will be relative to the original angle")); - _steps_zoom.init ( "/options/zoomincrement/value", 101.0, 500.0, 1.0, 1.0, M_SQRT2, true, true); - _page_steps.add_line( false, _("_Zoom in/out by:"), _steps_zoom, _("%"), - _("Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"), false); - _middle_mouse_zoom.init ( _("Zoom with middle mouse click"), "/options/middlemousezoom/value", true); - _page_steps.add_line( true, "", _middle_mouse_zoom, "", - _("When activated, clicking the middle mouse button (usually the mouse wheel) zooms.")); - _steps_rotate.init ( "/options/rotateincrement/value", 1, 90, 1.0, 5.0, 15, false, false); - _page_steps.add_line( false, _("_Rotate canvas by:"), _steps_rotate, _("degrees"), - _("Rotate canvas clockwise and counter-clockwise by this amount."), false); + _page_steps.add_line( + false, _("_Rotation snaps every:"), _steps_rot_snap, _("degrees"), + _("Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"), + false); + _steps_rot_relative.init(_("Relative snapping of guideline angles"), "/options/relativeguiderotationsnap/value", + false); + _page_steps.add_line( + false, "", _steps_rot_relative, "", + _("When on, the snap angles when rotating a guideline will be relative to the original angle")); + _steps_zoom.init("/options/zoomincrement/value", 101.0, 500.0, 1.0, 1.0, M_SQRT2, true, true); + _page_steps.add_line(false, _("_Zoom in/out by:"), _steps_zoom, _("%"), + _("Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"), false); + _middle_mouse_zoom.init(_("Zoom with middle mouse click"), "/options/middlemousezoom/value", true); + _page_steps.add_line(true, "", _middle_mouse_zoom, "", + _("When activated, clicking the middle mouse button (usually the mouse wheel) zooms.")); + _steps_rotate.init("/options/rotateincrement/value", 1, 90, 1.0, 5.0, 15, false, false); + _page_steps.add_line(false, _("_Rotate canvas by:"), _steps_rotate, _("degrees"), + _("Rotate canvas clockwise and counter-clockwise by this amount."), false); this->AddPage(_page_steps, _("Steps"), iter_behavior, PREFS_PAGE_BEHAVIOR_STEPS); // Clones options - _clone_option_parallel.init ( _("Move in parallel"), "/options/clonecompensation/value", - SP_CLONE_COMPENSATION_PARALLEL, true, nullptr); - _clone_option_stay.init ( _("Stay unmoved"), "/options/clonecompensation/value", - SP_CLONE_COMPENSATION_UNMOVED, false, &_clone_option_parallel); - _clone_option_transform.init ( _("Move according to transform"), "/options/clonecompensation/value", - SP_CLONE_COMPENSATION_NONE, false, &_clone_option_parallel); - _clone_option_unlink.init ( _("Are unlinked"), "/options/cloneorphans/value", - SP_CLONE_ORPHANS_UNLINK, true, nullptr); - _clone_option_delete.init ( _("Are deleted"), "/options/cloneorphans/value", - SP_CLONE_ORPHANS_DELETE, false, &_clone_option_unlink); - - _page_clones.add_group_header( _("Moving original: clones and linked offsets")); + _clone_option_parallel.init(_("Move in parallel"), "/options/clonecompensation/value", + SP_CLONE_COMPENSATION_PARALLEL, true, nullptr); + _clone_option_stay.init(_("Stay unmoved"), "/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED, false, + &_clone_option_parallel); + _clone_option_transform.init(_("Move according to transform"), "/options/clonecompensation/value", + SP_CLONE_COMPENSATION_NONE, false, &_clone_option_parallel); + _clone_option_unlink.init(_("Are unlinked"), "/options/cloneorphans/value", SP_CLONE_ORPHANS_UNLINK, true, nullptr); + _clone_option_delete.init(_("Are deleted"), "/options/cloneorphans/value", SP_CLONE_ORPHANS_DELETE, false, + &_clone_option_unlink); + + _page_clones.add_group_header(_("Moving original: clones and linked offsets")); _page_clones.add_line(true, "", _clone_option_parallel, "", - _("Clones are translated by the same vector as their original")); + _("Clones are translated by the same vector as their original")); _page_clones.add_line(true, "", _clone_option_stay, "", - _("Clones preserve their positions when their original is moved")); + _("Clones preserve their positions when their original is moved")); _page_clones.add_line(true, "", _clone_option_transform, "", - _("Each clone moves according to the value of its transform= attribute; for example, a rotated clone will move in a different direction than its original")); - _page_clones.add_group_header( _("Deleting original: clones")); - _page_clones.add_line(true, "", _clone_option_unlink, "", - _("Orphaned clones are converted to regular objects")); + _("Each clone moves according to the value of its transform= attribute; for example, a " + "rotated clone will move in a different direction than its original")); + _page_clones.add_group_header(_("Deleting original: clones")); + _page_clones.add_line(true, "", _clone_option_unlink, "", _("Orphaned clones are converted to regular objects")); _page_clones.add_line(true, "", _clone_option_delete, "", - _("Orphaned clones are deleted along with their original")); + _("Orphaned clones are deleted along with their original")); - _page_clones.add_group_header( _("Duplicating original+clones/linked offset")); + _page_clones.add_group_header(_("Duplicating original+clones/linked offset")); - _clone_relink_on_duplicate.init ( _("Relink duplicated clones"), "/options/relinkclonesonduplicate/value", false); - _page_clones.add_line(true, "", _clone_relink_on_duplicate, "", - _("When duplicating a selection containing both a clone and its original (possibly in groups), relink the duplicated clone to the duplicated original instead of the old original")); + _clone_relink_on_duplicate.init(_("Relink duplicated clones"), "/options/relinkclonesonduplicate/value", false); + _page_clones.add_line( + true, "", _clone_relink_on_duplicate, "", + _("When duplicating a selection containing both a clone and its original (possibly in groups), relink the " + "duplicated clone to the duplicated original instead of the old original")); - _page_clones.add_group_header( _("Unlinking clones")); - _clone_to_curves.init ( _("Path operations unlink clones"), "/options/pathoperationsunlink/value", true); + _page_clones.add_group_header(_("Unlinking clones")); + _clone_to_curves.init(_("Path operations unlink clones"), "/options/pathoperationsunlink/value", true); _page_clones.add_line(true, "", _clone_to_curves, "", - _("The following path operations will unlink clones: Stroke to path, Object to path, Boolean operations, Combine, Break apart")); + _("The following path operations will unlink clones: Stroke to path, Object to path, Boolean " + "operations, Combine, Break apart")); - //TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page + // TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page this->AddPage(_page_clones, _("Clones"), iter_behavior, PREFS_PAGE_BEHAVIOR_CLONES); // Clip paths and masks options - _mask_mask_on_top.init ( _("When applying, use the topmost selected object as clippath/mask"), "/options/maskobject/topmost", true); + _mask_mask_on_top.init(_("When applying, use the topmost selected object as clippath/mask"), + "/options/maskobject/topmost", true); _page_mask.add_line(false, "", _mask_mask_on_top, "", _("Uncheck this to use the bottom selected object as the clipping path or mask")); - _mask_mask_on_ungroup.init ( _("When ungroup, clip/mask is preserved in children"), "/options/maskobject/maskonungroup", true); - _page_mask.add_line(false, "", _mask_mask_on_ungroup, "", - _("Uncheck this to remove clip/mask on ungroup")); - _mask_mask_remove.init ( _("Remove clippath/mask object after applying"), "/options/maskobject/remove", true); + _mask_mask_on_ungroup.init(_("When ungroup, clip/mask is preserved in children"), + "/options/maskobject/maskonungroup", true); + _page_mask.add_line(false, "", _mask_mask_on_ungroup, "", _("Uncheck this to remove clip/mask on ungroup")); + _mask_mask_remove.init(_("Remove clippath/mask object after applying"), "/options/maskobject/remove", true); _page_mask.add_line(false, "", _mask_mask_remove, "", _("After applying, remove the object used as the clipping path or mask from the drawing")); - _page_mask.add_group_header( _("Before applying")); + _page_mask.add_group_header(_("Before applying")); - _mask_grouping_none.init( _("Do not group clipped/masked objects"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_NONE, true, nullptr); - _mask_grouping_separate.init( _("Put every clipped/masked object in its own group"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_SEPARATE, false, &_mask_grouping_none); - _mask_grouping_all.init( _("Put all clipped/masked objects into one group"), "/options/maskobject/grouping", PREFS_MASKOBJECT_GROUPING_ALL, false, &_mask_grouping_none); + _mask_grouping_none.init(_("Do not group clipped/masked objects"), "/options/maskobject/grouping", + PREFS_MASKOBJECT_GROUPING_NONE, true, nullptr); + _mask_grouping_separate.init(_("Put every clipped/masked object in its own group"), "/options/maskobject/grouping", + PREFS_MASKOBJECT_GROUPING_SEPARATE, false, &_mask_grouping_none); + _mask_grouping_all.init(_("Put all clipped/masked objects into one group"), "/options/maskobject/grouping", + PREFS_MASKOBJECT_GROUPING_ALL, false, &_mask_grouping_none); - _page_mask.add_line(true, "", _mask_grouping_none, "", - _("Apply clippath/mask to every object")); + _page_mask.add_line(true, "", _mask_grouping_none, "", _("Apply clippath/mask to every object")); _page_mask.add_line(true, "", _mask_grouping_separate, "", _("Apply clippath/mask to groups containing single object")); - _page_mask.add_line(true, "", _mask_grouping_all, "", - _("Apply clippath/mask to group containing all objects")); + _page_mask.add_line(true, "", _mask_grouping_all, "", _("Apply clippath/mask to group containing all objects")); - _page_mask.add_group_header( _("After releasing")); + _page_mask.add_group_header(_("After releasing")); - _mask_ungrouping.init ( _("Ungroup automatically created groups"), "/options/maskobject/ungrouping", true); - _page_mask.add_line(true, "", _mask_ungrouping, "", - _("Ungroup groups created when setting clip/mask")); + _mask_ungrouping.init(_("Ungroup automatically created groups"), "/options/maskobject/ungrouping", true); + _page_mask.add_line(true, "", _mask_ungrouping, "", _("Ungroup groups created when setting clip/mask")); this->AddPage(_page_mask, _("Clippaths and masks"), iter_behavior, PREFS_PAGE_BEHAVIOR_MASKS); - - _page_markers.add_group_header( _("Stroke Style Markers")); - _page_markers.add_line( true, "", _markers_color_stock, "", + _page_markers.add_group_header(_("Stroke Style Markers")); + _page_markers.add_line(true, "", _markers_color_stock, "", _("Stroke color same as object, fill color either object fill color or marker fill color")); - _page_markers.add_line( true, "", _markers_color_custom, "", + _page_markers.add_line(true, "", _markers_color_custom, "", _("Stroke color same as object, fill color either object fill color or marker fill color")); - _page_markers.add_line( true, "", _markers_color_update, "", - _("Update marker color when object color changes")); + _page_markers.add_line(true, "", _markers_color_update, "", _("Update marker color when object color changes")); this->AddPage(_page_markers, _("Markers"), iter_behavior, PREFS_PAGE_BEHAVIOR_MARKERS); - - _page_cleanup.add_group_header( _("Document cleanup")); - _cleanup_swatches.init ( _("Remove unused swatches when doing a document cleanup"), "/options/cleanupswatches/value", false); // text label - _page_cleanup.add_line( true, "", _cleanup_swatches, "", + _page_cleanup.add_group_header(_("Document cleanup")); + _cleanup_swatches.init(_("Remove unused swatches when doing a document cleanup"), "/options/cleanupswatches/value", + false); // text label + _page_cleanup.add_line(true, "", _cleanup_swatches, "", _("Remove unused swatches when doing a document cleanup")); // tooltip this->AddPage(_page_cleanup, _("Cleanup"), iter_behavior, PREFS_PAGE_BEHAVIOR_CLEANUP); - _page_lpe.add_group_header( _("Tiling")); - _lpe_copy_mirroricons.init ( _("Add advanced tiling options"), "/live_effects/copy/mirroricons", true); // text label - _page_lpe.add_line( true, "", _lpe_copy_mirroricons, "", - _("Enables using 16 advanced mirror options between the copies (so there can be copies that are mirrored differently between the rows and the columns) for Tiling LPE")); // tooltip + _page_lpe.add_group_header(_("Tiling")); + _lpe_copy_mirroricons.init(_("Add advanced tiling options"), "/live_effects/copy/mirroricons", true); // text label + _page_lpe.add_line(true, "", _lpe_copy_mirroricons, "", + _("Enables using 16 advanced mirror options between the copies (so there can be copies that are " + "mirrored differently between the rows and the columns) for Tiling LPE")); // tooltip this->AddPage(_page_lpe, _("Live Path Effects (LPE)"), iter_behavior, PREFS_PAGE_BEHAVIOR_LPE); } void InkscapePreferences::initPageRendering() { - /* threaded blur */ //related comments/widgets/functions should be renamed and option should be moved elsewhere when inkscape is fully multi-threaded + /* threaded blur */ // related comments/widgets/functions should be renamed and option should be moved elsewhere + // when inkscape is fully multi-threaded _filter_multi_threaded.init("/options/threading/numthreads", 1.0, 8.0, 1.0, 2.0, 4.0, true, false); - _page_rendering.add_line( false, _("Number of _Threads:"), _filter_multi_threaded, "", _("Configure number of processors/threads to use when rendering filters"), false, reset_icon()); + _page_rendering.add_line(false, _("Number of _Threads:"), _filter_multi_threaded, "", + _("Configure number of processors/threads to use when rendering filters"), false, + reset_icon()); // rendering cache _rendering_cache_size.init("/options/renderingcache/size", 0.0, 4096.0, 1.0, 32.0, 64.0, true, false); - _page_rendering.add_line( false, _("Rendering _cache size:"), _rendering_cache_size, C_("mebibyte (2^20 bytes) abbreviation","MiB"), _("Set the amount of memory per document which can be used to store rendered parts of the drawing for later reuse; set to zero to disable caching"), false); + _page_rendering.add_line(false, _("Rendering _cache size:"), _rendering_cache_size, + C_("mebibyte (2^20 bytes) abbreviation", "MiB"), + _("Set the amount of memory per document which can be used to store rendered parts of the " + "drawing for later reuse; set to zero to disable caching"), + false); // rendering tile multiplier _rendering_tile_multiplier.init("/options/rendering/tile-multiplier", 1.0, 512.0, 1.0, 16.0, 16.0, true, false); - _page_rendering.add_line( false, _("Rendering tile multiplier:"), _rendering_tile_multiplier, "", _("On modern hardware, increasing this value (default is 16) can help to get a better performance when there are large areas with filtered objects (this includes blur and blend modes) in your drawing. Decrease the value to make zooming and panning in relevant areas faster on low-end hardware in drawings with few or no filters."), false); + _page_rendering.add_line(false, _("Rendering tile multiplier:"), _rendering_tile_multiplier, "", + _("On modern hardware, increasing this value (default is 16) can help to get a better " + "performance when there are large areas with filtered objects (this includes blur and " + "blend modes) in your drawing. Decrease the value to make zooming and panning in " + "relevant areas faster on low-end hardware in drawings with few or no filters."), + false); // rendering x-ray radius _rendering_xray_radius.init("/options/rendering/xray-radius", 1.0, 1500.0, 1.0, 100.0, 100.0, true, false); - _page_rendering.add_line( false, _("X-ray radius:"), _rendering_xray_radius, "", _("Radius of the circular area around the mouse cursor in X-ray mode"), false); + _page_rendering.add_line(false, _("X-ray radius:"), _rendering_xray_radius, "", + _("Radius of the circular area around the mouse cursor in X-ray mode"), false); // rendering outline overlay opacity - _rendering_outline_overlay_opacity.init("/options/rendering/outline-overlay-opacity", 1.0, 100.0, 1.0, 5.0, 50.0, true, false); - _rendering_outline_overlay_opacity.signal_focus_out_event().connect(sigc::mem_fun(*this, &InkscapePreferences::on_outline_overlay_changed)); - _page_rendering.add_line( false, _("Outline overlay opacity:"), _rendering_outline_overlay_opacity, _("%"), _("Opacity of the color in outline overlay view mode"), false); + _rendering_outline_overlay_opacity.init("/options/rendering/outline-overlay-opacity", 1.0, 100.0, 1.0, 5.0, 50.0, + true, false); + _rendering_outline_overlay_opacity.signal_focus_out_event().connect( + sigc::mem_fun(*this, &InkscapePreferences::on_outline_overlay_changed)); + _page_rendering.add_line(false, _("Outline overlay opacity:"), _rendering_outline_overlay_opacity, _("%"), + _("Opacity of the color in outline overlay view mode"), false); // update strategy { int values[] = {1, 2, 3}; Glib::ustring labels[] = {_("Responsive"), _("Full redraw"), _("Multiscale")}; _canvas_update_strategy.init("/options/rendering/update_strategy", labels, values, 3, 3); - _page_rendering.add_line(false, _("Update strategy:"), _canvas_update_strategy, "", _("How to update continually changing content when it can't be redrawn fast enough"), false); + _page_rendering.add_line(false, _("Update strategy:"), _canvas_update_strategy, "", + _("How to update continually changing content when it can't be redrawn fast enough"), + false); } // opengl _canvas_request_opengl.init("", "/options/rendering/request_opengl", false); - _page_rendering.add_line( false, _("Enable OpenGL:"), _canvas_request_opengl, "", _("Request that the canvas should be painted with OpenGL rather than Cairo. If OpenGL is unsupported, it will fall back to Cairo."), false); + _page_rendering.add_line(false, _("Enable OpenGL:"), _canvas_request_opengl, "", + _("Request that the canvas should be painted with OpenGL rather than Cairo. If OpenGL is " + "unsupported, it will fall back to Cairo."), + false); /* blur quality */ - _blur_quality_best.init ( _("Best quality (slowest)"), "/options/blurquality/value", - BLUR_QUALITY_BEST, false, nullptr); - _blur_quality_better.init ( _("Better quality (slower)"), "/options/blurquality/value", - BLUR_QUALITY_BETTER, false, &_blur_quality_best); - _blur_quality_normal.init ( _("Average quality"), "/options/blurquality/value", - BLUR_QUALITY_NORMAL, true, &_blur_quality_best); - _blur_quality_worse.init ( _("Lower quality (faster)"), "/options/blurquality/value", - BLUR_QUALITY_WORSE, false, &_blur_quality_best); - _blur_quality_worst.init ( _("Lowest quality (fastest)"), "/options/blurquality/value", - BLUR_QUALITY_WORST, false, &_blur_quality_best); - - _page_rendering.add_group_header( _("Gaussian blur quality for display")); - _page_rendering.add_line( true, "", _blur_quality_best, "", - _("Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)")); - _page_rendering.add_line( true, "", _blur_quality_better, "", - _("Better quality, but slower display")); - _page_rendering.add_line( true, "", _blur_quality_normal, "", - _("Average quality, acceptable display speed")); - _page_rendering.add_line( true, "", _blur_quality_worse, "", - _("Lower quality (some artifacts), but display is faster")); - _page_rendering.add_line( true, "", _blur_quality_worst, "", - _("Lowest quality (considerable artifacts), but display is fastest")); + _blur_quality_best.init(_("Best quality (slowest)"), "/options/blurquality/value", BLUR_QUALITY_BEST, false, + nullptr); + _blur_quality_better.init(_("Better quality (slower)"), "/options/blurquality/value", BLUR_QUALITY_BETTER, false, + &_blur_quality_best); + _blur_quality_normal.init(_("Average quality"), "/options/blurquality/value", BLUR_QUALITY_NORMAL, true, + &_blur_quality_best); + _blur_quality_worse.init(_("Lower quality (faster)"), "/options/blurquality/value", BLUR_QUALITY_WORSE, false, + &_blur_quality_best); + _blur_quality_worst.init(_("Lowest quality (fastest)"), "/options/blurquality/value", BLUR_QUALITY_WORST, false, + &_blur_quality_best); + + _page_rendering.add_group_header(_("Gaussian blur quality for display")); + _page_rendering.add_line( + true, "", _blur_quality_best, "", + _("Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)")); + _page_rendering.add_line(true, "", _blur_quality_better, "", _("Better quality, but slower display")); + _page_rendering.add_line(true, "", _blur_quality_normal, "", _("Average quality, acceptable display speed")); + _page_rendering.add_line(true, "", _blur_quality_worse, "", + _("Lower quality (some artifacts), but display is faster")); + _page_rendering.add_line(true, "", _blur_quality_worst, "", + _("Lowest quality (considerable artifacts), but display is fastest")); /* filter quality */ - _filter_quality_best.init ( _("Best quality (slowest)"), "/options/filterquality/value", - Inkscape::Filters::FILTER_QUALITY_BEST, false, nullptr); - _filter_quality_better.init ( _("Better quality (slower)"), "/options/filterquality/value", - Inkscape::Filters::FILTER_QUALITY_BETTER, false, &_filter_quality_best); - _filter_quality_normal.init ( _("Average quality"), "/options/filterquality/value", - Inkscape::Filters::FILTER_QUALITY_NORMAL, true, &_filter_quality_best); - _filter_quality_worse.init ( _("Lower quality (faster)"), "/options/filterquality/value", - Inkscape::Filters::FILTER_QUALITY_WORSE, false, &_filter_quality_best); - _filter_quality_worst.init ( _("Lowest quality (fastest)"), "/options/filterquality/value", - Inkscape::Filters::FILTER_QUALITY_WORST, false, &_filter_quality_best); - - _page_rendering.add_group_header( _("Filter effects quality for display")); - _page_rendering.add_line( true, "", _filter_quality_best, "", - _("Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)")); - _page_rendering.add_line( true, "", _filter_quality_better, "", - _("Better quality, but slower display")); - _page_rendering.add_line( true, "", _filter_quality_normal, "", - _("Average quality, acceptable display speed")); - _page_rendering.add_line( true, "", _filter_quality_worse, "", - _("Lower quality (some artifacts), but display is faster")); - _page_rendering.add_line( true, "", _filter_quality_worst, "", - _("Lowest quality (considerable artifacts), but display is fastest")); + _filter_quality_best.init(_("Best quality (slowest)"), "/options/filterquality/value", + Inkscape::Filters::FILTER_QUALITY_BEST, false, nullptr); + _filter_quality_better.init(_("Better quality (slower)"), "/options/filterquality/value", + Inkscape::Filters::FILTER_QUALITY_BETTER, false, &_filter_quality_best); + _filter_quality_normal.init(_("Average quality"), "/options/filterquality/value", + Inkscape::Filters::FILTER_QUALITY_NORMAL, true, &_filter_quality_best); + _filter_quality_worse.init(_("Lower quality (faster)"), "/options/filterquality/value", + Inkscape::Filters::FILTER_QUALITY_WORSE, false, &_filter_quality_best); + _filter_quality_worst.init(_("Lowest quality (fastest)"), "/options/filterquality/value", + Inkscape::Filters::FILTER_QUALITY_WORST, false, &_filter_quality_best); + + _page_rendering.add_group_header(_("Filter effects quality for display")); + _page_rendering.add_line( + true, "", _filter_quality_best, "", + _("Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)")); + _page_rendering.add_line(true, "", _filter_quality_better, "", _("Better quality, but slower display")); + _page_rendering.add_line(true, "", _filter_quality_normal, "", _("Average quality, acceptable display speed")); + _page_rendering.add_line(true, "", _filter_quality_worse, "", + _("Lower quality (some artifacts), but display is faster")); + _page_rendering.add_line(true, "", _filter_quality_worst, "", + _("Lowest quality (considerable artifacts), but display is fastest")); #ifdef CAIRO_HAS_DITHER _cairo_dithering.init(_("Use dithering"), "/options/dithering/value", true); - _page_rendering.add_line(false, "", _cairo_dithering, "", _("Makes gradients smoother. This can significantly impact the size of generated PNG files. To update the display after changing this option, just zoom out/in.")); + _page_rendering.add_line(false, "", _cairo_dithering, "", + _("Makes gradients smoother. This can significantly impact the size of generated PNG " + "files. To update the display after changing this option, just zoom out/in.")); #endif auto grid = Gtk::make_managed(); @@ -2734,12 +2980,15 @@ void InkscapePreferences::initPageRendering() revealer->add(*grid); revealer->set_reveal_child(Inkscape::Preferences::get()->getBool("/options/rendering/devmode")); _canvas_developer_mode_enabled.init(_("Enable developer mode"), "/options/rendering/devmode", false); - _canvas_developer_mode_enabled.signal_toggled().connect([revealer, this] {revealer->set_reveal_child(_canvas_developer_mode_enabled.get_active());}); + _canvas_developer_mode_enabled.signal_toggled().connect( + [revealer, this] { revealer->set_reveal_child(_canvas_developer_mode_enabled.get_active()); }); _page_rendering.add_group_header(_("Developer mode")); - _page_rendering.add_line(true, "", _canvas_developer_mode_enabled, "", _("Enable additional debugging options"), false); + _page_rendering.add_line(true, "", _canvas_developer_mode_enabled, "", _("Enable additional debugging options"), + false); _page_rendering.add(*revealer); - auto add_devmode_line = [&] (Glib::ustring const &label, Gtk::Widget &widget, Glib::ustring const &suffix, const Glib::ustring &tip) { + auto add_devmode_line = [&](Glib::ustring const &label, Gtk::Widget &widget, Glib::ustring const &suffix, + const Glib::ustring &tip) { widget.set_tooltip_text(tip); auto hb = Gtk::manage(new Gtk::Box()); @@ -2764,68 +3013,104 @@ void InkscapePreferences::initPageRendering() } }; - auto add_devmode_group_header = [&] (Glib::ustring name) { - auto label_widget = Gtk::make_managed(Glib::ustring(/*"*/"") + name + Glib::ustring(""/*"*/) , Gtk::ALIGN_START , Gtk::ALIGN_CENTER, true); + auto add_devmode_group_header = [&](Glib::ustring name) { + auto label_widget = Gtk::make_managed(Glib::ustring(/*"*/ "") + name + + Glib::ustring("" /*"*/), + Gtk::ALIGN_START, Gtk::ALIGN_CENTER, true); label_widget->set_use_markup(true); label_widget->set_valign(Gtk::ALIGN_CENTER); grid->add(*label_widget); }; - //TRANSLATORS: The following are options for fine-tuning rendering, meant to be used by developers, - //find more explanations at https://gitlab.com/inkscape/inbox/-/issues/6544#note_886540227 + // TRANSLATORS: The following are options for fine-tuning rendering, meant to be used by developers, + // find more explanations at https://gitlab.com/inkscape/inbox/-/issues/6544#note_886540227 add_devmode_group_header(_("Low-level tuning options")); - _canvas_render_time_limit.init("/options/rendering/render_time_limit", 100.0, 1000000.0, 1.0, 0.0, 1000.0, true, false); - add_devmode_line(_("Render time limit"), _canvas_render_time_limit, C_("microsecond abbreviation", "μs"), _("The maximum time allowed for a rendering time slice")); + _canvas_render_time_limit.init("/options/rendering/render_time_limit", 100.0, 1000000.0, 1.0, 0.0, 1000.0, true, + false); + add_devmode_line(_("Render time limit"), _canvas_render_time_limit, C_("microsecond abbreviation", "μs"), + _("The maximum time allowed for a rendering time slice")); _canvas_use_new_bisector.init("", "/options/rendering/use_new_bisector", true); - add_devmode_line(_("Use new bisector algorithm"), _canvas_use_new_bisector, "", _("Use an alternative, more obvious bisection strategy: just chop tile in half along the larger dimension until small enough")); + add_devmode_line(_("Use new bisector algorithm"), _canvas_use_new_bisector, "", + _("Use an alternative, more obvious bisection strategy: just chop tile in half along the larger " + "dimension until small enough")); _canvas_new_bisector_size.init("/options/rendering/new_bisector_size", 1.0, 10000.0, 1.0, 0.0, 500.0, true, false); - add_devmode_line(_("Smallest tile size for new bisector"), _canvas_new_bisector_size, C_("pixel abbreviation", "px"), _("Halve rendering tile rectangles until their largest dimension is this small")); + add_devmode_line(_("Smallest tile size for new bisector"), _canvas_new_bisector_size, + C_("pixel abbreviation", "px"), + _("Halve rendering tile rectangles until their largest dimension is this small")); _rendering_tile_size.init("/options/rendering/tile-size", 1.0, 10000.0, 1.0, 0.0, 16.0, true, false); - add_devmode_line(_("Tile size:"), _rendering_tile_size, "", _("The \"tile size\" parameter previously hard-coded into Inkscape's original tile bisector.")); + add_devmode_line(_("Tile size:"), _rendering_tile_size, "", + _("The \"tile size\" parameter previously hard-coded into Inkscape's original tile bisector.")); _canvas_pad.init("/options/rendering/pad", 0.0, 1000.0, 1.0, 0.0, 350.0, true, false); - add_devmode_line(_("Buffer padding"), _canvas_pad, C_("pixel abbreviation", "px"), _("Use buffers bigger than the window by this amount")); + add_devmode_line(_("Buffer padding"), _canvas_pad, C_("pixel abbreviation", "px"), + _("Use buffers bigger than the window by this amount")); _canvas_margin.init("/options/rendering/margin", 0.0, 1000.0, 1.0, 0.0, 100.0, true, false); add_devmode_line(_("Prerender margin"), _canvas_margin, "", _("Pre-render a margin around the visible region.")); _canvas_preempt.init("/options/rendering/preempt", 0.0, 1000.0, 1.0, 0.0, 250.0, true, false); - add_devmode_line(_("Preempt size"), _canvas_preempt, "", _("Prevent thin tiles at the rendering edge by making them at least this size.")); + add_devmode_line(_("Preempt size"), _canvas_preempt, "", + _("Prevent thin tiles at the rendering edge by making them at least this size.")); _canvas_coarsener_min_size.init("/options/rendering/coarsener_min_size", 0.0, 1000.0, 1.0, 0.0, 200.0, true, false); - add_devmode_line(_("Min size for coarsener algorithm"), _canvas_coarsener_min_size, C_("pixel abbreviation", "px"), _("Coarsener algorithm only processes rectangles smaller/thinner than this.")); - _canvas_coarsener_glue_size.init("/options/rendering/coarsener_glue_size", 0.0, 1000.0, 1.0, 0.0, 80.0, true, false); - add_devmode_line(_("Glue size for coarsener algorithm"), _canvas_coarsener_glue_size, C_("pixel abbreviation", "px"), _("Coarsener algorithm absorbs nearby rectangles within this distance.")); - _canvas_coarsener_min_fullness.init("/options/rendering/coarsener_min_fullness", 0.0, 1.0, 0.0, 0.0, 0.3, false, false); - add_devmode_line(_("Min fullness for coarsener algorithm"), _canvas_coarsener_min_fullness, "", _("Refuse coarsening algorithm's attempt if the result would be more empty than this.")); + add_devmode_line(_("Min size for coarsener algorithm"), _canvas_coarsener_min_size, C_("pixel abbreviation", "px"), + _("Coarsener algorithm only processes rectangles smaller/thinner than this.")); + _canvas_coarsener_glue_size.init("/options/rendering/coarsener_glue_size", 0.0, 1000.0, 1.0, 0.0, 80.0, true, + false); + add_devmode_line(_("Glue size for coarsener algorithm"), _canvas_coarsener_glue_size, + C_("pixel abbreviation", "px"), + _("Coarsener algorithm absorbs nearby rectangles within this distance.")); + _canvas_coarsener_min_fullness.init("/options/rendering/coarsener_min_fullness", 0.0, 1.0, 0.0, 0.0, 0.3, false, + false); + add_devmode_line(_("Min fullness for coarsener algorithm"), _canvas_coarsener_min_fullness, "", + _("Refuse coarsening algorithm's attempt if the result would be more empty than this.")); { int values[] = {1, 2, 3, 4}; Glib::ustring labels[] = {_("Auto"), _("Persistent"), _("Asynchronous"), _("Synchronous")}; _canvas_pixelstreamer_method.init("/options/rendering/pixelstreamer_method", labels, values, 4, 1); - add_devmode_line(_("Pixel streaming method"), _canvas_pixelstreamer_method, "", _("Change the method used for streaming pixel data to the GPU. The default is Auto, which picks the best method available at runtime. As for the other options, higher up is better. Be warned! No attempt is made to stop you from selecting a method that isn't supported! (This is dev mode, afer all.) If you do so, it will be an instant crash.")); + add_devmode_line(_("Pixel streaming method"), _canvas_pixelstreamer_method, "", + _("Change the method used for streaming pixel data to the GPU. The default is Auto, which " + "picks the best method available at runtime. As for the other options, higher up is better. " + "Be warned! No attempt is made to stop you from selecting a method that isn't supported! " + "(This is dev mode, afer all.) If you do so, it will be an instant crash.")); } add_devmode_group_header(_("Debugging, profiling and experiments")); _canvas_debug_framecheck.init("", "/options/rendering/debug_framecheck", false); - add_devmode_line(_("Framecheck"), _canvas_debug_framecheck, "", _("Print profiling data of selected operations to a file")); + add_devmode_line(_("Framecheck"), _canvas_debug_framecheck, "", + _("Print profiling data of selected operations to a file")); _canvas_debug_logging.init("", "/options/rendering/debug_logging", false); add_devmode_line(_("Logging"), _canvas_debug_logging, "", _("Log certain events to the console")); _canvas_debug_slow_redraw.init("", "/options/rendering/debug_slow_redraw", false); add_devmode_line(_("Slow redraw"), _canvas_debug_slow_redraw, "", _("Introduce a fixed delay for each tile")); - _canvas_debug_slow_redraw_time.init("/options/rendering/debug_slow_redraw_time", 0.0, 1000000.0, 1.0, 0.0, 50.0, true, false); - add_devmode_line(_("Slow redraw time"), _canvas_debug_slow_redraw_time, C_("microsecond abbreviation", "μs"), _("The delay to introduce for each tile")); + _canvas_debug_slow_redraw_time.init("/options/rendering/debug_slow_redraw_time", 0.0, 1000000.0, 1.0, 0.0, 50.0, + true, false); + add_devmode_line(_("Slow redraw time"), _canvas_debug_slow_redraw_time, C_("microsecond abbreviation", "μs"), + _("The delay to introduce for each tile")); _canvas_debug_show_redraw.init("", "/options/rendering/debug_show_redraw", false); - add_devmode_line(_("Show redraw"), _canvas_debug_show_redraw, "", _("Paint a translucent random colour over each newly drawn tile")); + add_devmode_line(_("Show redraw"), _canvas_debug_show_redraw, "", + _("Paint a translucent random colour over each newly drawn tile")); _canvas_debug_show_unclean.init("", "/options/rendering/debug_show_unclean", false); - add_devmode_line(_("Show unclean region"), _canvas_debug_show_unclean, "", _("Show the region that needs to be redrawn in red (only in Cairo mode)")); + add_devmode_line(_("Show unclean region"), _canvas_debug_show_unclean, "", + _("Show the region that needs to be redrawn in red (only in Cairo mode)")); _canvas_debug_show_snapshot.init("", "/options/rendering/debug_show_snapshot", false); - add_devmode_line(_("Show snapshot region"), _canvas_debug_show_snapshot, "", _("Show the region that still contains a saved copy of previously rendered content in blue (only in Cairo mode)")); + add_devmode_line(_("Show snapshot region"), _canvas_debug_show_snapshot, "", + _("Show the region that still contains a saved copy of previously rendered content in blue (only " + "in Cairo mode)")); _canvas_debug_show_clean.init("", "/options/rendering/debug_show_clean", false); - add_devmode_line(_("Show clean region's fragmentation"), _canvas_debug_show_clean, "", _("Show the outlines of the rectangles in the region where rendering is complete in green (only in Cairo mode)")); + add_devmode_line(_("Show clean region's fragmentation"), _canvas_debug_show_clean, "", + _("Show the outlines of the rectangles in the region where rendering is complete in green (only " + "in Cairo mode)")); _canvas_debug_disable_redraw.init("", "/options/rendering/debug_disable_redraw", false); - add_devmode_line(_("Disable redraw"), _canvas_debug_disable_redraw, "", _("Temporarily disable the idle redraw process completely")); + add_devmode_line(_("Disable redraw"), _canvas_debug_disable_redraw, "", + _("Temporarily disable the idle redraw process completely")); _canvas_debug_sticky_decoupled.init("", "/options/rendering/debug_sticky_decoupled", false); - add_devmode_line(_("Sticky decoupled mode"), _canvas_debug_sticky_decoupled, "", _("Stay in decoupled mode even after rendering is complete")); + add_devmode_line(_("Sticky decoupled mode"), _canvas_debug_sticky_decoupled, "", + _("Stay in decoupled mode even after rendering is complete")); _canvas_debug_animate.init("", "/options/rendering/debug_animate", false); - add_devmode_line(_("Animate"), _canvas_debug_animate, "", _("Continuously adjust viewing parameters in an animation loop.")); + add_devmode_line(_("Animate"), _canvas_debug_animate, "", + _("Continuously adjust viewing parameters in an animation loop.")); _canvas_debug_idle_starvation.init("", "/options/rendering/debug_idle_starvation", false); - add_devmode_line(_("Print render time stats"), _canvas_debug_idle_starvation, "", _("On display of each frame, log to the console how much time was taken away from rendering, and whether rendering is still busy. A high value would explain lag/fragmentation problems, and a low value with 'still busy' would explain tearing.")); + add_devmode_line(_("Print render time stats"), _canvas_debug_idle_starvation, "", + _("On display of each frame, log to the console how much time was taken away from rendering, and " + "whether rendering is still busy. A high value would explain lag/fragmentation problems, and a " + "low value with 'still busy' would explain tearing.")); this->AddPage(_page_rendering, _("Rendering"), PREFS_PAGE_RENDERING); } @@ -2833,31 +3118,32 @@ void InkscapePreferences::initPageRendering() void InkscapePreferences::initPageBitmaps() { /* Note: /options/bitmapoversample removed with Cairo renderer */ - _page_bitmaps.add_group_header( _("Edit")); + _page_bitmaps.add_group_header(_("Edit")); _misc_bitmap_autoreload.init(_("Automatically reload images"), "/options/bitmapautoreload/value", true); - _page_bitmaps.add_line( false, "", _misc_bitmap_autoreload, "", + _page_bitmaps.add_line(false, "", _misc_bitmap_autoreload, "", _("Automatically reload linked images when file is changed on disk")); _misc_bitmap_editor.init("/options/bitmapeditor/value", true); - _page_bitmaps.add_line( false, _("_Bitmap editor:"), _misc_bitmap_editor, "", "", true); + _page_bitmaps.add_line(false, _("_Bitmap editor:"), _misc_bitmap_editor, "", "", true); _misc_svg_editor.init("/options/svgeditor/value", true); - _page_bitmaps.add_line( false, _("_SVG editor:"), _misc_svg_editor, "", "", true); - - _page_bitmaps.add_group_header( _("Export")); - _importexport_export_res.init("/dialogs/export/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); - _page_bitmaps.add_line( false, _("Default export _resolution:"), _importexport_export_res, _("dpi"), - _("Default image resolution (in dots per inch) in the Export dialog"), false); - _page_bitmaps.add_group_header( _("Create")); - _bitmap_copy_res.init("/options/createbitmap/resolution", 1.0, 6000.0, 1.0, 1.0, Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); - _page_bitmaps.add_line( false, _("Resolution for Create Bitmap _Copy:"), _bitmap_copy_res, _("dpi"), - _("Resolution used by the Create Bitmap Copy command"), false); - - _page_bitmaps.add_group_header( _("Import")); + _page_bitmaps.add_line(false, _("_SVG editor:"), _misc_svg_editor, "", "", true); + + _page_bitmaps.add_group_header(_("Export")); + _importexport_export_res.init("/dialogs/export/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, + Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); + _page_bitmaps.add_line(false, _("Default export _resolution:"), _importexport_export_res, _("dpi"), + _("Default image resolution (in dots per inch) in the Export dialog"), false); + _page_bitmaps.add_group_header(_("Create")); + _bitmap_copy_res.init("/options/createbitmap/resolution", 1.0, 6000.0, 1.0, 1.0, + Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); + _page_bitmaps.add_line(false, _("Resolution for Create Bitmap _Copy:"), _bitmap_copy_res, _("dpi"), + _("Resolution used by the Create Bitmap Copy command"), false); + + _page_bitmaps.add_group_header(_("Import")); _bitmap_ask.init(_("Ask about linking and scaling when importing bitmap images"), "/dialogs/import/ask", true); - _page_bitmaps.add_line( true, "", _bitmap_ask, "", + _page_bitmaps.add_line(true, "", _bitmap_ask, "", _("Pop-up linking and scaling dialog when importing bitmap image.")); _svg_ask.init(_("Ask about linking and scaling when importing SVG images"), "/dialogs/import/ask_svg", true); - _page_bitmaps.add_line( true, "", _svg_ask, "", - _("Pop-up linking and scaling dialog when importing SVG image.")); + _page_bitmaps.add_line(true, "", _svg_ask, "", _("Pop-up linking and scaling dialog when importing SVG image.")); _svgoutput_usesodipodiabsref.init(_("Store absolute file path for linked images"), "/options/svgoutput/usesodipodiabsref", false); @@ -2865,43 +3151,48 @@ void InkscapePreferences::initPageBitmaps() true, "", _svgoutput_usesodipodiabsref, "", _("By default, image links are stored as relative paths whenever possible. If this option is enabled, Inkscape " "will additionally add an absolute path ('sodipodi:absref' attribute) to the image. This is used as a " - "fall-back for locating the linked image, for example if the SVG document has been moved on disk. Note that this " - "will expose your directory structure in the file's source code, which can include personal information like your username."), + "fall-back for locating the linked image, for example if the SVG document has been moved on disk. Note that " + "this " + "will expose your directory structure in the file's source code, which can include personal information like " + "your username."), false); { Glib::ustring labels[] = {_("Embed"), _("Link")}; Glib::ustring values[] = {"embed", "link"}; _bitmap_link.init("/dialogs/import/link", labels, values, G_N_ELEMENTS(values), "link"); - _page_bitmaps.add_line( false, _("Bitmap import/open mode:"), _bitmap_link, "", "", false); + _page_bitmaps.add_line(false, _("Bitmap import/open mode:"), _bitmap_link, "", "", false); } { Glib::ustring labels[] = {_("Include"), _("Pages"), _("Embed"), _("Link"), _("New")}; Glib::ustring values[] = {"include", "pages", "embed", "link", "new"}; _svg_link.init("/dialogs/import/import_mode_svg", labels, values, G_N_ELEMENTS(values), "include"); - _page_bitmaps.add_line( false, _("SVG import mode:"), _svg_link, "", "", false); + _page_bitmaps.add_line(false, _("SVG import mode:"), _svg_link, "", "", false); } { - Glib::ustring labels[] = {_("None (auto)"), _("Smooth (optimizeQuality)"), _("Blocky (optimizeSpeed)") }; + Glib::ustring labels[] = {_("None (auto)"), _("Smooth (optimizeQuality)"), _("Blocky (optimizeSpeed)")}; Glib::ustring values[] = {"auto", "optimizeQuality", "optimizeSpeed"}; _bitmap_scale.init("/dialogs/import/scale", labels, values, G_N_ELEMENTS(values), "scale"); - _page_bitmaps.add_line( false, _("Image scale (image-rendering):"), _bitmap_scale, "", "", false); + _page_bitmaps.add_line(false, _("Image scale (image-rendering):"), _bitmap_scale, "", "", false); } /* Note: /dialogs/import/quality removed use of in r12542 */ - _importexport_import_res.init("/dialogs/import/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); - _page_bitmaps.add_line( false, _("Default _import resolution:"), _importexport_import_res, _("dpi"), - _("Default import resolution (in dots per inch) for bitmap and SVG import"), false); + _importexport_import_res.init("/dialogs/import/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, + Inkscape::Util::Quantity::convert(1, "in", "px"), true, false); + _page_bitmaps.add_line(false, _("Default _import resolution:"), _importexport_import_res, _("dpi"), + _("Default import resolution (in dots per inch) for bitmap and SVG import"), false); _importexport_import_res_override.init(_("Override file resolution"), "/dialogs/import/forcexdpi", false); - _page_bitmaps.add_line( false, "", _importexport_import_res_override, "", - _("Use default bitmap resolution in favor of information from file")); + _page_bitmaps.add_line(false, "", _importexport_import_res_override, "", + _("Use default bitmap resolution in favor of information from file")); - _page_bitmaps.add_group_header( _("Render")); + _page_bitmaps.add_group_header(_("Render")); // rendering outlines for pixmap image tags - _rendering_image_outline.init( _("Images in Outline Mode"), "/options/rendering/imageinoutlinemode", false); - _page_bitmaps.add_line(false, "", _rendering_image_outline, "", _("When active will render images while in outline mode instead of a red box with an x. This is useful for manual tracing.")); + _rendering_image_outline.init(_("Images in Outline Mode"), "/options/rendering/imageinoutlinemode", false); + _page_bitmaps.add_line(false, "", _rendering_image_outline, "", + _("When active will render images while in outline mode instead of a red box with an x. " + "This is useful for manual tracing.")); this->AddPage(_page_bitmaps, _("Imported Images"), PREFS_PAGE_BITMAPS); } @@ -2910,22 +3201,22 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui { // ------- Shortcut file -------- auto labels_and_names = Inkscape::Shortcuts::get_file_names(); - _kb_filelist.init( "/options/kbshortcuts/shortcutfile", labels_and_names, labels_and_names[0].second); + _kb_filelist.init("/options/kbshortcuts/shortcutfile", labels_and_names, labels_and_names[0].second); auto tooltip = Glib::ustring::compose(_("Select a file of predefined shortcuts and modifiers to use. Any customizations you " "create will be added separately to %1"), IO::Resource::get_path_string(IO::Resource::USER, IO::Resource::KEYS, "default.xml")); - _page_keyshortcuts.add_line( false, _("Keyboard file:"), _kb_filelist, "", tooltip.c_str(), false); - + _page_keyshortcuts.add_line(false, _("Keyboard file:"), _kb_filelist, "", tooltip.c_str(), false); // ---------- Tree -------- - _kb_store = Gtk::TreeStore::create( _kb_columns ); - _kb_store->set_sort_column ( GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, Gtk::SORT_ASCENDING ); // only sort in onKBListKeyboardShortcuts() + _kb_store = Gtk::TreeStore::create(_kb_columns); + _kb_store->set_sort_column(GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, + Gtk::SORT_ASCENDING); // only sort in onKBListKeyboardShortcuts() _kb_filter = Gtk::TreeModelFilter::create(_kb_store); - _kb_filter->set_visible_func (sigc::mem_fun(*this, &InkscapePreferences::onKBSearchFilter)); + _kb_filter->set_visible_func(sigc::mem_fun(*this, &InkscapePreferences::onKBSearchFilter)); _kb_shortcut_renderer.property_editable() = true; @@ -2940,17 +3231,18 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui // Name _kb_tree.get_column(0)->set_resizable(true); _kb_tree.get_column(0)->set_clickable(true); - _kb_tree.get_column(0)->set_fixed_width (200); + _kb_tree.get_column(0)->set_fixed_width(200); // Shortcut _kb_tree.get_column(1)->set_resizable(true); _kb_tree.get_column(1)->set_clickable(true); - _kb_tree.get_column(1)->set_fixed_width (150); + _kb_tree.get_column(1)->set_fixed_width(150); //_kb_tree.get_column(1)->add_attribute(_kb_shortcut_renderer.property_text(), _kb_columns.shortcut); - _kb_tree.get_column(1)->set_cell_data_func(_kb_shortcut_renderer, sigc::ptr_fun(InkscapePreferences::onKBShortcutRenderer)); + _kb_tree.get_column(1)->set_cell_data_func(_kb_shortcut_renderer, + sigc::ptr_fun(InkscapePreferences::onKBShortcutRenderer)); // Description - auto desc_renderer = dynamic_cast(_kb_tree.get_column_cell_renderer(2)); + auto desc_renderer = dynamic_cast(_kb_tree.get_column_cell_renderer(2)); desc_renderer->property_wrap_mode() = Pango::WRAP_WORD; desc_renderer->property_wrap_width() = 600; _kb_tree.get_column(2)->set_resizable(true); @@ -2961,20 +3253,20 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui _kb_tree.get_column(3)->set_resizable(true); _kb_tree.get_column(3)->set_clickable(true); - _kb_shortcut_renderer.signal_accel_edited().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBTreeEdited) ); - _kb_shortcut_renderer.signal_accel_cleared().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBTreeCleared) ); + _kb_shortcut_renderer.signal_accel_edited().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBTreeEdited)); + _kb_shortcut_renderer.signal_accel_cleared().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBTreeCleared)); _kb_notebook.append_page(_kb_page_shortcuts, _("Shortcuts")); - Gtk::ScrolledWindow* shortcut_scroller = new Gtk::ScrolledWindow(); + Gtk::ScrolledWindow *shortcut_scroller = new Gtk::ScrolledWindow(); shortcut_scroller->add(_kb_tree); shortcut_scroller->set_hexpand(); shortcut_scroller->set_vexpand(); // -------- Search -------- _kb_search.init("/options/kbshortcuts/value", true); - _kb_page_shortcuts.add_line( false, _("Search:"), _kb_search, "", "", true); + _kb_page_shortcuts.add_line(false, _("Search:"), _kb_search, "", "", true); _kb_page_shortcuts.attach(*shortcut_scroller, 0, 3, 2, 1); - _mod_store = Gtk::TreeStore::create( _mod_columns ); + _mod_store = Gtk::TreeStore::create(_mod_columns); _mod_tree.set_model(_mod_store); _mod_tree.append_column(_("Name"), _mod_columns.name); _mod_tree.append_column("hot", _mod_columns.and_modifiers); @@ -3006,11 +3298,12 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui _kb_mod_enabled.signal_toggled().connect(sigc::mem_fun(*this, &InkscapePreferences::on_modifier_enabled)); _kb_page_modifiers.add_line(false, _("Change:"), *edit_bar, "", "", true); - _mod_tree.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::on_modifier_selection_changed)); + _mod_tree.get_selection()->signal_changed().connect( + sigc::mem_fun(*this, &InkscapePreferences::on_modifier_selection_changed)); on_modifier_selection_changed(); _kb_notebook.append_page(_kb_page_modifiers, _("Modifiers")); - Gtk::ScrolledWindow* mod_scroller = new Gtk::ScrolledWindow(); + Gtk::ScrolledWindow *mod_scroller = new Gtk::ScrolledWindow(); mod_scroller->add(_mod_tree); mod_scroller->set_hexpand(); mod_scroller->set_vexpand(); @@ -3033,7 +3326,8 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui auto kb_reset = Gtk::manage(new Gtk::Button(_("Reset"))); kb_reset->set_use_underline(); - kb_reset->set_tooltip_text(_("Remove all your customized keyboard shortcuts, and revert to the shortcuts in the shortcut file listed above")); + kb_reset->set_tooltip_text(_("Remove all your customized keyboard shortcuts, and revert to the shortcuts in the " + "shortcut file listed above")); box_buttons->pack_start(*kb_reset, true, true, 6); box_buttons->set_child_secondary(*kb_reset); @@ -3047,12 +3341,12 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui kb_export->set_tooltip_text(_("Export custom keyboard shortcuts to a file")); box_buttons->pack_end(*kb_export, true, true, 6); - kb_reset->signal_clicked().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBReset) ); - kb_import->signal_clicked().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBImport) ); - kb_export->signal_clicked().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBExport) ); - _kb_search.signal_key_release_event().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBSearchKeyEvent) ); - _kb_filelist.signal_changed().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBList) ); - _page_keyshortcuts.signal_realize().connect( sigc::mem_fun(*this, &InkscapePreferences::onKBRealize) ); + kb_reset->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBReset)); + kb_import->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBImport)); + kb_export->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBExport)); + _kb_search.signal_key_release_event().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBSearchKeyEvent)); + _kb_filelist.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBList)); + _page_keyshortcuts.signal_realize().connect(sigc::mem_fun(*this, &InkscapePreferences::onKBRealize)); this->AddPage(_page_keyshortcuts, _("Keyboard"), iter_ui, PREFS_PAGE_UI_KEYBOARD_SHORTCUTS); @@ -3103,7 +3397,7 @@ bool InkscapePreferences::onKBSearchKeyEvent(GdkEventKey * /*event*/) return FALSE; } -void InkscapePreferences::onKBTreeCleared(const Glib::ustring& path) +void InkscapePreferences::onKBTreeCleared(const Glib::ustring &path) { // Triggered by "Back" key. Gtk::TreeModel::iterator iter = _kb_filter->get_iter(path); @@ -3116,9 +3410,10 @@ void InkscapePreferences::onKBTreeCleared(const Glib::ustring& path) onKBListKeyboardShortcuts(); } -void InkscapePreferences::onKBTreeEdited (const Glib::ustring& path, guint accel_key, Gdk::ModifierType accel_mods, guint hardware_keycode) +void InkscapePreferences::onKBTreeEdited(const Glib::ustring &path, guint accel_key, Gdk::ModifierType accel_mods, + guint hardware_keycode) { - Inkscape::Shortcuts& shortcuts = Inkscape::Shortcuts::getInstance(); + Inkscape::Shortcuts &shortcuts = Inkscape::Shortcuts::getInstance(); Gtk::TreeModel::iterator iter = _kb_filter->get_iter(path); @@ -3132,11 +3427,10 @@ void InkscapePreferences::onKBTreeEdited (const Glib::ustring& path, guint accel event.hardware_keycode = hardware_keycode; Gtk::AccelKey const new_shortcut_key = shortcuts.get_from_event(&event, true); - if (!new_shortcut_key.is_null() && - (new_shortcut_key.get_key() != current_shortcut_key.get_key() || - new_shortcut_key.get_mod() != current_shortcut_key.get_mod()) - ) { - // Check if there is currently an actions assigned to this shortcut; if yes ask if the shortcut should be reassigned + if (!new_shortcut_key.is_null() && (new_shortcut_key.get_key() != current_shortcut_key.get_key() || + new_shortcut_key.get_mod() != current_shortcut_key.get_mod())) { + // Check if there is currently an actions assigned to this shortcut; if yes ask if the shortcut should be + // reassigned Glib::ustring action_name; Glib::ustring accel = Gtk::AccelGroup::name(accel_key, accel_mods); auto *app = InkscapeApplication::instance()->gtk_app(); @@ -3147,9 +3441,8 @@ void InkscapePreferences::onKBTreeEdited (const Glib::ustring& path, guint accel if (!action_name.empty()) { // Warn user about duplicated shortcuts. - Glib::ustring message = - Glib::ustring::compose(_("Keyboard shortcut \"%1\"\nis already assigned to \"%2\""), - shortcuts.get_label(new_shortcut_key), action_name); + Glib::ustring message = Glib::ustring::compose(_("Keyboard shortcut \"%1\"\nis already assigned to \"%2\""), + shortcuts.get_label(new_shortcut_key), action_name); Gtk::MessageDialog dialog(message, false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO, true); dialog.set_title(_("Reassign shortcut?")); dialog.set_secondary_text(_("Are you sure you want to reassign this shortcut?")); @@ -3167,7 +3460,7 @@ void InkscapePreferences::onKBTreeEdited (const Glib::ustring& path, guint accel } } -bool InkscapePreferences::onKBSearchFilter(const Gtk::TreeModel::const_iterator& iter) +bool InkscapePreferences::onKBSearchFilter(const Gtk::TreeModel::const_iterator &iter) { Glib::ustring search = _kb_search.get_text().lowercase(); if (search.empty()) { @@ -3180,13 +3473,11 @@ bool InkscapePreferences::onKBSearchFilter(const Gtk::TreeModel::const_iterator& Glib::ustring id = (*iter)[_kb_columns.id]; if (id.empty()) { - return TRUE; // Keep all group nodes visible + return TRUE; // Keep all group nodes visible } - return (name.lowercase().find(search) != name.npos - || shortcut.lowercase().find(search) != name.npos - || desc.lowercase().find(search) != name.npos - || id.lowercase().find(search) != name.npos); + return (name.lowercase().find(search) != name.npos || shortcut.lowercase().find(search) != name.npos || + desc.lowercase().find(search) != name.npos || id.lowercase().find(search) != name.npos); } void InkscapePreferences::onKBRealize() @@ -3203,8 +3494,8 @@ InkscapePreferences::ModelColumns &InkscapePreferences::onKBGetCols() return cols; } -void InkscapePreferences::onKBShortcutRenderer(Gtk::CellRenderer *renderer, Gtk::TreeIter const &iter) { - +void InkscapePreferences::onKBShortcutRenderer(Gtk::CellRenderer *renderer, Gtk::TreeIter const &iter) +{ Glib::ustring shortcut = (*iter)[onKBGetCols().shortcut]; unsigned int user_set = (*iter)[onKBGetCols().user_set]; Gtk::CellRendererAccel *accel = dynamic_cast(renderer); @@ -3237,12 +3528,12 @@ void InkscapePreferences::on_modifier_selection_changed() Glib::ustring modifier_id = (*iter)[_mod_columns.id]; auto modifier = Modifiers::Modifier::get(modifier_id.c_str()); Inkscape::Modifiers::KeyMask mask = Inkscape::Modifiers::NEVER; - if(modifier != nullptr) { + if (modifier != nullptr) { mask = modifier->get_and_mask(); } else { _kb_mod_enabled.set_sensitive(false); } - if(mask != Inkscape::Modifiers::NEVER) { + if (mask != Inkscape::Modifiers::NEVER) { _kb_mod_enabled.set_active(true); _kb_mod_ctrl.set_active(mask & Inkscape::Modifiers::CTRL); _kb_mod_shift.set_active(mask & Inkscape::Modifiers::SHIFT); @@ -3271,28 +3562,33 @@ void InkscapePreferences::on_modifier_enabled() void InkscapePreferences::on_modifier_edited() { Gtk::TreeStore::iterator iter = _mod_tree.get_selection()->get_selected(); - if (!iter || _kb_is_updated) return; + if (!iter || _kb_is_updated) + return; Glib::ustring modifier_id = (*iter)[_mod_columns.id]; auto modifier = Modifiers::Modifier::get(modifier_id.c_str()); - if(!_kb_mod_enabled.get_active()) { + if (!_kb_mod_enabled.get_active()) { modifier->set_user(Inkscape::Modifiers::NEVER, Inkscape::Modifiers::NOT_SET); } else { Inkscape::Modifiers::KeyMask mask = 0; - if(_kb_mod_ctrl.get_active()) mask |= Inkscape::Modifiers::CTRL; - if(_kb_mod_shift.get_active()) mask |= Inkscape::Modifiers::SHIFT; - if(_kb_mod_alt.get_active()) mask |= Inkscape::Modifiers::ALT; - if(_kb_mod_meta.get_active()) mask |= Inkscape::Modifiers::META; + if (_kb_mod_ctrl.get_active()) + mask |= Inkscape::Modifiers::CTRL; + if (_kb_mod_shift.get_active()) + mask |= Inkscape::Modifiers::SHIFT; + if (_kb_mod_alt.get_active()) + mask |= Inkscape::Modifiers::ALT; + if (_kb_mod_meta.get_active()) + mask |= Inkscape::Modifiers::META; modifier->set_user(mask, Inkscape::Modifiers::NOT_SET); } - Inkscape::Shortcuts& shortcuts = Inkscape::Shortcuts::getInstance(); + Inkscape::Shortcuts &shortcuts = Inkscape::Shortcuts::getInstance(); shortcuts.write_user(); (*iter)[_mod_columns.and_modifiers] = modifier->get_label(); } void InkscapePreferences::onKBListKeyboardShortcuts() { - Inkscape::Shortcuts& shortcuts = Inkscape::Shortcuts::getInstance(); + Inkscape::Shortcuts &shortcuts = Inkscape::Shortcuts::getInstance(); // Save the current selection Gtk::TreeStore::iterator iter = _kb_tree.get_selection()->get_selected(); @@ -3312,24 +3608,23 @@ void InkscapePreferences::onKBListKeyboardShortcuts() // std::vector actions = shortcuts.list_all_actions(); // All actions (app, win, doc) // Simpler and better to get action list from extra data (contains "detailed action names"). - InkActionExtraData& action_data = iapp->get_action_extra_data(); + InkActionExtraData &action_data = iapp->get_action_extra_data(); std::vector actions = action_data.get_actions(); // Sort actions by section - auto action_sort = - [&](Glib::ustring &a, Glib::ustring &b) { - return action_data.get_section_for_action(a) < action_data.get_section_for_action(b); - }; - std::sort (actions.begin(), actions.end(), action_sort); + auto action_sort = [&](Glib::ustring &a, Glib::ustring &b) { + return action_data.get_section_for_action(a) < action_data.get_section_for_action(b); + }; + std::sort(actions.begin(), actions.end(), action_sort); Glib::ustring old_section; Gtk::TreeStore::iterator iter_group; // Fill sections for (auto action : actions) { - Glib::ustring section = action_data.get_section_for_action(action); - if (section.empty()) section = "Misc"; + if (section.empty()) + section = "Misc"; if (section != old_section) { iter_group = _kb_store->append(); (*iter_group)[_kb_columns.name] = section; @@ -3360,7 +3655,7 @@ void InkscapePreferences::onKBListKeyboardShortcuts() } if (shortcut_label.size() > 1) { - shortcut_label.erase(shortcut_label.size()-2); + shortcut_label.erase(shortcut_label.size() - 2); } // Find primary (i.e. first) shortcut. @@ -3378,7 +3673,7 @@ void InkscapePreferences::onKBListKeyboardShortcuts() (*row)[_kb_columns.shortcut] = shortcut_label; (*row)[_kb_columns.description] = action_data.get_tooltip_for_action(action); (*row)[_kb_columns.shortcutkey] = shortcut_key; - (*row)[_kb_columns.id] = action; + (*row)[_kb_columns.id] = action; (*row)[_kb_columns.user_set] = shortcuts.is_user_set(action); if (selected_id == action) { @@ -3392,7 +3687,7 @@ void InkscapePreferences::onKBListKeyboardShortcuts() Gtk::TreeStore::iterator iter_mod_group; // Modifiers (mouse specific keys) - for(auto modifier: Inkscape::Modifiers::Modifier::getList()) { + for (auto modifier : Inkscape::Modifiers::Modifier::getList()) { auto cat_name = modifier->get_category(); if (cat_name != old_mod_group) { iter_mod_group = _mod_store->append(); @@ -3406,16 +3701,18 @@ void InkscapePreferences::onKBListKeyboardShortcuts() // Find accelerators Gtk::TreeStore::iterator iter_modifier = _mod_store->append(iter_mod_group->children()); - (*iter_modifier)[_mod_columns.name] = (modifier->get_name() && strlen(modifier->get_name())) ? _(modifier->get_name()) : ""; + (*iter_modifier)[_mod_columns.name] = + (modifier->get_name() && strlen(modifier->get_name())) ? _(modifier->get_name()) : ""; (*iter_modifier)[_mod_columns.id] = modifier->get_id(); - (*iter_modifier)[_mod_columns.description] = (modifier->get_description() && strlen(modifier->get_description())) ? _(modifier->get_description()) : ""; + (*iter_modifier)[_mod_columns.description] = + (modifier->get_description() && strlen(modifier->get_description())) ? _(modifier->get_description()) : ""; (*iter_modifier)[_mod_columns.and_modifiers] = modifier->get_label(); (*iter_modifier)[_mod_columns.user_set] = modifier->is_set_user(); } // re-order once after updating (then disable ordering again to increase performance) - _kb_store->set_sort_column (_kb_columns.id, Gtk::SORT_ASCENDING ); - _kb_store->set_sort_column ( GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, Gtk::SORT_ASCENDING ); + _kb_store->set_sort_column(_kb_columns.id, Gtk::SORT_ASCENDING); + _kb_store->set_sort_column(GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, Gtk::SORT_ASCENDING); if (selected_id.empty()) { _kb_tree.expand_to_path(_kb_store->get_path(_kb_store->get_iter("0:1"))); @@ -3427,21 +3724,21 @@ void InkscapePreferences::onKBListKeyboardShortcuts() } // Update all GUI text - std::list< SPDesktop* > listbuf; + std::list listbuf; // Get list of all available desktops INKSCAPE.get_all_desktops(listbuf); // Update text of each desktop to correct Shortcuts - for(SPDesktop *desktop: listbuf) { - // Caution: Checking if pointers are not NULL - if(desktop) { - InkscapeWindow *window = desktop->getInkscapeWindow(); - if(window) { - SPDesktopWidget *dtw = window->get_desktop_widget(); - if(dtw) - build_menu(); + for (SPDesktop *desktop : listbuf) { + // Caution: Checking if pointers are not NULL + if (desktop) { + InkscapeWindow *window = desktop->getInkscapeWindow(); + if (window) { + SPDesktopWidget *dtw = window->get_desktop_widget(); + if (dtw) + build_menu(); + } } - } } } @@ -3449,43 +3746,45 @@ void InkscapePreferences::initPageSpellcheck() { #if WITH_GSPELL - _spell_ignorenumbers.init( _("Ignore words with digits"), "/dialogs/spellcheck/ignorenumbers", true); - _page_spellcheck.add_line( false, "", _spell_ignorenumbers, "", - _("Ignore words containing digits, such as \"R2D2\""), true); + _spell_ignorenumbers.init(_("Ignore words with digits"), "/dialogs/spellcheck/ignorenumbers", true); + _page_spellcheck.add_line(false, "", _spell_ignorenumbers, "", + _("Ignore words containing digits, such as \"R2D2\""), true); - _spell_ignoreallcaps.init( _("Ignore words in ALL CAPITALS"), "/dialogs/spellcheck/ignoreallcaps", false); - _page_spellcheck.add_line( false, "", _spell_ignoreallcaps, "", - _("Ignore words in all capitals, such as \"IUPAC\""), true); + _spell_ignoreallcaps.init(_("Ignore words in ALL CAPITALS"), "/dialogs/spellcheck/ignoreallcaps", false); + _page_spellcheck.add_line(false, "", _spell_ignoreallcaps, "", _("Ignore words in all capitals, such as \"IUPAC\""), + true); this->AddPage(_page_spellcheck, _("Spellcheck"), PREFS_PAGE_SPELLCHECK); #endif } template -static void appendList(Glib::ustring& tmp, const std::vector &listing) +static void appendList(Glib::ustring &tmp, const std::vector &listing) { - for (auto const & str : listing) { + for (auto const &str : listing) { tmp += str; tmp += "\n"; } } - void InkscapePreferences::initPageSystem() { _misc_latency_skew.init("/debug/latency/skew", 0.5, 2.0, 0.01, 0.10, 1.0, false, false); - _page_system.add_line( false, _("Latency _skew:"), _misc_latency_skew, "", - _("Factor by which the event clock is skewed from the actual time (0.9766 on some systems)"), false, reset_icon()); + _page_system.add_line(false, _("Latency _skew:"), _misc_latency_skew, "", + _("Factor by which the event clock is skewed from the actual time (0.9766 on some systems)"), + false, reset_icon()); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - _misc_namedicon_delay.init( _("Pre-render named icons"), "/options/iconrender/named_nodelay", false); - _page_system.add_line( false, "", _misc_namedicon_delay, "", - _("When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"), true); + _misc_namedicon_delay.init(_("Pre-render named icons"), "/options/iconrender/named_nodelay", false); + _page_system.add_line(false, "", _misc_namedicon_delay, "", + _("When on, named icons will be rendered before displaying the ui. This is for working " + "around bugs in GTK+ named icon notification"), + true); - _page_system.add_group_header( _("System info")); + _page_system.add_group_header(_("System info")); _sys_user_prefs.set_text(prefs->getPrefsFilename()); _sys_user_prefs.set_editable(false); - Gtk::Button* reset_prefs = Gtk::manage(new Gtk::Button(_("Reset Preferences"))); + Gtk::Button *reset_prefs = Gtk::manage(new Gtk::Button(_("Reset Preferences"))); reset_prefs->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::on_reset_prefs_clicked)); _page_system.add_line(true, _("User preferences:"), _sys_user_prefs, "", @@ -3495,8 +3794,7 @@ void InkscapePreferences::initPageSystem() _page_system.add_line(true, _("User config:"), _sys_user_config, "", _("Location of users configuration"), true); auto extensions_folder = IO::Resource::get_path_string(IO::Resource::USER, IO::Resource::EXTENSIONS); - _sys_user_extension_dir.init(extensions_folder, - _("Open extensions folder")); + _sys_user_extension_dir.init(extensions_folder, _("Open extensions folder")); _page_system.add_line(true, _("User extensions:"), _sys_user_extension_dir, "", _("Location of the user’s extensions"), true); @@ -3523,10 +3821,10 @@ void InkscapePreferences::initPageSystem() true); _sys_user_paint_servers_dir.init((char const *)IO::Resource::get_path(IO::Resource::USER, IO::Resource::PAINT, ""), - _("Open paint servers folder")); + _("Open paint servers folder")); _page_system.add_line(true, _("User paint servers:"), _sys_user_paint_servers_dir, "", - _("Location of the user’s paint servers"), true); + _("Location of the user’s paint servers"), true); _sys_user_palettes_dir.init((char const *)IO::Resource::get_path(IO::Resource::USER, IO::Resource::PALETTES, ""), _("Open palettes folder")); @@ -3553,7 +3851,8 @@ void InkscapePreferences::initPageSystem() } _sys_tmp_files.set_text(tmp_dir); _sys_tmp_files.set_editable(false); - _page_system.add_line(true, _("Temporary files:"), _sys_tmp_files, "", _("Location of the temporary files used for autosave"), true); + _page_system.add_line(true, _("Temporary files:"), _sys_tmp_files, "", + _("Location of the temporary files used for autosave"), true); _sys_data.set_text(get_inkscape_datadir()); _sys_data.set_editable(false); @@ -3562,7 +3861,8 @@ void InkscapePreferences::initPageSystem() extensions_folder = IO::Resource::get_path_string(IO::Resource::SYSTEM, IO::Resource::EXTENSIONS); _sys_extension_dir.set_text(extensions_folder); _sys_extension_dir.set_editable(false); - _page_system.add_line(true, _("Inkscape extensions:"), _sys_extension_dir, "", _("Location of the Inkscape extensions"), true); + _page_system.add_line(true, _("Inkscape extensions:"), _sys_extension_dir, "", + _("Location of the Inkscape extensions"), true); Glib::ustring tmp; auto system_data_dirs = Glib::get_system_data_dirs(); @@ -3573,52 +3873,52 @@ void InkscapePreferences::initPageSystem() _sys_systemdata_scroll.set_size_request(100, 80); _sys_systemdata_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); _sys_systemdata_scroll.set_shadow_type(Gtk::SHADOW_IN); - _page_system.add_line(true, _("System data:"), _sys_systemdata_scroll, "", _("Locations of system data"), true); + _page_system.add_line(true, _("System data:"), _sys_systemdata_scroll, "", _("Locations of system data"), true); _sys_fontdirs_custom.init("/options/font/custom_fontdirs", 50); - _page_system.add_line(true, _("Custom Font directories"), _sys_fontdirs_custom, "", _("Load additional fonts from custom locations (one path per line)"), true); + _page_system.add_line(true, _("Custom Font directories"), _sys_fontdirs_custom, "", + _("Load additional fonts from custom locations (one path per line)"), true); tmp = ""; auto icon_theme = Gtk::IconTheme::get_default(); auto paths = icon_theme->get_search_path(); - appendList( tmp, paths ); + appendList(tmp, paths); _sys_icon.get_buffer()->insert(_sys_icon.get_buffer()->end(), tmp); _sys_icon.set_editable(false); _sys_icon_scroll.add(_sys_icon); _sys_icon_scroll.set_size_request(100, 80); _sys_icon_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); _sys_icon_scroll.set_shadow_type(Gtk::SHADOW_IN); - _page_system.add_line(true, _("Icon theme:"), _sys_icon_scroll, "", _("Locations of icon themes"), true); + _page_system.add_line(true, _("Icon theme:"), _sys_icon_scroll, "", _("Locations of icon themes"), true); this->AddPage(_page_system, _("System"), PREFS_PAGE_SYSTEM); } -bool InkscapePreferences::GetSizeRequest(const Gtk::TreeModel::iterator& iter) +bool InkscapePreferences::GetSizeRequest(const Gtk::TreeModel::iterator &iter) { Gtk::TreeModel::Row row = *iter; - DialogPage* page = row[_page_list_columns._col_page]; + DialogPage *page = row[_page_list_columns._col_page]; _page_frame.add(*page); this->show_all_children(); Gtk::Requisition sreq_minimum; Gtk::Requisition sreq_natural; get_preferred_size(sreq_minimum, sreq_natural); - _minimum_width = std::max(_minimum_width, sreq_minimum.width); + _minimum_width = std::max(_minimum_width, sreq_minimum.width); _minimum_height = std::max(_minimum_height, sreq_minimum.height); - _natural_width = std::max(_natural_width, sreq_natural.width); + _natural_width = std::max(_natural_width, sreq_natural.width); _natural_height = std::max(_natural_height, sreq_natural.height); _page_frame.remove(); return false; } // Check if iter points to page indicated in preferences. -bool InkscapePreferences::matchPage(const Gtk::TreeModel::iterator& iter) +bool InkscapePreferences::matchPage(const Gtk::TreeModel::iterator &iter) { Gtk::TreeModel::Row row = *iter; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int desired_page = prefs->getInt("/dialogs/preferences/page", 0); _init = false; - if (desired_page == row[_page_list_columns._col_id]) - { + if (desired_page == row[_page_list_columns._col_id]) { auto const path = _page_list.get_model()->get_path(*iter); _page_list.expand_to_path(path); _page_list.get_selection()->select(iter); @@ -3632,19 +3932,18 @@ bool InkscapePreferences::matchPage(const Gtk::TreeModel::iterator& iter) void InkscapePreferences::on_reset_open_recent_clicked() { Glib::RefPtr manager = Gtk::RecentManager::get_default(); - std::vector< Glib::RefPtr< Gtk::RecentInfo > > recent_list = manager->get_items(); + std::vector> recent_list = manager->get_items(); // Remove only elements that were added by Inkscape // TODO: This should likely preserve items that were also accessed by other apps. // However there does not seem to be straightforward way to delete only an application from an item. for (auto e : recent_list) { - if (e->has_application(g_get_prgname()) - || e->has_application("org.inkscape.Inkscape") - || e->has_application("inkscape") + if (e->has_application(g_get_prgname()) || e->has_application("org.inkscape.Inkscape") || + e->has_application("inkscape") #ifdef _WIN32 || e->has_application("inkscape.exe") #endif - ) { + ) { manager->remove_item(e->get_uri()); } } @@ -3681,8 +3980,7 @@ void InkscapePreferences::on_pagelist_selection_changed() // show new selection Glib::RefPtr selection = _page_list.get_selection(); Gtk::TreeModel::iterator iter = selection->get_selected(); - if(iter) - { + if (iter) { if (_current_page) _page_frame.remove(); Gtk::TreeModel::Row row = *iter; @@ -3691,7 +3989,7 @@ void InkscapePreferences::on_pagelist_selection_changed() if (!_init) { prefs->setInt("/dialogs/preferences/page", row[_page_list_columns._col_id]); } - Glib::ustring col_name_escaped = Glib::Markup::escape_text( row[_page_list_columns._col_name] ); + Glib::ustring col_name_escaped = Glib::Markup::escape_text(row[_page_list_columns._col_name]); _page_title.set_markup("" + col_name_escaped + ""); _page_frame.add(*_current_page); _current_page->show(); -- GitLab From 5f39a896a905e3c4bc98aa1b270d8da91571b46c Mon Sep 17 00:00:00 2001 From: Adis Durakovic Date: Fri, 3 Jun 2022 10:47:25 +0200 Subject: [PATCH 3/4] feat: add default labels in preferences --- src/ui/dialog/inkscape-preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index d190d6434b..2d5787d914 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -1731,7 +1731,7 @@ void InkscapePreferences::initPageUI() _page_ui.add_group_header(_("Pages")); auto sb_pagelabels = Gtk::make_managed(); - sb_pagelabels->init(_("Show default page labels"), "/pages/visibility/labels", true); + sb_pagelabels->init(_("Show default page labels"), "/pages/visibility/defaultlabels", true); _page_ui.add_line(false, "", *sb_pagelabels, "", _("If no page label set, show the default label instead"), true); // Theme -- GitLab From 5fc7c78436ce8cad269eb5185364d43a9feb21b9 Mon Sep 17 00:00:00 2001 From: Adis Durakovic Date: Fri, 3 Jun 2022 10:51:00 +0200 Subject: [PATCH 4/4] feat: reduce page label opacity --- src/display/control/canvas-page.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/display/control/canvas-page.cpp b/src/display/control/canvas-page.cpp index d98839b100..6fb184ae40 100644 --- a/src/display/control/canvas-page.cpp +++ b/src/display/control/canvas-page.cpp @@ -11,6 +11,7 @@ */ #include "canvas-page.h" + #include "canvas-item-rect.h" #include "canvas-item-text.h" @@ -47,7 +48,7 @@ void CanvasPage::add(Geom::Rect size, CanvasItemGroup *background_group, CanvasI if (auto label = new CanvasItemText(border_group, Geom::Point(0, 0), "{Page Label}")) { label->set_fontsize(10.0); label->set_fill(0xffffffff); - label->set_background(0x00000099); + label->set_background(0x00000030); label->set_bg_radius(0.2); label->set_anchor(Geom::Point(0.0, 1.0)); label->set_fixed_line(true); @@ -124,22 +125,21 @@ void CanvasPage::update(Geom::Rect size, const char *txt, bool outline) // This undoes the hide for the background rect, and additionally gives it a fill and shadow. if (!is_foreground) { rect->show(); -/* - if (_checkerboard) { - // draw checkerboard pattern, ignore alpha (background color doesn't support it) - rect->set_background_checkerboard(_background_color, false); - } - else { - // Background color does not support transparency; draw opaque pages - rect->set_background(_background_color | 0xff); - } -*/ + /* + if (_checkerboard) { + // draw checkerboard pattern, ignore alpha (background color doesn't support it) + rect->set_background_checkerboard(_background_color, false); + } + else { + // Background color does not support transparency; draw opaque pages + rect->set_background(_background_color | 0xff); + } + */ rect->set_fill(_background_color); rect->set_shadow(shadow_color, _shadow_size); } else { rect->set_fill(0x0); rect->set_shadow(0x0, 0); - } } if (auto label = dynamic_cast(item)) { @@ -168,7 +168,7 @@ bool CanvasPage::setAttributes(bool on_top, uint32_t border, uint32_t bg, int sh return false; } -}; +}; // namespace Inkscape /* Local Variables: -- GitLab