[HB] Move direction to buffer
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 29 Jul 2009 22:41:25 +0000 (18:41 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 30 Jul 2009 19:38:44 +0000 (15:38 -0400)
pango/opentype/hb-buffer.c
pango/opentype/hb-buffer.h
pango/opentype/hb-ot-layout-gpos-private.h
pango/opentype/hb-ot-layout-private.h
pango/opentype/hb-ot-layout.cc
pango/opentype/hb-ot-layout.h
pango/pango-ot-buffer.c
pango/pango-ot-info.c

index d2ec33d..3c6fd7c 100644 (file)
@@ -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
index 197c921..1376ad4 100644 (file)
 
 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 */
index 5ad28a6..619b4c4 100644 (file)
@@ -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;
index 326440b..12b1ee1 100644 (file)
@@ -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 */
index 143e1f3..c99e8ea 100644 (file)
@@ -115,13 +115,6 @@ hb_ot_layout_destroy (hb_ot_layout_t *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)
 {
index 20bd1e4..f1b4b45 100644 (file)
@@ -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);
index a977e7d..cd65453 100644 (file)
@@ -155,6 +155,8 @@ pango_ot_buffer_set_rtl (PangoOTBuffer *buffer,
                         gboolean       rtl)
 {
   buffer->rtl = rtl != FALSE;
+  hb_buffer_set_direction (buffer->buffer,
+                          buffer->rtl ? HB_DIRECTION_RTL : HB_DIRECTION_LTR);
 }
 
 /**
index 541062a..2a2c147 100644 (file)
@@ -558,8 +558,6 @@ _pango_ot_info_position    (const PangoOTInfo    *info,
   /* XXX */
   _hb_buffer_clear_positions (buffer->buffer);
 
-  hb_ot_layout_set_direction (info->layout,
-                             buffer->rtl);
   hb_ot_layout_set_hinting (info->layout,
                            buffer->font->is_hinted);
   hb_ot_layout_set_scale (info->layout,