Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
Todo List
Member compose
add concept check
Member compose
add concept check
Member curvature
claimed incomplete. Check.
Member curvature
claimed incomplete. Check.
Member Geom::BezierFitter::chord_length_parameterize (Point const d[], double u[], unsigned const len)
It's been reported that u[len - 1] can differ from 1.0 on some systems (amd64), despite it having been calculated as x / x where x is isFinite and non-zero.
Member Geom::BezierFitter::compute_hook (Point const &a, Point const &b, double const u, CubicBezier const &bezCurve, double const tolerance)
effic: Hooks are very rare. We could start by comparing distsq, only resorting to the more expensive L2 in cases of uncertainty.
Member Geom::BezierFitter::estimate_lengths (Point bezier[], Point const data[], double const u[], unsigned len, Point const &tHat1, Point const &tHat2)
Check whether this special-casing is necessary now that NewtonRaphsonRootFind handles non-positive denominator.
Member Geom::chord_length_parameterize (Point const d[], double u[], unsigned const len)
It's been reported that u[len - 1] can differ from 1.0 on some systems (amd64), despite it having been calculated as x / x where x is isFinite and non-zero.
Member Geom::compute_hook (Point const &a, Point const &b, double const u, Point const bezCurve[], double const tolerance)
effic: Hooks are very rare. We could start by comparing distsq, only resorting to the more expensive L2 in cases of uncertainty.
Member Geom::estimate_lengths (Point bezier[], Point const data[], double const u[], unsigned len, Point const &tHat1, Point const &tHat2)
Check whether this special-casing is necessary now that NewtonRaphsonRootFind handles non-positive denominator.
Class Geom::Interpolate::CubicBezierJohan
invent name for this class
Class Geom::Interpolate::CubicBezierSmooth
invent name for this class
Member Geom::line_intersection (Geom::Point const &n0, double const d0, Geom::Point const &n1, double const d1, Geom::Point &result)
Why not use existing but outcommented code below (HAVE_NEW_INTERSECTOR_CODE)?
Member Geom::Path::swap (Path &other) noexcept
Add noexcept specifiers for C++11
Member Inkscape::Colors::Space::COLOR_SCALE_INTERVALS
Consider rendering the color sliders asynchronously, which might make this interpolation unnecessary. We would then get full precision gradients.
Member Inkscape::CSS::OtherStatement
Add support for comments and @font-face statements.
Member Inkscape::Extension::Extension::set_state (state_t in_state)
Need some more error checking here!
Member Inkscape::Extension::get_file_save_extension (FileSaveMethod method)
no default extension set for Export? defaults to SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE is ok?
Member Inkscape::Extension::get_file_save_path (SPDocument *doc, FileSaveMethod method)
no default path set for Export?
Member Inkscape::Extension::Implementation::Script::open (Inkscape::Extension::Input *module, char const *filename, bool is_importing) override
Popup dialog here
Member Inkscape::Extension::Implementation::Script::save (Inkscape::Extension::Output *module, SPDocument *doc, gchar const *filename) override
Popup dialog here
Member Inkscape::Extension::Implementation::XSLT::save (Inkscape::Extension::Output *module, SPDocument *doc, char const *filename) override
Popup dialog here
Member Inkscape::Extension::Internal::PdfInput::open (Inkscape::Extension::Input *mod, char const *uri, bool is_importing) override

handle password

check if win32 unicode needs special attention

