Rename hb_outline_decompose to hb_font_draw_glyph and hb_outline_decompose_funcs_t to hb_draw_funcs_t
diff --git a/src/Makefile.sources b/src/Makefile.sources
index a464f28..81b5cde 100644
--- a/src/Makefile.sources
+++ b/src/Makefile.sources
@@ -35,13 +35,13 @@
 	hb-config.hh \
 	hb-debug.hh \
 	hb-dispatch.hh \
+	hb-draw.cc \
+	hb-draw.hh \
 	hb-face.cc \
 	hb-face.hh \
 	hb-fallback-shape.cc \
 	hb-font.cc \
 	hb-font.hh \
-	hb-outline.cc \
-	hb-outline.hh \
 	hb-iter.hh \
 	hb-kern.hh \
 	hb-machinery.hh \
@@ -195,9 +195,9 @@
 	hb-buffer.h \
 	hb-common.h \
 	hb-deprecated.h \
+	hb-draw.h \
 	hb-face.h \
 	hb-font.h \
-	hb-outline.h \
 	hb-map.h \
 	hb-ot-color.h \
 	hb-ot-deprecated.h \
diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc
index 9da30df..6a07a9e 100644
--- a/src/harfbuzz.cc
+++ b/src/harfbuzz.cc
@@ -4,10 +4,10 @@
 #include "hb-buffer-serialize.cc"
 #include "hb-buffer.cc"
 #include "hb-common.cc"
+#include "hb-draw.cc"
 #include "hb-face.cc"
 #include "hb-fallback-shape.cc"
 #include "hb-font.cc"
-#include "hb-outline.cc"
 #include "hb-map.cc"
 #include "hb-number.cc"
 #include "hb-ot-cff1-table.cc"
diff --git a/src/hb-config.hh b/src/hb-config.hh
index 41bd6c6..07659fa 100644
--- a/src/hb-config.hh
+++ b/src/hb-config.hh
@@ -58,6 +58,7 @@
 #define HB_NO_BITMAP
 #define HB_NO_CFF
 #define HB_NO_COLOR
+#define HB_NO_DRAW
 #define HB_NO_ERRNO
 #define HB_NO_FACE_COLLECT_UNICODES
 #define HB_NO_GETENV
@@ -72,7 +73,6 @@
 #define HB_NO_MMAP
 #define HB_NO_NAME
 #define HB_NO_OPEN
-#define HB_NO_OUTLINE
 #define HB_NO_SETLOCALE
 #define HB_NO_OT_FONT_GLYPH_NAMES
 #define HB_NO_OT_SHAPE_FRACTIONS
diff --git a/src/hb-outline.cc b/src/hb-draw.cc
similarity index 61%
rename from src/hb-outline.cc
rename to src/hb-draw.cc
index d2d3061..a19d46a 100644
--- a/src/hb-outline.cc
+++ b/src/hb-draw.cc
@@ -24,16 +24,16 @@
 
 #include "hb.hh"
 
-#ifndef HB_NO_OUTLINE
+#ifndef HB_NO_DRAW
 
+#include "hb-draw.hh"
 #include "hb-ot.h"
 #include "hb-ot-glyf-table.hh"
 #include "hb-ot-cff1-table.hh"
 #include "hb-ot-cff2-table.hh"
