Imported Upstream version 2.12.1
[platform/upstream/fontconfig.git] / src / fcweight.c
index 77b78ad..036a518 100644 (file)
@@ -54,14 +54,28 @@ FcWeightFromOpenType (int ot_weight)
 {
        int i;
 
-       /* Follow WPF Font Selection Model's advice. */
-       if (1 <= ot_weight && ot_weight <= 9)
-           ot_weight *= 100;
+       /* Loosely based on WPF Font Selection Model's advice. */
 
-       /* WPF Font Selection Model rejects 1000, we allow it
-        * because Pango uses that number. */
-       if (ot_weight < 1 || ot_weight > 1000)
+       if (ot_weight < 0)
            return -1;
+       else if (1 <= ot_weight && ot_weight <= 9)
+       {
+           /* WPF Font Selection Model says do "ot_weight *= 100",
+            * but Greg Hitchcock revealed that GDI had a mapping
+            * reflected below: */
+           switch (ot_weight) {
+               case 1: ot_weight =  80; break;
+               case 2: ot_weight = 160; break;
+               case 3: ot_weight = 240; break;
+               case 4: ot_weight = 320; break;
+               case 5: ot_weight = 400; break;
+               case 6: ot_weight = 550; break;
+               case 7: ot_weight = 700; break;
+               case 8: ot_weight = 800; break;
+               case 9: ot_weight = 900; break;
+           }
+       }
+       ot_weight = FC_MIN (ot_weight, map[(sizeof (map) / sizeof (map[0])) - 1].ot);
 
        for (i = 1; ot_weight > map[i].ot; i++)
          ;