diff --git a/src/hb-buffer.c b/src/hb-buffer.c index d2ec33dcb888ca036e4681f4b91891c122193a4c..3c6fd7cebfc9f8e6aee3eb0dd48fa2579d0e881c 100644 --- a/src/hb-buffer.c +++ b/src/hb-buffer.c @@ -166,6 +166,15 @@ hb_buffer_add_glyph (hb_buffer_t *buffer, buffer->in_length++; } +void +hb_buffer_set_direction (hb_buffer_t *buffer, + hb_direction_t direction) + +{ + buffer->direction = direction; +} + + /* HarfBuzz-Internal API */ HB_INTERNAL void diff --git a/src/hb-buffer.h b/src/hb-buffer.h index 197c921ea8e122be5bf3cf2a6019868d4ab2992e..1376ad4c0b8ea8e4edceb7e152f354cdb4b2b5c3 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -32,6 +32,13 @@ HB_BEGIN_DECLS +typedef enum _hb_direction_t { + HB_DIRECTION_LTR, + HB_DIRECTION_RTL, + HB_DIRECTION_TTB, + HB_DIRECTION_BTT +} hb_direction_t; + /* XXX Hide structs? */ typedef struct _hb_glyph_info_t { @@ -72,6 +79,8 @@ typedef struct _hb_buffer_t { hb_glyph_info_t *out_string; hb_glyph_info_t *alt_string; hb_glyph_position_t *positions; + + hb_direction_t direction; unsigned int max_lig_id; } hb_buffer_t; @@ -94,6 +103,11 @@ hb_buffer_add_glyph (hb_buffer_t *buffer, unsigned int properties, unsigned int cluster); +void +hb_buffer_set_direction (hb_buffer_t *buffer, + hb_direction_t direction); + + HB_END_DECLS #endif /* HB_BUFFER_H */ diff --git a/src/hb-ot-layout-gpos-private.h b/src/hb-ot-layout-gpos-private.h index 5ad28a619214902d8379ebd419d61914538ee25b..619b4c47f13d82dd21036f06bbf012230dbbde4f 100644 --- a/src/hb-ot-layout-gpos-private.h +++ b/src/hb-ot-layout-gpos-private.h @@ -687,7 +687,7 @@ struct CursivePosFormat1 /* TODO vertical */ - if (gpi->r2l) + if (buffer->direction == HB_DIRECTION_RTL) { POSITION (buffer->in_pos)->x_advance = entry_x - gpi->anchor_x; POSITION (buffer->in_pos)->new_advance = TRUE; diff --git a/src/hb-ot-layout-private.h b/src/hb-ot-layout-private.h index 326440b1b3f30e8d1a7d46a6c4f07a457d6c6987..12b1ee1cd55778760bbc5389dfe9cabeea0b7948 100644 --- a/src/hb-ot-layout-private.h +++ b/src/hb-ot-layout-private.h @@ -52,7 +52,6 @@ struct _hb_ot_layout_t hb_16dot16_t x_scale, y_scale; hb_bool_t dvi; - hb_bool_t r2l; unsigned int last; /* the last valid glyph--used with cursive positioning */ hb_position_t anchor_x; /* the coordinates of the anchor point */ diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 530e2548535dfbfd5858ac72ce5c68174aef8869..b3b0e3c836addcef91b8334db7ad0ce90b2208fb 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -114,13 +114,6 @@ hb_ot_layout_destroy (hb_ot_layout_t *layout) free (layout); } -void -hb_ot_layout_set_direction (hb_ot_layout_t *layout, - hb_bool_t r2l) -{ - layout->gpos_info.r2l = !!r2l; -} - void hb_ot_layout_set_hinting (hb_ot_layout_t *layout, hb_bool_t hinted) diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h index 20bd1e45420bd8b3739ff2c16892a4995f803e77..f1b4b45e06505326f54e0f437ef886c35152e9c7 100644 --- a/src/hb-ot-layout.h +++ b/src/hb-ot-layout.h @@ -53,11 +53,6 @@ hb_ot_layout_create_for_tables (const char *gdef_data, void hb_ot_layout_destroy (hb_ot_layout_t *layout); -/* XXX */ -void -hb_ot_layout_set_direction (hb_ot_layout_t *layout, - hb_bool_t r2l); - void hb_ot_layout_set_hinting (hb_ot_layout_t *layout, hb_bool_t hinted);