-#include "hb-outline.hh"
 
 /**
- * hb_outline_decompose_funcs_set_move_to_func:
+ * hb_draw_funcs_set_move_to_func:
  * @funcs: decompose functions object
  * @move_to: move-to callback
  *
@@ -42,15 +42,15 @@
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_set_move_to_func (hb_outline_decompose_funcs_t        *funcs,
-					     hb_outline_decompose_move_to_func_t  move_to)
+hb_draw_funcs_set_move_to_func (hb_draw_funcs_t        *funcs,
+				hb_draw_move_to_func_t  move_to)
 {
   if (unlikely (hb_object_is_immutable (funcs))) return;
   funcs->move_to = move_to;
 }
 
 /**
- * hb_outline_decompose_funcs_set_line_to_func:
+ * hb_draw_funcs_set_line_to_func:
  * @funcs: decompose functions object
  * @line_to: line-to callback
  *
@@ -59,32 +59,32 @@
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_set_line_to_func (hb_outline_decompose_funcs_t        *funcs,
-					     hb_outline_decompose_line_to_func_t  line_to)
+hb_draw_funcs_set_line_to_func (hb_draw_funcs_t        *funcs,
+				hb_draw_line_to_func_t  line_to)
 {
   if (unlikely (hb_object_is_immutable (funcs))) return;
   funcs->line_to = line_to;
 }
 
 /**
- * hb_outline_decompose_funcs_set_conic_to_func:
+ * hb_draw_funcs_set_conic_to_func:
  * @funcs: decompose functions object
- * @move_to: conic-to callback
+ * @move_to: quadratic-to callback
  *
- * Sets conic-to callback to the decompose functions object.
+ * Sets quadratic-to callback to the decompose functions object.
  *
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_set_conic_to_func (hb_outline_decompose_funcs_t         *funcs,
-					      hb_outline_decompose_conic_to_func_t  conic_to)
+hb_draw_funcs_set_conic_to_func (hb_draw_funcs_t         *funcs,
+				 hb_draw_conic_to_func_t  conic_to)
 {
   if (unlikely (hb_object_is_immutable (funcs))) return;
   funcs->conic_to = conic_to;
 }
 
 /**
- * hb_outline_decompose_funcs_set_cubic_to_func:
+ * hb_draw_funcs_set_cubic_to_func:
  * @funcs: decompose functions
  * @cubic_to: cubic-to callback
  *
@@ -93,15 +93,15 @@
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_set_cubic_to_func (hb_outline_decompose_funcs_t         *funcs,
-					      hb_outline_decompose_cubic_to_func_t  cubic_to)
+hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t         *funcs,
+				 hb_draw_cubic_to_func_t  cubic_to)
 {
   if (unlikely (hb_object_is_immutable (funcs))) return;
   funcs->cubic_to = cubic_to;
 }
 
 /**
- * hb_outline_decompose_funcs_set_close_path_func:
+ * hb_draw_funcs_set_close_path_func:
  * @funcs: decompose functions object
  * @close_path: close-path callback
  *
@@ -110,8 +110,8 @@
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_set_close_path_func (hb_outline_decompose_funcs_t           *funcs,
-					        hb_outline_decompose_close_path_func_t  close_path)
+hb_draw_funcs_set_close_path_func (hb_draw_funcs_t           *funcs,
+				   hb_draw_close_path_func_t  close_path)
 {
   if (unlikely (hb_object_is_immutable (funcs))) return;
   funcs->close_path = close_path;
@@ -125,41 +125,42 @@
 
 static void
 _conic_to_nil (hb_position_t control_x HB_UNUSED, hb_position_t control_y HB_UNUSED,
-		hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
-		void *user_data HB_UNUSED) {}
+	       hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
+	       void *user_data HB_UNUSED) {}
+
 static void
 _cubic_to_nil (hb_position_t control1_x HB_UNUSED, hb_position_t control1_y HB_UNUSED,
-		hb_position_t control2_x HB_UNUSED, hb_position_t control2_y HB_UNUSED,
-		hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
-		void *user_data HB_UNUSED) {}
+	       hb_position_t control2_x HB_UNUSED, hb_position_t control2_y HB_UNUSED,
+	       hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
+	       void *user_data HB_UNUSED) {}
 
 static void
 _close_path_nil (void *user_data HB_UNUSED) {}
 
 /**
- * hb_outline_decompose_funcs_create:
+ * hb_draw_funcs_create:
  *
  * Creates a new decompose callbacks object.
  *
  * Since: REPLACEME
  **/
-hb_outline_decompose_funcs_t *
-hb_outline_decompose_funcs_create ()
+hb_draw_funcs_t *
+hb_draw_funcs_create ()
 {
-  hb_outline_decompose_funcs_t *funcs;
-  if (unlikely (!(funcs = hb_object_create<hb_outline_decompose_funcs_t> ())))
-    return const_cast<hb_outline_decompose_funcs_t *> (&Null (hb_outline_decompose_funcs_t));
+  hb_draw_funcs_t *funcs;
+  if (unlikely (!(funcs = hb_object_create<hb_draw_funcs_t> ())))
+    return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
 
-  funcs->move_to = (hb_outline_decompose_move_to_func_t) _move_to_nil;
-  funcs->line_to = (hb_outline_decompose_line_to_func_t) _line_to_nil;
-  funcs->conic_to = (hb_outline_decompose_conic_to_func_t) _conic_to_nil;
-  funcs->cubic_to = (hb_outline_decompose_cubic_to_func_t) _cubic_to_nil;
-  funcs->close_path = (hb_outline_decompose_close_path_func_t) _close_path_nil;
+  funcs->move_to = (hb_draw_move_to_func_t) _move_to_nil;
+  funcs->line_to = (hb_draw_line_to_func_t) _line_to_nil;
+  funcs->conic_to = (hb_draw_conic_to_func_t) _conic_to_nil;
+  funcs->cubic_to = (hb_draw_cubic_to_func_t) _cubic_to_nil;
+  funcs->close_path = (hb_draw_close_path_func_t) _close_path_nil;
   return funcs;
 }
 
 /**
- * hb_outline_decompose_funcs_reference:
+ * hb_draw_funcs_reference:
  * @funcs: decompose functions
  *
  * Add to callbacks object refcount.
@@ -167,14 +168,14 @@
  * Returns: The same object.
  * Since: REPLACEME
  **/
-hb_outline_decompose_funcs_t *
-hb_outline_decompose_funcs_reference (hb_outline_decompose_funcs_t *funcs)
+hb_draw_funcs_t *
+hb_draw_funcs_reference (hb_draw_funcs_t *funcs)
 {
   return hb_object_reference (funcs);
 }
 
 /**
- * hb_outline_decompose_funcs_destroy:
+ * hb_draw_funcs_destroy:
  * @funcs: decompose functions
  *
  * Decreases refcount of callbacks object and deletes the object if it reaches
@@ -183,7 +184,7 @@
  * Since: REPLACEME
  **/
 void
-hb_outline_decompose_funcs_destroy (hb_outline_decompose_funcs_t *funcs)
+hb_draw_funcs_destroy (hb_draw_funcs_t *funcs)
 {
   if (!hb_object_destroy (funcs)) return;
 
@@ -191,7 +192,7 @@
 }
 
 /**
- * hb_outline_decompose:
+ * hb_draw:
  * @font: a font object
  * @glyph: a glyph id
  * @funcs: decompose callbacks object
@@ -203,11 +204,11 @@
  * Since: REPLACEME
  **/
 hb_bool_t
-hb_outline_decompose (hb_font_t *font, hb_codepoint_t glyph,
-		    const hb_outline_decompose_funcs_t *funcs,
+hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
+		    const hb_draw_funcs_t *funcs,
 		    void *user_data)
 {
-  if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t) ||
+  if (unlikely (funcs == &Null (hb_draw_funcs_t) ||
 		glyph >= font->face->get_num_glyphs ()))
     return false;
 
diff --git a/src/hb-draw.h b/src/hb-draw.h
new file mode 100644
index 0000000..3f386ce
--- /dev/null
+++ b/src/hb-draw.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright © 2019-2020  Ebrahim Byagowi
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
+
+#ifndef HB_DRAW_H
+#define HB_DRAW_H
+
+#include "hb.h"
+
+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_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
+typedef void (*hb_draw_conic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
+					 hb_position_t to_x, hb_position_t to_y,
+					 void *user_data);
+typedef void (*hb_draw_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
+					 hb_position_t control2_x, hb_position_t control2_y,
+					 hb_position_t to_x, hb_position_t to_y,
+					 void *user_data);
+typedef void (*hb_draw_close_path_func_t) (void *user_data);
+
+/**
+ * hb_draw_funcs_t:
+ *
+ * Glyph decompose callbacks.
+ *
+ * Since: REPLACEME
+ **/
+typedef struct hb_draw_funcs_t hb_draw_funcs_t;
+
+HB_EXTERN void
+hb_draw_funcs_set_move_to_func (hb_draw_funcs_t        *funcs,
+				hb_draw_move_to_func_t  move_to);
+
+HB_EXTERN void
+hb_draw_funcs_set_line_to_func (hb_draw_funcs_t        *funcs,
+				hb_draw_move_to_func_t  line_to);
+
+HB_EXTERN void
+hb_draw_funcs_set_conic_to_func (hb_draw_funcs_t         *funcs,
+				 hb_draw_conic_to_func_t  conic_to);
+
+HB_EXTERN void
+hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t         *funcs,
+				 hb_draw_cubic_to_func_t  cubic_to);
+
+HB_EXTERN void
+hb_draw_funcs_set_close_path_func (hb_draw_funcs_t           *funcs,
+				   hb_draw_close_path_func_t  close_path);
+
+HB_EXTERN hb_draw_funcs_t *
+hb_draw_funcs_create (void);
+
+HB_EXTERN hb_draw_funcs_t *
+hb_draw_funcs_reference (hb_draw_funcs_t *funcs);
+
+HB_EXTERN void
+hb_draw_funcs_destroy (hb_draw_funcs_t *funcs);
+
+HB_END_DECLS
+
+#endif /* HB_DRAW_H */
diff --git a/src/hb-outline.hh b/src/hb-draw.hh
similarity index 76%
rename from src/hb-outline.hh
rename to src/hb-draw.hh
index a66b2d9..6b4c592 100644
--- a/src/hb-outline.hh
+++ b/src/hb-draw.hh
@@ -22,21 +22,21 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  */
 
