Clarify cursive_chain (and change its sign)
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 27 Oct 2010 17:44:59 +0000 (13:44 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 27 Oct 2010 17:44:59 +0000 (13:44 -0400)
src/hb-ot-layout-gpos-private.hh
src/hb-ot-layout.cc

index c991a35..6be604e 100644 (file)
@@ -869,12 +869,12 @@ struct CursivePosFormat1
 
     if  (c->lookup_flag & LookupFlag::RightToLeft)
     {
-      c->buffer->pos[i].cursive_chain = i - j;
+      c->buffer->pos[i].cursive_chain = j - i;
       c->buffer->pos[i].y_offset = entry_y - exit_y;
     }
     else
     {
-      c->buffer->pos[j].cursive_chain = j - i;
+      c->buffer->pos[j].cursive_chain = i - j;
       c->buffer->pos[j].y_offset = exit_y - entry_y;
     }
 
index e880b9c..75fa203 100644 (file)
@@ -611,24 +611,25 @@ hb_ot_layout_position_finish (hb_font_t    *font HB_UNUSED,
   /* TODO: Vertical */
 
   /* Handle cursive connections */
-  /* First handle all left-to-right connections */
+  /* First handle all chain-back connections */
   for (j = 0; j < len; j++) {
-    if (pos[j].cursive_chain > 0)
+    if (pos[j].cursive_chain < 0)
     {
-      pos[j].y_offset += pos[j - pos[j].cursive_chain].y_offset;
+      pos[j].y_offset += pos[j + pos[j].cursive_chain].y_offset;
       pos[j].cursive_chain = 0;
     }
   }
-  /* Then handle all right-to-left connections */
+  /* Then handle all chain-forward connections */
   for (i = len; i > 0; i--) {
     j = i - 1;
-    if (pos[j].cursive_chain < 0)
+    if (pos[j].cursive_chain > 0)
     {
-      pos[j].y_offset += pos[j - pos[j].cursive_chain].y_offset;
+      pos[j].y_offset += pos[j + pos[j].cursive_chain].y_offset;
       pos[j].cursive_chain = 0;
     }
   }
 
+
   /* Handle attachments */
   for (i = 0; i < len; i++)
     if (pos[i].back)