- 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