/*
- * Copyright (C) 1998-2004 David Turner and Werner Lemberg
- * Copyright (C) 2006 Behdad Esfahbod
- * Copyright (C) 2007,2008,2009 Red Hat, Inc.
+ * Copyright © 1998-2004 David Turner and Werner Lemberg
+ * Copyright © 2006 Behdad Esfahbod
+ * Copyright © 2007,2008,2009 Red Hat, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
#include "hb-ot-layout-gdef-private.hh"
#include "hb-ot-layout-gsub-private.hh"
#include "hb-ot-layout-gpos-private.hh"
+#include "hb-ot-head-private.hh"
#include <stdlib.h>
hb_ot_layout_t *
-_hb_ot_layout_new (hb_face_t *face)
+_hb_ot_layout_create (hb_face_t *face)
{
- /* Remove this object altogether */
+ /* TODO Remove this object altogether */
hb_ot_layout_t *layout = (hb_ot_layout_t *) calloc (1, sizeof (hb_ot_layout_t));
- layout->gdef_blob = Sanitizer<GDEF>::sanitize (hb_face_get_table (face, HB_OT_TAG_GDEF));
+ layout->gdef_blob = Sanitizer<GDEF>::sanitize (hb_face_reference_table (face, HB_OT_TAG_GDEF));
layout->gdef = Sanitizer<GDEF>::lock_instance (layout->gdef_blob);
- layout->gsub_blob = Sanitizer<GSUB>::sanitize (hb_face_get_table (face, HB_OT_TAG_GSUB));
+ layout->gsub_blob = Sanitizer<GSUB>::sanitize (hb_face_reference_table (face, HB_OT_TAG_GSUB));
layout->gsub = Sanitizer<GSUB>::lock_instance (layout->gsub_blob);
- layout->gpos_blob = Sanitizer<GPOS>::sanitize (hb_face_get_table (face, HB_OT_TAG_GPOS));
+ layout->gpos_blob = Sanitizer<GPOS>::sanitize (hb_face_reference_table (face, HB_OT_TAG_GPOS));
layout->gpos = Sanitizer<GPOS>::lock_instance (layout->gpos_blob);
+ layout->head_blob = Sanitizer<head>::sanitize (hb_face_reference_table (face, HB_OT_TAG_head));
+ layout->head = Sanitizer<head>::lock_instance (layout->head_blob);
+
return layout;
}
void
-_hb_ot_layout_free (hb_ot_layout_t *layout)
+_hb_ot_layout_destroy (hb_ot_layout_t *layout)
{
- hb_blob_unlock (layout->gdef_blob);
- hb_blob_unlock (layout->gsub_blob);
- hb_blob_unlock (layout->gpos_blob);
-
hb_blob_destroy (layout->gdef_blob);
hb_blob_destroy (layout->gsub_blob);
hb_blob_destroy (layout->gpos_blob);
+ hb_blob_destroy (layout->head_blob);
free (layout);
}
{
return likely (face->ot_layout && face->ot_layout->gdef) ? *face->ot_layout->gdef : Null(GDEF);
}
-
static inline const GSUB&
_get_gsub (hb_face_t *face)
{
return likely (face->ot_layout && face->ot_layout->gsub) ? *face->ot_layout->gsub : Null(GSUB);
}
-
static inline const GPOS&
_get_gpos (hb_face_t *face)
{
return likely (face->ot_layout && face->ot_layout->gpos) ? *face->ot_layout->gpos : Null(GPOS);
}
+static inline const head&
+_get_head (hb_face_t *face)
+{
+ return likely (face->ot_layout && face->ot_layout->head) ? *face->ot_layout->head : Null(head);
+}
/*
unsigned int
hb_ot_layout_get_ligature_carets (hb_font_t *font,
- hb_face_t *face,
hb_direction_t direction,
hb_codepoint_t glyph,
unsigned int start_offset,
{
hb_ot_layout_context_t c;
c.font = font;
- c.face = face;
- return _get_gdef (face).get_lig_carets (&c, direction, glyph, start_offset, caret_count, caret_array);
+ c.face = font->face;
+ return _get_gdef (c.face).get_lig_carets (&c, direction, glyph, start_offset, caret_count, caret_array);
}
/*
hb_bool_t
hb_ot_layout_position_lookup (hb_font_t *font,
- hb_face_t *face,
hb_buffer_t *buffer,
unsigned int lookup_index,
hb_mask_t mask)
{
hb_ot_layout_context_t c;
c.font = font;
- c.face = face;
- return _get_gpos (face).position_lookup (&c, buffer, lookup_index, mask);
+ c.face = font->face;
+ return _get_gpos (c.face).position_lookup (&c, buffer, lookup_index, mask);
}
void
}
+/*
+ * head
+ */
+
+unsigned int
+_hb_ot_layout_get_upem (hb_face_t *face)
+{
+ return _get_head (face).get_upem ();
+}
+
+
HB_END_DECLS