-#ifndef HB_OUTLINE_HH
-#define HB_OUTLINE_HH
+#ifndef HB_DRAW_HH
+#define HB_DRAW_HH
 
 #include "hb.hh"
 
-struct hb_outline_decompose_funcs_t
+struct hb_draw_funcs_t
 {
   hb_object_header_t header;
 
-  hb_outline_decompose_move_to_func_t move_to;
-  hb_outline_decompose_line_to_func_t line_to;
-  hb_outline_decompose_conic_to_func_t conic_to;
-  hb_outline_decompose_cubic_to_func_t cubic_to;
-  hb_outline_decompose_close_path_func_t close_path;
+  hb_draw_move_to_func_t move_to;
+  hb_draw_line_to_func_t line_to;
+  hb_draw_conic_to_func_t conic_to;
+  hb_draw_cubic_to_func_t cubic_to;
+  hb_draw_close_path_func_t close_path;
 };
 
 
-#endif /* HB_OUTLINE_HH */
+#endif /* HB_DRAW_HH */
diff --git a/src/hb-font.h b/src/hb-font.h
index 01ff201..ca4627f 100644
--- a/src/hb-font.h
+++ b/src/hb-font.h
@@ -33,6 +33,7 @@
 
 #include "hb-common.h"
 #include "hb-face.h"
+#include "hb-draw.h"
 
 HB_BEGIN_DECLS
 
@@ -717,6 +718,10 @@
 hb_font_set_var_named_instance (hb_font_t *font,
 				unsigned instance_index);
 
+HB_EXTERN hb_bool_t
+hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
+		    const hb_draw_funcs_t *funcs, void *user_data);
+
 HB_END_DECLS
 
 #endif /* HB_FONT_H */
diff --git a/src/hb-ot-cff1-table.cc b/src/hb-ot-cff1-table.cc
index 878a022..83bf919 100644
--- a/src/hb-ot-cff1-table.cc
+++ b/src/hb-ot-cff1-table.cc
@@ -28,7 +28,7 @@
 
 #ifndef HB_NO_CFF
 
-#include "hb-outline.hh"
+#include "hb-draw.hh"
 #include "hb-ot-cff1-table.hh"
 #include "hb-cff1-interp-cs.hh"
 
@@ -346,7 +346,7 @@
 struct cff1_path_param_t
 {
   cff1_path_param_t (const OT::cff1::accelerator_t *cff_, hb_font_t *font_,
-		     const hb_outline_decompose_funcs_t *funcs_, void *user_data_,
+		     const hb_draw_funcs_t *funcs_, void *user_data_,
 		     point_t *delta_)
   {
     path_open = false;
@@ -395,7 +395,7 @@
 
   bool path_open;
   hb_font_t *font;
-  const hb_outline_decompose_funcs_t *funcs;
+  const hb_draw_funcs_t *funcs;
   void *user_data;
   point_t *delta;
 
@@ -427,7 +427,7 @@
 };
 
 static bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
-		       const hb_outline_decompose_funcs_t *funcs, void *user_data,
+		       const hb_draw_funcs_t *funcs, void *user_data,
 		       bool in_seac = false, point_t *delta = nullptr);
 
 struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_param_t, cff1_path_procs_path_t>
@@ -449,7 +449,7 @@
 };
 
 bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
-		const hb_outline_decompose_funcs_t *funcs, void *user_data, bool in_seac, point_t *delta)
+		const hb_draw_funcs_t *funcs, void *user_data, bool in_seac, point_t *delta)
 {
   if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
 
@@ -464,7 +464,7 @@
 }
 
 bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph,
-					const hb_outline_decompose_funcs_t *funcs, void *user_data) const
+					const hb_draw_funcs_t *funcs, void *user_data) const
 {
 #ifdef HB_NO_OT_FONT_CFF
   /* XXX Remove check when this code moves to .hh file. */
diff --git a/src/hb-ot-cff1-table.hh b/src/hb-ot-cff1-table.hh
index 3eb254f..08e507c 100644
--- a/src/hb-ot-cff1-table.hh
+++ b/src/hb-ot-cff1-table.hh
@@ -1348,7 +1348,7 @@
     HB_INTERNAL bool get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const;
     HB_INTERNAL bool get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const;
     HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph,
-			       const hb_outline_decompose_funcs_t *funcs, void *user_data) const;
+			       const hb_draw_funcs_t *funcs, void *user_data) const;
 
     private:
     struct gname_t
diff --git a/src/hb-ot-cff2-table.cc b/src/hb-ot-cff2-table.cc
index 847e71a..d772f77 100644
--- a/src/hb-ot-cff2-table.cc
+++ b/src/hb-ot-cff2-table.cc
@@ -30,7 +30,7 @@
 
 #include "hb-ot-cff2-table.hh"
 #include "hb-cff2-interp-cs.hh"
-#include "hb-outline.hh"
+#include "hb-draw.hh"
 
 using namespace CFF;
 
@@ -145,7 +145,7 @@
 
 struct cff2_path_param_t
 {
-  cff2_path_param_t (hb_font_t *font_, const hb_outline_decompose_funcs_t *funcs_, void *user_data_)
+  cff2_path_param_t (hb_font_t *font_, const hb_draw_funcs_t *funcs_, void *user_data_)
   {
     path_open = false;
     font = font_;
@@ -180,7 +180,7 @@
 
   bool  path_open;
   hb_font_t *font;
-  const hb_outline_decompose_funcs_t *funcs;
+  const hb_draw_funcs_t *funcs;
   void *user_data;
 };
 
@@ -211,7 +211,7 @@
 struct cff2_cs_opset_path_t : cff2_cs_opset_t<cff2_cs_opset_path_t, cff2_path_param_t, cff2_path_procs_path_t> {};
 
 bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph,
-					const hb_outline_decompose_funcs_t *funcs, void *user_data) const
+					const hb_draw_funcs_t *funcs, void *user_data) const
 {
 #ifdef HB_NO_OT_FONT_CFF
   /* XXX Remove check when this code moves to .hh file. */
diff --git a/src/hb-ot-cff2-table.hh b/src/hb-ot-cff2-table.hh
index f77fc70..51867a5 100644
--- a/src/hb-ot-cff2-table.hh
+++ b/src/hb-ot-cff2-table.hh
@@ -534,7 +534,7 @@
 				  hb_codepoint_t glyph,
 				  hb_glyph_extents_t *extents) const;
     HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph,
-			       const hb_outline_decompose_funcs_t *funcs, void *user_data) const;
+			       const hb_draw_funcs_t *funcs, void *user_data) const;
   };
 
   typedef accelerator_templ_t<cff2_private_dict_opset_subset_t, cff2_private_dict_values_subset_t> accelerator_subset_t;
diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh
index 7567c98..99f54ab 100644
--- a/src/hb-ot-glyf-table.hh
+++ b/src/hb-ot-glyf-table.hh
@@ -34,7 +34,7 @@
 #include "hb-ot-head-table.hh"
 #include "hb-ot-hmtx-table.hh"
 #include "hb-ot-var-gvar-table.hh"
-#include "hb-outline.hh"
+#include "hb-draw.hh"
 
 #include <float.h>
 
@@ -1045,7 +1045,7 @@
 
     bool
     get_path (hb_font_t *font, hb_codepoint_t gid,
-	      const hb_outline_decompose_funcs_t *funcs, void *user_data) const
+	      const hb_draw_funcs_t *funcs, void *user_data) const
     {
       /* Making this completely alloc free is not that easy
 	 https://github.com/harfbuzz/harfbuzz/issues/2095
diff --git a/src/hb-outline.h b/src/hb-outline.h
deleted file mode 100644
index ab123ca..0000000
--- a/src/hb-outline.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright © 2019-2020  Ebrahim Byagowi
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HB_H_IN
-#error "Include <hb.h> instead."
-#endif
-
-#ifndef HB_OUTLINE_H
-#define HB_OUTLINE_H
-
-#include "hb.h"
-
-HB_BEGIN_DECLS
-
-typedef void (*hb_outline_decompose_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_outline_decompose_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_outline_decompose_conic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
-						      hb_position_t to_x, hb_position_t to_y,
-						      void *user_data);
-typedef void (*hb_outline_decompose_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
-						      hb_position_t control2_x, hb_position_t control2_y,
-						      hb_position_t to_x, hb_position_t to_y,
-						      void *user_data);
-typedef void (*hb_outline_decompose_close_path_func_t) (void *user_data);
-
-/**
- * hb_outline_decompose_funcs_t:
- *
- * Glyph decompose callbacks.
- *
- * Since: REPLACEME
- **/
-typedef struct hb_outline_decompose_funcs_t hb_outline_decompose_funcs_t;
-
-HB_EXTERN void
-hb_outline_decompose_funcs_set_move_to_func (hb_outline_decompose_funcs_t        *funcs,
-					     hb_outline_decompose_move_to_func_t  move_to);
-
-HB_EXTERN void
-hb_outline_decompose_funcs_set_line_to_func (hb_outline_decompose_funcs_t        *funcs,
-					     hb_outline_decompose_move_to_func_t  line_to);
-
-HB_EXTERN void
-hb_outline_decompose_funcs_set_conic_to_func (hb_outline_decompose_funcs_t         *funcs,
-					      hb_outline_decompose_conic_to_func_t  conic_to);
-
-HB_EXTERN void
-hb_outline_decompose_funcs_set_cubic_to_func (hb_outline_decompose_funcs_t         *funcs,
-					      hb_outline_decompose_cubic_to_func_t  cubic_to);
-
-HB_EXTERN void
-hb_outline_decompose_funcs_set_close_path_func (hb_outline_decompose_funcs_t           *funcs,
-						hb_outline_decompose_close_path_func_t  close_path);
-
-HB_EXTERN hb_outline_decompose_funcs_t *
-hb_outline_decompose_funcs_create (void);
-
-HB_EXTERN hb_outline_decompose_funcs_t *
-hb_outline_decompose_funcs_reference (hb_outline_decompose_funcs_t *funcs);
-
-HB_EXTERN void
-hb_outline_decompose_funcs_destroy (hb_outline_decompose_funcs_t *funcs);
-
-HB_EXTERN hb_bool_t
-hb_outline_decompose (hb_font_t *font, hb_codepoint_t glyph,
-		      const hb_outline_decompose_funcs_t *funcs,
-		      void *user_data);
-
-HB_END_DECLS
-
-#endif /* HB_OUTLINE_H */
diff --git a/src/hb.h b/src/hb.h
index 0d1eed0..b0cc06c 100644
--- a/src/hb.h
+++ b/src/hb.h
@@ -32,9 +32,9 @@
 #include "hb-buffer.h"
 #include "hb-common.h"
 #include "hb-deprecated.h"
+#include "hb-draw.h"
 #include "hb-face.h"
 #include "hb-font.h"
-#include "hb-outline.h"
 #include "hb-map.h"
 #include "hb-set.h"
 #include "hb-shape.h"
diff --git a/src/main.cc b/src/main.cc
index 31ca250..1310a7c 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -37,7 +37,7 @@
 #define hb_blob_create_from_file(x)  hb_blob_get_empty ()
 #endif
 
-#if !defined(HB_NO_COLOR) && !defined(HB_NO_OUTLINE)
+#if !defined(HB_NO_COLOR) && !defined(HB_NO_DRAW)
 static void
 svg_dump (hb_face_t *face, unsigned face_index)
 {
@@ -169,7 +169,7 @@
 }
 
 static void
-layered_glyph_dump (hb_font_t *font, hb_outline_decompose_funcs_t *funcs, unsigned face_index)
+layered_glyph_dump (hb_font_t *font, hb_draw_funcs_t *funcs, unsigned face_index)
 {
   hb_face_t *face = hb_font_get_face (font);
   unsigned num_glyphs = hb_face_get_glyph_count (face);
@@ -224,7 +224,7 @@
 	    if (hb_color_get_alpha (color) != 255)
 	      fprintf (f, "fill-opacity=\"%.3f\"", (double) hb_color_get_alpha (color) / 255.);
 	    fprintf (f, "d=\"");
-	    if (!hb_outline_decompose (font, layers[layer].glyph, funcs, &user_data))
+	    if (!hb_font_draw_glyph (font, layers[layer].glyph, funcs, &user_data))
 	      printf ("Failed to decompose layer %d while %d\n", layers[layer].glyph, gid);
 	    fprintf (f, "\"/>\n");
 	  }
@@ -242,7 +242,7 @@
 }
 
 static void
