summaryrefslogtreecommitdiffstats
path: root/src/knotholder.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-11-23 23:36:49 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-11-23 23:36:49 +0000
commit0969085ddf607a7a98cf7fd6d9b10da5fbebe62d (patch)
tree59b2bc9ed3412ab2de4c703ef30342dfe2401704 /src/knotholder.cpp
parentrefactor from lastApplied (diff)
parentFixed a bug pointed by suv running from comand line, also removed another des... (diff)
downloadinkscape-0969085ddf607a7a98cf7fd6d9b10da5fbebe62d.tar.gz
inkscape-0969085ddf607a7a98cf7fd6d9b10da5fbebe62d.zip
fixing to trunk
(bzr r12588.1.34)
Diffstat (limited to 'src/knotholder.cpp')
-rw-r--r--src/knotholder.cpp118
1 files changed, 79 insertions, 39 deletions
diff --git a/src/knotholder.cpp b/src/knotholder.cpp
index cf87423d4..f46daa09e 100644
--- a/src/knotholder.cpp
+++ b/src/knotholder.cpp
@@ -6,6 +6,7 @@
* bulia byak <buliabyak@users.sf.net>
* Maximilian Albert <maximilian.albert@gmail.com>
* Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2001-2008 authors
*
@@ -58,8 +59,7 @@ KnotHolder::KnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderReleasedFun
local_change(FALSE),
dragging(false)
{
-
- if (!desktop || !item || !SP_IS_ITEM(item)) {
+ if (!desktop || !item) {
g_print ("Error! Throw an exception, please!\n");
}
@@ -128,34 +128,49 @@ KnotHolder::knot_clicked_handler(SPKnot *knot, guint state)
}
}
- if (SP_IS_SHAPE(saved_item)) {
- SP_SHAPE(saved_item)->set_shape();
+ {
+ SPShape *savedShape = dynamic_cast<SPShape *>(saved_item);
+ if (savedShape) {
+ savedShape->set_shape();
+ }
}
knot_holder->update_knots();
unsigned int object_verb = SP_VERB_NONE;
- if (SP_IS_RECT(saved_item))
+ // TODO extract duplicated blocks;
+ if (dynamic_cast<SPRect *>(saved_item)) {
object_verb = SP_VERB_CONTEXT_RECT;
- else if (SP_IS_BOX3D(saved_item))
+ } else if (dynamic_cast<SPBox3D *>(saved_item)) {
object_verb = SP_VERB_CONTEXT_3DBOX;
- else if (SP_IS_GENERICELLIPSE(saved_item))
+ } else if (dynamic_cast<SPGenericEllipse *>(saved_item)) {
object_verb = SP_VERB_CONTEXT_ARC;
- else if (SP_IS_STAR(saved_item))
+ } else if (dynamic_cast<SPStar *>(saved_item)) {
object_verb = SP_VERB_CONTEXT_STAR;
- else if (SP_IS_SPIRAL(saved_item))
+ } else if (dynamic_cast<SPSpiral *>(saved_item)) {
object_verb = SP_VERB_CONTEXT_SPIRAL;
- else if (SP_IS_OFFSET(saved_item)) {
- if (SP_OFFSET(saved_item)->sourceHref)
- object_verb = SP_VERB_SELECTION_LINKED_OFFSET;
- else
- object_verb = SP_VERB_SELECTION_DYNAMIC_OFFSET;
+ } else {
+ SPOffset *offset = dynamic_cast<SPOffset *>(saved_item);
+ if (offset) {
+ if (offset->sourceHref) {
+ object_verb = SP_VERB_SELECTION_LINKED_OFFSET;
+ } else {
+ object_verb = SP_VERB_SELECTION_DYNAMIC_OFFSET;
+ }
+ }
}
// for drag, this is done by ungrabbed_handler, but for click we must do it here
- DocumentUndo::done(saved_item->document, object_verb,
- _("Change handle"));
+
+ if (saved_item) { //increasingly aggressive sanity checks
+ if (saved_item->document) {
+ if (object_verb <= SP_VERB_LAST && object_verb >= SP_VERB_INVALID) {
+ DocumentUndo::done(saved_item->document, object_verb,
+ _("Change handle"));
+ }
+ }
+ } // else { abort(); }
}
void
@@ -177,8 +192,9 @@ KnotHolder::knot_moved_handler(SPKnot *knot, Geom::Point const &p, guint state)
}
}
- if (SP_IS_SHAPE (item)) {
- SP_SHAPE (item)->set_shape();
+ SPShape *shape = dynamic_cast<SPShape *>(item);
+ if (shape) {
+ shape->set_shape();
}
this->update_knots();
@@ -203,11 +219,11 @@ KnotHolder::knot_ungrabbed_handler(SPKnot */*knot*/, guint)
/* do cleanup tasks (e.g., for LPE items write the parameter values
* that were changed by dragging the handle to SVG)
*/
- if (SP_IS_LPE_ITEM(object)) {
+ SPLPEItem *lpeItem = dynamic_cast<SPLPEItem *>(object);
+ if (lpeItem) {
// This writes all parameters to SVG. Is this sufficiently efficient or should we only
// write the ones that were changed?
-
- Inkscape::LivePathEffect::Effect *lpe = SP_LPE_ITEM(object)->getCurrentLPE();
+ Inkscape::LivePathEffect::Effect *lpe = lpeItem->getCurrentLPE();
if (lpe) {
LivePathEffectObject *lpeobj = lpe->getLPEObj();
lpeobj->updateRepr();
@@ -216,25 +232,29 @@ KnotHolder::knot_ungrabbed_handler(SPKnot */*knot*/, guint)
unsigned int object_verb = SP_VERB_NONE;
- if (SP_IS_RECT(object))
+ // TODO extract duplicated blocks:
+ if (dynamic_cast<SPRect *>(object)) {
object_verb = SP_VERB_CONTEXT_RECT;
- else if (SP_IS_BOX3D(object))
+ } else if (dynamic_cast<SPBox3D *>(object)) {
object_verb = SP_VERB_CONTEXT_3DBOX;
- else if (SP_IS_GENERICELLIPSE(object))
+ } else if (dynamic_cast<SPGenericEllipse *>(object)) {
object_verb = SP_VERB_CONTEXT_ARC;
- else if (SP_IS_STAR(object))
+ } else if (dynamic_cast<SPStar *>(object)) {
object_verb = SP_VERB_CONTEXT_STAR;
- else if (SP_IS_SPIRAL(object))
+ } else if (dynamic_cast<SPSpiral *>(object)) {
object_verb = SP_VERB_CONTEXT_SPIRAL;
- else if (SP_IS_OFFSET(object)) {
- if (SP_OFFSET(object)->sourceHref)
- object_verb = SP_VERB_SELECTION_LINKED_OFFSET;
- else
- object_verb = SP_VERB_SELECTION_DYNAMIC_OFFSET;
+ } else {
+ SPOffset *offset = dynamic_cast<SPOffset *>(object);
+ if (offset) {
+ if (offset->sourceHref) {
+ object_verb = SP_VERB_SELECTION_LINKED_OFFSET;
+ } else {
+ object_verb = SP_VERB_SELECTION_DYNAMIC_OFFSET;
+ }
+ }
}
- DocumentUndo::done(object->document, object_verb,
- _("Move handle"));
+ DocumentUndo::done(object->document, object_verb, _("Move handle"));
}
}
@@ -247,12 +267,32 @@ void KnotHolder::add(KnotHolderEntity *e)
void KnotHolder::add_pattern_knotholder()
{
- if ((item->style->fill.isPaintserver())
- && SP_IS_PATTERN(item->style->getFillPaintServer()))
- {
- PatternKnotHolderEntityXY *entity_xy = new PatternKnotHolderEntityXY();
- PatternKnotHolderEntityAngle *entity_angle = new PatternKnotHolderEntityAngle();
- PatternKnotHolderEntityScale *entity_scale = new PatternKnotHolderEntityScale();
+ if ((item->style->fill.isPaintserver()) && dynamic_cast<SPPattern *>(item->style->getFillPaintServer())) {
+ PatternKnotHolderEntityXY *entity_xy = new PatternKnotHolderEntityXY(true);
+ PatternKnotHolderEntityAngle *entity_angle = new PatternKnotHolderEntityAngle(true);
+ PatternKnotHolderEntityScale *entity_scale = new PatternKnotHolderEntityScale(true);
+ entity_xy->create(desktop, item, this, Inkscape::CTRL_TYPE_POINT,
+ // TRANSLATORS: This refers to the pattern that's inside the object
+ _("<b>Move</b> the pattern fill inside the object"),
+ SP_KNOT_SHAPE_CROSS);
+
+ entity_scale->create(desktop, item, this, Inkscape::CTRL_TYPE_SIZER,
+ _("<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"),
+ SP_KNOT_SHAPE_SQUARE, SP_KNOT_MODE_XOR);
+
+ entity_angle->create(desktop, item, this, Inkscape::CTRL_TYPE_ROTATE,
+ _("<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"),
+ SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR);
+
+ entity.push_back(entity_xy);
+ entity.push_back(entity_angle);
+ entity.push_back(entity_scale);
+ }
+
+ if ((item->style->stroke.isPaintserver()) && dynamic_cast<SPPattern *>(item->style->getStrokePaintServer())) {
+ PatternKnotHolderEntityXY *entity_xy = new PatternKnotHolderEntityXY(false);
+ PatternKnotHolderEntityAngle *entity_angle = new PatternKnotHolderEntityAngle(false);
+ PatternKnotHolderEntityScale *entity_scale = new PatternKnotHolderEntityScale(false);
entity_xy->create(desktop, item, this, Inkscape::CTRL_TYPE_POINT,
// TRANSLATORS: This refers to the pattern that's inside the object
_("<b>Move</b> the pattern fill inside the object"),