[draw] Convert API to float instead of hb_position_t
This commit is contained in:
parent
d6e49b8278
commit
35190dc961
|
@ -119,20 +119,20 @@ hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *funcs,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_move_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
|
_move_to_nil (float to_x HB_UNUSED, float to_y HB_UNUSED, void *user_data HB_UNUSED) {}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_line_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
|
_line_to_nil (float to_x HB_UNUSED, float to_y HB_UNUSED, void *user_data HB_UNUSED) {}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_quadratic_to_nil (hb_position_t control_x HB_UNUSED, hb_position_t control_y HB_UNUSED,
|
_quadratic_to_nil (float control_x HB_UNUSED, float control_y HB_UNUSED,
|
||||||
hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
|
float to_x HB_UNUSED, float to_y HB_UNUSED,
|
||||||
void *user_data HB_UNUSED) {}
|
void *user_data HB_UNUSED) {}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cubic_to_nil (hb_position_t control1_x HB_UNUSED, hb_position_t control1_y HB_UNUSED,
|
_cubic_to_nil (float control1_x HB_UNUSED, float control1_y HB_UNUSED,
|
||||||
hb_position_t control2_x HB_UNUSED, hb_position_t control2_y HB_UNUSED,
|
float control2_x HB_UNUSED, float control2_y HB_UNUSED,
|
||||||
hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
|
float to_x HB_UNUSED, float to_y HB_UNUSED,
|
||||||
void *user_data HB_UNUSED) {}
|
void *user_data HB_UNUSED) {}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -33,14 +33,14 @@
|
||||||
|
|
||||||
HB_BEGIN_DECLS
|
HB_BEGIN_DECLS
|
||||||
|
|
||||||
typedef void (*hb_draw_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
|
typedef void (*hb_draw_move_to_func_t) (float to_x, float to_y, void *user_data);
|
||||||
typedef void (*hb_draw_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
|
typedef void (*hb_draw_line_to_func_t) (float to_x, float to_y, void *user_data);
|
||||||
typedef void (*hb_draw_quadratic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
|
typedef void (*hb_draw_quadratic_to_func_t) (float control_x, float control_y,
|
||||||
hb_position_t to_x, hb_position_t to_y,
|
float to_x, float to_y,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
typedef void (*hb_draw_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
|
typedef void (*hb_draw_cubic_to_func_t) (float control1_x, float control1_y,
|
||||||
hb_position_t control2_x, hb_position_t control2_y,
|
float control2_x, float control2_y,
|
||||||
hb_position_t to_x, hb_position_t to_y,
|
float to_x, float to_y,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
typedef void (*hb_draw_close_path_func_t) (void *user_data);
|
typedef void (*hb_draw_close_path_func_t) (void *user_data);
|
||||||
|
|
||||||
|
|
|
@ -50,14 +50,14 @@ struct draw_helper_t
|
||||||
}
|
}
|
||||||
~draw_helper_t () { end_path (); }
|
~draw_helper_t () { end_path (); }
|
||||||
|
|
||||||
void move_to (hb_position_t x, hb_position_t y)
|
void move_to (float x, float y)
|
||||||
{
|
{
|
||||||
if (path_open) end_path ();
|
if (path_open) end_path ();
|
||||||
current_x = path_start_x = x;
|
current_x = path_start_x = x;
|
||||||
current_y = path_start_y = y;
|
current_y = path_start_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void line_to (hb_position_t x, hb_position_t y)
|
void line_to (float x, float y)
|
||||||
{
|
{
|
||||||
if (equal_to_current (x, y)) return;
|
if (equal_to_current (x, y)) return;
|
||||||
if (!path_open) start_path ();
|
if (!path_open) start_path ();
|
||||||
|
@ -67,8 +67,8 @@ struct draw_helper_t
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
quadratic_to (hb_position_t control_x, hb_position_t control_y,
|
quadratic_to (float control_x, float control_y,
|
||||||
hb_position_t to_x, hb_position_t to_y)
|
float to_x, float to_y)
|
||||||
{
|
{
|
||||||
if (equal_to_current (control_x, control_y) && equal_to_current (to_x, to_y))
|
if (equal_to_current (control_x, control_y) && equal_to_current (to_x, to_y))
|
||||||
return;
|
return;
|
||||||
|
@ -86,9 +86,9 @@ struct draw_helper_t
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cubic_to (hb_position_t control1_x, hb_position_t control1_y,
|
cubic_to (float control1_x, float control1_y,
|
||||||
hb_position_t control2_x, hb_position_t control2_y,
|
float control2_x, float control2_y,
|
||||||
hb_position_t to_x, hb_position_t to_y)
|
float to_x, float to_y)
|
||||||
{
|
{
|
||||||
if (equal_to_current (control1_x, control1_y) &&
|
if (equal_to_current (control1_x, control1_y) &&
|
||||||
equal_to_current (control2_x, control2_y) &&
|
equal_to_current (control2_x, control2_y) &&
|
||||||
|
@ -113,7 +113,7 @@ struct draw_helper_t
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool equal_to_current (hb_position_t x, hb_position_t y)
|
bool equal_to_current (float x, float y)
|
||||||
{ return current_x == x && current_y == y; }
|
{ return current_x == x && current_y == y; }
|
||||||
|
|
||||||
void start_path ()
|
void start_path ()
|
||||||
|
@ -123,11 +123,11 @@ struct draw_helper_t
|
||||||
funcs->move_to (path_start_x, path_start_y, user_data);
|
funcs->move_to (path_start_x, path_start_y, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_position_t path_start_x;
|
float path_start_x;
|
||||||
hb_position_t path_start_y;
|
float path_start_y;
|
||||||
|
|
||||||
hb_position_t current_x;
|
float current_x;
|
||||||
hb_position_t current_y;
|
float current_y;
|
||||||
|
|
||||||
bool path_open;
|
bool path_open;
|
||||||
const hb_draw_funcs_t *funcs;
|
const hb_draw_funcs_t *funcs;
|
||||||
|
|
|
@ -457,14 +457,14 @@ struct cff1_path_param_t
|
||||||
{
|
{
|
||||||
point_t point = p;
|
point_t point = p;
|
||||||
if (delta) point.move (*delta);
|
if (delta) point.move (*delta);
|
||||||
draw_helper->move_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
|
draw_helper->move_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void line_to (const point_t &p)
|
void line_to (const point_t &p)
|
||||||
{
|
{
|
||||||
point_t point = p;
|
point_t point = p;
|
||||||
if (delta) point.move (*delta);
|
if (delta) point.move (*delta);
|
||||||
draw_helper->line_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
|
draw_helper->line_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
|
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
|
||||||
|
@ -476,9 +476,9 @@ struct cff1_path_param_t
|
||||||
point2.move (*delta);
|
point2.move (*delta);
|
||||||
point3.move (*delta);
|
point3.move (*delta);
|
||||||
}
|
}
|
||||||
draw_helper->cubic_to (font->em_scalef_x (point1.x.to_real ()), font->em_scalef_y (point1.y.to_real ()),
|
draw_helper->cubic_to (font->em_fscalef_x (point1.x.to_real ()), font->em_fscalef_y (point1.y.to_real ()),
|
||||||
font->em_scalef_x (point2.x.to_real ()), font->em_scalef_y (point2.y.to_real ()),
|
font->em_fscalef_x (point2.x.to_real ()), font->em_fscalef_y (point2.y.to_real ()),
|
||||||
font->em_scalef_x (point3.x.to_real ()), font->em_scalef_y (point3.y.to_real ()));
|
font->em_fscalef_x (point3.x.to_real ()), font->em_fscalef_y (point3.y.to_real ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void end_path () { draw_helper->end_path (); }
|
void end_path () { draw_helper->end_path (); }
|
||||||
|
|
|
@ -152,16 +152,16 @@ struct cff2_path_param_t
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_to (const point_t &p)
|
void move_to (const point_t &p)
|
||||||
{ draw_helper->move_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
|
{ draw_helper->move_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
|
||||||
|
|
||||||
void line_to (const point_t &p)
|
void line_to (const point_t &p)
|
||||||
{ draw_helper->line_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
|
{ draw_helper->line_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
|
||||||
|
|
||||||
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
|
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
|
||||||
{
|
{
|
||||||
draw_helper->cubic_to (font->em_scalef_x (p1.x.to_real ()), font->em_scalef_y (p1.y.to_real ()),
|
draw_helper->cubic_to (font->em_fscalef_x (p1.x.to_real ()), font->em_fscalef_y (p1.y.to_real ()),
|
||||||
font->em_scalef_x (p2.x.to_real ()), font->em_scalef_y (p2.y.to_real ()),
|
font->em_fscalef_x (p2.x.to_real ()), font->em_fscalef_y (p2.y.to_real ()),
|
||||||
font->em_scalef_x (p3.x.to_real ()), font->em_scalef_y (p3.y.to_real ()));
|
font->em_fscalef_x (p3.x.to_real ()), font->em_fscalef_y (p3.y.to_real ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -1194,7 +1194,7 @@ struct glyf
|
||||||
if (is_on_curve)
|
if (is_on_curve)
|
||||||
{
|
{
|
||||||
first_oncurve = p;
|
first_oncurve = p;
|
||||||
draw_helper->move_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
|
draw_helper->move_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1203,7 +1203,7 @@ struct glyf
|
||||||
optional_point_t mid = first_offcurve.lerp (p, .5f);
|
optional_point_t mid = first_offcurve.lerp (p, .5f);
|
||||||
first_oncurve = mid;
|
first_oncurve = mid;
|
||||||
last_offcurve = p;
|
last_offcurve = p;
|
||||||
draw_helper->move_to (font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
|
draw_helper->move_to (font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
first_offcurve = p;
|
first_offcurve = p;
|
||||||
|
@ -1215,22 +1215,22 @@ struct glyf
|
||||||
{
|
{
|
||||||
if (is_on_curve)
|
if (is_on_curve)
|
||||||
{
|
{
|
||||||
draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
|
draw_helper->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
|
||||||
font->em_scalef_x (p.x), font->em_scalef_y (p.y));
|
font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
|
||||||
last_offcurve = optional_point_t ();
|
last_offcurve = optional_point_t ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
optional_point_t mid = last_offcurve.lerp (p, .5f);
|
optional_point_t mid = last_offcurve.lerp (p, .5f);
|
||||||
draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
|
draw_helper->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
|
||||||
font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
|
font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
|
||||||
last_offcurve = p;
|
last_offcurve = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (is_on_curve)
|
if (is_on_curve)
|
||||||
draw_helper->line_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
|
draw_helper->line_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
|
||||||
else
|
else
|
||||||
last_offcurve = p;
|
last_offcurve = p;
|
||||||
}
|
}
|
||||||
|
@ -1241,20 +1241,20 @@ struct glyf
|
||||||
if (first_offcurve.has_data && last_offcurve.has_data)
|
if (first_offcurve.has_data && last_offcurve.has_data)
|
||||||
{
|
{
|
||||||
optional_point_t mid = last_offcurve.lerp (first_offcurve, .5f);
|
optional_point_t mid = last_offcurve.lerp (first_offcurve, .5f);
|
||||||
draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
|
draw_helper->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
|
||||||
font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
|
font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
|
||||||
last_offcurve = optional_point_t ();
|
last_offcurve = optional_point_t ();
|
||||||
/* now check the rest */
|
/* now check the rest */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first_offcurve.has_data && first_oncurve.has_data)
|
if (first_offcurve.has_data && first_oncurve.has_data)
|
||||||
draw_helper->quadratic_to (font->em_scalef_x (first_offcurve.x), font->em_scalef_y (first_offcurve.y),
|
draw_helper->quadratic_to (font->em_fscalef_x (first_offcurve.x), font->em_fscalef_y (first_offcurve.y),
|
||||||
font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
|
font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
|
||||||
else if (last_offcurve.has_data && first_oncurve.has_data)
|
else if (last_offcurve.has_data && first_oncurve.has_data)
|
||||||
draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
|
draw_helper->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
|
||||||
font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
|
font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
|
||||||
else if (first_oncurve.has_data)
|
else if (first_oncurve.has_data)
|
||||||
draw_helper->line_to (font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
|
draw_helper->line_to (font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
|
||||||
|
|
||||||
/* Getting ready for the next contour */
|
/* Getting ready for the next contour */
|
||||||
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
|
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
|
||||||
|
|
22
src/main.cc
22
src/main.cc
|
@ -136,33 +136,33 @@ struct user_data_t
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
move_to (hb_position_t to_x, hb_position_t to_y, user_data_t &user_data)
|
move_to (float to_x, float to_y, user_data_t &user_data)
|
||||||
{
|
{
|
||||||
fprintf (user_data.f, "M%d,%d", to_x, user_data.ascender - to_y);
|
fprintf (user_data.f, "M%g,%g", to_x, user_data.ascender - to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
line_to (hb_position_t to_x, hb_position_t to_y, user_data_t &user_data)
|
line_to (float to_x, float to_y, user_data_t &user_data)
|
||||||
{
|
{
|
||||||
fprintf (user_data.f, "L%d,%d", to_x, user_data.ascender - to_y);
|
fprintf (user_data.f, "L%g,%g", to_x, user_data.ascender - to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
quadratic_to (hb_position_t control_x, hb_position_t control_y,
|
quadratic_to (float control_x, float control_y,
|
||||||
hb_position_t to_x, hb_position_t to_y,
|
float to_x, float to_y,
|
||||||
user_data_t &user_data)
|
user_data_t &user_data)
|
||||||
{
|
{
|
||||||
fprintf (user_data.f, "Q%d,%d %d,%d", control_x, user_data.ascender - control_y,
|
fprintf (user_data.f, "Q%g,%g %g,%g", control_x, user_data.ascender - control_y,
|
||||||
to_x, user_data.ascender - to_y);
|
to_x, user_data.ascender - to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cubic_to (hb_position_t control1_x, hb_position_t control1_y,
|
cubic_to (float control1_x, float control1_y,
|
||||||
hb_position_t control2_x, hb_position_t control2_y,
|
float control2_x, float control2_y,
|
||||||
hb_position_t to_x, hb_position_t to_y,
|
float to_x, float to_y,
|
||||||
user_data_t &user_data)
|
user_data_t &user_data)
|
||||||
{
|
{
|
||||||
fprintf (user_data.f, "C%d,%d %d,%d %d,%d", control1_x, user_data.ascender - control1_y,
|
fprintf (user_data.f, "C%g,%g %g,%g %g,%g", control1_x, user_data.ascender - control1_y,
|
||||||
control2_x, user_data.ascender - control2_y,
|
control2_x, user_data.ascender - control2_y,
|
||||||
to_x, user_data.ascender - to_y);
|
to_x, user_data.ascender - to_y);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue