Hi all,

Attached is a small program that demonstrates how freetype loses
outline flags during auto-hinting.
This is a demonstration:

$ ./outflags /usr/share/fonts/liberation/LiberationSerif-Regular.ttf 0x2
Liberation Serif Regular loaded...
Loading Flags: 0x2
Outline Flags: 0x100

$ ./outflags /usr/share/fonts/liberation/LiberationSerif-Regular.ttf 0x20
Liberation Serif Regular loaded...
Loading Flags: 0x20
Outline Flags: 0   <<<<<< LOST IT

$ ./outflags /usr/share/fonts/liberation/LiberationSerif-Regular.ttf 0x0
Liberation Serif Regular loaded...
Loading Flags: 0
Outline Flags: 0x110

$ ./outflags /usr/share/fonts/default/Type1/n019003l.pfb 0x2
Nimbus Sans L Regular loaded...
Loading Flags: 0x2
Outline Flags: 0x104

$ ./outflags /usr/share/fonts/default/Type1/n019003l.pfb 0x20
Nimbus Sans L Regular loaded...
Loading Flags: 0x20
Outline Flags: 0   <<<<<<< LOST IT

$ ./outflags /usr/share/fonts/default/Type1/n019003l.pfb 0x0
Nimbus Sans L Regular loaded...
Loading Flags: 0
Outline Flags: 0x104

Let me know if you're certain which function needs fixing. I can try
to come up with a patch.

Alexei
#include <stdio.h>
#include <stdlib.h>

#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_IMAGE_H

int main(int argc, char *argv[])
{
    int glyph_index, load_flag;
    FT_Library library;
    FT_Face face;

    if (FT_Init_FreeType(&library)) {
	puts("FT_Init_FreeType Error");
	return EXIT_FAILURE;
    }

    if (argc < 2 || FT_New_Face(library, argv[1], 0, &face)) {
	puts("FT_New_Face Error");
	return EXIT_FAILURE;
    } else
	printf("%s %s loaded...\n", face->family_name, face->style_name);

    if (FT_Set_Char_Size(face, 0, 16 * 64, 96, 96)) {
	puts("FT_Set_Char_Size Error");
	return EXIT_FAILURE;
    }

    glyph_index = FT_Get_Char_Index(face, 0x41);

    if (argc < 3)
	load_flag = FT_LOAD_DEFAULT;
    else
	sscanf(argv[2], "%x", &load_flag);

    if (FT_Load_Glyph(face, glyph_index, load_flag)) {
	puts("FT_Load_Glyph Error");
	return EXIT_FAILURE;
    }

    printf("Loading Flags: %#x\nOutline Flags: %#x\n", load_flag,
	   face->glyph->outline.flags);

    return EXIT_SUCCESS;
}
_______________________________________________
Freetype-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to