summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2019-02-24 06:13:39 +0000
committerMartin Owens <doctormo@gmail.com>2019-02-24 06:13:39 +0000
commit89dec29933b82615972ab5cb5691df7a445aac6b (patch)
treec3bb2ad8c0beba42805d51f09671a81790e96188
parentMake background color affect checkerboard (diff)
downloadinkscape-89dec29933b82615972ab5cb5691df7a445aac6b.tar.gz
inkscape-89dec29933b82615972ab5cb5691df7a445aac6b.zip
Merge in bazaar branch for alignment handles
-rw-r--r--src/seltrans-handles.cpp12
-rw-r--r--src/seltrans-handles.h43
-rw-r--r--src/seltrans.cpp42
-rw-r--r--src/seltrans.h6
-rw-r--r--src/ui/dialog/align-and-distribute.cpp15
-rw-r--r--src/ui/dialog/align-and-distribute.h2
-rw-r--r--src/ui/pixmaps/handles.xpm60
-rw-r--r--src/ui/tools/select-tool.cpp5
-rw-r--r--src/verbs.cpp44
-rw-r--r--src/verbs.h10
10 files changed, 221 insertions, 18 deletions
diff --git a/src/seltrans-handles.cpp b/src/seltrans-handles.cpp
index fec384086..5cf2457a1 100644
--- a/src/seltrans-handles.cpp
+++ b/src/seltrans-handles.cpp
@@ -19,7 +19,8 @@ SPSelTransTypeInfo const handtypes[] = {
{ DEF_COLOR, N_("<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center") },
{ DEF_COLOR, N_("<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to skew around the opposite side") },
{ DEF_COLOR, N_("<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to rotate around the opposite corner") },
- { CEN_COLOR, N_("<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center") }
+ { CEN_COLOR, N_("<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center") },
+ { DEF_COLOR, N_("<b>Align</b> selected objects to the side clicked; <b>Shift</b> click to align against side instead.") }
};
SPSelTransHandle const hands[] = {
@@ -42,6 +43,15 @@ SPSelTransHandle const hands[] = {
{HANDLE_SKEW, SP_ANCHOR_N, GDK_SB_H_DOUBLE_ARROW, 10, 0.5, 0},
{HANDLE_ROTATE, SP_ANCHOR_NE, GDK_EXCHANGE, 7, 0, 0},
{HANDLE_SKEW, SP_ANCHOR_E, GDK_SB_V_DOUBLE_ARROW, 11, 0, 0.5},
+ {HANDLE_ALIGN, SP_ANCHOR_S, GDK_TOP_SIDE, 13, 0.5, 1},
+ {HANDLE_ALIGN, SP_ANCHOR_W, GDK_RIGHT_SIDE, 14, 1, 0.5},
+ {HANDLE_ALIGN, SP_ANCHOR_N, GDK_BOTTOM_SIDE, 15, 0.5, 0},
+ {HANDLE_ALIGN, SP_ANCHOR_E, GDK_LEFT_SIDE, 16, 0, 0.5},
+ {HANDLE_ALIGN, SP_ANCHOR_CENTER, GDK_CROSSHAIR, 17, 0.5, 0.5},
+ {HANDLE_ALIGN, SP_ANCHOR_SE, GDK_TOP_LEFT_CORNER, 18, 0, 1},
+ {HANDLE_ALIGN, SP_ANCHOR_SW, GDK_TOP_RIGHT_CORNER, 19, 1, 1},
+ {HANDLE_ALIGN, SP_ANCHOR_NW, GDK_BOTTOM_RIGHT_CORNER, 20, 1, 0},
+ {HANDLE_ALIGN, SP_ANCHOR_NE, GDK_BOTTOM_LEFT_CORNER, 21, 0, 0},
};
/*
diff --git a/src/seltrans-handles.h b/src/seltrans-handles.h
index 04658aa3e..5b0e71c5e 100644
--- a/src/seltrans-handles.h
+++ b/src/seltrans-handles.h
@@ -17,6 +17,7 @@
#include <gdk/gdk.h>
#include "enums.h"
+#include "verbs.h"
typedef unsigned int guint32;
@@ -24,23 +25,53 @@ namespace Inkscape {
class SelTrans;
}
-guint32 const DEF_COLOR[] = { 0xff, 0xff6600, 0xff6600, 0xff, 0xff, 0xff };
-guint32 const CEN_COLOR[] = { 0x0, 0x0, 0x0, 0xff, 0xff0000b0, 0xff0000b0 };
+// Colours are RRGGBBAA: FILL, OVER&DRAG, STROKE, OVER&DRAG
+guint32 const DEF_COLOR[] = { 0x000000ff, 0x00ff6600, 0x000000ff, 0x000000ff };
+guint32 const CEN_COLOR[] = { 0x00000000, 0x00000000, 0x000000ff, 0xff0000b0 };
enum SPSelTransType {
HANDLE_STRETCH,
HANDLE_SCALE,
HANDLE_SKEW,
HANDLE_ROTATE,
- HANDLE_CENTER
+ HANDLE_CENTER,
+ HANDLE_ALIGN
};
+// Which handle does what in the alignment (clicking)
+const int AlignVerb[18] = {
+ // Left Click
+ SP_VERB_ALIGN_VERTICAL_TOP,
+ SP_VERB_ALIGN_HORIZONTAL_RIGHT,
+ SP_VERB_ALIGN_VERTICAL_BOTTOM,
+ SP_VERB_ALIGN_HORIZONTAL_LEFT,
+ SP_VERB_ALIGN_VERTICAL_CENTER,
+ SP_VERB_ALIGN_BOTH_BOTTOM_LEFT,
+ SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT,
+ SP_VERB_ALIGN_BOTH_TOP_RIGHT,
+ SP_VERB_ALIGN_BOTH_TOP_LEFT,
+ // Shift Click
+ SP_VERB_ALIGN_VERTICAL_BOTTOM_TO_ANCHOR,
+ SP_VERB_ALIGN_HORIZONTAL_LEFT_TO_ANCHOR,
+ SP_VERB_ALIGN_VERTICAL_TOP_TO_ANCHOR,
+ SP_VERB_ALIGN_HORIZONTAL_RIGHT_TO_ANCHOR,
+ SP_VERB_ALIGN_HORIZONTAL_CENTER,
+ SP_VERB_ALIGN_BOTH_TOP_RIGHT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_TOP_LEFT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_BOTTOM_LEFT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT_TO_ANCHOR,
+};
+// Ofset from the index in the handle list to the index in the verb list.
+const int AlignHandleToVerb = -13;
+// Offset for moving from Left click to Shift Click
+const int AlignShiftVerb = 9;
+
struct SPSelTransTypeInfo {
guint32 const *color;
char const *tip;
};
// One per handle type in order
-extern SPSelTransTypeInfo const handtypes[5];
+extern SPSelTransTypeInfo const handtypes[6];
struct SPSelTransHandle;
@@ -52,8 +83,8 @@ struct SPSelTransHandle {
gdouble x, y;
};
// These are 4 * each handle type + 1 for center
-int const NUMHANDS = 17;
-extern SPSelTransHandle const hands[17];
+int const NUMHANDS = 26;
+extern SPSelTransHandle const hands[NUMHANDS];
#endif // SEEN_SP_SELTRANS_HANDLES_H
diff --git a/src/seltrans.cpp b/src/seltrans.cpp
index 4ad4f2154..f43ce3f76 100644
--- a/src/seltrans.cpp
+++ b/src/seltrans.cpp
@@ -41,6 +41,9 @@
#include "display/snap-indicator.h"
#include "display/sodipodi-ctrl.h"
#include "display/sp-ctrlline.h"
+#include "display/guideline.h"
+
+#include "helper/action.h"
#include "object/sp-item-transform.h"
#include "object/sp-namedview.h"
@@ -222,6 +225,8 @@ void Inkscape::SelTrans::increaseState()
{
if (_state == STATE_SCALE) {
_state = STATE_ROTATE;
+ } else if (_state == STATE_ROTATE) {
+ _state = STATE_ALIGN;
} else {
_state = STATE_SCALE;
}
@@ -603,6 +608,8 @@ void Inkscape::SelTrans::_updateHandles()
if ( _state == STATE_SCALE ) {
_showHandles(HANDLE_STRETCH);
_showHandles(HANDLE_SCALE);
+ } else if(_state == STATE_ALIGN) {
+ _showHandles(HANDLE_ALIGN);
} else {
_showHandles(HANDLE_SKEW);
_showHandles(HANDLE_ROTATE);
@@ -666,8 +673,9 @@ void Inkscape::SelTrans::_makeHandles()
knots[i]->setSize(13);
knots[i]->setAnchor(hands[i].anchor);
knots[i]->setMode(SP_CTRL_MODE_XOR);
- knots[i]->setFill(info.color[0], info.color[1], info.color[2],info.color[1]);
+ knots[i]->setFill(info.color[0], info.color[1], info.color[2], info.color[1]);
knots[i]->setStroke(info.color[3], info.color[4], info.color[5], info.color[4]);
+
knots[i]->setPixbuf(handles[hands[i].control]);
knots[i]->updateCtrl();
@@ -733,6 +741,8 @@ void Inkscape::SelTrans::handleClick(SPKnot */*knot*/, guint state, SPSelTransHa
_("Reset center"));
}
break;
+ case HANDLE_ALIGN:
+ align(state, handle);
default:
break;
}
@@ -793,6 +803,8 @@ void Inkscape::SelTrans::handleNewEvent(SPKnot *knot, Geom::Point *position, gui
case HANDLE_CENTER:
setCenter(*position);
break;
+ case HANDLE_ALIGN:
+ break;
}
}
@@ -1094,6 +1106,8 @@ gboolean Inkscape::SelTrans::request(SPSelTransHandle const &handle, Geom::Point
return rotateRequest(pt, state);
case HANDLE_CENTER:
return centerRequest(pt, state);
+ case HANDLE_ALIGN:
+ break; // Do nothing, no dragging
}
return FALSE;
}
@@ -1329,6 +1343,32 @@ gboolean Inkscape::SelTrans::centerRequest(Geom::Point &pt, guint state)
return TRUE;
}
+void Inkscape::SelTrans::align(guint state, SPSelTransHandle const &handle)
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ bool sel_as_group = prefs->getBool("/dialogs/align/sel-as-groups");
+ int align_to = prefs->getInt("/dialogs/align/align-to", 6);
+
+ int verb_id = -1;
+ if (state & GDK_SHIFT_MASK) {
+ verb_id = AlignVerb[handle.control + AlignHandleToVerb + AlignShiftVerb];
+ } else {
+ verb_id = AlignVerb[handle.control + AlignHandleToVerb];
+ }
+ if(verb_id >= 0) {
+ prefs->setBool("/dialogs/align/sel-as-groups", (state & GDK_CONTROL_MASK) != 0);
+ prefs->setInt("/dialogs/align/align-to", 6);
+ Inkscape::Verb *verb = Inkscape::Verb::get( verb_id );
+ g_assert( verb != NULL );
+ SPAction *action = verb->get_action((Inkscape::UI::View::View *) this->_desktop);
+ sp_action_perform (action, NULL);
+ }
+
+ // Set the special align point and settings back to nothing so we don't interfere
+ prefs->setBool("/dialogs/align/sel-as-groups", sel_as_group);
+ prefs->setInt("/dialogs/align/align-to", align_to);
+}
+
/*
* handlers for handle movement
*
diff --git a/src/seltrans.h b/src/seltrans.h
index fe3a2ffc0..dadef62ef 100644
--- a/src/seltrans.h
+++ b/src/seltrans.h
@@ -29,7 +29,7 @@
#include "selcue.h"
#include "object/sp-item.h"
-
+#include "display/guideline.h"
class SPKnot;
class SPDesktop;
@@ -63,6 +63,7 @@ public:
void scale(Geom::Point &pt, unsigned int state);
void skew(SPSelTransHandle const &handle, Geom::Point &pt, unsigned int state);
void rotate(Geom::Point &pt, unsigned int state);
+ void align(guint state, SPSelTransHandle const &handle);
int request(SPSelTransHandle const &handle, Geom::Point &pt, unsigned int state);
int scaleRequest(Geom::Point &pt, unsigned int state);
int stretchRequest(SPSelTransHandle const &handle, Geom::Point &pt, unsigned int state);
@@ -124,7 +125,8 @@ private:
enum State {
STATE_SCALE, //scale or stretch
- STATE_ROTATE //rotate or skew
+ STATE_ROTATE, //rotate or skew
+ STATE_ALIGN //on canvas align
};
SPDesktop *_desktop;
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index b43afe179..d62ca3ea7 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -106,7 +106,7 @@ void ActionAlign::do_node_action(Inkscape::UI::Tools::NodeTool *nt, int verb)
prefs->setInt("/dialogs/align/align-nodes-to", MIN_NODE );
nt->_multipath->alignNodes(Geom::X);
break;
- case SP_VERB_ALIGN_VERTICAL_HORIZONTAL_CENTER:
+ case SP_VERB_ALIGN_BOTH_CENTER:
nt->_multipath->alignNodes(Geom::X);
nt->_multipath->alignNodes(Geom::Y);
break;
@@ -162,6 +162,7 @@ void ActionAlign::do_action(SPDesktop *desktop, int index)
if(focus)
b = focus->desktopPreferredBounds();
+
g_return_if_fail(b);
if (horiz == Selection::HORIZONTAL && desktop->is_yaxisdown()) {
@@ -213,7 +214,7 @@ void ActionAlign::do_action(SPDesktop *desktop, int index)
}
-ActionAlign::Coeffs const ActionAlign::_allCoeffs[11] = {
+ActionAlign::Coeffs const ActionAlign::_allCoeffs[19] = {
{1., 0., 0., 0., 0., 1., 0., 0., SP_VERB_ALIGN_HORIZONTAL_RIGHT_TO_ANCHOR},
{1., 0., 0., 0., 1., 0., 0., 0., SP_VERB_ALIGN_HORIZONTAL_LEFT},
{.5, .5, 0., 0., .5, .5, 0., 0., SP_VERB_ALIGN_HORIZONTAL_CENTER},
@@ -224,7 +225,15 @@ ActionAlign::Coeffs const ActionAlign::_allCoeffs[11] = {
{0., 0., .5, .5, 0., 0., .5, .5, SP_VERB_ALIGN_VERTICAL_CENTER},
{0., 0., 1., 0., 0., 0., 1., 0., SP_VERB_ALIGN_VERTICAL_BOTTOM},
{0., 0., 1., 0., 0., 0., 0., 1., SP_VERB_ALIGN_VERTICAL_TOP_TO_ANCHOR},
- {.5, .5, .5, .5, .5, .5, .5, .5, SP_VERB_ALIGN_VERTICAL_HORIZONTAL_CENTER}
+ {1., 0., 0., 1., 1., 0., 0., 1., SP_VERB_ALIGN_BOTH_TOP_LEFT},
+ {0., 1., 0., 1., 0., 1., 0., 1., SP_VERB_ALIGN_BOTH_TOP_RIGHT},
+ {0., 1., 1., 0., 0., 1., 1., 0., SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT},
+ {1., 0., 1., 0., 1., 0., 1., 0., SP_VERB_ALIGN_BOTH_BOTTOM_LEFT},
+ {0., 1., 1., 0., 1., 0., 0., 1., SP_VERB_ALIGN_BOTH_TOP_LEFT_TO_ANCHOR},
+ {1., 0., 1., 0., 0., 1., 0., 1., SP_VERB_ALIGN_BOTH_TOP_RIGHT_TO_ANCHOR},
+ {1., 0., 0., 1., 0., 1., 1., 0., SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT_TO_ANCHOR},
+ {0., 1., 0., 1., 1., 0., 1., 0., SP_VERB_ALIGN_BOTH_BOTTOM_LEFT_TO_ANCHOR},
+ {.5, .5, .5, .5, .5, .5, .5, .5, SP_VERB_ALIGN_BOTH_CENTER}
};
void ActionAlign::do_verb_action(SPDesktop *desktop, int verb)
diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h
index 6259736e0..ad23530ec 100644
--- a/src/ui/dialog/align-and-distribute.h
+++ b/src/ui/dialog/align-and-distribute.h
@@ -199,7 +199,7 @@ private :
guint _index;
AlignAndDistribute &_dialog;
- static const Coeffs _allCoeffs[11];
+ static const Coeffs _allCoeffs[19];
};
diff --git a/src/ui/pixmaps/handles.xpm b/src/ui/pixmaps/handles.xpm
index b61ad377c..e16e61bc7 100644
--- a/src/ui/pixmaps/handles.xpm
+++ b/src/ui/pixmaps/handles.xpm
@@ -98,3 +98,63 @@ static char const *handle_center_xpm[] = {
" . ",
" "};
+/* XPM */
+static char const *handle_align_xpm[] = {
+"13 13 3 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ........... ",
+" .+++++++. ",
+" .+++++. ",
+" .+++. ",
+" .+. ",
+" + ",
+" ........... ",
+" "};
+
+/* XPM */
+static char const *handle_align_center_xpm[] = {
+"13 13 3 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+" ......... ",
+" .+++++. ",
+". .+++. .",
+".. .+. ..",
+".+. . .+.",
+".++. . .++.",
+".+++.....+++.",
+".++. . .++.",
+".+. . .+.",
+".. .+. ..",
+". .+++. .",
+" .+++++. ",
+" ......... "};
+
+/* XPM */
+static char const *handle_align_corner_xpm[] = {
+"13 13 3 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+" ",
+" ",
+" . . ",
+" .. . ",
+" .+. . ",
+" .++. . ",
+" .+++. . ",
+" ...... . ",
+" . . ",
+" . . ",
+" .. ",
+" ........... ",
+" "};
+
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 01ede4b6d..93ff8d1d2 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -59,7 +59,7 @@
using Inkscape::DocumentUndo;
-GdkPixbuf *handles[13];
+GdkPixbuf *handles[23];
namespace Inkscape {
namespace UI {
@@ -112,6 +112,9 @@ SelectTool::SelectTool()
sp_load_handles(4, 4, handle_rotate_xpm);
sp_load_handles(8, 4, handle_skew_xpm);
sp_load_handles(12, 1, handle_center_xpm);
+ sp_load_handles(13, 4, handle_align_xpm);
+ sp_load_handles(17, 1, handle_align_center_xpm);
+ sp_load_handles(18, 4, handle_align_corner_xpm);
}
//static gint xp = 0, yp = 0; // where drag started
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 4a872485e..86b884b4d 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -1817,7 +1817,15 @@ void ContextVerb::perform(SPAction *action, void *data)
case SP_VERB_ALIGN_VERTICAL_CENTER:
case SP_VERB_ALIGN_VERTICAL_BOTTOM:
case SP_VERB_ALIGN_VERTICAL_TOP_TO_ANCHOR:
- case SP_VERB_ALIGN_VERTICAL_HORIZONTAL_CENTER:
+ case SP_VERB_ALIGN_BOTH_TOP_LEFT:
+ case SP_VERB_ALIGN_BOTH_TOP_RIGHT:
+ case SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT:
+ case SP_VERB_ALIGN_BOTH_BOTTOM_LEFT:
+ case SP_VERB_ALIGN_BOTH_TOP_LEFT_TO_ANCHOR:
+ case SP_VERB_ALIGN_BOTH_TOP_RIGHT_TO_ANCHOR:
+ case SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT_TO_ANCHOR:
+ case SP_VERB_ALIGN_BOTH_BOTTOM_LEFT_TO_ANCHOR:
+ case SP_VERB_ALIGN_BOTH_CENTER:
ActionAlign::do_verb_action(dt, verb);
break;
@@ -3221,8 +3229,40 @@ Verb *Verb::_base_verbs[] = {
new ContextVerb(SP_VERB_ALIGN_VERTICAL_TOP_TO_ANCHOR, "AlignVerticalTopToAnchor",
N_("Align top edges of objects to the bottom edge of the anchor"),
N_("Align top edges of objects to the bottom edge of the anchor"),
+ INKSCAPE_ICON("align-vertical-top")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_TOP_LEFT, "AlignBothTopLeft",
+ N_("Align edges of objects to the top-left corner of the anchor"),
+ N_("Align edges of objects to the top-left corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-top-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_TOP_RIGHT, "AlignBothTopRight",
+ N_("Align edges of objects to the top-right corner of the anchor"),
+ N_("Align edges of objects to the top-right corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-top-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT, "AlignBothBottomRight",
+ N_("Align edges of objects to the bottom-right corner of the anchor"),
+ N_("Align edges of objects to the bottom-right corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-bottom-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_BOTTOM_LEFT, "AlignBothBottomLeft",
+ N_("Align edges of objects to the bottom-left corner of the anchor"),
+ N_("Align edges of objects to the bottom-left corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-bottom-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_TOP_LEFT_TO_ANCHOR, "AlignBothTopLeftToAnchor",
+ N_("Align edges of objects to the top-left corner of the anchor"),
+ N_("Align edges of objects to the top-left corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-top-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_TOP_RIGHT_TO_ANCHOR, "AlignBothTopRightToAnchor",
+ N_("Align edges of objects to the top-right corner of the anchor"),
+ N_("Align edges of objects to the top-right corner of the anchor"),
INKSCAPE_ICON("align-vertical-top-to-anchor")),
- new ContextVerb(SP_VERB_ALIGN_VERTICAL_HORIZONTAL_CENTER, "AlignVerticalHorizontalCenter",
+ new ContextVerb(SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT_TO_ANCHOR, "AlignBothBottomRightToAnchor",
+ N_("Align edges of objects to the bottom-right corner of the anchor"),
+ N_("Align edges of objects to the bottom-right corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-bottom-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_BOTTOM_LEFT_TO_ANCHOR, "AlignBothBottomLeftToAnchor",
+ N_("Align edges of objects to the bottom-left corner of the anchor"),
+ N_("Align edges of objects to the bottom-left corner of the anchor"),
+ INKSCAPE_ICON("align-vertical-bottom-to-anchor")),
+ new ContextVerb(SP_VERB_ALIGN_BOTH_CENTER, "AlignVerticalHorizontalCenter",
N_("Center on horizontal and vertical axis"), N_("Center on horizontal and vertical axis"),
INKSCAPE_ICON("align-vertical-center")),
diff --git a/src/verbs.h b/src/verbs.h
index 2eee095b8..17faf1067 100644
--- a/src/verbs.h
+++ b/src/verbs.h
@@ -391,7 +391,15 @@ enum {
SP_VERB_ALIGN_VERTICAL_CENTER,
SP_VERB_ALIGN_VERTICAL_BOTTOM,
SP_VERB_ALIGN_VERTICAL_TOP_TO_ANCHOR,
- SP_VERB_ALIGN_VERTICAL_HORIZONTAL_CENTER,
+ SP_VERB_ALIGN_BOTH_TOP_LEFT,
+ SP_VERB_ALIGN_BOTH_TOP_RIGHT,
+ SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT,
+ SP_VERB_ALIGN_BOTH_BOTTOM_LEFT,
+ SP_VERB_ALIGN_BOTH_TOP_LEFT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_TOP_RIGHT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_BOTTOM_RIGHT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_BOTTOM_LEFT_TO_ANCHOR,
+ SP_VERB_ALIGN_BOTH_CENTER,
/* Footer */
SP_VERB_LAST