[OT] Implement fallback mark positioning for "double" combining marks
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 10 Aug 2012 20:38:44 +0000 (16:38 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 10 Aug 2012 20:38:44 +0000 (16:38 -0400)
src/hb-ot-shape-fallback.cc

index a6e5b16..56a3e7a 100644 (file)
@@ -162,7 +162,14 @@ position_mark (const hb_ot_shape_plan_t *plan,
   {
     case HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW:
     case HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE:
-      /* TODO Do something...  For now, fall through. */
+      if (buffer->props.direction == HB_DIRECTION_LTR) {
+       pos.x_offset += base_extents.x_bearing - mark_extents.width / 2 - mark_extents.x_bearing;
+        break;
+      } else if (buffer->props.direction == HB_DIRECTION_RTL) {
+       pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing;
+        break;
+      }
+      /* Fall through */
 
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: