[util] Use post_parse in face_options_t
This commit is contained in:
parent
c0ea4e2d33
commit
e4b33d9d36
|
@ -38,15 +38,7 @@ struct face_options_t
|
||||||
|
|
||||||
void add_options (option_parser_t *parser);
|
void add_options (option_parser_t *parser);
|
||||||
|
|
||||||
void post_parse (GError **error)
|
void post_parse (GError **error);
|
||||||
{
|
|
||||||
if (!this->font_file)
|
|
||||||
g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
|
|
||||||
"No font file set");
|
|
||||||
}
|
|
||||||
|
|
||||||
hb_blob_t *get_blob () const;
|
|
||||||
hb_face_t *get_face () const;
|
|
||||||
|
|
||||||
static struct cache_t
|
static struct cache_t
|
||||||
{
|
{
|
||||||
|
@ -65,25 +57,20 @@ struct face_options_t
|
||||||
|
|
||||||
char *font_file = nullptr;
|
char *font_file = nullptr;
|
||||||
unsigned face_index = 0;
|
unsigned face_index = 0;
|
||||||
private:
|
|
||||||
mutable hb_face_t *face = nullptr;
|
hb_blob_t *blob = nullptr;
|
||||||
|
hb_face_t *face = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
face_options_t::cache_t face_options_t::cache {};
|
face_options_t::cache_t face_options_t::cache {};
|
||||||
|
|
||||||
hb_blob_t *
|
void
|
||||||
face_options_t::get_blob () const
|
face_options_t::post_parse (GError **error)
|
||||||
{
|
{
|
||||||
// XXX This does the job for now; will move to post_parse.
|
if (!font_file)
|
||||||
return cache.blob;
|
g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
|
||||||
}
|
"No font file set");
|
||||||
|
|
||||||
hb_face_t *
|
|
||||||
face_options_t::get_face () const
|
|
||||||
{
|
|
||||||
if (face)
|
|
||||||
return face;
|
|
||||||
|
|
||||||
assert (font_file);
|
assert (font_file);
|
||||||
|
|
||||||
|
@ -108,7 +95,8 @@ face_options_t::get_face () const
|
||||||
cache.font_path = g_strdup (font_path);
|
cache.font_path = g_strdup (font_path);
|
||||||
|
|
||||||
if (!cache.blob)
|
if (!cache.blob)
|
||||||
fail (false, "%s: Failed reading file", font_path);
|
g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
|
||||||
|
"%s: Failed reading file", font_path);
|
||||||
|
|
||||||
hb_face_destroy (cache.face);
|
hb_face_destroy (cache.face);
|
||||||
cache.face = nullptr;
|
cache.face = nullptr;
|
||||||
|
@ -122,9 +110,8 @@ face_options_t::get_face () const
|
||||||
cache.face_index = face_index;
|
cache.face_index = face_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blob = cache.blob;
|
||||||
face = cache.face;
|
face = cache.face;
|
||||||
|
|
||||||
return face;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -86,8 +86,6 @@ font_options_t::get_font () const
|
||||||
if (font)
|
if (font)
|
||||||
return font;
|
return font;
|
||||||
|
|
||||||
auto *face = get_face ();
|
|
||||||
|
|
||||||
font = hb_font_create (face);
|
font = hb_font_create (face);
|
||||||
|
|
||||||
if (font_size_x == FONT_SIZE_UPEM)
|
if (font_size_x == FONT_SIZE_UPEM)
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct subset_consumer_t : subset_options_t, output_options_t
|
||||||
|
|
||||||
void init (const face_options_t *face_opts)
|
void init (const face_options_t *face_opts)
|
||||||
{
|
{
|
||||||
face = hb_face_reference (face_opts->get_face ());
|
face = hb_face_reference (face_opts->face);
|
||||||
}
|
}
|
||||||
|
|
||||||
void consume_line (const char *text,
|
void consume_line (const char *text,
|
||||||
|
|
|
@ -97,7 +97,7 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int blob_length;
|
unsigned int blob_length;
|
||||||
const char *blob_data = hb_blob_get_data (font_opts->get_blob (), &blob_length);
|
const char *blob_data = hb_blob_get_data (font_opts->blob, &blob_length);
|
||||||
|
|
||||||
if (FT_New_Memory_Face (ft_library,
|
if (FT_New_Memory_Face (ft_library,
|
||||||
(const FT_Byte *) blob_data,
|
(const FT_Byte *) blob_data,
|
||||||
|
|
Loading…
Reference in New Issue