[GX] Improve weight mapping

Align the 'wght' axis default value to OS/2 weight value and
adjust accordingly.  This makes both default=1.0 and default=400
models to work.
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index b63e630..d4c675a 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1252,15 +1252,17 @@
 	  for (i = 0; i < master->num_axis; i++)
 	  {
 	    double value = instance->coords[i] / (double) (1 << 16);
+	    double default_value = master->axis[i].def / (double) (1 << 16);
+	    double mult = value / default_value;
 	    //printf ("named-instance, axis %d tag %lx value %g\n", i, master->axis[i].tag, value);
 	    switch (master->axis[i].tag)
 	    {
 	      case FT_MAKE_TAG ('w','g','h','t'):
-	        weight_mult = value;
+	        weight_mult = mult;
 		break;
 
 	      case FT_MAKE_TAG ('w','d','t','h'):
-		width_mult = value;
+		width_mult = mult;
 		break;
 
 	      /* TODO optical size! */
@@ -1637,7 +1639,14 @@
 
     if (os2 && os2->version != 0xffff)
     {
-	weight = FcWeightFromOpenType ((int) (os2->usWeightClass * weight_mult + .5));
+	weight = os2->usWeightClass;
+	if (weight < 10 && weight_mult != 1.0)
+	{
+		/* Work around bad values by cleaning them up before
+		 * multiplying by weight_mult. */
+		weight = FcWeightToOpenType (FcWeightFromOpenType (weight));
+	}
+	weight = FcWeightFromOpenType ((int) (weight * weight_mult + .5));
 	if ((FcDebug() & FC_DBG_SCANV) && weight != -1)
 	    printf ("\tos2 weight class %d multiplier %g maps to weight %d\n",
 		    os2->usWeightClass, weight_mult, weight);