Closed justvanrossum closed 1 year ago
I managed to rewrite my code so it doesn't rely on typeface.getVariationDesignPosition()
anymore, and fontargs.setVariationDesignPosition()
works perfectly, so this is no longer a blocking issue for me. Feel free to close or reclassify as feature request.
Thanks for reproducing this, let's keep this issue open since the fundamental issue isn't yet resolved
This is likely due to an internal fontconfig
issue. Need to check if fontconfig
version matters.
FWIW: as of 87.1, this issue persists on Linux, but seems to have been resolved on Win and Mac.
Not a fontconfig issue but a freetype issue. According to Skia's c++ source code, this routine has at least 3 different implementations - directwrite, coretext, freetype, being 3 of them... likely freetype too old on the wheel.
I think I know exactly why this is broken - if you get the wheel prebuilt skia-python binary from pip, it uses the "locked" freetype version bundled with m87. So until and unless you build skia-python entirely from source, and make it depends on your system's up-to-date freetype (I have such an option in my private fork), or you switch to a much later skia (with a much later Locked freetype version), you are stuck with this bug.
The line to change is around https://github.com/kyamagu/skia-python/blob/5d927433afb607bff4a97d9a7e5b792b83ecedce/scripts/build_Linux.sh#L57 , and also additional linker flags in the main setup.py. I see the pip-installed skia-python m87 has a private copy of very old freetype (2.8, i think - I dug it up properly and commented elsewhere) rpath'ed in its own private directory under pythonlib.
Actually you might be able to fix it in the pip wheel, by patching skia's DEP file, to bundle a different freetype version.
Those are relatively new routines in freetype so the version of freetype definitely matters.
My system's freetype is up to date but I ended up having to make such a change to make m116 build in CI https://github.com/kyamagu/skia-python/pull/196/commits/8cf897ff91f329961c7e5b3ad68dd82c3c0dc63e - this might give you some idea what to do if you want to fix m87.
This seems to be fixed with 117bx (and possibly with 116b2) .
Describe the bug The return value of
typeface.getVariationDesignPosition()
contains a stray item, and does not give the expected result at all on Linux.To Reproduce I have created a tiny test project here: https://github.com/justvanrossum/skia-vf-bug
Expected behavior I expected the test script to output this:
This should show the VF design position of the typeface (in this case the default).
However, on macOS and Windows the output is:
That is easy to work around. However, on Linux it outputs this:
Desktop:
Additional context I alluded to this problem in #112, and in justvanrossum/drawbot-skia/issues/1