You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-20 14:45:44 +00:00
HarfBuzz: Update to version 4.0.0
This commit is contained in:
163
thirdparty/harfbuzz/src/hb-font.cc
vendored
163
thirdparty/harfbuzz/src/hb-font.cc
vendored
@@ -29,6 +29,7 @@
|
||||
#include "hb.hh"
|
||||
|
||||
#include "hb-font.hh"
|
||||
#include "hb-draw.hh"
|
||||
#include "hb-machinery.hh"
|
||||
|
||||
#include "hb-ot.h"
|
||||
@@ -501,6 +502,136 @@ hb_font_get_glyph_from_name_default (hb_font_t *font,
|
||||
return font->parent->get_glyph_from_name (name, len, glyph);
|
||||
}
|
||||
|
||||
static void
|
||||
hb_font_get_glyph_shape_nil (hb_font_t *font HB_UNUSED,
|
||||
void *font_data HB_UNUSED,
|
||||
hb_codepoint_t glyph,
|
||||
hb_draw_funcs_t *draw_funcs,
|
||||
void *draw_data,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
typedef struct hb_font_get_glyph_shape_default_adaptor_t {
|
||||
hb_draw_funcs_t *draw_funcs;
|
||||
void *draw_data;
|
||||
float x_scale;
|
||||
float y_scale;
|
||||
} hb_font_get_glyph_shape_default_adaptor_t;
|
||||
|
||||
static void
|
||||
hb_draw_move_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED,
|
||||
void *draw_data,
|
||||
hb_draw_state_t *st,
|
||||
float to_x, float to_y,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||
float x_scale = adaptor->x_scale;
|
||||
float y_scale = adaptor->y_scale;
|
||||
|
||||
adaptor->draw_funcs->emit_move_to (adaptor->draw_data, *st,
|
||||
x_scale * to_x, y_scale * to_y);
|
||||
}
|
||||
|
||||
static void
|
||||
hb_draw_line_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||
hb_draw_state_t *st,
|
||||
float to_x, float to_y,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||
float x_scale = adaptor->x_scale;
|
||||
float y_scale = adaptor->y_scale;
|
||||
|
||||
st->current_x *= x_scale;
|
||||
st->current_y *= y_scale;
|
||||
|
||||
adaptor->draw_funcs->emit_line_to (adaptor->draw_data, *st,
|
||||
x_scale * to_x, y_scale * to_y);
|
||||
}
|
||||
|
||||
static void
|
||||
hb_draw_quadratic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||
hb_draw_state_t *st,
|
||||
float control_x, float control_y,
|
||||
float to_x, float to_y,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||
float x_scale = adaptor->x_scale;
|
||||
float y_scale = adaptor->y_scale;
|
||||
|
||||
st->current_x *= x_scale;
|
||||
st->current_y *= y_scale;
|
||||
|
||||
adaptor->draw_funcs->emit_quadratic_to (adaptor->draw_data, *st,
|
||||
x_scale * control_x, y_scale * control_y,
|
||||
x_scale * to_x, y_scale * to_y);
|
||||
}
|
||||
|
||||
static void
|
||||
hb_draw_cubic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||
hb_draw_state_t *st,
|
||||
float control1_x, float control1_y,
|
||||
float control2_x, float control2_y,
|
||||
float to_x, float to_y,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||
float x_scale = adaptor->x_scale;
|
||||
float y_scale = adaptor->y_scale;
|
||||
|
||||
st->current_x *= x_scale;
|
||||
st->current_y *= y_scale;
|
||||
|
||||
adaptor->draw_funcs->emit_cubic_to (adaptor->draw_data, *st,
|
||||
x_scale * control1_x, y_scale * control1_y,
|
||||
x_scale * control2_x, y_scale * control2_y,
|
||||
x_scale * to_x, y_scale * to_y);
|
||||
}
|
||||
|
||||
static void
|
||||
hb_draw_close_path_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||
hb_draw_state_t *st,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||
|
||||
adaptor->draw_funcs->emit_close_path (adaptor->draw_data, *st);
|
||||
}
|
||||
|
||||
static const hb_draw_funcs_t _hb_draw_funcs_default = {
|
||||
HB_OBJECT_HEADER_STATIC,
|
||||
|
||||
{
|
||||
#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_default,
|
||||
HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
|
||||
#undef HB_DRAW_FUNC_IMPLEMENT
|
||||
}
|
||||
};
|
||||
|
||||
static void
|
||||
hb_font_get_glyph_shape_default (hb_font_t *font,
|
||||
void *font_data HB_UNUSED,
|
||||
hb_codepoint_t glyph,
|
||||
hb_draw_funcs_t *draw_funcs,
|
||||
void *draw_data,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
hb_font_get_glyph_shape_default_adaptor_t adaptor = {
|
||||
draw_funcs,
|
||||
draw_data,
|
||||
(float) font->x_scale / (float) font->parent->x_scale,
|
||||
(float) font->y_scale / (float) font->parent->y_scale
|
||||
};
|
||||
|
||||
font->parent->get_glyph_shape (glyph,
|
||||
const_cast<hb_draw_funcs_t *> (&_hb_draw_funcs_default),
|
||||
&adaptor);
|
||||
}
|
||||
|
||||
DEFINE_NULL_INSTANCE (hb_font_funcs_t) =
|
||||
{
|
||||
HB_OBJECT_HEADER_STATIC,
|
||||
@@ -1168,6 +1299,26 @@ hb_font_get_glyph_from_name (hb_font_t *font,
|
||||
return font->get_glyph_from_name (name, len, glyph);
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_font_get_glyph_shape:
|
||||
* @font: #hb_font_t to work upon
|
||||
* @glyph: : The glyph ID
|
||||
* @dfuncs: #hb_draw_funcs_t to draw to
|
||||
* @draw_data: User data to pass to draw callbacks
|
||||
*
|
||||
* Fetches the glyph shape that corresponds to a glyph in the specified @font.
|
||||
* The shape is returned by way of calls to the callsbacks of the @dfuncs
|
||||
* objects, with @draw_data passed to them.
|
||||
*
|
||||
* Since: 4.0.0
|
||||
**/
|
||||
void
|
||||
hb_font_get_glyph_shape (hb_font_t *font,
|
||||
hb_codepoint_t glyph,
|
||||
hb_draw_funcs_t *dfuncs, void *draw_data)
|
||||
{
|
||||
font->get_glyph_shape (glyph, dfuncs, draw_data);
|
||||
}
|
||||
|
||||
/* A bit higher-level, and with fallback */
|
||||
|
||||
@@ -1190,7 +1341,7 @@ hb_font_get_extents_for_direction (hb_font_t *font,
|
||||
hb_direction_t direction,
|
||||
hb_font_extents_t *extents)
|
||||
{
|
||||
return font->get_extents_for_direction (direction, extents);
|
||||
font->get_extents_for_direction (direction, extents);
|
||||
}
|
||||
/**
|
||||
* hb_font_get_glyph_advance_for_direction:
|
||||
@@ -1215,7 +1366,7 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
|
||||
hb_position_t *x,
|
||||
hb_position_t *y)
|
||||
{
|
||||
return font->get_glyph_advance_for_direction (glyph, direction, x, y);
|
||||
font->get_glyph_advance_for_direction (glyph, direction, x, y);
|
||||
}
|
||||
/**
|
||||
* hb_font_get_glyph_advances_for_direction:
|
||||
@@ -2044,12 +2195,16 @@ hb_font_get_ptem (hb_font_t *font)
|
||||
* @slant: synthetic slant value.
|
||||
*
|
||||
* Sets the "synthetic slant" of a font. By default is zero.
|
||||
* Synthetic slant is the graphical skew that the renderer
|
||||
* applies to the font at rendering time.
|
||||
* Synthetic slant is the graphical skew applied to the font
|
||||
* at rendering time.
|
||||
*
|
||||
* HarfBuzz needs to know this value to adjust shaping results,
|
||||
* metrics, and style values to match the slanted rendering.
|
||||
*
|
||||
* <note>Note: The glyph shape fetched via the
|
||||
* hb_font_get_glyph_shape() is slanted to reflect this value
|
||||
* as well.</note>
|
||||
*
|
||||
* <note>Note: The slant value is a ratio. For example, a
|
||||
* 20% slant would be represented as a 0.2 value.</note>
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user