index df013fdfc95516ee08924d1ae08cc194bffc89d0..70bc835bc6420f993b45fdf93b28626361f24495 100644 (file)
#include "sp-text.h"
#include "sp-tspan.h"
#include <libnr/nr-matrix-fns.h>
+#include <libnr/nr-point-fns.h>
#include "xml/repr.h"
#include "svg/svg.h"
#include "svg/svg-color.h"
#include "svg/css-ostringstream.h"
+#include "prefs-utils.h"
// Terminology:
SPGradient *
sp_gradient_fork_vector_if_necessary (SPGradient *gr)
{
+ // Some people actually prefer their gradient vectors to be shared...
+ if (prefs_get_int_attribute("options.forkgradientvectors", "value", 1) == 0)
+ return gr;
+
if (SP_OBJECT_HREFCOUNT(gr) > 1) {
SPDocument *doc = SP_OBJECT_DOCUMENT(gr);
Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
return stop;
}
-static guint32
-average_color (guint32 c1, guint32 c2, gdouble p = 0.5)
+guint32
+average_color (guint32 c1, guint32 c2, gdouble p)
{
guint32 r = (guint32) (SP_RGBA32_R_U (c1) * (1 - p) + SP_RGBA32_R_U (c2) * p);
guint32 g = (guint32) (SP_RGBA32_G_U (c1) * (1 - p) + SP_RGBA32_G_U (c2) * p);
}
-// FIXME: make general global function
-static double
-get_offset_between_points (NR::Point p, NR::Point begin, NR::Point end)
-{
- double length = NR::L2(end - begin);
- NR::Point be = (end - begin) / length;
- double r = NR::dot(p - begin, be);
-
- if (r < 0.0) return 0.0;
- if (r > length) return 1.0;
-
- return (r / length);
-}
-
-
/**
Set the position of point point_type of the gradient applied to item (either fill_or_stroke) to
p_w (in desktop coordinates). Write_repr if you want the change to become permanent.