Regarding the serialization of Spiro control points
by Fred Brennan
Greetings,
I write from the FontForge project. Of particular interest to me is the Spiro
spline feature, which was originated around ten years ago by Raph Levien.
One thing I'd like to add, (which would benefit both our projects,) is the
ability of FontForge to understand the Inkscape Spiro serialization format.
However, there are several things about the format which to me as an outsider
appear to be defects serious enough that I have no idea how to even *import*
these splines correctly, much less export our Spiro splines to this format. I
would very much like to support the _de facto_ standard Inkscape has
originated of supporting Spiro in SVG, but I am lost.
George Williams, FontForge's original author, noticed this defect over eleven
years ago.[1] Things are virtually unchanged since then, I checked `git
blame`.
Spiro has five point types, not including beginning and ending points. They
are:
* G4 curve (o)
* G2 curve (c)
* Corner (v)
* Left Constraint ([)
* Right Constraint (])
The ASCII single letters are the normal method of Spiro serialization, as
championed by Raph Levien and by us in FontForge.
Inkscape seems to create what I will call a "pseudo-SVG path". So, it is not
really an SVG path, but rather is an SVG path which undergoes transformation
into the typical Spiro format. Inkscape stores this in the "original-d"
attribute.
So, given a Bezier spline with control points defined as (x, y, c1, c2),
Inkscape interprets a control point with only (x, y) to be a corner, meanwhile
a control point with all four is a G4 curve, and (x, y, c1, NULL) is a left
constraint while (x, y, NULL, c2) is a right constraint.
I can probably overcome this, although George Williams was right to be
skeptical of this format. There is no way I can see to define a G2 curve in
this strange "original-d" format.
Thus, this email. I write to ask a few things. I suppose first of all, what
are the chances that we can convince you guys to store Spiro splines in
plate[2] format, or another widely accepted Spiro serialization format?
Second, if we cannot convince you to do that, how do I export FontForge spiros
which contain G2 control points to Inkscape's original-d format? It's not
possible, yes? So should I just silently fail and save them as G4? The curves
will not be the same if I do that. Should I disallow export to SVG w/Spiro if
glyph contains G2 control point? That seems a steep cost that will just
confuse my users, so perhaps I should abandon the whole thing if it comes to
that.
Cordial regards,
Fredrick Brennan (@ctrlcctrlv)
[1]: https://narkive.com/63FADpG3.4
[2]: https://levien.com/garden/ppedit/README, section "Plate files"
1 year, 2 months
Developer Team Budget
by Martin Owens
Dear Developer team,
Thank you to everyone who made the developer meeting today; we talked a
lot about what the budget should look like from the developer team. I
have comprised the ideas here which I will be bringing to the next
board meeting to be held on June 4th 2021 (
https://inkscape.org/cals/event/2/)
Current items to be requested immediately:
* The Developer team requests a General Administrator who can take
care of many of the organisational tasks which we currently struggle
to. This is deemed more important than any funding for specific
features. I'd like to invite everyone to join me for a meeting to flesh
out what this would look like, we'll use previous work as a base and
work from there. Please come to BigBlueButton next Sunday 30th May at
17:00UTC (https://inkscape.org/cals/event/25/) to make sure our
proposal is detailed enough.
* We would like to budget $5k on macOS speed problems; this is to be
spent on analysis first, and then solutions second. The whole developer
team recognises how dire the situation is with René specifically saying
that without a fix we should not release for macOS in the future.
Future budget requests which we do not have a consensus for, or details
are missing:
* CMYK support; Tav would like this, developers feel it's not
important enough. A user study would be useful to know for sure.
* PathFinder; Taking over, or working with the Linux foundation for
their Rust based pathfinder is a great way to bring GPU rendering to
Inkscape. Marc is to contact the linux foundation and Linkmauve about
collaboration or taking over the project.
* ARM Machine for René; If we continue to develop macOS, René will
need one of the newer ARM based macOS machine which would be set up to
do CI builds. Improving the ability to check and build testing builds
for macOS.
Thanks everyone for attending, we had quite a lot of the developer team
there today and a lot of students so I feel good that we got to see a
lot of different opinions. But let me know in this thread if you have
details to add, or can't make the above meeting and want to make sure
something is included.
Best Regards, Martin Owens
Developer Team Hat
1 year, 12 months
TODAY: Meeting; hiring an administration position in Inkscape
by Martin Owens
Hello everyone,
We have scheduled today's meeting to discuss the specific details of
hiring an administrator who can help organise the inkscape project.
This is a budgeting request from the Developer Team to alleviate a lot
of the stress from running the project and better organise.
Starting Questions
* Should they be familiar with the project?
* They probably shouldn't not be a developer?
* Should they be part time or full time?
* Should we ask the SFC to fill the role for us?
The goal is to flesh out the request so we can offer the board a set of
requirements and desires around what we (as the developer team) would
like to have.
Calendar: https://inkscape.org/cals/event/25/
Date/Time: TODAY, 1:00PM EDT (see above link for your local time)
Video Link: https://digimedia1.r2.enst.fr/b/mar-9wm-vj2
Best Regards, Martin Owens
Developer Hat
2 years
Re: Crash during Build - invalid application of ‘sizeof’ to incomplete type ‘SPCurve’
by Marc Jeanmougin
Hi,
I can confirm that gcc 7 appears to be too old to compile a recent
Inkscape, sorry.
Please use a newer compiler (gcc 9 (or later) works, or clang)
--
Marc
Le 28/05/2021 à 01:17, fi(a)igh.de a écrit :
> Dear Marc,
>
>
>
> On Fri, May 28, 2021 at 12:03:11AM +0200, Marc Jeanmougin wrote:
>> Hi and thanks for the report! What's your compiler and OS ?
> - the compilers are gcc-7 and g++-7 (version 7.5.0)
> - OS: OpenSuSE 15.2, Kernel 5.3.18
>
> - below is also the output from cmake
>
> Thanks and best regards
>
> Torsten
>
> -- Creating build files in: /vol/pub/inkscape/linux/git/inkscape/build
> -- Found poppler: /usr/lib64/libpoppler.so
> -- Found poppler-glib: /usr/lib64/libpoppler-glib.so
> -- Found cairo-svg: /usr/lib64/libcairo.so
> -- Found poppler-cairo: /usr/lib64/libcairo.so
> -- Found Potrace: /usr/lib64/libpotrace.so
> -- Checking for modules 'gtkmm-3.0>=3.24;gdkmm-3.0>=3.24;gtk+-3.0>=3.24;gdk-3.0>=3.24'
> -- Found gtkmm-3.0, version 3.24.2
> -- Found gdkmm-3.0, version 3.24.2
> -- Found gtk+-3.0, version 3.24.20
> -- Found gdk-3.0, version 3.24.20
> -- Using gspell
> -- Found Boost: /usr/include (found suitable version "1.66.0", minimum required is "1.19.0") found components: filesystem system
> -- Checking for module 'readline'
> -- No package 'readline' found
> -- Did not find GNU Readline
> -- Checking for module 'ImageMagick++<=7'
> -- No package 'ImageMagick++' found
> -- Checking for module 'GraphicsMagick++'
> -- Found GraphicsMagick++, version 1.3.35
> -- Found gettext + msgfmt to convert language files. Translation enabled
> -- Found xgettext. inkscape.pot will be re-created if missing.
> -- Creating build files in: /vol/pub/inkscape/linux/git/inkscape/build
> -- Generating header and sourcefiles from sp-marshal.list (Glib-Marshal)
> INFO: Reading /vol/pub/inkscape/linux/git/inkscape/src/helper/sp-marshal.list...
> INFO: Reading /vol/pub/inkscape/linux/git/inkscape/src/helper/sp-marshal.list...
> -- sp-marshal.h unchanged
> -- Found Boost: /usr/include (found suitable version "1.66.0", minimum required is "1.60")
> -- cython: FOUND
> -- Checking for module 'gtk+-3.0'
> -- Found gtk+-3.0, version 3.24.20
> -- Ragel NOT found. Using stale svg-path-parser.cpp.
> INKSCAPE_DIST_PREFIX: inkscape-1.2-dev_2021-05-25_5448704355
> ------------------------------------------------------------------------
> Configuration Summary
> ------------------------------------------------------------------------
> PROJECT_NAME: inkscape
> INKSCAPE_VERSION: 1.2-dev
> INKSCAPE_DIST_PREFIX: inkscape-1.2-dev_2021-05-25_5448704355
>
> CMAKE_BINARY_DIR: /vol/pub/inkscape/linux/git/inkscape/build
> CMAKE_INSTALL_PREFIX: /vol/opt/inkscape-5448704355e03a97d2838e1ba30272db335f0dbb
> CMAKE_INSTALL_LIBDIR: lib64
> PACKAGE_LOCALE_DIR share/locale
> CMAKE_SYSTEM_NAME: Linux
> CMAKE_SYSTEM_VERSION: 5.3.18-lp152.75-default
> CMAKE_SYSTEM_PROCESSOR: x86_64
> CMAKE_C_COMPILER: /usr/bin/cc
> CMAKE_CXX_COMPILER: /usr/bin/c++
> CMAKE_BUILD_TYPE: Release
>
> ENABLE_LCMS: ON
> ENABLE_POPPLER: ON
> ENABLE_POPPLER_CAIRO: ON
> WITH_GNU_READLINE: OFF
> WITH_DBUS: OFF
> WITH_GSPELL: ON
> WITH_IMAGE_MAGICK: OFF
> WITH_GRAPHICS_MAGICK: ON
> WITH_LIBCDR: ON
> WITH_LIBVISIO: ON
> WITH_LIBWPG: ON
> WITH_NLS: ON
> WITH_OPENMP: ON
> WITH_JEMALLOC: OFF
> WITH_INTERNAL_2GEOM: ON
> WITH_PROFILING: OFF
> BUILD_TESTING: ON
> ------------------------------------------------------------------------
>
>
>
>
>>
>>
>> On 27/05/2021 19:37, fi(a)igh.de wrote:
>>> Dear Maintainers,
>>>
>>> after pulling revision 5448704355e03a97d2838e1ba30272db335f0dbb
>>> I try to build inkscape according to https://inkscape.org/develop/getting-started/
>>> but I receive the following error:
>>>
>>> In file included from /usr/include/c++/7/memory:80:0,
>>> from /vol/pub/inkscape/linux/git/inkscape/src/document.h:25,
>>> from /vol/pub/inkscape/linux/git/inkscape/src/object/sp-use.cpp:27:
>>> /usr/include/c++/7/bits/unique_ptr.h: In instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = SPCurve]’:
>>> /usr/include/c++/7/bits/unique_ptr.h:263:17: required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = SPCurve; _Dp = std::default_delete<SPCurve>]’
>>> /vol/pub/inkscape/linux/git/inkscape/src/object/sp-use-reference.h:45:50: required from here
>>> /usr/include/c++/7/bits/unique_ptr.h:76:22: error: invalid application of ‘sizeof’ to incomplete type ‘SPCurve’
>>> static_assert(sizeof(_Tp)>0,
>>> ^
>>> My questions:
>>> - are there simple means to avoid that error?
>>> - what information about my building environment is required?
>>>
>>> BTW: I am trying to build Inkscape because the AppImage crashes.
>>>
>>> Thanks and best regards
>>>
>>>
>>> Torsten
>>>
>>>
>
>
>
2 years
Crash during Build - invalid application of ‘sizeof’ to incomplete type ‘SPCurve’
by fi@igh.de
Dear Maintainers,
after pulling revision 5448704355e03a97d2838e1ba30272db335f0dbb
I try to build inkscape according to https://inkscape.org/develop/getting-started/
but I receive the following error:
In file included from /usr/include/c++/7/memory:80:0,
from /vol/pub/inkscape/linux/git/inkscape/src/document.h:25,
from /vol/pub/inkscape/linux/git/inkscape/src/object/sp-use.cpp:27:
/usr/include/c++/7/bits/unique_ptr.h: In instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = SPCurve]’:
/usr/include/c++/7/bits/unique_ptr.h:263:17: required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = SPCurve; _Dp = std::default_delete<SPCurve>]’
/vol/pub/inkscape/linux/git/inkscape/src/object/sp-use-reference.h:45:50: required from here
/usr/include/c++/7/bits/unique_ptr.h:76:22: error: invalid application of ‘sizeof’ to incomplete type ‘SPCurve’
static_assert(sizeof(_Tp)>0,
^
My questions:
- are there simple means to avoid that error?
- what information about my building environment is required?
BTW: I am trying to build Inkscape because the AppImage crashes.
Thanks and best regards
Torsten
--
------------------------------------------------------------------------
Torsten Finke
fi(a)igh.de
------------------------------------------------------------------------
2 years
Inkscape 1.1 released
by Marc Jeanmougin
================
= Inkscape 1.1 =
================
Inkscape version 1.1 is now released.
----------------
You can watch our showcase at: https://inkscape.org/release-video-1-1/
and download it for your platform on:
https://inkscape.org/release/inkscape-1.1/
then, if you want to support Inkscape, donate to the project at
https://inkscape.org/support-us/
----------------
Inkscape 1.1 is the latest major release of Inkscape, following one year
of development after the 1.0 major release.
The highlights of this release are:
* A Welcome dialog, where the look of Inkscape can be selected, and
some choices for the new document's size or file to open are available
* A Command palette that opens when the '?' key is pressed, that allows
to search and use many functions without having to use a keyboard
shortcut or going through the menus
* It is now possible to copy, cut and paste parts of paths with the
Node tool
* The dialog docking system has been rewritten, which resolves many
issues with Inkscape's docked dialogs and allows you to dock dialogs on
either side of the screen
* New Outline Overlay mode that displays object outlines while also
showing their real colors
* Preferences options are now easier to find by using the new search field
* It is no longer necessary to remember to click on 'Export' in the
PNG
Export dialog, as the exporting will already happen after the click on
'Save' in the file selection dialog.
* Export as JPG, TIFF, optimized PNG and WebP directly from Inkscape
* When pasting a copied object, Inkscape now pastes it directly on top
of the currently selected object by default
* An extension for updating extensions and installing additional
extensions, called the Extension Manager (currently in beta stage)
We also introduced a long list of new features outlined in detail and
illustrated at
https://media.inkscape.org/media/doc/release_notes/1.1/Inkscape_1.1.html .
-----------------------------
Join an Inkscape project team
-----------------------------
Inkscape is always happy to welcome new contributors in various areas:
code[1], translation[2], UX[3], bug triaging[4], or even outreach[5]!
The main ways to get involved are listed on https://inkscape.org/contribute/
The preferred points of contact are:
[1]
https://lists.inkscape.org/postorius/lists/inkscape-devel.lists.inkscape....
+ https://chat.inkscape.org/channel/team_devel (or freenode/#inkscape-devel)
[2] https://chat.inkscape.org/channel/team_translation
[3] https://chat.inkscape.org/channel/team_ux
[4] https://chat.inkscape.org/channel/bug_migration
[5] https://chat.inkscape.org/channel/team_vectors
A warm thanks to everyone involved in making this release possible!
--
The Inkscape team
2 years
New dependency for Inkscape 1.2: python3-cssselect
by Jonathan Neuhauser
Dear all,
Over the past week, I've implemented CSS support in the extensions
repository. This means that if an extension asks what color an object
is, it will get the correct answer regardless of where the style is
defined, if it is overwritten or !important or defined by a shorthand
somewhere in the cascade. It also introduces default values for common
attributes as well a new functionality to get a parsed value (e.g. the
reference to a gradient object instead of a string with its id) or to
set an attribute to a parsed value.
This feature has been merged this morning and will be released with
*Inkscape 1.2*. Check out the branch here:
https://gitlab.com/inkscape/extensions/-/merge_requests/294
In order to avoid writing a CSS3 parser, I had to introduce a new
dependency for parsing, computation of a style's specificity and the
conversion of a selector to xpath. This is handled by the python package
https://github.com/scrapy/cssselect.
I've already opened MRs to add this dependency to deb, snap, appimage
and windows packaging
(https://gitlab.com/inkscape/inkscape/-/merge_requests/3239,
https://gitlab.com/inkscape/inkscape/-/merge_requests/3238). If you are
responsible for packaging Inkscape in some way, please have a look if I
did this correctly or missed a packaging type (MacOS is still missing,
for example).
Again, this is not relevant for the upcoming 1.1 release.
Best regards,
Jonathan
2 years