-dump_glyphs (hb_font_t *font, hb_outline_decompose_funcs_t *funcs, unsigned face_index)
+dump_glyphs (hb_font_t *font, hb_draw_funcs_t *funcs, unsigned face_index)
 {
   unsigned num_glyphs = hb_face_get_glyph_count (hb_font_get_face (font));
   for (unsigned gid = 0; gid < num_glyphs; ++gid)
@@ -266,7 +266,7 @@
     user_data_t user_data;
     user_data.ascender = font_extents.ascender;
     user_data.f = f;
-    if (!hb_outline_decompose (font, gid, funcs, &user_data))
+    if (!hb_font_draw_glyph (font, gid, funcs, &user_data))
       printf ("Failed to decompose gid: %d\n", gid);
     fprintf (f, "\"/></svg>");
     fclose (f);
@@ -293,12 +293,12 @@
   fwrite (font_name, 1, strlen (font_name), font_name_file);
   fclose (font_name_file);
 
-  hb_outline_decompose_funcs_t *funcs = hb_outline_decompose_funcs_create ();
-  hb_outline_decompose_funcs_set_move_to_func (funcs, (hb_outline_decompose_move_to_func_t) move_to);
-  hb_outline_decompose_funcs_set_line_to_func (funcs, (hb_outline_decompose_line_to_func_t) line_to);
-  hb_outline_decompose_funcs_set_conic_to_func (funcs, (hb_outline_decompose_conic_to_func_t) conic_to);
-  hb_outline_decompose_funcs_set_cubic_to_func (funcs, (hb_outline_decompose_cubic_to_func_t) cubic_to);
-  hb_outline_decompose_funcs_set_close_path_func (funcs, (hb_outline_decompose_close_path_func_t) close_path);
+  hb_draw_funcs_t *funcs = hb_draw_funcs_create ();
+  hb_draw_funcs_set_move_to_func (funcs, (hb_draw_move_to_func_t) move_to);
+  hb_draw_funcs_set_line_to_func (funcs, (hb_draw_line_to_func_t) line_to);
+  hb_draw_funcs_set_conic_to_func (funcs, (hb_draw_conic_to_func_t) conic_to);
+  hb_draw_funcs_set_cubic_to_func (funcs, (hb_draw_cubic_to_func_t) cubic_to);
+  hb_draw_funcs_set_close_path_func (funcs, (hb_draw_close_path_func_t) close_path);
 
   unsigned num_faces = hb_face_count (blob);
   for (unsigned face_index = 0; face_index < num_faces; ++face_index)
@@ -324,7 +324,7 @@
     hb_face_destroy (face);
   }
 
-  hb_outline_decompose_funcs_destroy (funcs);
+  hb_draw_funcs_destroy (funcs);
 }
 #endif
 
@@ -501,7 +501,7 @@
   hb_blob_t *blob = hb_blob_create_from_file (argv[1]);
   printf ("Opened font file %s: %d bytes long\n", argv[1], hb_blob_get_length (blob));
   print_layout_info_using_private_api (blob);
-#if !defined(HB_NO_COLOR) && !defined(HB_NO_OUTLINE)
+#if !defined(HB_NO_COLOR) && !defined(HB_NO_DRAW)
   dump_glyphs (blob, argv[1]);
 #endif
   hb_blob_destroy (blob);