[wasm-api] Add glyph_outline_free
This commit is contained in:
parent
7fff4a19ad
commit
918df8ccaf
|
@ -174,6 +174,22 @@ HB_WASM_API (bool_t, font_copy_glyph_outline) (HB_WASM_EXEC_ENV
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HB_WASM_API (void, glyph_outline_free) (HB_WASM_EXEC_ENV
|
||||||
|
ptr_d(glyph_outline_t, outline))
|
||||||
|
{
|
||||||
|
HB_PTR_PARAM (glyph_outline_t, outline);
|
||||||
|
if (unlikely (!outline))
|
||||||
|
return;
|
||||||
|
|
||||||
|
module_free (outline->points);
|
||||||
|
module_free (outline->contours);
|
||||||
|
|
||||||
|
outline->n_points = 0;
|
||||||
|
outline->points = nullref;
|
||||||
|
outline->n_contours = 0;
|
||||||
|
outline->contours = nullref;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,9 @@ static NativeSymbol _hb_wasm_native_symbols[] =
|
||||||
NATIVE_SYMBOL ("(ii$*)", font_glyph_to_string),
|
NATIVE_SYMBOL ("(ii$*)", font_glyph_to_string),
|
||||||
NATIVE_SYMBOL ("(iii)i", font_copy_glyph_outline),
|
NATIVE_SYMBOL ("(iii)i", font_copy_glyph_outline),
|
||||||
|
|
||||||
|
/* outline */
|
||||||
|
NATIVE_SYMBOL ("(i)", glyph_outline_free),
|
||||||
|
|
||||||
/* shape */
|
/* shape */
|
||||||
NATIVE_SYMBOL ("(iiii$)i", shape_with),
|
NATIVE_SYMBOL ("(iiii$)i", shape_with),
|
||||||
|
|
||||||
|
|
|
@ -254,11 +254,15 @@ typedef struct
|
||||||
} glyph_outline_t;
|
} glyph_outline_t;
|
||||||
#define GLYPH_OUTLINE_INIT {0, 0, 0, 0}
|
#define GLYPH_OUTLINE_INIT {0, 0, 0, 0}
|
||||||
|
|
||||||
|
HB_WASM_API (void, glyph_outline_free) (HB_WASM_EXEC_ENV
|
||||||
|
ptr_d(glyph_outline_t, outline));
|
||||||
|
|
||||||
HB_WASM_API (bool_t, font_copy_glyph_outline) (HB_WASM_EXEC_ENV
|
HB_WASM_API (bool_t, font_copy_glyph_outline) (HB_WASM_EXEC_ENV
|
||||||
ptr_d(font_t, font),
|
ptr_d(font_t, font),
|
||||||
codepoint_t glyph,
|
codepoint_t glyph,
|
||||||
ptr_d(glyph_outline_t, outline));
|
ptr_d(glyph_outline_t, outline));
|
||||||
|
|
||||||
|
|
||||||
/* shape */
|
/* shape */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
|
@ -30,10 +30,14 @@ shape (void *shape_plan,
|
||||||
|
|
||||||
debugprint1 ("buffer length", contents.length);
|
debugprint1 ("buffer length", contents.length);
|
||||||
|
|
||||||
|
glyph_outline_t outline = GLYPH_OUTLINE_INIT;
|
||||||
|
|
||||||
for (unsigned i = 0; i < contents.length; i++)
|
for (unsigned i = 0; i < contents.length; i++)
|
||||||
{
|
{
|
||||||
char name[64];
|
char name[64];
|
||||||
|
|
||||||
|
debugprint1 ("glyph at", i);
|
||||||
|
|
||||||
font_glyph_to_string (font, contents.info[i].codepoint, name, sizeof (name));
|
font_glyph_to_string (font, contents.info[i].codepoint, name, sizeof (name));
|
||||||
|
|
||||||
debugprint (name);
|
debugprint (name);
|
||||||
|
@ -41,11 +45,13 @@ shape (void *shape_plan,
|
||||||
contents.info[i].codepoint = font_get_glyph (font, contents.info[i].codepoint, 0);
|
contents.info[i].codepoint = font_get_glyph (font, contents.info[i].codepoint, 0);
|
||||||
contents.pos[i].x_advance = font_get_glyph_h_advance (font, contents.info[i].codepoint);
|
contents.pos[i].x_advance = font_get_glyph_h_advance (font, contents.info[i].codepoint);
|
||||||
|
|
||||||
glyph_outline_t outline = GLYPH_OUTLINE_INIT;
|
|
||||||
font_copy_glyph_outline (font, contents.info[i].codepoint, &outline);
|
font_copy_glyph_outline (font, contents.info[i].codepoint, &outline);
|
||||||
|
debugprint1 ("num outline points", outline.n_points);
|
||||||
debugprint1 ("num outline contours", outline.n_contours);
|
debugprint1 ("num outline contours", outline.n_contours);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glyph_outline_free (&outline);
|
||||||
|
|
||||||
bool_t ret = buffer_set_contents (buffer, &contents);
|
bool_t ret = buffer_set_contents (buffer, &contents);
|
||||||
|
|
||||||
buffer_contents_free (&contents);
|
buffer_contents_free (&contents);
|
||||||
|
|
Loading…
Reference in New Issue