Re: OpenType font variations and cairo
Behdad Esfahbod <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <CAF63+7Wr=KnZ4+NN1XxUfJ0fApt6mBQx9E_GX41EU5yn8sHz0w@mail.gmail.com> |
Fixed the div-by-zero. Thanks. On Sat, Sep 16, 2017 at 10:12 PM, Adrian Johnson <[email protected]> wrote: > On 17/09/17 02:57, Matthias Clasen wrote: > > On Fri, Sep 15, 2017 at 6:51 AM, Adrian Johnson <[email protected] > > <mailto:[email protected]>> wrote: > > > > > > > > We really need a test case for this. It is hard to review code I > > can't test. > > > > > > I've added a minimal testcase here: > > > > https://github.com/matthiasclasen/cairo/tree/wip/ > matthiasc/font-variations > > > > It promptly found a freetype bug :-) > > I built the latest freetype, Behdad's fontconfig branch, and your branch. > > First problem I had was the variation test ignores the status. See > attached patch. > > After fixing that and ensuring I had the correct font installed I got a > crash in fontconfig. > > fcfreetype.c line 1313 divide by zero > > 1312: double default_value = master->axis[i].def / (double) (1 << 16); > 1313: double mult = value / default_value; > > The Adobe Variable Font Prototype font has a 'CNTR' axis with a default > value of 0. > > Some more comments on your patch: > > In cairo-font-options.c you are adding a new function > _intern_string_hash() which is almost identical to the > _intern_string_hash() in cairo-misc.c Any reason why the cairo-misc.c > version can't be used? > > I've attached a patch that refactors the float parsing code from > cff-subset into a new function: _cairo_strtod(). So you can now use this > for a C locale strtod. > > In cairo_ft_apply_variations(), strtod() returns a double so just make > 'value' have type double instead of float. > > +/** > + * cairo_font_options_get_variations: > + * @options: a #cairo_font_options_t > + * > + * Gets the OpenType font variations for the font options object. > + * See cairo_font_options_set_variations() for details about the > + * string format. > + * > + * Return value: the font variations for the font options object. The > + * returned string belongs to the @options and must not be modified. > + * It is valid until the @options struct is modified. > > Should this be "It is valid until either the font options object is > destroyed or the font variations in this object is modified with > cairo_font_options_set_variations()"? > -- behdad http://behdad.org/ -- cairo mailing list [email protected] https://lists.cairographics.org/mailman/listinfo/cairo