~imz/inkscape/lav@altlinux

« back to all changes in this revision

Viewing changes to inkscape/src/sp-offset.cpp

  • Committer: Vitaly Lipatov
  • Date: 2013-02-11 16:18:39 UTC
  • Revision ID: git-v1:15c9c30ef309c7ab1b0d9479c2058a0668e6041f
just import inkscape-0.48.4.tar.bz2 with rpmgs script

Show diffs side-by-side

added added

removed removed

Lines of Context:
831
831
        for (int i = 0; i < theRes->numberOfPoints(); i++)
832
832
        {
833
833
            if (theRes->getPoint(i).totalDegree() > 0)
834
 
            {
 
834
        {
835
835
                Geom::Point nx = theRes->getPoint(i).x;
836
836
                Geom::Point nxpx = px-nx;
837
837
                double ndist = sqrt (dot(nxpx,nxpx));
1025
1025
{
1026
1026
    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
1027
1027
    guint mode = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_PARALLEL);
1028
 
    if (mode == SP_CLONE_COMPENSATION_NONE) return;
 
1028
 
 
1029
    SPItem *item = SP_ITEM(self);
1029
1030
 
1030
1031
    Geom::Matrix m(*mp);
1031
 
    if (!(m.isTranslation())) return;
 
1032
    if (!(m.isTranslation()) || mode == SP_CLONE_COMPENSATION_NONE) {
 
1033
        self->sourceDirty=true;
 
1034
        item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
 
1035
        return;
 
1036
    }
1032
1037
 
1033
1038
    // calculate the compensation matrix and the advertized movement matrix
1034
 
    SPItem *item = SP_ITEM(self);
 
1039
    sp_object_read_attr(item, "transform");
1035
1040
 
1036
 
    Geom::Matrix compensate;
 
1041
    Geom::Matrix t = self->transform;
 
1042
    Geom::Matrix offset_move = t.inverse() * m * t;
1037
1043
    Geom::Matrix advertized_move;
1038
1044
 
1039
 
    if (mode == SP_CLONE_COMPENSATION_UNMOVED) {
1040
 
        compensate = Geom::identity();
 
1045
    if (mode == SP_CLONE_COMPENSATION_PARALLEL) {
 
1046
        offset_move = offset_move.inverse() * m;
 
1047
        advertized_move = m;
 
1048
    } else if (mode == SP_CLONE_COMPENSATION_UNMOVED) {
 
1049
        offset_move = offset_move.inverse();
1041
1050
        advertized_move.setIdentity();
1042
 
    } else if (mode == SP_CLONE_COMPENSATION_PARALLEL) {
1043
 
        compensate = m;
1044
 
        advertized_move = m;
1045
1051
    } else {
1046
1052
        g_assert_not_reached();
1047
1053
    }
1048
1054
 
1049
 
    item->transform *= compensate;
 
1055
    self->sourceDirty = true;
1050
1056
 
1051
1057
    // commit the compensation
 
1058
    item->transform *= offset_move;
1052
1059
    sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, &advertized_move);
1053
1060
    SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
1054
1061
}
1071
1078
}
1072
1079
 
1073
1080
static void
1074
 
sp_offset_source_modified (SPObject */*iSource*/, guint /*flags*/, SPItem *item)
 
1081
sp_offset_source_modified (SPObject */*iSource*/, guint flags, SPItem *item)
1075
1082
{
1076
1083
    SPOffset *offset = SP_OFFSET(item);
1077
 
    offset->sourceDirty=true;
1078
 
    refresh_offset_source(offset);
1079
 
    sp_shape_set_shape ((SPShape *) offset);
 
1084
    offset->sourceDirty = true;
 
1085
    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG)) {
 
1086
        offset->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
 
1087
    }
1080
1088
}
1081
1089
 
1082
1090
static void
1107
1115
    orig->LoadPathVector(curve->get_pathvector());
1108
1116
    curve->unref();
1109
1117
 
 
1118
    if (!item->transform.isIdentity()) {
 
1119
        gchar const *t_attr = SP_OBJECT_REPR(item)->attribute("transform");
 
1120
        if (t_attr) {
 
1121
            Geom::Matrix t;
 
1122
            if (sp_svg_transform_read(t_attr, &t)) {
 
1123
                orig->Transform(t);
 
1124
            }
 
1125
        }
 
1126
    }
1110
1127
 
1111
1128
    // Finish up.
1112
1129
    {