Member Inkscape::Extension::Internal::WpgInput::open (Inkscape::Extension::Input *mod, char const *uri, bool is_importing) override
Dialog here
Member Inkscape::Extension::ParamBool::value_to_string () const override
investigate. Returning a value that can then be appended would probably work better/safer.
Member Inkscape::IO::TempFilename::TempFilename (const std::string &pattern)
Popup dialog here
Member Inkscape::LivePathEffect::Effect::getCanvasIndicators (SPLPEItem const *lpeitem)
change return type to one pathvector, add all paths to one pathvector instead of maintaining a vector of pathvectors
Member Inkscape::LivePathEffect::LPEBendPath::doEffect_pwd2 (Geom::Piecewise< Geom::D2< Geom::SBasis > > const &pwd2_in) override
or throw an exception instead? might be better to throw an exception so that the UI can display an error message or smth
Member Inkscape::LivePathEffect::LPEPowerMask::doOnApply (SPLPEItem const *lpeitem) override
Investigate the cause of this. For example, this happens when copy pasting an object with LPE applied. Probably because the object is pasted while the effect is not yet pasted to defs, and cannot be found.
Member Inkscape::LivePathEffect::LPEPowerStroke::LPEPowerStroke (LivePathEffectObject *lpeobject)
offset_points are initialized with empty path, is that bug-save?
Member Inkscape::LivePathEffect::PowerStrokePointArrayParamKnotHolderEntity::knot_set (Geom::Point const &p, Geom::Point const &origin, guint state) override
how about item transforms???
Member Inkscape::LivePathEffect::sp_remove_powerclip (Inkscape::Selection *sel)
Investigate the cause of this. For example, this happens when copy pasting an object with LPE applied. Probably because the object is pasted while the effect is not yet pasted to defs, and cannot be found.
Member Inkscape::LivePathEffect::sp_remove_powermask (Inkscape::Selection *sel)
Investigate the cause of this. For example, this happens when copy pasting an object with LPE applied. Probably because the object is pasted while the effect is not yet pasted to defs, and cannot be found.
Member Inkscape::ObjectSet::setReprList (std::vector< XML::Node * > const &list)
How about adding setIdList(std::vector<Glib::ustring> const &list)
Member Inkscape::ObjectSnapper::_collectPaths (Geom::Point p, Inkscape::SnapSourceType const source_type, bool const &first_point) const
investigate why Geom::Point p is passed in but ignored.
Member Inkscape::Preferences::setBool (Glib::ustring const &pref_path, bool value)
Boolean values should be stored as "true" and "false", but this is not possible due to an interaction with event contexts. Investigate this in depth.
Member Inkscape::UI::ControlPoint::setPosition (Geom::Point const &pos)
Investigate whether this method should be protected
Member Inkscape::UI::ControlPoint::State
resolve this to be in sync with the five standard GTK states.
Class Inkscape::UI::ControlPointSelection
Correct iterators (that don't expose the connection list)
Member Inkscape::UI::Dialog::DocumentProperties::build_gridspage ()
FIXME: gray out snapping when grid is off. Dissenting view: you want snapping without grid.
Member Inkscape::UI::Dialog::is_url (char const *p)
FIXME: I'm not sure if this applies to SVG as well, but CSS2 says any URIs in property values must start with 'url('.
Member Inkscape::UI::PathManipulator::_createGeometryFromControlPoints (bool alert_LPE=false)
note that _path can be an Inkscape::LivePathEffect::Effect* too, kind of confusing, rework member naming?
Member Inkscape::UI::Tools::PencilTool::_finishEndpoint ()
fixme: I'd like remove red reset from concat colors (lauris). Still not sure, how it will make most sense.
Member Inkscape::UI::Tools::PencilTool::_fitAndSplit ()
fixme:
Member Inkscape::UI::Tools::PencilTool::_handleButtonRelease (ButtonReleaseEvent const &event)
fixme: Clean up what follows (Lauris)
Member Inkscape::UI::Tools::PenTool::_finishSegment (Geom::Point p, guint state)
fixme:
Member Inkscape::UI::Tools::ToolBase::item_handler (SPItem *item, CanvasEvent const &event)
Fixme: do context sensitive popup menu on items.
Member Inkscape::UI::Tools::ToolBase::root_handler (CanvasEvent const &event)
Remove redundant /value in preference keys
Member Inkscape::UI::Widget::Scalar::setIncrements (double step, double page)
Remove the second parameter - deprecated
Member Inkscape::XML::Node::attributeList () const =0
This method should return std::map<Glib::Quark const, char const *> or something similar with a custom allocator
Member is_straight_curve (Geom::BezierCurve const &c)
un-inline this function
Member is_url (char const *p)
FIXME: I'm not sure if this applies to SVG as well, but CSS2 says any URIs in property values must start with 'url('.
Member objects_query_fontnumbers (const std::vector< SPItem * > &objects, SPStyle *style_res)

FIXME: we assume non-% units here

FIXME: we assume non-% units here

FIXME: we assume non-% units here

Member pages_skeleton []
Should we include the JIS B series (used in Japan) (JIS B0 is sometimes called JB0, and similarly for JB1 etc)? Should we exclude B7–B10 and A7–10 to make the list smaller ? Should we include any of the ISO C, D and E series (see below) ?
Member Path::Fill (Shape *dest, int pathID=-1, bool justAdd=false, bool closeIfNeeded=true, bool invert=false)
"the graph is drawn exactly in the manner opposite"? Does this mean the edges of the directed graph are reversed?
File rdf.cpp
move these to xml/ instead of dialogs/
Member sp_desktop_set_color (SPDesktop *desktop, Color const &color, bool is_relative, bool fill)
relative color setting
Member sp_desktop_set_style (Inkscape::ObjectSet *set, SPDesktop *desktop, SPCSSAttr *css, bool change=true, bool write_current=true, bool switch_style=false)
FIXME: in set_style, compensate pattern and gradient fills, stroke width, rect corners, font size for the object's own transform so that pasting fills does not depend on preserve/optimize.
Member sp_object_ref (SPObject *object, SPObject *owner=nullptr)
need to move this to be a member of SPObject.
Member sp_object_unref (SPObject *object, SPObject *owner=nullptr)
need to move this to be a member of SPObject.
Member sp_offset_distance_to_original (SPOffset *offset, Geom::Point px)
Awfully damn stupid method: uncross the source path EACH TIME you need to compute the distance. The good way to do this would be to store the uncrossed source path somewhere, and delete it when the context is finished. Hopefully this part is much faster than actually computing the offset (which happen just after), so the time spent in this function should end up being negligible with respect to the delay of one context.
Member sp_repr_compare_position (Inkscape::XML::Node const *first, Inkscape::XML::Node const *second)
Rewrite this function's description to be understandable
Member sp_repr_sel_eng ()
Check whether we need to register any pseudo-class handlers. libcroco has its own default handlers for first-child and lang.
Member sp_shape_update_marker_view (SPShape *shape, Inkscape::DrawingItem *ai)
figure out what to do when both 'marker' and for instance 'marker-end' are set.
Member sp_style_paint_server_ref_modified (SPObject *obj, unsigned, SPStyle *style)

fixme: We have to use object_modified flag, because parent flag is only available downstreams.

fixme: I do not know, whether it is optimal - we are forcing reread of everything (Lauris)

Member SPCSSDisplay
more display types
Member SPDesktop::guides_active
Fixme: This has to be implemented in different way
Class SPDrawAnchor
Make this a regular knot, this will allow setting statusbar tips.
Class SPGradient
fixme: Implement more here (Lauris)
Member SPGradient::child_added (Inkscape::XML::Node *child, Inkscape::XML::Node *ref) override
Fixme: should we schedule "modified" here?
Member SPGradient::gradientRefChanged (SPObject *old_ref, SPObject *ref, SPGradient *gr)
Fixme: what should the flags (second) argument be? *‍/
Member SPGradient::repr_clear_vector ()
fixme: This should work, unless we make gradient into generic group.
Member SPGradient::SPGradient ()
Fixme: reprs being rearranged (e.g. via the XML editor) may require us to clear the state.
Member SPILength::merge (const SPIBase *const parent) override
FIXME: Have separate ex ratio parameter. Get x height from libnrtype or pango.
Member SPILength::read (gchar const *str) override
fixme: Move this to standard place (Lauris)
Member SPItem::adjust_gradient (Geom::Affine const &postmul, bool set=false)
FIXME: convert back to bbox units after transforming with the item, so as to preserve the original units.
Member SPItem::doWriteTransform (Geom::Affine const &transform, Geom::Affine const *adv=nullptr, bool compensate=true)
FIXME: add the same else branch as for gradients below, to convert patterns to userSpaceOnUse as well recursively compensate gradient fill if it's not to be transformed
Member SPLPEItem::performOnePathEffect (Geom::PathVector &curve, SPShape *current, Inkscape::LivePathEffect::Effect *lpe, bool is_clip_or_mask=false)
Investigate the cause of this. Not sure, but I think this can happen when an unknown effect type is specified...
Member SPLPEItem::performPathEffect (Geom::PathVector &curve, SPShape *current, bool is_clip_or_mask=false)
Investigate the cause of this. For example, this happens when copy pasting an object with LPE applied. Probably because the object is pasted while the effect is not yet pasted to defs, and cannot be found.
Member SPObject::getAttribute (char const *name) const
fixme: Exception if object is NULL? *‍/
Member SPObject::getTagName () const
fixme: Exception if object is NULL? *‍/
Member SPObject::removeAttribute (char const *key)
fixme: Exception if object is NULL? *‍/
Member SPObject::requestOrphanCollection ()
This is a temporary hack added to make fill&stroke rebuild its gradient list when the defs are vacuumed. gradient-vector.cpp listens to the modified signal on defs, and now we give it that signal. Mental says that this should be made automatic by merging SPObjectGroup with SPObject; SPObjectGroup would issue this signal automatically. Or maybe just derive SPDefs from SPObjectGroup?
Member SPObject::setAttribute (Inkscape::Util::const_char_ptr key, Inkscape::Util::const_char_ptr value)
fixme: Exception if object is NULL? *‍/
Member SPObject::updateDisplay (SPCtx *ctx, unsigned int flags)

in case of catching an exception we need to inform the user somehow that the document is corrupted maybe by implementing an document flag documentOk or by a modal error dialog

I am not sure whether we should check only propagated flag. We are currently assuming that style parsing is done immediately. I think this is correct (Lauris).

Member SPObject::write (Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags)
I'm not sure what to do in this case. Bug #1165868 suggests that it can arise, but the submitter doesn't know how to do so reliably. The main two options are either leave repr's style attribute unchanged, or explicitly clear it. Must also consider what to do with property attributes for the element; see below.
Member SPOffset::write (Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, unsigned flags) override
Fixme: we may replace these attributes by inkscape:offset="cx cy exp revo rad arg t0"
Class SPSpiral
Should I remove these attributes?
Member SPSpiral::fitAndDraw (Geom::Path &c, double dstep, Geom::Point darray[], Geom::Point const &hat1, Geom::Point &hat2, double *t) const

Get the function itself to decide what value of d to use next: ensure that we move at least 0.25 * stroke width, for example. The derivative (as used for get_tangent before normalization) would be useful for estimating the appropriate d value. Or perhaps just start with a small dstep and scale by some small number until we move >= 0.25 * stroke_width. Must revert to the original dstep value for next iteration to avoid the problem mentioned above.

We should use better algorithm to specify maximum error.

Member SPSpiral::getTangent (double t) const

I haven't checked how important it is for ret to be very near unit length; we could get rid of the below.

Check that this isn't being too hopeful of the hypot function. E.g. test with numbers around 2**-1070 (denormalized numbers), preferably on a few different platforms. However, njh says that the usual implementation does handle both very big and very small numbers.

Member SPSpiral::set (SPAttr key, char const *value) override

FIXME: We still need some bounds on arg, for numerical reasons. E.g., we don't want inf or NaN, nor near-infinite numbers. I'm inclined to take modulo 2*pi. If so, then change the knot editors, which use atan2 - revo*2*pi, which typically results in very negative arg.

Have shared constants for the allowable bounds for attributes. There was a bug here where we used -1.0 as the minimum (which leads to NaN via, e.g., pow(-1.0, 0.5); see sp_spiral_get_xy for requirements.

fixme: we should really collect updates

FIXME: check that value looks like a (finite) number. Create a routine that uses strtod, and accepts a default value (if strtod finds an error). N.B. atof/sscanf/strtod consider "nan" and "inf" to be valid numbers.

Member SPSpiral::setPosition (double cx, double cy, double exp, double revo, double rad, double arg, double t0)
Consider applying CLAMP or adding in-bounds assertions for some of these parameters.
Member SPStop::offset
fixme: Should be SPSVGPercentage
Member SPStyle::_mergeDecl (CRDeclaration const *decl, SPStyleSrc const &source)
effic: Test whether the property is already set before trying to convert to string. Alternatively, set from CRTerm directly rather than converting to string.
Member SPStyle::_mergeObjectStylesheet (SPObject const *object, SPDocument *document)
Check what errors can occur, and handle them properly.
Member SPStyle::readIfUnset (SPAttr id, char const *val, SPStyleSrc const &source=SPStyleSrc::STYLE_PROP)

See comment for SPAttr::CLIP_PATH

This is a workaround. Inkscape only supports 'clip-path' as SVG attribute, not as style property. By having both CSS and SVG attribute set, editing of clip-path will fail, since CSS always overwrites SVG attributes. Fixes Bug #324849

Member vectors_are_clockwise (Geom::Point A, Geom::Point B, Geom::Point C)
FIXME: This can be done using linear operations, more stably and faster. method: transform A and C into B's space, A should be negative and B should be positive in the orthogonal component. I think this is equivalent to dot(A, rot90(B))*dot(C, rot90(B)) == -1. – njh