index d58f7ff25606cf4a0af56b1349a5cf01ab797677..badf27ecb45caa4d93541f5e806a371f43b66fd9 100644 (file)
#include "libnr/nr-convert2geom.h"
#include "display/curve.h"
#include "display/canvas-bpath.h"
+#include "inkscape-private.h"
// For clippath editing
#include "tools-switch.h"
#include "ui/clipboard.h"
-using NR::X;
-using NR::Y;
+using Geom::X;
+using Geom::Y;
/* The clipboard handling is in ui/clipboard.cpp now. There are some legacy functions left here,
because the layer manipulation code uses them. It should be rewritten specifically
* Copies repr and its inherited css style elements, along with the accumulated transform 'full_t',
* then prepends the copy to 'clip'.
*/
-void sp_selection_copy_one (Inkscape::XML::Node *repr, NR::Matrix full_t, GSList **clip, Inkscape::XML::Document* xml_doc)
+void sp_selection_copy_one (Inkscape::XML::Node *repr, Geom::Matrix full_t, GSList **clip, Inkscape::XML::Document* xml_doc)
{
Inkscape::XML::Node *copy = repr->duplicate(xml_doc);
@@ -147,8 +148,8 @@ GSList *sp_selection_paste_impl (SPDocument *doc, SPObject *parent, GSList **cli
Inkscape::XML::Node *copy = repr->duplicate(xml_doc);
// premultiply the item transform by the accumulated parent transform in the paste layer
- NR::Matrix local (sp_item_i2doc_affine(SP_ITEM(parent)));
- if (!local.test_identity()) {
+ Geom::Matrix local (sp_item_i2doc_affine(SP_ITEM(parent)));
+ if (!local.isIdentity()) {
gchar const *t_str = copy->attribute("transform");
Geom::Matrix item_t (Geom::identity());
if (t_str)
std::vector<const gchar *> old_ids;
std::vector<const gchar *> new_ids;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool relink_clones = prefs->getBool("options.relinkclonesonduplicate", "value");
+ bool relink_clones = prefs->getBool("/options/relinkclonesonduplicate/value");
while (reprs) {
Inkscape::XML::Node *old_repr = (Inkscape::XML::Node *) reprs->data;
@@ -368,9 +369,9 @@ void sp_edit_select_all_full (SPDesktop *dt, bool force_all_layers, bool invert)
g_return_if_fail(SP_IS_GROUP(dt->currentLayer()));
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- PrefsSelectionContext inlayer = (PrefsSelectionContext) prefs->getInt("options.kbselection", "inlayer", PREFS_SELECTION_LAYER);
- bool onlyvisible = prefs->getBool("options.kbselection", "onlyvisible", true);
- bool onlysensitive = prefs->getBool("options.kbselection", "onlysensitive", true);
+ PrefsSelectionContext inlayer = (PrefsSelectionContext) prefs->getInt("/options/kbselection/inlayer", PREFS_SELECTION_LAYER);
+ bool onlyvisible = prefs->getBool("/options/kbselection/onlyvisible", true);
+ bool onlysensitive = prefs->getBool("/options/kbselection/onlysensitive", true);
GSList *items = NULL;
_("Ungroup"));
}
+/** Replace all groups in the list with their member objects, recursively; returns a new list, frees old */
+GSList *
+sp_degroup_list (GSList *items)
+{
+ GSList *out = NULL;
+ bool has_groups = false;
+ for (GSList *item = items; item; item = item->next) {
+ if (!SP_IS_GROUP(item->data)) {
+ out = g_slist_prepend(out, item->data);
+ } else {
+ has_groups = true;
+ GSList *members = sp_item_group_item_list (SP_GROUP(item->data));
+ for (GSList *member = members; member; member = member->next) {
+ out = g_slist_prepend(out, member->data);
+ }
+ g_slist_free (members);
+ }
+ }
+ out = g_slist_reverse (out);
+ g_slist_free (items);
+
+ if (has_groups) { // recurse if we unwrapped a group - it may have contained others
+ out = sp_degroup_list (out);
+ }
+
+ return out;
+}
+
+
+/** If items in the list have a common parent, return it, otherwise return NULL */
static SPGroup *
sp_item_list_common_parent_group(GSList const *items)
{
}
/** Finds out the minimum common bbox of the selected items. */
-static boost::optional<Geom::Rect>
+static Geom::OptRect
enclose_items(GSList const *items)
{
g_assert(items != NULL);
- boost::optional<Geom::Rect> r;
+ Geom::OptRect r;
for (GSList const *i = items; i; i = i->next) {
r = Geom::unify(r, sp_item_bbox_desktop((SPItem *) i->data));
}
rev = g_slist_sort(rev, (GCompareFunc) sp_item_repr_compare_position);
// Determine the common bbox of the selected items.
- boost::optional<Geom::Rect> selected = enclose_items(items);
+ Geom::OptRect selected = enclose_items(items);
// Iterate over all objects in the selection (starting from top).
if (selected) {
for (SPObject *newref = child->next; newref; newref = newref->next) {
// if the sibling is an item AND overlaps our selection,
if (SP_IS_ITEM(newref)) {
- boost::optional<Geom::Rect> newref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+ Geom::OptRect newref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
if ( newref_bbox && selected->intersects(*newref_bbox) ) {
// AND if it's not one of our selected objects,
if (!g_slist_find((GSList *) items, newref)) {
Inkscape::XML::Node *grepr = SP_OBJECT_REPR(group);
// Determine the common bbox of the selected items.
- boost::optional<Geom::Rect> selected = enclose_items(items);
+ Geom::OptRect selected = enclose_items(items);
/* Construct direct-ordered list of selected children. */
GSList *rev = g_slist_copy((GSList *) items);
for (SPObject *newref = prev_sibling(child); newref; newref = prev_sibling(newref)) {
// if the sibling is an item AND overlaps our selection,
if (SP_IS_ITEM(newref)) {
- boost::optional<Geom::Rect> ref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+ Geom::OptRect ref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
if ( ref_bbox && selected->intersects(*ref_bbox) ) {
// AND if it's not one of our selected objects,
if (!g_slist_find((GSList *) items, newref)) {
@@ -1182,7 +1213,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
// "clones are unmoved when original is moved" preference
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- int compensation = prefs->getInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+ int compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
bool prefs_unmoved = (compensation == SP_CLONE_COMPENSATION_UNMOVED);
bool prefs_parallel = (compensation == SP_CLONE_COMPENSATION_PARALLEL);
@@ -1216,9 +1247,9 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
sp_object_read_attr (SP_OBJECT (item), "transform");
// calculate the matrix we need to apply to the clone to cancel its induced transform from its original
- Geom::Matrix parent_transform = sp_item_i2root_affine(SP_ITEM(SP_OBJECT_PARENT (item)));
- Geom::Matrix t = parent_transform * matrix_to_desktop (matrix_from_desktop (affine, item), item) * parent_transform.inverse();
- Geom::Matrix t_inv =parent_transform * matrix_to_desktop (matrix_from_desktop (affine.inverse(), item), item) * parent_transform.inverse();
+ Geom::Matrix parent2dt = sp_item_i2d_affine(SP_ITEM(SP_OBJECT_PARENT (item)));
+ Geom::Matrix t = parent2dt * affine * parent2dt.inverse();
+ Geom::Matrix t_inv = t.inverse();
Geom::Matrix result = t_inv * item->transform * t;
if ((prefs_parallel || prefs_unmoved) && affine.isTranslation()) {
@@ -1234,7 +1265,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
} else if (prefs_unmoved) {
//if (SP_IS_USE(sp_use_get_original(SP_USE(item))))
- // clone_move = NR::identity();
+ // clone_move = Geom::identity();
Geom::Matrix move = result * clone_move;
sp_item_write_transform(item, SP_OBJECT_REPR(item), move, &t);
}
if (selection->isEmpty())
return;
- boost::optional<Geom::Rect> const bbox(selection->bounds());
- if ( !bbox || bbox->isEmpty() ) {
+ Geom::OptRect const bbox(selection->bounds());
+ if ( !bbox ) {
return;
}
y1 - y0);
Geom::Scale const scale( newSize * Geom::Scale(bbox->dimensions()).inverse() );
Geom::Translate const o2n(x0, y0);
- NR::Matrix const final( p2o * scale * o2n );
+ Geom::Matrix const final( p2o * scale * o2n );
sp_selection_apply_affine(selection, final);
}
@@ -1307,15 +1338,15 @@ void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point con
if (selection->isEmpty())
return;
- boost::optional<Geom::Rect> const bbox(selection->bounds());
+ Geom::OptRect const bbox(selection->bounds());
- if ( !bbox || bbox->isEmpty() ) {
+ if ( !bbox ) {
return;
}
// FIXME: ARBITRARY LIMIT: don't try to scale above 1 Mpx, it won't display properly and will crash sooner or later anyway
- if ( bbox->dimensions()[NR::X] * scale[Geom::X] > 1e6 ||
- bbox->dimensions()[NR::Y] * scale[Geom::Y] > 1e6 )
+ if ( bbox->dimensions()[Geom::X] * scale[Geom::X] > 1e6 ||
+ bbox->dimensions()[Geom::Y] * scale[Geom::Y] > 1e6 )
{
return;
}
@@ -1350,12 +1381,12 @@ sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &al
void sp_selection_move_relative(Inkscape::Selection *selection, Geom::Point const &move)
{
- sp_selection_apply_affine(selection, NR::Matrix(Geom::Translate(move)));
+ sp_selection_apply_affine(selection, Geom::Matrix(Geom::Translate(move)));
}
void sp_selection_move_relative(Inkscape::Selection *selection, double dx, double dy)
{
- sp_selection_apply_affine(selection, NR::Matrix(Geom::Translate(dx, dy)));
+ sp_selection_apply_affine(selection, Geom::Matrix(Geom::Translate(dx, dy)));
}
/**
return;
GSList const *l = selection->itemList();
- Geom::Rotate const rot_90(NR::Point(0, ccw ? 1 : -1)); // pos. or neg. rotation, depending on the value of ccw
+ Geom::Rotate const rot_90(Geom::Point(0, ccw ? 1 : -1)); // pos. or neg. rotation, depending on the value of ccw
for (GSList const *l2 = l ; l2 != NULL ; l2 = l2->next) {
SPItem *item = SP_ITEM(l2->data);
sp_item_rotate_rel(item, rot_90);
if (selection->isEmpty())
return;
- boost::optional<Geom::Rect> const bbox(selection->bounds());
+ Geom::OptRect const bbox(selection->bounds());
boost::optional<Geom::Point> center = selection->center();
if ( !bbox || !center ) {
if (selection->isEmpty())
return;
- boost::optional<Geom::Rect> const bbox(selection->bounds());
+ Geom::OptRect const bbox(selection->bounds());
if (!bbox) {
return;
}
if (selection->isEmpty())
return;
- boost::optional<Geom::Rect> sel_bbox = selection->bounds();
+ Geom::OptRect sel_bbox = selection->bounds();
if (!sel_bbox) {
return;
Inkscape::Selection *selection = sp_desktop_selection(desktop);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- PrefsSelectionContext inlayer = (PrefsSelectionContext)prefs->getInt("options.kbselection", "inlayer", PREFS_SELECTION_LAYER);
- bool onlyvisible = prefs->getBool("options.kbselection", "onlyvisible", true);
- bool onlysensitive = prefs->getBool("options.kbselection", "onlysensitive", true);
+ PrefsSelectionContext inlayer = (PrefsSelectionContext)prefs->getInt("/options/kbselection/inlayer", PREFS_SELECTION_LAYER);
+ bool onlyvisible = prefs->getBool("/options/kbselection/onlyvisible", true);
+ bool onlysensitive = prefs->getBool("/options/kbselection/onlysensitive", true);
SPObject *root;
if (PREFS_SELECTION_ALL != inlayer) {
Inkscape::Selection *selection = sp_desktop_selection(desktop);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- PrefsSelectionContext inlayer = (PrefsSelectionContext) prefs->getInt("options.kbselection", "inlayer", PREFS_SELECTION_LAYER);
- bool onlyvisible = prefs->getBool("options.kbselection", "onlyvisible", true);
- bool onlysensitive = prefs->getBool("options.kbselection", "onlysensitive", true);
+ PrefsSelectionContext inlayer = (PrefsSelectionContext) prefs->getInt("/options/kbselection/inlayer", PREFS_SELECTION_LAYER);
+ bool onlyvisible = prefs->getBool("/options/kbselection/onlyvisible", true);
+ bool onlysensitive = prefs->getBool("/options/kbselection/onlysensitive", true);
SPObject *root;
if (PREFS_SELECTION_ALL != inlayer) {
tools_switch(dt, TOOLS_NODES);
}
- ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor;
+ ShapeEditor * shape_editor = dt->event_context->shape_editor;
// TODO: should we set the item for nodepath or knotholder or both? seems to work with both.
shape_editor->set_item(SP_ITEM(child), SH_NODEPATH);
shape_editor->set_item(SP_ITEM(child), SH_KNOTHOLDER);
// take colors from prefs (same as used in outline mode)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
np->helperpath_rgba = clip ?
- prefs->getInt("options.wireframecolors", "clips", 0x00ff00ff) :
- prefs->getInt("options.wireframecolors", "masks", 0x0000ffff);
+ prefs->getInt("/options/wireframecolors/clips", 0x00ff00ff) :
+ prefs->getInt("/options/wireframecolors/masks", 0x0000ffff);
np->helperpath_width = 1.0;
sp_nodepath_show_helperpath(np, true);
}
void scroll_to_show_item(SPDesktop *desktop, SPItem *item)
{
Geom::Rect dbox = desktop->get_display_area();
- boost::optional<Geom::Rect> sbox = sp_item_bbox_desktop(item);
+ Geom::OptRect sbox = sp_item_bbox_desktop(item);
if ( sbox && dbox.contains(*sbox) == false ) {
Geom::Point const s_dt = sbox->midpoint();
if (original) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool highlight = prefs->getBool("options.highlightoriginal", "value");
+ bool highlight = prefs->getBool("/options/highlightoriginal/value");
if (highlight) {
- boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2d_affine(item));
- boost::optional<Geom::Rect> b = original->getBounds(sp_item_i2d_affine(original));
+ Geom::OptRect a = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect b = original->getBounds(sp_item_i2d_affine(original));
if ( a && b ) {
// draw a flashing line between the objects
SPCurve *curve = new SPCurve();
}
sp_document_ensure_up_to_date(doc);
- boost::optional<Geom::Rect> r = selection->bounds();
+ Geom::OptRect r = selection->bounds();
boost::optional<Geom::Point> c = selection->center();
- if ( !r || !c || r->isEmpty() ) {
+ if ( !r || !c ) {
return;
}
// bottommost object, after sorting
SPObject *parent = SP_OBJECT_PARENT (items->data);
- Geom::Matrix parent_transform (sp_item_i2root_affine(SP_ITEM(parent)));
+ Geom::Matrix parent_transform (sp_item_i2doc_affine(SP_ITEM(parent)));
// remember the position of the first item
gint pos = SP_OBJECT_REPR (items->data)->position();
repr_copies = g_slist_prepend (repr_copies, dup);
}
- NR::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
+ Geom::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
if (apply) {
// delete objects so that their clones don't get alerted; this object will be restored shortly
// without disturbing clones.
// See ActorAlign::on_button_click() in src/ui/dialog/align-and-distribute.cpp
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- int saved_compensation = prefs->getInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
- prefs->setInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+ int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
+ prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
gchar const *mark_id = generate_marker(repr_copies, bounds, doc,
( Geom::Matrix(Geom::Translate(desktop->dt2doc(
(void)mark_id;
// restore compensation setting
- prefs->setInt("options.clonecompensation", "value", saved_compensation);
+ prefs->setInt("/options/clonecompensation/value", saved_compensation);
g_slist_free (items);
}
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool deleteitem = !prefs->getBool("tools", "cvg_keep_objects", 0);
- bool wholegroups = prefs->getBool("tools", "cvg_convert_whole_groups", 0);
+ bool deleteitem = !prefs->getBool("/tools/cvg_keep_objects", 0);
+ bool wholegroups = prefs->getBool("/tools/cvg_convert_whole_groups", 0);
for (GSList const *i = items; i != NULL; i = i->next) {
sp_selection_to_guides_recursive(SP_ITEM(i->data), deleteitem, wholegroups);
}
sp_document_ensure_up_to_date(doc);
- boost::optional<Geom::Rect> r = selection->bounds();
- if ( !r || r->isEmpty() ) {
+ Geom::OptRect r = selection->bounds();
+ if ( !r ) {
return;
}
// calculate the transform to be applied to objects to move them to 0,0
- Geom::Point move_p = Geom::Point(0, sp_document_height(doc)) - (r->min() + Geom::Point (0, r->dimensions()[NR::Y]));
+ Geom::Point move_p = Geom::Point(0, sp_document_height(doc)) - (r->min() + Geom::Point (0, r->dimensions()[Geom::Y]));
move_p[Geom::Y] = -move_p[Geom::Y];
- NR::Matrix move = NR::Matrix (Geom::Translate (move_p));
+ Geom::Matrix move = Geom::Matrix (Geom::Translate (move_p));
GSList *items = g_slist_copy((GSList *) selection->itemList());
// bottommost object, after sorting
SPObject *parent = SP_OBJECT_PARENT (items->data);
- NR::Matrix parent_transform (sp_item_i2root_affine(SP_ITEM(parent)));
+ Geom::Matrix parent_transform (sp_item_i2doc_affine(SP_ITEM(parent)));
// remember the position of the first item
gint pos = SP_OBJECT_REPR (items->data)->position();
// restore the z-order after prepends
repr_copies = g_slist_reverse (repr_copies);
- NR::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
+ Geom::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
if (apply) {
// delete objects so that their clones don't get alerted; this object will be restored shortly
// without disturbing clones.
// See ActorAlign::on_button_click() in src/ui/dialog/align-and-distribute.cpp
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- int saved_compensation = prefs->getInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
- prefs->setInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+ int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
+ prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
gchar const *pat_id = pattern_tile(repr_copies, bounds, doc,
- ( NR::Matrix(Geom::Translate(desktop->dt2doc(NR::Point(r->min()[NR::X],
- r->max()[NR::Y]))))
- * parent_transform.inverse() ),
+ ( Geom::Matrix(Geom::Translate(desktop->dt2doc(Geom::Point(r->min()[Geom::X],
+ r->max()[Geom::Y]))))
+ * to_2geom(parent_transform.inverse()) ),
parent_transform * move);
// restore compensation setting
- prefs->setInt("options.clonecompensation", "value", saved_compensation);
+ prefs->setInt("/options/clonecompensation/value", saved_compensation);
if (apply) {
Inkscape::XML::Node *rect = xml_doc->createElement("svg:rect");
rect->setAttribute("style", g_strdup_printf("stroke:none;fill:url(#%s)", pat_id));
- NR::Point min = bounds.min() * parent_transform.inverse();
- NR::Point max = bounds.max() * parent_transform.inverse();
+ Geom::Point min = bounds.min() * to_2geom(parent_transform.inverse());
+ Geom::Point max = bounds.max() * to_2geom(parent_transform.inverse());
- sp_repr_set_svg_double(rect, "width", max[NR::X] - min[NR::X]);
- sp_repr_set_svg_double(rect, "height", max[NR::Y] - min[NR::Y]);
- sp_repr_set_svg_double(rect, "x", min[NR::X]);
- sp_repr_set_svg_double(rect, "y", min[NR::Y]);
+ sp_repr_set_svg_double(rect, "width", max[Geom::X] - min[Geom::X]);
+ sp_repr_set_svg_double(rect, "height", max[Geom::Y] - min[Geom::Y]);
+ sp_repr_set_svg_double(rect, "x", min[Geom::X]);
+ sp_repr_set_svg_double(rect, "y", min[Geom::Y]);
// restore parent and position
SP_OBJECT_REPR (parent)->appendChild(rect);
// Imagemagick is known not to handle spaces in filenames, so we replace anything but letters,
// digits, and a few other chars, with "_"
filename = g_strcanon (filename, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.=+~$#@^&!?", '_');
- // Build the complete path by adding document->base if set
- gchar *filepath = g_build_filename (document->base?document->base:"", filename, NULL);
+
+ // Build the complete path by adding document base dir, if set, otherwise home dir
+ gchar * directory = NULL;
+ if (SP_DOCUMENT_URI(document)) {
+ directory = g_dirname(SP_DOCUMENT_URI(document));
+ }
+ if (directory == NULL) {
+ directory = homedir_path(NULL);
+ }
+ gchar *filepath = g_build_filename (directory, filename, NULL);
//g_print ("%s\n", filepath);
// Calculate resolution
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
double res;
- int const prefs_res = prefs->getInt("options.createbitmap", "resolution", 0);
- int const prefs_min = prefs->getInt("options.createbitmap", "minsize", 0);
+ int const prefs_res = prefs->getInt("/options/createbitmap/resolution", 0);
+ int const prefs_min = prefs->getInt("/options/createbitmap/minsize", 0);
if (0 < prefs_res) {
// If it's given explicitly in prefs, take it
res = prefs_res;
// Find out if we have to run an external filter
gchar const *run = NULL;
- Glib::ustring filter = prefs->getString("options.createbitmap", "filter");
+ Glib::ustring filter = prefs->getString("/options/createbitmap/filter");
if (!filter.empty()) {
// filter command is given;
// see if we have a parameter to pass to it
- Glib::ustring param1 = prefs->getString("options.createbitmap", "filter_param1");
+ Glib::ustring param1 = prefs->getString("/options/createbitmap/filter_param1");
if (!param1.empty()) {
if (param1[param1.length() - 1] == '%') {
// if the param string ends with %, interpret it as a percentage of the image's max dimension
@@ -2678,8 +2717,8 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la
GSList *apply_to_items = NULL;
GSList *items_to_delete = NULL;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool topmost = prefs->getBool("options.maskobject", "topmost", true);
- bool remove_original = prefs->getBool("options.maskobject", "remove", true);
+ bool topmost = prefs->getBool("/options/maskobject/topmost", true);
+ bool remove_original = prefs->getBool("/options/maskobject/remove", true);
if (apply_to_layer) {
// all selected items are used for mask, which is applied to a layer
@@ -2731,7 +2770,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la
SPItem *item = reinterpret_cast<SPItem *>(i->data);
// inverted object transform should be applied to a mask object,
// as mask is calculated in user space (after applying transform)
- NR::Matrix maskTransform (item->transform.inverse());
+ Geom::Matrix maskTransform (item->transform.inverse());
GSList *mask_items_dup = NULL;
for (GSList *mask_item = mask_items; NULL != mask_item; mask_item = mask_item->next) {
}
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool remove_original = prefs->getBool("options.maskobject", "remove", true);
+ bool remove_original = prefs->getBool("/options/maskobject/remove", true);
sp_document_ensure_up_to_date(doc);
gchar const *attributeName = apply_clip_path ? "clip-path" : "mask";
selection->add(repr);
// transform mask, so it is moved the same spot where mask was applied
- NR::Matrix transform (mask_item->transform);
+ Geom::Matrix transform (mask_item->transform);
transform *= (*it).second->transform;
sp_item_write_transform(mask_item, SP_OBJECT_REPR(mask_item), transform);
}
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to fit canvas to."));
return false;
}
- boost::optional<Geom::Rect> const bbox(desktop->selection->bounds());
- if (bbox && !bbox->isEmpty()) {
+ Geom::OptRect const bbox(desktop->selection->bounds());
+ if (bbox) {
doc->fitToRect(*bbox);
return true;
} else {
sp_document_ensure_up_to_date(doc);
SPItem const *const root = SP_ITEM(doc->root);
- boost::optional<Geom::Rect> const bbox(root->getBounds(sp_item_i2r_affine(root)));
- if (bbox && !bbox->isEmpty()) {
+ Geom::OptRect const bbox(root->getBounds(sp_item_i2d_affine(root)));
+ if (bbox) {
doc->fitToRect(*bbox);
return true;
} else {