1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349
|
Release 1.18.4 (2025-03-08 Emmanuele Bassi <ebassi@gnome.org>)
==============================================================
A new stable release.
The dependency on LZO has been made optional through a build time
configuration toggle. [!580]
You can build Cairo against a Freetype installation that does not have the
FT_Color type. [#792]
Cairo tests now build on Solaris 11.4 with GCC 14. [!599]
The DirectWrite backend now builds on MINGW 11. [!600]
Thanks to Luca Bacci, the DirectWrite backend now supports font
variations and proper glyph coverage. [#877, !602]
Support for Windows 98 has been removed. The minimum requirement for
Windows is now Vista.
Release 1.18.2 (2024-09-01 Emmanuele Bassi <ebassi@gnome.org>)
==============================================================
A new stable release.
The malloc-stats code has been removed from the tests directory [#640]; the
canonical location for it is: https://github.com/behdad/malloc-stats
Cairo now requires a version of pixman equal to, or newer than, 0.40. [!522]
There have been multiple build fixes for newer versions of GCC [!525, !542];
for MSVC [#808]; for Solaris [!540]; and on macOS 10.7 [#810].
PNG errors caused by loading malformed data are correctly propagated to
callers, so they can handle the case. [!524]
Both stroke and fill colors are now set when showing glyphs on a PDF
surface. [#813]
All the font options are copied when creating a fallback font object. [#819]
When drawing text on macOS, Cairo now tries harder to select the appropriate
font name. [#811]
Cairo now prefers the COLRv1 table inside a font, if one is available. [!537]
Cairo requires a C11 toolchain when building. [!479]
Release 1.18.0 (2023-09-20 Emmanuele Bassi <ebassi@gnome.org>)
==============================================================
The first stable cairo release in five years should be cause for celebration.
All the API added in the 1.17 development cycle is now considered stable, and
will not change.
Many thanks to all the contributors for this release.
The cairo-sphinx tool has been removed; we could not find any instruction on
how to use it, and no user answered our call for help. If you were using
cairo-sphinx, please reach out to the cairo maintainers.
Cairo now implements Type 3 color fonts for PDF. Thanks to Adrian Johnson for
his work on this feature.
Khaled Hosny contributed multiple documentation fixes, to ensure that the
cairo API reference is up to date. Khaled also fixed multiple compiler
warnings generated when building cairo.
The XML surface has been removed; it was disabled by default when building
cairo, and we could not find any downstream distributor that would enable
it.
The Tee surface is now automatically enabled. Downstream distributors of
cairo have been enabling for years it in order to build Firefox.
Fujii Hironori and Adrian Johnson fixed multiple issues with the DWrite
font backend.
John Ralls improved the Quartz surface; mainly, Quartz surfaces now use
the main display ColorSpace, speeding up rendering operations.
Cairo now hides all private symbols by default on every platform; the old
"slim" symbols hack to alias internally used symbols has been dropped, in
favor of using `-Bsymbolic-functions` with toolchains that support it.
Uli Schlachter fixed multiple memory leaks in the code base and test suite,
and helped with many reviews and general maintenance.
Marc Jeanmougin added new API to expose the Pixman dithering filter to cairo
patterns; this is currently implemented only for image surfaces.
Release 1.17.8 (2023-01-30 Emmanuele Bassi <ebassi@gnome.org>)
==============================================================
A new cairo snapshot! And it only took less than one year, this time!
Many thanks to everyone who contributed to cairo, and especially
to (in no particular order):
- Adrian Johnson
- Khaled Hosny
- Behdad Esfahbod
- Matthias Clasen
- Uli Schlachter
- Manuel Stoeckl
- Fujii Hironori
- Tim-Philipp Müller
- Luca Bacci
- Caolán McNamara
- John Ralls
In a continuing effort to reduce the amount of legacy code, and increase
the long-term maintainability of cairo, the following backends have been
removed:
- GL and GLES drawing
Additionally, cairo's Autotools build system has been removed; from now on,
cairo will only support the Meson build system. While the end result should
be identical, further testing is appreciated.
In this snapshot, cairo gained support for rendering COLRv1 fonts, and
rendering SVG and COLRv1 fonts with custom palettes.
Support for macOS and Windows has been improved, with lots of build and bug
fixes.
Lots of safety issues have been fixed, with array bounds checking and
plugging memory leaks, as well as fixes for bugs identified via fuzzying.
This is going to be the last snapshot of the 1.17 development cycle; we only
expect minor bug fixing and improvements until the 1.18.0 release.
Release 1.17.6 (2022-03-18 Emmanuele Bassi <ebassi@gnome.org>)
==============================================================
I spy with my little eye… a cairo snapshot!
First of all, many, many thanks to everyone who contributed to cairo
during this development cycle. A special thank you goes to:
- Adrian Johnson
- Uli Schlachter
for their tireless efforts in ensuring that the lights are still on
in the cairo project.
This snapshot sees the removal of the following backends and platform
support:
- Qt4
- BeOS
- OS/2
- DirectFB
- DRM
- Cogl
- OpenVG
Thanks to all past contributors for their work on them. If you were using
any of these backends then you will need to stick to cairo 1.16.
To offset the removal of the backends above, Adrian Johnson landed the
DWrite font rendering backend on Windows.
There have been multiple improvements in the Quartz backend, courtesy of
John Ralls.
Tim-Philipp Müller has kept the Meson build in top shape.
This snapshot is going to be the **last** release of cairo with the
Autotools build system. The Meson build has seen many improvements and
it is considerably easier to maintain and faster to build.
Release 1.17.4 (2020-11-27 Bryce Harrington <bryce@bryceharrington.org>)
========================================================================
Thank you to the many people who have contributed the large number of
bug fixes and refinements since 1.17.2.
A particularly noteworthy improvement in this release is the addition of
the meson build system as an alternative to autotools. Autotools is
still used for producing the releases, so will be the default in the
tarball and presumably will still be preferred by distro packagers of
Cairo. It should be possible to build the release tarball using meson,
but as this is new functionality consider it still a work in progress.
The meson configuration has striven to track the autotools
implementation but be aware there may still be some differences between
the two.
Continuous Integration configurations have been added that enable
testing on a variety of platforms including Fedora, Windows MSVC, etc.
This work has helped in identifying updates and fixes including
adjusting to changes in API calls in dependencies like rsvg and
fontconfig, and to fix platform-specific build issues.
The cogl Cairo backend underwent significant development this cycle.
Cogl provides GPU accelerated drawing support. The development work
includes implementation of core functionality, performance
optimizations, and stabilization.
Subpixel positioning support allows improved glyph outlines with the
FreeType font backend.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.17.4
[On a personal note, this will be my last release for Cairo. My Cairo
time availability has been non-existent (particularly this crazy past
year). The release process is well documented and hopefully will help
whomever picks up the baton from here.]
Release 1.17.2 (2019-01-31 Bryce Harrington <bryce@bryceharrington.org>)
========================================================================
This snapshot provides the new support for writing floating point
formats as 16 bpc PNGs, with support for RGBA128F and RGB96F formats.
This new feature increases Cairo's pixman version requirement to 0.36.0.
Beyond this are a range of bugfixes and some work on establishing CI for
Cairo.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.17.2
API Changes
-----------
None
Dependency Changes
------------------
pixman 0.36.0
Release 1.16.0 (2018-10-19 Bryce Harrington <bryce@bryceharrington.org>)
========================================================================
This new stable release incorporates a number of improvements made in
the four years since 1.14.0.
Of particular note is a wealth of work by Adrian Johnson to enhance PDF
functionality, including restoring support for MacOSX 10.4, metadata,
hyperlinks, and more.
Much attention also went into fonts, including new colored emoji glyph
support, variable fonts, and fixes for various font idiosyncrasies.
Other noteworthy changes include GLESv3 support for the cairo_gl
backend, tracking of SVG units in generated SVG documents, and cleanups
for numerous test failures and related issues in the PDF and Postscript
backends.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.16.0
Features and Enhancements
-------------------------
* Add support for OpenGL ES 3.0 to the gl backend.
* The PDF backend has gained support for a range of widely used
features, including thumbnails, page labels, metadata, document
outlines, structured text, hyperlinks, and tags. Tags permit adding
logical info such as headings, tables, figures, etc. that facilitates
indexing, accessibility, text reflow, searching, and extraction of the
tagged items to other software. For details on this new PDF
functionality, see:
https://lists.cairographics.org/archives/cairo/2016-June/027427.html
* Variable font support. Variable fonts are single font files with
various typography characteristics, such as weight or slant, that users
of the font can adjust between two points. Effectively this enables a
single font to behave as multiple fonts.
* Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when
moving to the CoreText API. Now we automatically detect which API to
use via dynamic linking, so can resume supporting this older version
of MacOSX.
* Support colored emoji glyphs, stored as PNG images in OpenType fonts.
* Skia backend is removed
* Use Reusable streams for forms in Level 3 Postscript.
* Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files.
* Add CCITT_FAX mime type for PDF and PS surfaces
* svg: add a new function to specify the SVG document unit
(Bug #90166)
* Use UTF-8 filenames on Windows
API Changes
-----------
Several new APIs were added. No existing APIs were altered.
New PDF functionality:
* cairo_pdf_surface_add_outline
* cairo_pdf_surface_set_metadata
* cairo_pdf_surface_set_page_label
* cairo_pdf_surface_set_thumbnail_size
* cairo_tag_begin
* cairo_tag_end
* CAIRO_STATUS_TAG_ERROR
New error status items for problems relating to PDF tagging:
* CAIRO_STATUS_WIN32_GDI_ERROR
* CAIRO_STATUS_FREETYPE_ERROR
* CAIRO_STATUS_PNG_ERROR
New error status items for handling of GDI, libfreetype, and libpng
errors, respectively.
Setting up Win32 surfaces for HDC with alpha channels:
* cairo_win32_surface_create_with_format
New API for added PDF functionality (see above), and new error
status item for problems relating to PDF tagging.
Variable fonts:
* cairo_font_options_get_variations
* cairo_font_options_set_variations
Tracking units in SVG documents:
* cairo_svg_surface_set_document_unit
* cairo_svg_surface_get_document_unit
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Notable Bug Fixes
-----------------
* Fix thin lines that don't show up when printing in Inkscape due to
overly aggressive culling.
(Bug #77298)
* Fix playback of recording surfaces into PDF surfaces, where objects
with negative coordinates were not getting drawn. To address this,
the coordinate systems for PDF and PS have been changed to match
cairo's coordinate system. This allows recording surfaces to be
emitted in cairo coordinates, and results in the same origin being
used for all operations when using the recording surface XObject.
Test cases for PDF and PS have also been updated accordingly.
(Bug #89232)
* Fix "invalidfont" error on some printers when printing PDFs with
embedded fonts that have glyphs (such as spaces) with
num_contours == 0. (Bug #79897)
* Fix missing glyphs such as thin dashes, which get scaled to 0 in
userspace and thus have their drawing operations culled. (Bug #94615)
* Fix other oddities caused by variously idiosyncratic fonts.
* Fix a data race in freed_pool discovered by Firefox's cairo usage.
The patch adads atomic int load and store functions, with relaxed
memory ordering. (Bug #90318)
* Handle SOURCE and CLEAR operators when painting color glyphs.
(Bug #102661)
* Fix falling back to system font with PDFs using certain embedded
fonts, due to truncated font names.
(Bug #103249)
* Prevent curved strokes in small ctms from being culled from vector
surfaces
(Bug #103071)
* Fix assertion hit with PDFs using Type 4 fonts rendered with user
fonts, due to error when destroying glyph page.
(Bug #103335)
* Prevent invalid ptr access for > 4GB images.
(Bug #98165)
* pdf: Fix internal links pointing to other pages, by pre-calculating
page heights so that link positions can be calculated more accurately.
* Fix error reporting in the xcb backend if fallback fails. Instead of
returning NULL when the X11 server can't do some operation, return a
surface in an error state.
* Clarify documentation regarding device scale inheritance and the units
used in cairo_surface_create_similar_image.
(Bug #99094)
* Call XSync in the xlib backend before setting the error handler to
ignore errors for certain requests, to make sure all pending errors
are handled first.
* Fix regression with text containing space character on Win32.
(Bug: https://gitlab.freedesktop.org/cairo/cairo/issues/339)
For a more comprehensive listing of fixed bugs, see the release notes for the
individual 1.15.x releases.
Release 1.15.14 (2018-09-19 Bryce Harrington <bryce@bryceharrington.org>)
============================================================================
We're nearly ready to finalize the 1.16.0 release, so this snapshot
can be considered a beta for 1.16.
The most notable change this release is a performance optimization for
windows, discussed below. Other than that, much of the development
focus was on final polish and stability as we prepare for 1.16.
Some attention went into getting the testsuite passing at least for the
image backend. The Cairo testsuite depends on external software like
Pixman, and changes in the rendering behavior of these dependencies
change test behavior, leading to false positives.
Results from the Coverity static testing tool were also reviewed. Most
of the issues flagged were false positives, but there were several
legitimate problems found and fixed.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.15.14
Features and Enhancements
-------------------------
* Add more FreeeType font color conversions to support COLR/CPAL
* Update test reference images against current pixman
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
Vasily Galkin introduced a Win32 performance optimization for
CAIRO_OPERATOR_SOURCE when copying data from a backbuffer to an argb32
surface corresponding to a Win32 DC. With this, argb32 drawing should
perform as fast as typical dibsection-buffered GDI drawing. See the
Cairo mailing list for April 2018 for data and discussion of the
performance improvements.
Bug Fixes
---------
* Fix crash when rendering Microsoft's Segoe UI Emoji Regular font.
* Fix build breakage with glesv3 enabled due to non-existant glesv3.pc.
* Fix memory leaks found by Coverity
* Fix incorrect null ptr handling found by Coverity
* Fix test compilation when font-config is disabled
* Use _cairo_malloc instead of malloc (Bug #101547) (CVE-2017-9814)
* Fix assertion failure in the freetype backend (Bug #105746)
Release 1.15.12 (2018-04-04 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
The main focus for this release is the addition of Variable Font
support. Variable fonts are single font files with various typography
characteristics, such as weight or slant, that users of the font can
adjust between two points. Effectively this enables a single font to
behave as multiple fonts.
The Skia backend is disabled in this release, due to severe bitrot, and
will be removed in future releases. Contact the cairo team if you have
a need of this backend.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.15.12
Features and Enhancements
-------------------------
* Variable font support
* Skia backend is disabled
API Changes
-----------
* cairo_font_options_get_variations() and
cairo_font_options_set_variations() are added.
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Fix errors in csi-trace --help and --version options
* Fix a 'memory leak' in the image compositor, with
pixman_glyph_cache_t.
* Fix access of uninitialized memory found by valgrind
(Bug #91271)
* Fix improper initialization of memory in
_cairo_ft_font_face_create_for_pattern()
(Bug #105084)
* Fix multi-monitor virtual desktop with negative coords on Win32
(Bug #100793)
* Fix issues occurring with older FreeType versions.
Release 1.15.10 (2017-12-07 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
This release adds GLESv3 support to the cairo_gl backend, adds
tracking of SVG units in generated svg documents, and cleans up numerous
test failures and related issues in the PDF and Postscript backends.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.15.10
Features and Enhancements
-------------------------
* Add support for OpenGL ES 3.0 to the gl backend.
* Use Reusable streams for forms in Level 3 Postscript.
* Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files.
* Add CCITT_FAX mime type for PDF and PS surfaces
* svg: add a new function to specify the SVG document unit
(Bug #90166)
* Use UTF-8 filenames on Windows
API Changes
-----------
* cairo_svg_surface_set_document_unit() and
cairo_svg_surface_get_document_unit()
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Fix regression in gles version detection
* Fix undefined-behavior with integer math.
* Handle SOURCE and CLEAR operators when painting color glyphs.
(Bug #102661)
* Convert images to rgba or a8 formats when uploading with GLESv2
* Use _WIN32 instead of windows.h to check for windows build.
* Fix sigabrt printing documents with fonts lacking the mandatory .nodef
glyph.
(Bug #102922)
* Prevent curved strokes in small ctms from being culled from vector
surfaces
(Bug #103071)
* Fix painting an unbounded recording surface with the SVG backend.
* Fix falling back to system font with PDFs using certain embedded
fonts, due to truncated font names.
(Bug #103249)
* Fix handling of truetype fonts with excessively long font names
(Bug #103249)
* Fix race conditions with cairo_mask_compositor_t
(Bug #103037)
* Fix build error with util/font-view
* Fix assertion hit with PDFs using Type 4 fonts rendered with user
fonts, due to error when destroying glyph page.
(Bug #103335)
* Set default creation date for PDFs
* Prevent invalid ptr access for > 4GB images.
(Bug #98165)
* Prevent self-copy infinite loop in Postscript surface.
* Fix padded image crash in Postscript surface.
* Fix annotation bugs in PDFs and related memory leaks
* Fix test failures and other assorted issues in ps and pdf code.
* Fix code generation when using GCC legacy atomic operations
(Bug #103559)
* Fix various compilation warnings and errors.
* Fix various distcheck errors with private symbols, doxygen formatting,
etc.
Release 1.15.8 (2017-08-29 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
This small snapshot provides new colored emoji glyph support, and a
handful of minor fixes.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.15.8
Features and Enhancements
-------------------------
* Support colored emoji glyphs, stored as PNG images in OpenType fonts.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* pdf: Fix internal links pointing to other pages, by pre-calculating
page heights so that link positions can be calculated more accurately.
* image: Fix crash on negative lengths
* win32: Fix initialization of mutexes for static builds
* pdf: Don't emit /PageLabel dict when no labels defined
* font: Fix color font loading on big-endian systems
* font: Fix color font support infinite-loop with empty glyphs
* Fix off by one check in cairo-image-info.c
Release 1.15.6 (2017-06-13 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
This new snapshot incorporates changes over the past half-year since the
1.15.4 snapshot, including all the fixes from the 1.14 release series.
The PDF code continues to be enhanced, and we're restored MacOSX 10.4
support. Font-related fixes and improved error handling for X round out
the release.
For a complete log of changes, please see
https://cairographics.org/releases/ChangeLog.1.15.6
Features and Enhancements
-------------------------
* Detect if variable fonts have synthesized bold/italic or non-default
variants, and use a fallback font where needed.
* Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when
moving to the CoreText API. Now we automatically detect which API to
use via dynamic linking, so can resume supporting this older version
of MacOSX.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Fix error reporting in the xcb backend if fallback fails. Instead of
returning NULL when the X11 server can't do some operation, return a
surface in an error state.
* Call XSync in the xlib backend before setting the error handler to
ignore errors for certain requests, to make sure all pending errors
are handled first.
* Fix text-glyph-range for quartz-font. Use 0xFFFF instead of 0 for
invalid index tracking.
* Fix handling of Supplementary Multilingual Plane (SMP) Unicode
characters in quartz-font.
* Fix various issues in the drm backend including updating API usage and
general code cleanup.
* Clarify documentation regarding device scale inheritance and the units
used in cairo_surface_create_similar_image.
Bug #99094.
Release 1.15.4 (2016-12-9 Bryce Harrington <bryce@osg.samsung.com>)
=======================================================================
This new snapshot incorporates changes over the past year since the
1.15.2 snapshot, including all the fixes from the 1.14 release series.
Of particular note in this snapshot is a wealth of work by Adrian
Johnson to enhance PDF support, as well as numerous bug fixes provided
by him and other contributors.
For a complete log of changes since the last release, please see:
https://cairographics.org/releases/ChangeLog.1.15.4
Features
--------
* The PDF backend has gained support for a range of widely used
features, including thumbnails, page labels, metadata, document
outlines, structured text, hyperlinks, and tags. Tags permit adding
logical info such as headings, tables, figures, etc. that facilitates
indexing, accessibility, text reflow, searching, and extraction of the
tagged items to other software. For details on this new PDF
functionality, see:
https://lists.cairographics.org/archives/cairo/2016-June/027427.html
API Changes
-----------
cairo_win32_surface_create_with_format
Added a cairo API to set up Win32 surfaces for HDC with alpha channels.
cairo_pdf_surface_add_outline
cairo_pdf_surface_set_metadata
cairo_pdf_surface_set_page_label
cairo_pdf_surface_set_thumbnail_size
cairo_tag_begin
cairo_tag_end
CAIRO_STATUS_TAG_ERROR
New API for added PDF functionality (see above), and new error
status item for problems relating to PDF tagging.
CAIRO_STATUS_WIN32_GDI_ERROR
CAIRO_STATUS_FREETYPE_ERROR
CAIRO_STATUS_PNG_ERROR
New error status items for handling of GDI, libfreetype, and libpng
errors, respectively.
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Bug fixes from 1.15.2 (see the 1.15.2 NEWS for details)
* Fix playback of recording surfaces into PDF surfaces, where objects
with negative coordinates were not getting drawn. To address this,
the coordinate systems for PDF and PS have been changed to match
cairo's coordinate system. This allows recording surfaces to be
emitted in cairo coordinates, and results in the same origin being
used for all operations when using the recording surface XObject.
Test cases for PDF and PS have also been updated accordingly.
(Bug #89232)
* Fix "invalidfont" error on some printers when printing PDFs with
embedded fonts that have glyphs (such as spaces) with
num_contours == 0. (Bug #79897)
* Fix missing glyphs such as thin dashes, which get scaled to 0 in
userspace and thus have their drawing operations culled. (Bug #94615)
* Fix other oddities caused by variously idiosyncratic fonts.
* Fix deadlock when destruction of a scaled font indirectly triggers
destruction of a second scaled font, causing the global cache to be
locked twice. (Bug #93891)
* Fix X errors reported to applications when shmdt() is called before
the Attach request is processed, due to missing xcb and xlib calls.
* Fix random failure in record-paint-alpha-clip-mast test case, caused
by an incorrect assumption that a deferred clear can be skipped.
(Bug #84330)
* Fix crash when dealing with an XShmGetImage() failure, caused by a
double free in _get_image_surface(). (Bug #91967)
* Fix invalid execution of ASCII85 data by the PS interpreter that the
image operator didn't use, by flushing the extraneous data after
drawing the image. (Bug #84811)
* Fix decoding of Adobe Photoshop's inverted CMYK JPEG files in PDF
export.
* Fix unbounded surface assertion in win32-print code.
* Fix a data race in freed_pool discovered by Firefox's cairo usage.
The patch adads atomic int load and store functions, with relaxed
memory ordering. (Bug #90318)
* Cleanup debugging text sent to stdout instead of log. (Bug #95227)
* Fix build issue when using non-GNU strings utility. (Bug #88639)
* Fix build of cairo modules as regular modules, not as versioned shared
libraries. (Bug #29319)
* Fix build on win32 using gcc 5.4.
* Fix build of script backend to require zlib.
* Update test suite reference images using Debian Jessie 64-bit and
poppler current as of June, 2016.
* Various improvements to documentation and tests, compiler warning
fixes, and an assortment of code refactoring and cleanup.
Release 1.15.2 (2015-12-10 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
This release is largely a rollup to include a variety of fixes that
didn't make the cut for the stable 1.14.2 and 1.14.4 releases, as well
as all the fixes from those releases. Notably this includes a highly
requested new API for Win32 surfaces.
For a complete log of changes since the last release, please see:
https://cairographics.org/releases/ChangeLog.1.15.2
Features
--------
None
API Changes
-----------
cairo_win32_surface_create_with_format
Added a cairo API to set up Win32 surfaces for HDC with alpha channels.
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* All the bug fixes from 1.14.2, 1.14.4, and 1.14.6
* Fix xcb/xlib compilation and calls. Make image boxes behave when SHM
is not available.
* Fix various issues with printing and transparent images on Win32.
* Fix thin lines that don't show up when printing in Inkscape due to
overly aggressive culling.
(Bug #77298)
* Fix broken printing via pdf when glyph 0 is used for rendering,
resulting in missing spaces and letters.
(Bug #89082)
* Fix crash for certain glyphs in opentype fonts.
(Bug #91902)
* Fix incorrect rendering of SVG paths with more than one subpath. If
more than one trap is passed in then it's guaranteed that the returned
traps will have their left edge to the left of their right edge, but
if only one trap is passed in then the function always returns without
doing anything.
(Bug #90984)
* Improve rendering with Quartz to better match pixman's blending and
filtering behavior.
Release 1.14.6 (2015-12-09 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
Simple bugfix release to fix one Windows issue.
For a complete log of changes since 1.14.4, please see:
https://cairographics.org/releases/ChangeLog.1.14.6
Features
--------
None
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Fix failure on Windows due to reference of the function
cairo_win32_surface_create_with_format(), which isn't included in the
1.14.4 release. (Bug #92771)
Release 1.14.4 (2015-10-28 Bryce Harrington <bryce@osg.samsung.com>)
========================================================================
Just in time for Halloween we see another bug-fix release for Cairo.
This brings a few dozen straightforward bug fixes with no API changes.
In addition, this includes a typical assortment of fixes to tests,
cleanup of warnings and memory leaks, correction of misspellings,
updates to documentation, etc.
For a complete log of changes since 1.14.2, please see:
https://cairographics.org/releases/ChangeLog.cairo-1.14.4
Features
--------
None
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
None
Bug Fixes
---------
* Avoid appending empty slots to user data arrays. Fixes a memory
consumption regression since commit 9341c254a.
* Return a better error (file-not-found) when setting up pango on
devices where the font files don't have read permissions.
* Fix regression in the font size of canvas text in Inkscape when
compiled with the Quartz backend. (Bug #84324)
* Fix _cairo_gl_shader_bind_matrix() to maintain compatibility with
OpenGL ES 2.0. Manually transpose the matrix.
* Fix incorrect font descriptor conversion when the font matrix yy is
negative. (Bug #90538)
* Fix crash when using a complex path for clip and stroke due to
discarding the intersection exactly at the top edge.
(Bug #74779)
* Fix cairo_get_locale_decimal_point() on Android
* Fix compilation problem on AIX due to conflicting usage of symbol
'jmpbuf'. (Bug #89339)
* Fix broken rendering with XCB due to snapshotting of uploaded part of
surfaces. (Bug #67505)
* Fix loss of alpha when copying a mask for a cairo recording surface,
resulting in a double copy. (Bugs #73038, #73901)
* Fix incorrect recording of certain paths with script surfaces.
(Bug #91054)
* Fix typo in definition of MAYBE_WARN in configure script.
(Bug #89750)
* Fix use of filename variable after it's been freed.
(Bug #91206)
* Fix out of bounds access when printing pattern.
(Bug #91266)
* Fix incorrect size calculation in glyph cache unlocking for Cairo GL
compositor.
(Bug #91321)
* Fix memory leak in _cairo_gl_pattern_texture_setup()
(Bug #91537)
* Fix transparent images in win32-print.
(Bug #91835)
* Fix _put_shm_image_boxes and _put_image_boxes when no SHM available
with XCB.
Release 1.14.2 (2015-03-09 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
This release provides collected bug fixes, along with one feature
enhancement for the xcb backend, and a small performance improvement for
fonts.
The running theme of the bug fixes is platform-specific issues, both
build and run-time. Platforms with fixes include Sparc, AIX, Windows
(mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF
issues round out our list.
It's come to light that changes in cairo 1.14 resulted in breakage on
MacOS X 10.4. We've not yet determined whether to fix up the support,
or excise the 10.4-specific code and support only OS X 10.5 or newer.
Meantime, we'll only advertise cairo as working on OS X 10.5.
Features
--------
* Improve xcb's handling of per-screen subpixel ordering. If no
Xft.rgba property is specified, default to the screen's subpixel
order.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
* Improve performance of cpu_to_be32 and be32_to_cpu, making truetype
subsetting of large fonts run about 15% faster.
Bug Fixes
---------
* Fix unaligned access on sparc with the compact font format (CFF).
Unlike truetype, all data in CFF is not aligned.
(Debian bug #712836)
* Fix unaligned access on sparc with tor-scan-converter's memory pool.
* Fix crash when loading a PDF with a transformed image.
(fdo bug #85151)
* Fix regression on mingw for bigendian test due to removal of file
extension for executables.
(fdo bug #85120)
* Fix handling of backslash in PDF interpreter
(fdo bug #85662)
* Fix crash in xlib and xcb renderers when swapping a 0-sized glyph
* Fix bug with RTL text in PDF operators
(fdo bug #86461)
* Fix compilation 'cairo-path-stroke-traps.c' with MSVC8
(fdo bug #84908)
* Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is
negative.
* Fix valgrind error by releasing pattern created by
cairo_pattern_create_rgb().
* Fix valgrind errors when running cairo-test-suite.
* Fix memory leak in recording surface replays
(fdo bug #87898)
* Fix destruction of fonts in api-special-cases test.
(fdo bug #87567)
* Fix duplicated surface push on similar-image, preventing trivial GTK3
program traces from being replayable, with an error message about
invalid values for the size of the input.
(fdo bug #73580)
* Fix crash when win32 surface's image size does not cover the entire
surface.
(fdo bug #53121)
* Fix crash due to obsolete CGFontGetGlyphPath call
(fdo bug #84324)
* Fix several build issues on AIX
(fdo bugs #89338, #89340, #89356, #89354)
* Fix various documentation warnings and errors
Release 1.14.0 (2014-10-13 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
Hard to believe it's been over a year since our last release, but it's
not for lack of activity. This release includes contributions of a wide
assortment of bug fixes, build system improvements, warnings cleanups,
codebase refactoring, test suite repairs, and static analysis work.
This release is lighter on features (compared with 1.12.10) but includes
a highly demanded rehaul of our image downscaling functionality, which
solves a serious problem experienced by Inkscape users when shrinking
embedded bitmaps in SVG files. The new scaling algorithms are used by
the image backend and by other backends as needed for fallbacks.
Features
--------
Filtering improvements for the image backend, in particular
down-scaling of images produces filtered images that depend on all the
pixels of the source. When using the image backend you get the
following settings:
CAIRO_FILTER_GOOD: uses a box filter for scales less than .75 in
either direction. For scales larger than this, the same filter as
CAIRO_FILTER_BILINEAR is used.
CAIRO_FILTER_BEST: uses a Catmull-Rom filter always. When upscaling
more than 2x this will produce anti-aliased square pixels, similar
to OS/X.
CAIRO_FILTER_GAUSSIAN: uses PIXMAN_FILTER_BEST, which in current
pixman is the same as BILINEAR. (This is subject to change in the
future).
xlib and xcb also use the image fallback for GOOD/BEST filters, but
note that other backends do not implement these filtering fixes yet,
however other actions may cause them to use an image fallback which
will cause these filters to be used.
Improve handling of device transformation and scaling, allowing Cairo
to now support scaling at a device level, permitting easier, more
transparent HiDPI support.
Support JBIG2 mime data in PDF. This allows embedding of more
compressed JPEG formats within PDF, rather than including the full
uncompressed image. Also, reduce the number of transparency groups
used by PDF to keep the file size small and viewing/printing of the
PDF fast.
Expand the embedding section to include stencil mask support.
Reorder font declarations to be in natural order.
Update the Skia backend to build against current Skia (as of June
2014).
Drop Link-Time Optimization (LTO) support from build system. This
seems to have caused much trouble for unclear benefit, and most
distros are reverting or disabling it anyway.
Optimize VBO size on GL to 1M and to 16k for EGL. This improves
(theoretical) performance for desktop GLX use cases while avoiding
hitting VBO memory size limitations on embedded devices.
API Changes
-----------
cairo_surface_set_device_scale, cairo_surface_get_device_scale:
Sets a scale that is multiplied to the device coordinates
determined by the CTM when drawing to @surface. One common use for
this is to render to very high resolution display devices at a scale
factor, so that code that assumes 1 pixel will be a certain size
will still work.
cairo_egl_device_get_display, cairo_egl_device_get_context:
Support get/set of EGLContext and EGLDisplay for egl-based cairo
devices, similar to GLX.
Dependency Changes
------------------
Cairo now requires glib 2.14 for its gobject helper functions,
and pixman 0.30 for downscaling.
Bug fixes
---------
Don't embed CMYK Jpeg images in svg.
Fix tests to place output in proper location.
Fix determination of alpha for all surfaces when recording.
Extend oversize check to cairo_gl_surface_create_for_texture, so an
error surface is returned if the texture is too large to render to.
Fix embedding of mime data in PDF and PS files.
Remove useless error handling in *_reply() functions in XCB.
Fix a double-free exposed by multithreaded apps creating and
destroying the same font concurrently.
https://bugs.freedesktop.org/show_bug.cgi?id=69470
Fix corrupt stacks produced by bugs in operand emission for trace.
Fix out of bounds array access in format cache for xlib
Don't rename glyphs used by seac operator. This can cause certain
combined characters to use their decorations (e.g. umlauts on ö) to be
lost during printing of PDFs using evince.
https://bugs.freedesktop.org/show_bug.cgi?id=70364
Fix crash on calling cairo_create with a finished surface
Fix SSIZE_T definition problem when making with MSYS on Windows7
Fix one off issue in gl context cleanup
Fix usage of CAIRO_STACK_ARRAY_LENGTH
Fix rectangle stroke with non rectilinear pen
Fix imagemask with pattern source failure on some printers. This bug
could cause files converted using pdftops to fail for example on Ricoh
printers, or opening in Adobe Distiller on Windows.
https://bugs.freedesktop.org/show_bug.cgi?id=69485
Fix whitespace in font names
Fix page size in generated PDFs. When printing using pdftocairo on
larger page sizes, such as 11x17, the image would be cropped to letter
size.
https://bugs.freedesktop.org/show_bug.cgi?id=73452
Fix path-currentpoint test by preserving current-point in
copy_path()/append_path() sequence
Fix generation of HTML in code docs for
cairo-format-stride-for-width. Raw HTML code was being passed
to the browser, instead of displaying normally.
https://bugs.freedesktop.org/show_bug.cgi?id=63257
Fix spelling of "tessellator" throughout code. We're using the
American rather than British spelling of this word.
https://bugs.freedesktop.org/show_bug.cgi?id=50411
Fix crash in pixman_image_composite32
Fix crash when trying to modify a (const) all-clipped cairo_clip_t
https://bugs.freedesktop.org/show_bug.cgi?id=75819
Add check_composite method to all compositors, to fix crashes in the
test suite.
Fix crash in Firefox when scrolling on certain pages.
Fix memory leaks found by static analysis.
Fix build of any2ppm if fork is not available.
Fix broken build for Qt backend, due to missing libstdc++.
Fix typo in two cairo_uint128 functions. Fixes potential build issues
on systems without a uint128 type.
Fix build when --enable-pdf=no
Fix cache_frozen assertions for Win32 print.
Correctly check for xcb image surface for inplace upload
Fix webkit-based web browser crashes due to empty boxes by skipping
over them when tesselating.
Make pixman, libpng, and zlib paths commandline configurable for win32
builds.
Fix image scale on Win32 when GDI scale is not identity.
Fix float endian configure test when using clang -O4
Fix compilation with Android bionic libc
Don't try to build util/sphinx on Windows
Fix loss of precision when emitting joins. This was caused by
discrepancies in line gradients when passing trapezoids around.
Fix loss of precision and associated rendering issues in
cairo-tor-scan-converter from projection onto sample grid.
Fix pixman oversampling of neighbouring edges within a cell by
eliminating self-intersections for the pixman traps compositor.
Fix multi-line string splitting in PDFs
Various cleanups and fixes to warnings, documentation, tests, and
build system. Improve error handling and return value checks.
Cleanup XFAIL tests and reference images. Cover recently added
functionality.
Release 1.12.16 (2013-08-21 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
Thanks to everybody who reported a bug and helped us develop a fix,
we have amassed quite a few bug fixes. There are still more outstanding
bugs that seek attention and a little bit of TLC, but this release has
been delayed long enough...
Bug fixes
---------
Set the correct orientation for simple boxes with a negative scale
factor.
Fix the creation of the shading dictionary in PDF.
Fix a crash in PDF when incorporating an image with CAIRO_EXTEND_PAD.
https://bugs.freedesktop.org/show_bug.cgi?id=61451
Avoid upscaling bitmap fonts if possible.
Fix an assertion failure within the mempool allocator for shared memory.
Fix allocation size for CFF subsets.
Export cairo_matrix_t for GObject bindings.
Fix a double free in the Quartz backend.
https://bugs.freedesktop.org/show_bug.cgi?id=62885
Fix origin of GDI StretchBlits for the Windows backend
https://bugs.freedesktop.org/show_bug.cgi?id=61876
Fix error propagation for requests to create a similar surface with
negative size.
https://bugs.freedesktop.org/show_bug.cgi?id=63196
Fix complex clipping of trapezoids with regions
https://bugzilla.gnome.org/show_bug.cgi?id=697357
Stop leaking the image data when loading PNGs
Fix unbounded operations with a clip mask through the span compositor
https://bugs.freedesktop.org/show_bug.cgi?id=61592
Add missing checks before rendering to a finished surface - so we return
an error rather than hit an assert.
https://bugs.freedesktop.org/show_bug.cgi?id=68014
Prevent an assertion failure when creating similar GL surfaces larger
than supported by hardware.
Prevent a double free of a similar image under Windows.
https://bugs.freedesktop.org/show_bug.cgi?id=63787
Release 1.12.14 (2013-02-10 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
In the last week we had a few more bugs reported and promptly resolved.
As these are a combination of regressions and stability issues, it is
time for a prompt update and release. Many thanks to everyone for
testing and reporting issues, and helping to make Cairo better.
Bug fixes
---------
Prevent user callbacks accessing user-data during destroy to prevent
use-after-free bugs.
https://bugzilla.mozilla.org/show_bug.cgi?id=722975
Use standard names for glyphs in subset fonts (PDF).
https://bugs.freedesktop.org/show_bug.cgi?id=60248
Fix detection of Win98. The logic for detecting Win98 (and its broken
AlphaBlend()) was inverted, disabling AlphaBlend() for everyone.
Prevent numeric overflow from extrapolating polygon edges to the clip
boundary and causing severe render artifacts.
https://bugs.freedesktop.org/show_bug.cgi?id=60489
Fix computation of glyph string coordinates when breaking up runs
for xlib.
Fix an assertion in the win32 backend for failing to clear its
similar-images.
https://bugs.freedesktop.org/show_bug.cgi?id=60519
Release 1.12.12 (2013-01-31 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The goal of this release is to fix the synchronisation problems that
were exhibited in the SHM transport for cairo-xlib. This cropped up
any place that tried to rapidly push fresh pixel data to the X server
through an ordinary image surface, such as gimp-2.9 and evince.
Bug fixes
---------
Avoid replacing the entire image when uploading subimages
https://bugs.freedesktop.org/show_bug.cgi?id=59635
Force synchronisation for scratch SHM image buffers, so that we do
not overwrite data as it is being read by X.
https://bugs.freedesktop.org/show_bug.cgi?id=59635 (also)
Fix typos in detecting multisampling for the GL (MSAA) backend.
Fix a memory leak in the GL (MSAA) backend.
Fix a reference counting bug when mapping a GL surface to an image.
Release 1.12.10 (2013-01-16 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
A heap of bug fixes everywhere, and the gradual completion of the MSAA
backend for cairo-gl. Perhaps the most noteworthy set of the bugfixes
was the crusage lead by Behdad Eshfabod to make font handling by
pango/cairo/fontconfig fully threadsafe. This testing revealed a couple
of races that needed fixing in Cairo's scaled-font and glyph cache.
Bug fixes
---------
Append coincident elements to the recording's surface bbtree so that
the list is not corrupted and the overlapping elements lost.
Fix cairo-trace to correctly record map-to-image/unmap-image and then
replay them.
Ignore MappingNotifies when running the XCB testsuite as they are sent
to all clients when the keyboard changes. The testsuite would detect
the unexpected event and complain.
Handle very large images in the XCB backend.
Fix a memory leak in the xlib/shm layer, and prevent use of the SHM
surfaces after the display is closed.
https://bugs.freedesktop.org/show_bug.cgi?id=58253
Handle resizing of bitmap fonts, in preparation for a fix to
fontconfig to correctly pass on the user request for scaling.
Always include subroutine 4 (hint replacement idion) when subsetting
type 1 fonts in order to prevent a crash in cgpdftops on Mac OS/X
Fix a couple of typos in the cairo-gobject.h header files for
introspection.
Prevent a mutex deadlock when freeing a scaled-glyph containing a
recording-surface that itself references another scaled-glyph.
https://bugs.freedesktop.org/show_bug.cgi?id=54950
Make scaled-font cache actually thread-safe and prevent
use-after-frees.
Restore support for older versions of XRender. A couple of typos and a
few forgotten chunks prevented the xlib compositor from running
correctly with XRender < 0.10. Note that there are still a few
regressions remaining.
Release 1.12.8 (2012-11-24 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
Another couple of weeks and a few more bugs have been found and fixed,
it is time to push the next point release. Many thanks to everyone who
reported their issues and helped us track down the bugs and helped
testing the fixes.
Bug fixes
---------
Expand the sanity checking for broken combinations of XSendEvent and
ShmCompletionEvent.
Notice that "The X.Org Foundation" sometimes also identifies itself
as "The Xorg Foundation".
Handle various ages of libXext and its Shm headers.
Fix the invalid clipping of the source drawable when using SHM
transport to upload images.
https://bugs.freedesktop.org/show_bug.cgi?id=56547
Handle all Type1 postscript operators for better font compatibility.
https://bugs.freedesktop.org/show_bug.cgi?id=56265
Fix a couple of memory leaks in Type1 font subsetting
https://bugs.freedesktop.org/show_bug.cgi?id=56566
Tighten the evaluation of the start/stop pen vertices, and catch a few
instances where we would use a fan instead of a bevel.
https://bugs.freedesktop.org/show_bug.cgi?id=56432
Fix assumption that geometric clipping always succeeds with the
span-compositor.
https://bugs.freedesktop.org/show_bug.cgi?id=56574
Fix call to spline intersection when evaluating whether a stoke is
visible.
Remember to copy inferior sources when using SHM to readback the
surface for use as a source.
Release 1.12.6 (2012-10-22 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
Thanks to everyone who download cairo-1.12.4 and gave us their feedback.
It truly was invaluable and has helped us to fix many portability issues
that crept in with some of the new features. This release aims to fix
those stability issues and run on a wider range of systems.
Bug fixes
---------
Fix the recording surface to actually snapshot the source and so fix
PDF drawing.
Calling XSendEvent with an XShmCompletionEvent is incompatabile with
older Xorg servers.
Reorder CloseDisplay chain so that XShm is not reinstantiated after
shutdown, causing a potential crash if the Display was immediately
recreated using the same memory address.
Make sure that the Xserver has attached to the SHM segment before
deleting it from the global namespace on systems that do not support
deferred deletion.
Type1 subsetting support for PDF (and PS) was once again improved to
work with a larger number of PDF readers.
GLESv2 build fixes and improved support for embedded GPUs.
Tweak the invisible pen detection for applications that are currently
using too large values for geometric tolerance.
A build fix for older freetype libraries.
Release 1.12.4 (2012-10-05 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
More bugs, and more importantly, more fixes. On the cairo-gl side, we
have refinements to the MSAA compositor which enables hardware
acceleration of comparatively low-quality antialiasing - which is useful
in animations and on very high density screens. For cairo-xlib, we have
finally enabled SHM transport for image transfers to and from the X
server. A long standing required feature, SHM transport offers a notable
reduction in rendering latency by reducing the number of copies
required to upload image data - given hardware and driver support,
cairo-xlib can now perform zero copy uploads onto the GPU. And as usual
Adrian Johnson has been very busy fixing many different corner cases in
cairo-pdf, improving opacity groups and font subsetting. Last, but not
least, for cairo-image Søren Sandmann Pedersen added support for
rendering glyphs to pixman and using that from within cairo. The new
glyph rendering facility reduces the overhead for setting up the
compositing operation, improving glyph thoughput for the image backend
by a factor of about 4. And before he did so, he also fixed up a few
bugs in the existing glyph rendering code. So many thanks to Andrea
Canciani, Adrian Johnson, Chuanbo Weng, Dongyeon Kim, Henry Song, Martin
Robinson, Søren Sandmann Pedersen and Uli Schlachter for their
contributions, finding and fixing bugs.
Bug fixes
---------
Interior boxes were being dropped when amalgamating regions during
tessellation.
https://bugs.freedesktop.org/show_bug.cgi?id=49446
Allow building without gtk-doc installed
Invalid edge generation whilst reducing complex polygons.
https://bugs.freedesktop.org/show_bug.cgi?id=50852
Stroking around tight cusps
Use locale correct formats for reading font subsetting and valid
buffers.
https://bugs.freedesktop.org/show_bug.cgi?id=51443
Ensure that the type1 subset includes all the glyph encodings
https://bugs.freedesktop.org/show_bug.cgi?id=53040
Upload the whole source for a repeating pattern.
https://bugs.freedesktop.org/show_bug.cgi?id=51910
Fix damage tracking to handle continuation chunks correctly and so
prevent crashes on win32.
https://bugs.freedesktop.org/show_bug.cgi?id=53384
Avoid emitting miter joins for degenerate line segments
https://bugzilla.mozilla.org/show_bug.cgi?id=407107
Convert the relative path semgents into the backend coordinates
and then back again to user coordinates (cairo_copy_path,
cairo_append_path)
https://bugs.freedesktop.org/show_bug.cgi?id=54732
Fix extents computations for a degenerate path consisting only of a
move-to
https://bugs.freedesktop.org/show_bug.cgi?id=54549
Prevent crashing on a degenerate project edge after polygon
intersection
https://bugs.freedesktop.org/show_bug.cgi?id=54822
Release 1.12.2 (2012-04-29 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
After such a long gestation period for the release of Cairo 1.12, we
inevitably accumulated a few bugs that were flushed out by broadening the
test base. Thanks to everybody who tried the release, apologies to any one
unfortunate enough to encounter a bug and many thanks for reporting it. As
a result Adrian Johnson, Alexandros Frantzis, Andrea Canciani, Kalev
Lember, Maarten Bosman, Marcus Meissner, Nis Martensen and Uli Schlachter
have squashed many more bugs and improved the documentation. I would
strongly recommend everyone to upgrade to cairo-1.12.2.
-Chris
Bug fixes
---------
Allow applications to create 0x0 xlib surfaces, such as used by LibreOffice.
https://bugs.freedesktop.org/show_bug.cgi?id=49118
Trim composite extents for SOURCE/CLEAR operators to the mask.
Use fallback fonts in PDF for unhandled computed glyph widths
https://bugs.freedesktop.org/show_bug.cgi?id=48349
Handle snapshots of recording surfaces for analysing pattern extents.
Fixes a regression of reporting the PDF bounding box as being the page size.
Fix allocation size for PDF pattern ids.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49089
Fix emission of rectilinear dashed segments, with and without scaling, and
application of degenerate line joins.
Clamp unbounded fixup polygons to the clip extents.
Prevent infinite loop due to rounding errors whilst incrementing along dashes.
Prevent overflow for inline a8 span filling.
Miscellaneous build fixes for Cygwin on Windows and Solaris.
Release 1.12.0 (2012-03-23 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
It's taken over 18 months, but the wait is finally over. A new cairo release!
We are pleased to announce a new stable release of Cairo that brings many
new features and performance improvements, all whilst maintaining
compatibility with cairo-1.0 and all releases since. We recommend anyone
using a previous release of Cairo to upgrade to 1.12.0.
The major feature of this release is the introduction of a new procedural
pattern; the mesh gradient. This, albeit complex, gradient is constructed
from a set of cubic Bezier patches and is a superset of all other gradient
surfaces which allows for the construction of incredibily detailed patterns.
In PDF parlance, the mesh gradient corresponds with type 7 patterns. Many
thanks to Andrea Canciani for bringing this to Cairo, and for his work on
making gradient handling robust.
Not content with just adding another procedural pattern, Cairo 1.12 also
adds new API to create a callback pattern,
cairo_pattern_create_raster_source, that allows the application to
provide the pixel data for the region of interest at the time of
rendering. This can be used for instance, by an application to decode
compressed images on demand and to keep a cache of those decompressed
images, independently of Cairo. When combined with the recording
surface, it should form a useful basis for a deferred renderer.
With the release of cairo-1.12, we also introduce a new supported
backend for interoperating with X using XCB. Uli Schlachter, also
maintainer of awesome and contributor to libxcb, has volunteered to
maintain cairo-xcb for us. Thanks Uli!
For cairo-1.12, we have also added some common API to address any
surface as an image and so allow direct modification of the raster data.
Previously, only the Quartz and Win32 backends supported a very narrow
interface to allow for efficient pixel upload. Now with
cairo_surface_create_similar_image, cairo_surface_map_to_image, and
cairo_surface_unmap_image, Cairo exports a consistent method for
treating those surfaces as an image and so allow modification inplace.
These are the same routines used internally, and should support
efficient transfer or direct mapping of the target surfaces as
applicable.
Another focus over the past year has been to address many performance
issues, without sacrificing the composition model. To accomplish the
goal, once again the rasterisation pipeline was overhauled and made
explicit, giving the backends the freedom to implement their own
specific pipeline whilst also providing a library of common routines
from which to build the pipeline. For instance, this allows the image
backend and the gl backend to composite scan line primitives inplace,
and to then implement custom fallbacks to catch the corner cases that do
not map onto their fastest paths. Similarly, this allows for the Xlib
backend to implement trapezoidation without compromising the other
backends, yet still allow for the pipeline to be used elsewhere for
testing and fallbacks. Clipping was once again overhauled, so that the
common cases for the raster pipelines could be captured and processed
with fast paths with the emphasis on performing geometric clipping to
reduce the frequency of using multi-pass clipmasks. Stroking was made
faster, both by providing specialised fast-paths for simple, yet frequent,
cases (such as stroking around a rectangle) and by reducing the number
of edges generated by the general stroker.
As part of the focus on performance, Cairo 1.12 introduces some
antialias hints (NONE, FAST, GOOD, BEST) that are interpolated by the
rasterisers to fine tune their performance versus quality. Cairo 1.12
also introduces a new observation architecture,
cairo_surface_observer_t, which can be used to analyse the amount of
time consumed by drawing commands and help identify inefficiencies in
both Cairo and the application.
Last, but by no means least, the OpenGL backend has seen significant
work including the port to GLESv2 and the exploitation of advanced
hardware features. Interesting times.
As always, I would like to thank everyone who contributed to Cairo,
not only through writing code, but also submitting documentation, bug
reports, suggestions and generally having fun with Cairo! In particular
though this release could not have happened without the efforts of
Adrian Johnson, Alexandros Frantiz, Andrea Canicani, Martin Robinson,
Nis Martensen, and Uli Schlachter. Thanks.
-Chris
Snapshot 1.11.4 (2012-13-12)
============================
The cairo community is pleased to finally announce the long aniticpated
release candidate for 1.12, 1.11.4, of the cairo graphics library. This
is the first major update to cairo in over a year and brings a large
number of new features; undoubtably a few bugs as well.
While many people have contributed and have helped to test the release,
providing feedback on 1.10 and suggesting improvements, this release
is the result of a few persevering souls who deserve recognition for their
outstanding contributions: Andrea Canciani (all round bug fixing,
performance tuning and master of the gradients), Adrian Johnson (PDF
supremo) and Uli Schlachter (who stepped forward as maintainer for the
XCB backend).
Major additions since 1.11.2:
* cairo_surface_map_to_image API for pixel level access to any surface
* New antialias hints to control the trade-off between speed and quality
* A callback pattern, cairo_pattern_create_raster_source, for lazy
decoding of image data.
* cairo_surface_observer_t, a new type of surface to gather performance
statistics
* XCB as a supported backend
* A rewritten compositor pipeline for performance improvements for, but not
limited to, the xlib and image backends.
From ION and PineView through to SandyBridge, every machine I have shows
across the board performance improvement on the cairo-traces:
i5-2520m gnome-system-monitor: 5.97x speedup
pnv gnome-system-monitor: 4.86x speedup
i5-2520m firefox-asteroids: 4.66x speedup
pnv firefox-asteroids: 4.43x speedup
image firefox-canvas: 3.82x speedup
i5-2520m firefox-canvas-alpha: 3.49x speedup
image firefox-asteroids: 2.87x speedup
pnv firefox-talos-svg: 2.83x speedup
ion grads-heat-map: 2.75x speedup
pnv firefox-canvas-alpha: 2.66x speedup
image gnome-system-monitor: 2.66x speedup
image swfdec-giant-steps: 2.46x speedup
image firefox-canvas-alpha: 2.14x speedup
i5-2520m firefox-talos-svg: 2.03x speedup
image grads-heat-map: 2.02x speedup
ion gnome-system-monitor: 2.00x speedup
pnv firefox-particles: 1.99x speedup
i5-2520m grads-heat-map: 1.96x speedup
pnv firefox-canvas: 1.92x speedup
ion firefox-particles: 1.80x speedup
image poppler-reseau: 1.77x speedup
pnv xfce4-terminal-a1: 1.72x speedup
image firefox-talos-svg: 1.65x speedup
pnv grads-heat-map: 1.63x speedup
i5-2520m firefox-canvas: 1.63x speedup
pnv swfdec-youtube: 1.62x speedup
image ocitysmap: 1.59x speedup
i5-2520m firefox-fishbowl: 1.56x speedup
i5-2520m poppler-reseau: 1.50x speedup
i5-2520m evolution: 1.50x speedup
i5-2520m midori-zoomed: 1.43x speedup
pnv firefox-planet-gnome: 1.42x speedup
i5-2520m firefox-talos-gfx: 1.41x speedup
i5-2520m gvim: 1.41x speedup
pnv ocitysmap: 1.37x speedup
image poppler: 1.31x speedup
ion firefox-canvas-alpha: 1.35x speedup
ion firefox-talos-svg: 1.34x speedup
i5-2520m ocitysmap: 1.32x speedup
pnv poppler-reseau: 1.31x speedup
i5-2520m firefox-planet-gnome: 1.31x speedup
pnv firefox-fishbowl: 1.30x speedup
pnv evolution: 1.28x speedup
image gvim: 1.27x speedup
i5-2520m swfdec-youtube: 1.25x speedup
pnv gnome-terminal-vim: 1.27x speedup
pnv gvim: 1.25x speedup
image firefox-planet-gnome: 1.25x speedup
image swfdec-youtube: 1.25x speedup
...
And a plethora of minor improvements everywhere!
-Chris
Snapshot 1.11.2 (2011-01-23)
===========================
In this first snapshot along the way to cairo-1.12.0, we are very excited
to announce the introduction of Bezier surface gradients, known as type
6/7 gradients in PS/PDF parlance. This is the culmination of much work by
the dynamic duo: Adrian Johnson and Andrea Canciani. Thanks guys!
Also, I want to warmly welcome Uli Schlachter who recently joined the
Cairo community on a mission. That mission is to make cairo-xcb a
supported backend for 1.12. And for this snapshot he has made great
strides in fixing all the bugs I had left behind. Thanks Uli!
And we have also seen a new contributor, Alexandros Frantzis, who has
begun bringing up cairo-gl for GLESv2 devices. Thanks Alex!
And lastly, I must also thank Adrian and Andrea for the vast numbers of
bugs that they have tackled between them, fixing all those little corner
cases that lie hidden until too late.
API additions:
The ability to construct piece-wise Bezier surface gradients:
cairo_pattern_create_mesh
constructs a pattern of type CAIRO_PATTERN_TYPE_MESH using
cairo_pattern_mesh_begin_patch
cairo_pattern_mesh_end_patch
cairo_pattern_mesh_curve_to
cairo_pattern_mesh_line_to
cairo_pattern_mesh_move_to
cairo_pattern_mesh_set_control_point
cairo_pattern_mesh_set_corner_color_rgb
cairo_pattern_mesh_set_corner_color_rgba
cairo_pattern_mesh_get_patch_count
cairo_pattern_mesh_get_path
cairo_pattern_mesh_get_corner_color_rgba
cairo_pattern_mesh_get_control_point
The introduction of a unique ID accessible via the mime data type:
CAIRO_MIME_TYPE_UNIQUE_ID
Release 1.10.2 (2010-12-25 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is pleased to announce the 1.10.2 release of the
cairo graphics library. This is the first update to cairo's stable 1.10
series and contains a large number of bug fixes.
While many people have contributed and have help to test the release,
2 people deserve special recognition for their efforts in tracking down
and fixing bugs, Andrea Canciani and Adrian Johnson. Thanks to their
tremendous efforts, and of all cairo contributors, it is much
appreciated.
We recommend everyone upgrade to cairo 1.10.2 and hope that everyone
will continue to have lots of fun with cairo!
-Chris
Bug fixes
---------
Fix embedding of grayscale jpegs in PS.
https://bugs.freedesktop.org/show_bug.cgi?id=31632
Fix the reported path of extents containing a curve.
Fix the compositing of unaligned boxes.
Reset the clipper in PDF upon finish.
Fix degenerates arcs to become a degenerate line.
Build support for autoconf 2.67
Fix painting of transformed patterns in PS
Fix the EPS bounding box for PS
https://bugs.freedesktop.org/show_bug.cgi?id=24688
Fix the missing content for EPS
https://bugs.freedesktop.org/show_bug.cgi?id=24688
Fix regression upon changing page size in PS/PDF
https://bugs.freedesktop.org/show_bug.cgi?id=24691
Only use ActualText with PDF-1.5 documents
Fix the bbox for type1 fallbacks.
Reset the color after ending the context in PDF
https://bugs.freedesktop.org/show_bug.cgi?id=31140
Fix the advance of subsetted type1 fonts
https://bugs.freedesktop.org/show_bug.cgi?id=31062
Fix handling of EXTEND_NONE gradients for PDF
Restrict in-place optimisation for a8 image masks with SOURCE
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artifacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for further improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
Release 1.8.8 (2009-06-16 Chris Wilson <chris@chris-wilson.co.uk>)
==================================================================
The cairo community is pleased to announce the 1.8.8 release of the
cairo graphics library. This is the fourth update to cairo's stable
1.8 series and contains a small number of bug fixes (in particular a
few corrections to the documentation and a few fixes in the FreeType font
backend). This is being released just over six months after cairo 1.8.6.
We recommend that everyone using cairo upgrade to 1.8.8.
-Chris
Build fixes
-----------
There were reports of incompatibilities with the autotools bundled in with
the 1.8.6 tarball. This release has been built with automake-1.10.2 and
autoconf-2.63.
The configure check for FreeType has been improved:
typo in check for version of freetype in configure script
https://bugs.freedesktop.org/show_bug.cgi?id=19283
Compilation on 64-bit MacOS/X fixes:
Cannot build cairo_quartz_font_face_create_for_atsu_font_id on 64-bit Mac OS X
https://bugs.freedesktop.org/show_bug.cgi?id=15702
Bug fixes
---------
Uninitialised status return within _cairo_clip_intersect_mask(). This caused
random crashes and general mayhem as an error could be generated causing all
rendering to the context to stop.
Avoid transforming nearly-degenerate matrices into degenerate matrices:
Painting stops in this case, using -moz-transform: scale, rotate and video
https://bugzilla.mozilla.org/show_bug.cgi?id=467423
A few FreeType font handling bugs were fixed:
Rendering with PANGO_GRAVITY_EAST leads to different results with image and pdf
https://bugs.freedesktop.org/show_bug.cgi?id=21985
Don't call FT_Done_Face() on faces we did not create
zombie ft_font_face / ft_unscaled_font mutual referencing problems
https://bugs.freedesktop.org/show_bug.cgi?id=21706
Ensure win32 font backend sets the return value to -1 (indicating the absent
glyph) if the font index lookup for the unicode character fails. And
similarly fix a bug where a fatal error was raised for an invalid glyph.
cairo_scaled_font_glyph_extents breaks with invalid glyph id
https://bugs.freedesktop.org/show_bug.cgi?id=20255
Various improvements to the documentation, reported by Truc Troung:
https://bugs.freedesktop.org/show_bug.cgi?id=20095
https://bugs.freedesktop.org/show_bug.cgi?id=20154
https://bugs.freedesktop.org/show_bug.cgi?id=20180
https://bugs.freedesktop.org/show_bug.cgi?id=20183
https://bugs.freedesktop.org/show_bug.cgi?id=20182
https://bugs.freedesktop.org/show_bug.cgi?id=20441
Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>)
==================================================================
The cairo community is pleased to announce the 1.8.6 release of the
cairo graphics library. This is the third update to cairo's stable
1.8 series and contains a small number of bug fixes (in particular a
few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for
a couple of backends). This is being released just under a month after
cairo 1.8.4.
We recommend that everyone using cairo upgrade to 1.8.6.
-Chris
Build fixes
-----------
Fix build of DirectFB backend with debugging enabled:
Bug in _cairo_directfb_surface_release_source_image function
https://bugs.freedesktop.org/show_bug.cgi?id=18322
Fix build on OS/2.
Bug fixes
---------
Workaround a mis-compilation of cairo_matrix_invert() that generated invalid
matrices and triggered assertion failures later. The issue was reported by
Peter Hercek.
Invalid computation of the modulus:
https://bugzilla.mozilla.org/show_bug.cgi?id=466258
Invalid referencing of patterns in the Quartz backend:
Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE
(&pattern->ref_count)' when using cairo quartz backend
https://bugs.freedesktop.org/show_bug.cgi?id=18632
Invalid references to glyphs after early culling, causing segmentation faults
in the PDF backend:
https://lists.cairographics.org/archives/cairo/2008-December/015976.html
Check for XRender in the XCB backend, or else we may attempt an invalid memory
access:
XCB backend fails with missing render.
https://bugs.freedesktop.org/show_bug.cgi?id=18588
Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is pleased to announce the 1.8.4 release of the
cairo graphics library. This is the second update to cairo's stable
1.8 series and contains a small number of bug fixes, (in particular a
few fixes for build failures of cairo 1.8.2 on various systems). This
is being released just over two weeks after cairo 1.8.2.
We recommend that everyone using cairo upgrade to 1.8.4.
-Carl
Build fixes
-----------
Fix build with older XRender that doesn't define RepeatNone:
Build of xlib backend fails against old XRender (RepeatNone undeclared)
https://bugs.freedesktop.org/show_bug.cgi?id=18385
Fix build with bash version <= 3.0:
doltlibtool broken on linux with bash 3.00.0
https://bugs.freedesktop.org/show_bug.cgi?id=18363
Bug fixes
---------
Avoid triggering a bug in X.org server 6.9 resulting in a hung machine
requiring a reboot:
https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2
Fix display of user fonts as exercised by proposed support for type3
fonts in poppler (unsigned promotion fixes):
Use cairo user-font for Type 3 fonts
https://lists.freedesktop.org/archives/poppler/2008-October/004181.html
Avoid miscomputing size of fallback images required when rendering
with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG,
etc.).
Be more tolerant of broken fonts when subsetting type1 fonts:
Error handling in cairo_type1_font_subset_get_glyph_names_and_widths
https://lists.cairographics.org/archives/cairo/2008-October/015569.html
Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to
correctly allow NULL parameters as documented.
Fix potential crash on emitting a type3 glyph after having drawn text
paths from the same font, (for example with cairo_text_path).
Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is pleased to announce the 1.8.2 release of the
cairo graphics library. This is the first update to cairo's stable 1.8
series and contains a large number of bug fixes. It is being released
just over one month since cairo 1.8.0.
This release consists primarily of bug fixes, but there is one notable
new feature, (the ability to build cairo without an external font
backend), and there are a few optimizations as well. See below for
details on these changes and the most important bug fixes.
While many people have contributed to this release, Chris Wilson
deserves particular mention. He has contributed well over twice as
many changes to cairo since 1.8.0 than everyone else combined. We
greatly appreciate the tremendous efforts of Chris and all cairo
contributors.
We recommend everyone upgrade to cairo 1.8.2 and hope that everyone
will have lots of fun with cairo!
-Carl
New feature
-----------
It is now possible to build cairo without any font backend, (such as
freetype, win32 or quartz). This is most useful when the application
provides custom font rendering through the user-font API. But in the
case where no external font backend is available, and no user-font is
provided, cairo will render with a failsafe font, (a stroked font
covering visible ASCII character). (Behdad Esfahbod)
Optimizations
-------------
Dramatically speed up compilation with dolt (removes much of the
libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett).
Several minor optimizations to tessellator (special-cased comparisons,
faster insert for skiplist, etc.) (Chris Wilson).
Optimize away fractional translation component when doing
EXTEND_NEAREST filtering, (for better performance).
General bug fixes
-----------------
Allow cloning sub-regions of similar surfaces to fix this bug
(Chris Wilson):
Crafted gif file will crash firefox
[XError: 'BadAlloc (insufficient resources for operation)']
https://bugzilla.mozilla.org/show_bug.cgi?id=424333
Fix some matrix confusion to fix this regression (Chris Wilson):
Translucent star exports in a wrong way to PDF
https://bugs.launchpad.net/inkscape/+bug/234546
Fix some long-standing bugs with respect to properly computing the
extents of transformed, filtered surfaces (Owen Taylor, Carl Worth,
and Chris Wilson):
Bad clipping with EXTEND_NONE
https://bugs.freedesktop.org/show_bug.cgi?id=15349
Improve filtering handling in cairo-pattern.c
https://bugs.freedesktop.org/show_bug.cgi?id=15367
Many thanks to Chris Wilson for digging out and cleaning up
these fixes.
Fix compilation on Solaris 10 (Chris Wilson):
Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS)
to compile on Solaris 10 with pthreads
https://bugs.freedesktop.org/show_bug.cgi?id=18010
Fix very old bug causing dashes to be rendered at the wrong length in
fallback images (Adrian Johnson)
Dashed strokes too long in fallback images
https://bugs.freedesktop.org/show_bug.cgi?id=9189
Fix broken dashing when a dashed path starts outside the clip region
(Chris Wilson).
Avoid range overflow when computing large patterns (Benjamin Otte and
Chris Wilson).
Avoid crashing due to an invalid font with an incorrect entry in its
CMAP table (Adrian Johnson).
Fix bugs in computing maximum size of text requests that can be sent
with the Render extension, (avoiding potential crashes when rendering
large amounts of text) (Behdad Esfahbod and Chris Wilson).
Fix rendering of operators unbounded by the mask (Chris Wilson).
Fix compilation on systems without compiler support for a native
64-bit type (Chris Wilson).
Fix several cases of missing error-status propagation. (Chris Wilson,
doing the work he seems to never tire of).
Fix several locking issues found with the lockdep valgrind skin (Chris
Wilson).
Backend-specific bug fixes
--------------------------
xlib: Avoid crash due to attempting XRender calls on pixmaps with
formats not supported by the Render extension (Chris Wilson):
XRender crashes due to NULL pointer from Cairo on SGI O2
https://bugs.freedesktop.org/show_bug.cgi?id=11734
xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits
(Chris Wilson):
cairo doesn't support 24 bits per pixel mode on X11
https://bugs.freedesktop.org/show_bug.cgi?id=9102
xlib: Avoid mistakenly considering two surfaces as similar just
because their depths match (while their Render formats do not) (Karl
Tomlinson).
ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson)
svg: Correctly emit comp-op for paint, mask, and show_glyphs
operations (Emmanuel Pacaud).
svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends
have been doing since 1.6.0) (Chris Wilson).
win32: Fallback to DIB if DDB create fails for
cairo_surface_create_similar (Vladimir Vukicevic).
win32: Fix compatibility with Windows Mobile (Vladimir Vukicevic).
win32: Fix static builds to not do __declspec(dllimport) on public
functions. This requires the user to set a CAIRO_WIN32_STATIC_BUILD
environment variable when compiling (Behdad Esfahbod).
Release 1.8.0 (2008-09-25 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is happy (and relieved) to announce the 1.8.0
release of the cairo graphics library. This is a major update to
cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.6, 1.4, 1.2, or 1.0). We recommend that anybody using a
previous version of cairo upgrade to cairo 1.8.0.
The dominant theme of this release is improvements to cairo's ability
to handle text. The highlights include a new "user fonts" feature as
well as a new cairo_show_text_glyphs API which allows glyphs to be
embedded in PDF output along with their original text, (for searching,
selection, and copy-and-paste). Another major feature is a revamp of
cairo's build system making it much easier to build cairo on various
platforms.
See below for more details.
User fonts
----------
This new API allows the user of cairo API to provide drawings for
glyphs in a font. A common use for this is implementing fonts in
non-standard formats, like SVG fonts and Flash fonts. This API can
also be used by applications to provide custom glyph shapes for fonts
while still getting access to cairo's glyph caches. See
test/user-font.c and test/user-font-proxy.c for usage examples. This
is based on early work by Kristian Høgsberg. Thanks Kristian!
This new API consists of the following functions (and corresponding
_get functions):
cairo_user_font_face_create
cairo_user_font_face_set_init_func
cairo_user_font_face_set_render_glyph_func
cairo_user_font_face_set_text_to_glyphs_func
cairo_user_font_face_set_unicode_to_glyph_func
An additional, new API is
cairo_scaled_font_text_to_glyphs
We were previously reluctant to provide this function as
text-to-glyphs support in cairo was limited to "toy" font
functionality, not really interesting for real-world text
processing. However, with user fonts landing, this API is needed to
expose full access to how user fonts convert text to glyphs. This is
expected to be used by text toolkits like Pango, as well as "proxy"
user-font implementations.
cairo_show_text_glyphs
----------------------
This new API allows the caller of cairo to provide text data
corresponding to glyphs being drawn. The PDF backend implements this
new API so that complex text can be copied out of cairo's PDF output
correctly and reliably, (assuming the user of cairo calls
cairo_show_text_glyphs). The cairo_show_text_glyphs API is definitely
the most daunting API to debut in cairo. It is anticipated that pango
(and similar high-level text libraries) will be the primary users of
this API. In fact, pango 1.22 already uses cairo_show_text_glyphs.
Behdad was the architect and implementor of this effort. Thanks,
Behdad!
The cairo_show_text_glyphs API includes the following new functions:
cairo_show_text_glyphs
cairo_glyph_allocate
cairo_glyph_free
cairo_text_cluster_allocate
cairo_text_cluster_free
cairo_surface_has_show_text_glyphs
Build system revamp
-------------------
The primary goal of the revamp is to make the build system less
fragile, (particularly for non-Linux platforms). For example, now
people building on win32 will no longer need to maintain a
platform-specific list of files to be built. See the new README.win32
for details. Also, the .so file will now be installed with a different
naming scheme, (for example, 1.7.6 will install with a .10800
suffix). Many thanks to Behdad and his small army of helpers!
Assorted API additions
----------------------
For API completeness, several missing "getter" functions were added:
cairo_scaled_font_get_scale_matrix
cairo_surface_get_fallback_resolution
cairo_toy_font_face_create
cairo_toy_font_face_get_family
cairo_toy_font_face_get_slant
cairo_toy_font_face_get_weight
The new cairo_toy_font_face functions provide access to functionality
and settings provided by cairo_select_font_face(). Thanks Behdad!
cairo-ps/cairo-pdf: More efficient output
-----------------------------------------
Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
backends, as well making them generate much more compact output by
avoiding things like re-emitting the color or linestyle on every
drawing operation. Thanks Adrian!
cairo-xlib: dithering
---------------------
Dithering: Cairo now does simple dithering when rendering to legacy X
servers. This is most visible with 8-bit visuals. Thanks Behdad!
cairo-xlib: Avoid rendering glyphs out of surface bounds
--------------------------------------------------------
This seemingly harmless optimization exposed a bug in OpenOffice.org 3
versions where OO.o was passing bogus surface extents to cairo,
resulting in no text rendered in OO.o. Please contact your
distribution's OO.o maintainers if you see this bug and point them to
the following URL:
https://bugs.freedesktop.org/show_bug.cgi?id=16209
cairo-xlib: Improved performance with X server without Render
-------------------------------------------------------------
Cairo now performs better on remote X servers that lack the Render
extension by being smarter about using X core protocol facilities
instead of falling back to doing all rendering on the client side.
cairo-ft: respecting FC_FT_FACE
-------------------------------
Previously it was impossible to instruct cairo to do emboldening on a
font face object created from an FT_Face. Cairo now respects and uses
the FC_FT_FACE fontconfig pattern element, so emboldening can be
achieved by using cairo_ft_font_face_create_for_pattern() and a
carefully crafted pattern using FC_FT_FACE and FC_EMBOLDEN. Thanks
Behdad!
cairo-directfb: backend improvements
------------------------------------
The directfb backend, though still unsupported, has seen a good deal
of improvements. Thanks Vlad!
Bug fixing and optimizations
----------------------------
xlib: Faster bookkeeping (Karl Tomlinson)
https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
PS: Fix gradients with non-constant alpha (Chris Wilson)
Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
https://bugs.freedesktop.org/show_bug.cgi?id=16819
Countless other bugs have been fixed and optimizations made, many of
them thanks to Chris Wilson. Thanks Chris and others!
Note also that the code that had been in cairo 1.7.x calling into
freetype's optional lcd_filter function was removed from cairo before
the 1.8.0 release. We do expect this code to come back in some form in
the future.
Snapshot 1.7.6 (2008-09-17 Carl Worth <cworth@cworth.org>)
==========================================================
The cairo community is happy to announce the 1.7.6 snapshot of the
cairo graphics library. This is a "release candidate" for the upcoming
1.8.0 release, so we will greatly appreciate any reports of problems
in this release, and no major changes are currently planned before
1.8.
Notable changes in 1.7.6
------------------------
The largest number of changes since 1.7.4 did not change the
implementation of cairo itself, but instead revamped cairo's build
system. The primary goal of the revamp is to make the build system
less fragile, (particularly for non-Linux platforms). For example, now
people building on win32 will no longer need to maintain a
platform-specific list of files to be built. Also, the .so file will
now be installed with a different naming scheme, (for example, 1.7.6
will install with a .10706 suffix). Much thanks, Behdad!
And, as usual, Chris Wilson has made another large round of robustness
improvements, (eliminating dead code, fixing propagation of error
status values, test suite improvements, etc. etc.). Thanks as always,
Chris!
API changes since 1.7.4
-----------------------
There have been a few changes of API that was new during the 1.7
series:
* Remove cairo_font_options_set_lcd_filter
and cairo_font_options_get_lcd_filter
Motivation: At the Cairo Summit, this API was determined to be too
specific to the freetype font backend to be in the general
API. A similar API with a cairo_ft prefix might be introduced
in the future. Note that cairo will still respect the
corresponding fontconfig settings for these options.
* Replace cairo_has_show_glyphs
with cairo_surface_has_show_glyphs
Motivation: This really is a surface-specific interface, and the
convenience function on the cairo_t is not obviously
necessary. An application can easily call:
cairo_surface_has_show_glyphs (cairo_get_target (cr));
as needed.
* Add cairo_text_cluster_flags_t
to cairo_show_text_glyphs
cairo_scaled_font_text_to_glyphs
cairo_user_scaled_font_text_to_glyphs_func_t
Motivation: This flag, (and specifically the
CAIRO_TEXT_CLUSTER_FLAG_BACKWARD value), replaces the
cairo_bool_t backward argument in each of the above
interfaces. This leads to more readable user code, and also
allows future extensibility.
As always, there are no changes to any API from any major cairo
release, (1.0.x, 1.2.x, 1.4.x, 1.6.x). Cairo maintains the same
compatibility promise it always has.
Bug fixes since 1.7.4
---------------------
xlib: Faster bookkeeping (Karl Tomlinson)
https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
PS: Fix gradients with non-constant alpha (Chris Wilson)
Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
https://bugs.freedesktop.org/show_bug.cgi?id=16819
Several other minor fixes.
Snapshot 1.7.4 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
===============================================================
The cairo community is embarrassed to announce availability of the 1.7.4
snapshot of the cairo graphics library. This is a followup release to the
1.7.2 snapshot to ship a tarball that can actually be built. The only
change since 1.7.4 is including the missing header file
cairo-user-font-private.h in the distribution.
Snapshot 1.7.2 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
===============================================================
The cairo community is finally ready to announce availability of the 1.7.2
snapshot of the cairo graphics library. This is embarrassingly the first
snapshot in the 1.7 unstable series of cairo, leading to the eventual release
of cairo 1.8, currently planned for late September.
This snapshot comes four months after the 1.6.4 release. We have done a
really bad job on getting development snapshots out this cycle, but
hopefully all the API changes for 1.8 are now finished and the remaining
weeks will be spent on bug-fixing. There is more than 400 commits worth
of changes in this snapshot, and those can use some testing. Read on!
Text, text, and more text!
--------------------------
The dominant theme of this release, and 1.8 in general, is improvements
around cairo text API. Here is a high-level list of changes with text
handling:
User fonts
----------
This is new API allowing the user of cairo API to provide drawings for glyphs
in a font. This is most useful in implementing fonts in non-standard formats,
like SVG fonts and Flash fonts, but can also be used by games and other
applications to draw "funky" fonts. See test/user-font.c and
test/user-font-proxy.c for usage examples. This is based on early work by
Kristian Høgsberg. Thanks Kristian!
show_text_glyphs
----------------
This new API allows the caller of cairo to mark text glyphs with their
original text. The PDF backend implements this new API and latest Pango
master uses it. The result is (when bugs are fixed) that complex text can be
copied out of pangocairo's PDF output correctly and reliably. There are bugs
to fix though. A few poppler bugs, and some more in cairo and pango.
To test show_text_glyph, just grab pango master and this cairo snapshot and
print text in gedit. Open in acroread or evince, select all, copy, paste
in gedit and compare. The Arabic text with diacritic marks is particularly
showing bad. Try with pango/pango-view/HELLO.txt if you are brave
enough. The Indic text is showing improvements, but is still coming out
buggy.
LCD subpixel filtering using FreeType
-------------------------------------
FreeType 2.3.5 added support for various LCD subpixel filtering, and
fontconfig 2.6.0 added support for configuring LCD filter on a font by font
basis. Cairo now relies on FreeType and fontconfig for subpixel filtering.
This work is based on David Turner's original patch to cairo, maintained
and tested by Sylvain Pasche and others. Thanks all!
Toy font face constructor and getter
------------------------------------
Mostly for API completion, but also useful for higher level (like Pango) to
hook into what the user has set using cairo_select_font_face(), making that
toy API a bit more useful.
FreeType: respecting FC_FT_FACE
-------------------------------
Previously it was impossible to instruct cairo to do emboldening on a font
face object created from an FT_Face. Cairo now respects and uses the
FC_FT_FACE fontconfig pattern element, so emboldening can be achieved by
using cairo_ft_font_face_create_for_pattern() and a carefully crafted pattern
using FC_FT_FACE and FC_EMBOLDEN.
PS/PDF: More efficient output
-----------------------------
Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
backends, as well making them generate much more compact output by avoiding
things like re-emitting the color or linestyle on every drawing operation.
Thanks Adrian!
Xlib: Dithering
---------------
Cairo now does simple dithering when rendering to legacy X servers. This is
mostly visible with 8-bit visuals.
Xlib: Avoid rendering glyphs out of surface bounds
--------------------------------------------------
This seemingly harmless change manifested a bug with OpenOffice.org 3 versions
where OO.o was passing bogus surface extents to cairo, resulting in no text
rendered in OO.o. Please contact your distro's OO.o maintainers if you see
this bug and point them to the following URL:
https://bugs.freedesktop.org/show_bug.cgi?id=16209
Xlib: Improved performance with Xrender-less X servers
------------------------------------------------------
Cairo now performs better on remote, Xrender-less X servers by being smarter
about using X core protocol facilities instead of falling back to doing all
rendering on the client side.
Directfb: backend improvements
------------------------------
The directfb backend, though still unsupported, has seen a good deal of
improvements. Thanks Vlad!
Bug fixing and optimizations
----------------------------
Countless bugs have been fixed and optimizations made, many of them thanks to
Chris Wilson. Thanks Chris!
API additions
-------------
cairo_show_text_glyphs
This is a new text rendering API. Being a more advanced version of
cairo_show_glyphs(), it is aimed for use by higher-level text toolkits like
Pango, and enables better text extraction from output generated by backends
like PDF and SVG. The PDF backend already implements it, and the upcoming
Pango release will use it.
To make that API work, a bunch of other additions were made:
cairo_glyph_allocate
cairo_glyph_free
cairo_text_cluster_t
cairo_text_cluster_allocate
cairo_text_cluster_free
cairo_surface_has_show_text_glyphs
cairo_user_font_face_create
This is the "user" font face constructor, accompanied by a variety of method
signatures, getters, and setters for a callback-based font backend:
CAIRO_FONT_TYPE_USER
cairo_user_scaled_font_init_func_t
cairo_user_scaled_font_render_glyph_func_t
cairo_user_scaled_font_text_to_glyphs_func_t
cairo_user_scaled_font_unicode_to_glyph_func_t
cairo_user_font_face_set_init_func
cairo_user_font_face_set_render_glyph_func
cairo_user_font_face_set_text_to_glyphs_func
cairo_user_font_face_set_unicode_to_glyph_func
cairo_user_font_face_get_init_func
cairo_user_font_face_get_render_glyph_func
cairo_user_font_face_get_text_to_glyphs_func
cairo_user_font_face_get_unicode_to_glyph_func
cairo_scaled_font_text_to_glyphs
We were previously reluctant to provide this function as text-to-glyphs
support in cairo was limited to "toy" font functionality, not really
interesting for real-world text processing. However, with user-fonts
landing, this API is needed to expose full access to how user-fonts
convert text to glyphs. This is expected to be used by text toolkits like
Pango, as well as "proxy" user-font implementations.
cairo_lcd_filter_t
cairo_font_options_set_lcd_filter
cairo_font_options_get_lcd_filter
These add the possibility to choose between various available LCD subpixel
filters. The available filter values are modelled after what FreeType
provides.
cairo_toy_font_face_create
cairo_toy_font_face_get_family
cairo_toy_font_face_get_slant
cairo_toy_font_face_get_weight
These provide access to functionality and settings provided by
cairo_select_font_face().
cairo_scaled_font_get_scale_matrix
cairo_surface_get_fallback_resolution
For API completeness.
Various new values for cairo_status_t enum
Known issues:
- Type3 fonts generated by cairo's PDF backend may show up in poppler/Evince
in a different color than expected. This is fixed in poppler master branch.
This mostly affects cairo user fonts. The test case test/user-font.c
demonstrates this.
- User fonts using other fonts in their rendering are currently embedded in
PDF as fallback bitmap glyphs. This will be (hopefully) fixed before 1.8.
The test case test/user-font-proxy.c demonstrates this.
Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is wildly embarrassed to announce the 1.6.4
release of the cairo graphics library. This release reverts the xlib
locking change introduced in 1.6.4, (and the application crashes that
it caused). The community would be glad to sack its current release
manager and is accepting applications for someone who could do the job
with more discipline.
Revert 'add missing locking in cairo-xlib'
------------------------------------------
This change was introduced in cairo 1.6.2, but also introduced a bug
which causes many cairo-xlib applications to crash, (with a
segmentation fault inside of XSetClipMask). Instead of attempting
another fix for the broken fix, the change in 1.6.2 has been
reverted. The original bug which the change was addressing has been
present since at least cairo 1.4, so it is not expected that leaving
this bug unfixed will cause any new problems for applications moving
from cairo 1.4 to cairo 1.6.
At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only
in the fix for the PostScript-printer crashes.
Tweak build to avoid linking with g++
-------------------------------------
Cairo 1.6.4 avoids a quirk in automake that was causing the cairo
library to be linked with g++ and linked against libstdc++ even when
only C source files were compiled for the library.
Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is pleased (but somewhat sheepish) to announce the
1.6.2 release of the cairo graphics library. This is an update to
yesterday's 1.6.0 release with an important fix to prevent cairo's
PostScript output from crashing some printers. This release also
includes a locking fix for cairo's xlib backend to improve thread
safety. There are no changes beyond these two fixes.
Fix for PostScript printer crash
--------------------------------
Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on
PostScript printers, by changing the font matrix very frequently. This
causes some PostScript interpreters to allocate new font objects every
few glyphs, eventually exhausting available resources. The fix
involves leaving translational components of the font matrix as zero,
so that the PostScript interpreter sees an identical font matrix
repeatedly, and can more easily share internal font object resources.
This fix has been tested to resolve the bugs posted here, (for both
Xerox and Dell printers):
Printing some PDFs from evince is crashing our Xerox printer
https://bugs.freedesktop.org/show_bug.cgi?id=15348
Cairo-generated postscript blocks Dell 5100cn
https://bugs.freedesktop.org/show_bug.cgi?id=15445
Add missing locking in cairo-xlib
---------------------------------
Chris Wilson noticed that cairo 1.6.0 was manipulating an internal
cache of GC object within cairo's Xlib backend without proper
locking. The missing locking could cause failures for multi-threaded
applications. He fixed this in 1.6.2 by adding the missing locks.
Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is quite pleased to announce the 1.6.0 release of
the cairo graphics library. This is a major update to cairo, with new
features and enhanced functionality which maintains compatibility for
applications written using cairo 1.4, 1.2, or 1.0. We recommend that
anybody using a previous version of cairo upgrade to cairo 1.6.0.
The most significant new features in this release are dramatically
improved PDF and PostScript[*] output, support for arbitrary X server
visuals (including PseudoColor), a new Quartz backend, and and a new
"win32 printing" backend. See below for more details on these and
other new features.
New dependency on external pixman library (Thanks, Søren!)
----------------------------------------------------------
As of cairo 1.6, cairo now depends on the pixman library, for which
the latest release can be obtained alongside cairo:
https://cairographics.org/releases/pixman-0.10.0.tar.gz
This library provides all software rendering for cairo, (the
implementation of the image backend as well as any image fallbacks
required for other backends). This is the same code that was
previously included as part of cairo itself, but is now an external
library so that it can be shared by both cairo and by the X server,
(which is where the code originated).
Improved PDF, PostScript, and SVG output (Thanks, Adrian!)
----------------------------------------------------------
Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic
improvement from cairo 1.2/1.4 to 1.6. With this release there are now
almost no operations that will result in unnecessary rasterization in
the PDF and PostScript. Rasterized "image fallbacks" are restricted
only to minimal portions of the document where something is being
drawn with cairo that is beyond the native capabilities of the
document, (this is rare for PDF or SVG, but occurs when blending
translucent objects for PostScript).
This means that the final output will be of higher quality, and will
also be much smaller, and therefore will print more quickly. The
machinery for doing analysis and minimal fallbacks also benefits the
win32-printing surface described below.
In addition to doing less rasterization, the PostScript and PDF output
also has several other improvements to make the output more efficient
and more compatible with specifications.
[*] Note: Just before this release, a bug has been reported that the
PostScript output from cairo can crash some printers, (so far the
following models have been reported as problematic Xerox Workcentre
7228 or 7328 and Dell 5100cn). We will implement a workaround as soon
as we can learn exactly what in cairo's output these printers object
to, (and we could use help from users that have access to misbehaving
printers). This bug is being tracked here:
Printing some PDFs from evince is crashing our Xerox printer
https://bugs.freedesktop.org/show_bug.cgi?id=15348
New support for arbitrary X server visuals (Thanks, Keith and Behdad!)
----------------------------------------------------------------------
As of cairo 1.6, cairo should now work with an arbitrary TrueColor or
8-bit PseudoColor X server visual. Previous versions of cairo did not
support these X servers and refused to draw anything. We're pleased to
announce that this limitation has been lifted and people stuck with
ancient display systems need no longer be stuck with ancient software
just because of cairo.
New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!)
------------------------------------------------------------------------
As of cairo 1.6, the cairo-quartz backend is now marked as "supported"
rather than "experimental" as in previous cairo releases. Its API now
has guarantees of API stability into future cairo releases, and its
output quality is comparable to other backends. There have been
significant improvements to cairo-quartz since 1.4. It now uses many
fewer image fallbacks, (meaning better performance), and has greatly
improved text rendering.
New, "win32 printing" backend (Thanks, Adrian and Vladimir!)
------------------------------------------------------------
A new win32-printing surface has been added with an interface very
similar to the original win32 surface, (both accept an HDC
parameter). But this new surface should only be called with a printing
DC, and will result in all drawing commands being stored into a
meta-surface and emitted after each page is complete. This allows
cairo to analyze the contents, (as it does with PDF, PostScript, and
SVG backends), and to do minimal image-based fallbacks as
necessary. The analysis keeps things as efficient as possible, while
the presence of fallbacks, (when necessary), ensure the consistent,
high-quality output expected from cairo.
Robustness fixes (Thanks, Chris!)
---------------------------------
There has been a tremendous number of improvements to cairo's
robustness. Areas that have been improved include:
* Proper reporting of errors
* Responding correctly to invalid input
* Avoiding integer overflows
* Avoiding memory leaks on error-recovery paths
* Making reference counting thread safe
* Exhaustive testing of memory allocation points
Other fixes (Thanks, everybody!)
--------------------------------
Cairo's internal fixed-point representation has been changed from
16.16 to 24.8. This has a direct impact on applications as it allows
much larger objects to be drawn before internal limits in cairo make
the drawing not work.
The CAIRO_EXTEND_PAD mode is now fully supported by surface
patterns. This mode allows applications to use cairo_rectangle and
cairo_fill to draw scaled images with high-quality bilinear filtering
for the internal of the image, but without any objectionably blurry
edges, (as would happen with the default EXTEND_NONE and cairo_paint).
Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more
predictable, (previously image rendering and geometry rendering would
be slightly misaligned with respect to each other).
The reference manual at https://cairographics.org/manual now documents
100% of the functions and types in cairo's public API.
API additions
-------------
Several small features have been added to cairo with new API functions:
cairo_format_stride_for_width
Must be called to compute a properly aligned stride value before
calling cairo_image_surface_create_for_data.
cairo_has_current_point
Allows querying if there is a current point defined for the
current path.
cairo_path_extents
Allows querying for path extents, (independent of any fill or
stroke parameters).
cairo_surface_copy_page
cairo_surface_show_page
Allow beginning a new document page without requiring a cairo_t
object.
cairo_ps_surface_restrict_to_level
cairo_ps_get_levels
cairo_ps_level_to_string
cairo_ps_surface_set_eps
Allow controlling the Post PostScript level, (2 or 3), to
target, as well as to generate Encapsulated PostScript (EPS).
cairo_quartz_font_face_create_for_cgfont
Create a quartz-specific cairo_font_face_t from a CGFontRef.
cairo_win32_font_face_create_for_logfontw_hfont
Create a win32-specific cairo_font_face from a LOGFONTW and an
HFONT together.
Thanks, Everyone!
-----------------
I've accounted for 32 distinct people with attributed code added to
cairo between 1.4.14 and 1.6.0, (their names are below). That's an
impressive number, but there are certainly dozens more that
contributed with testing, suggestions, clarifying questions, and
encouragement. I'm grateful for the friendships that have developed as
we have worked on cairo together. Thanks to everyone for making this
all so much fun!
Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod,
Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer,
Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson,
Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston,
Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain,
Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg,
Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher,
Richard Hult, Shailendra Jain, Søren Sandmann Pedersen,
Vladimir Vukicevic
Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>)
===========================================================
This is the tenth snapshot in cairo's unstable 1.5 series. It comes
just two days (and only one working day) after the 1.5.18
snapshot. The quick snapshot is due to two embarrassing bugs (both
affecting cairo-xlib) that had been introduced in the 1.5.18
snapshot. The fixes for these are described below along with a few
other fixes, (which hopefully aren't introducing new bugs this time).
cairo-xlib
----------
Revert fix from 1.5.18 to allow pattern expansion based on the filter
mode. This fix seemed so boring, (the use case it addresses is almost
never used in practice), that it didn't even get mentioned in the
1.5.18 release notes. However, the "fix" happened to break rendering
that is always used resulting in corrupt image rendering in mozilla,
evolution, and probably everything else that uses cairo.
Fix to avoid BadMatch errors in cairo_surface_create_similar. These
were introduced, (inadvertently, of course), as part of the fix in
1.5.18 for creating similar surfaces without the Render
extension. Again, thanks to mozilla, (and Vladimir Vukicevic in
particular), for noticing our mistake.
general
-------
Correctly handle an in-error surface in
cairo_surface_write_to_png. Previously this function would cause an
assertion failure if you gave it a finished surface. Now it cleanly
returns a CAIRO_STATUS_SURFACE_FINISHED result instead.
Avoid potentially infinite wandering through memory inside
_cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this
problem:
https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21
cairo-pdf
---------
Fix generation of "soft" masks made by drawing to a similar surface
and then calling cairo_mask_surface() with it.
cairo-svg
---------
Fix for code that uses cairo_mask() on an intermediate surface which
is later passed to cairo_mask_surface().
Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>)
===========================================================
This is the ninth snapshot in cairo's unstable 1.5 series. It comes
just 4 days after the 1.5.16 snapshot. We had hoped to not need
another snapshot before the final 1.6.0 release, but several critical
bugs were found and fixed in the last few days, so we thought it
important to let people test the fixes with this snapshot. See below
for details.
documentation
-------------
The README now lists necessary dependencies.
Various graphics state defaults are now documented, (source pattern is
opaque black, line width is 2.0, line join is miter, line cap is butt,
miter limit is 10.0, etc.).
general
-------
Several cleanups have been made along many error-path returns,
(carefully propagating up the original error status values, cleaning
up memory leaks during error recovery, etc.). This is yet another in
Chris "ickle" Wilson's long series of error-handling cleanups during
the 1.5 series.
Avoid undesired clipping when drawing scaled surface patterns with
bilinear filtering.
cairo-pdf
---------
Fix emission of 1-bit alpha masks in PDF output.
Fix a bug that would cause glyphs to be misplaced along the Y axis:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136
Originally, an issue about a crash, but later leading to the
misplaced glyphs issue being discovered.
cairo-ps
--------
Fix misplaced glyphs in cairo's PostScript output.
This issue occurs when consecutive glyphs are placed far
apart. This case is exercised by the new ft-show-glyphs-table test
case, which was originally inspired by the Debian bug #23474136
mentioned above.
Fix more misplaced glyphs in cairo's PostScript output:
The issue here showed up under very particular circumstance, (when
converting a PDF file with a CFF font with CID Identity-H encoding
and using glyph 0, (defined by the CFF specification as .notdef)
as a space instead). More concretely, this problem appeared when
converting the UbuntuDesktop.pdf file mentioned in this bug
report:
https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3
As usual with arcane font-encoding-specific bugs like this, many
thanks to Adrian Johnson for his magical ability to dive into
specifications and emerge almost instantaneously with fixes. And
thanks to Sebastien Bacher for bringing the bug to our attention.
cairo-xlib
----------
Fix serious failure on X servers without the Render extension.
Since the 1.5.14 snapshot (with support for PseudoColor visuals),
any application attempting to create a "similar" xlib surface would
fail on an X server without the Render extension. Thanks to
Frederic Crozat for pointing out that cairo's test suite was
entirely failing when run against Xvfb.
Avoid crashing cairo-xlib applications for too-large glyphs
Naively sending glyphs of any size to the X server will eventually
violate the X limit on maximum request sizes. We now properly
detect when a glyph would be too large and use existing fallbacks
to render the glyph rather than trying to send it to the X server.
Enable the buggy_repeat workaround for Xorg servers < 1.4
We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at
least) has a bug that can result in an X server crash when cairo
uses certain X Render repeat operations, (as exercised by cairo's
extend-reflect test). We avoid this crash by using fallbacks
whenever a repeating surface is needed for any Xorg server with a
version less than 1.4. This is slower, but should prevent the
crash.
(Meanwhile, there appears to be a separate bug where some X
servers or specific X-server drivers will use random pixmap data
when asked to draw a repeating surface. The buggy_repeat
workaround would also avoid those problems, but we have not yet
characterized whether the new "version < 1.4" is a good
characterization of those problems or not.)
cairo-quartz-font
-----------------
Implement cairo_font_extents for this backend.
The cairo-quartz-font implementation added in the 1.5.14 snapshot was
entirely missing support for the cairo_font_extents function. Thanks to
Richard Hult for pointing out this obvious shortcoming, (and obvious
lack of coverage in our test suite):
CGFont backend returns 0 font extents
https://bugs.freedesktop.org/show_bug.cgi?id=15319
Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>)
===========================================================
This is the eighth snapshot in cairo's unstable 1.5 series. It comes
less than two weeks after the 1.5.14 snapshot and it really is a
legitimate snapshot, (in spite of sharing this date with that of many
bogus announcements). The major change in this snapshot is that the
cairo-quartz backend is now officially "supported", including new API
to construct a font face from a CGFontRef . Also several bug fixes
have been fixed in many backends. See below for details.
general
-------
Cairo now depends on pixman 0.10.0 which was recently released. The
latest pixman release can always be found alongside cairo releases at:
https://cairographics.org/releases
Increase the precision of color stops for gradients. This fixes a
regression in gradient rendering that had been present since the
1.5.12 snapshot.
paginated (all of ps, pdf, svg, and win32-printing)
---------------------------------------------------
Fix assertion failure when some drawing elements are outside the page
boundaries, (this bug was noticed when using Inkscape to print a
drawing with landscape orientation to a portrait-oriented piece of
paper).
cairo-ps
--------
Fix of bug causing incorrect glyph positioning.
Fix handling of CAIRO_OPERATOR_SOURCE.
cairo-pdf
---------
More reduction of unnecessary digits of precision in PDF output.
Fix handling of CAIRO_OPERATOR_SOURCE.
cairo-svg
---------
Fix bug in usage of libpng that was preventing cairo_mask from working
with the svg backend.
Fix transformation of source pattern for cairo_stroke().
cairo-win32-printing
--------------------
Fix fallback resolution, (thanks again to inkscape users/developers
for helping us find this one).
cairo-quartz
------------
Mark the cairo-quartz backend as "supported" rather than
"experimental". This means the following:
* The backend will now be built by default (if possible).
* We are committing that the backend-specific API (as published in
cairo-quartz.h) are stable and will be supported in all future
cairo 1.x releases.
* We are committing that the output quality of this backend
compares favorably with other cairo backends, (and that quality
is ensured by good results from the cairo test suite).
* We recommend that distributions build and distribute this
backend when possible.
Note that the cairo_quartz_image API (in cairo-quartz-image.h) is
still experimental, will not build by default, (pass
--enable-quartz-image to configure to build it), and may see API
changes before it is marked as "supported" in a future release.
Put the CAIRO_FONT_TYPE_ATSUI name back into
cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all
builds for applications using the C++ cairomm bindings (and perhaps
others) which have the CAIRO_FONT_TYPE_ATSUI name in their header
files. This breakage happened even for applications not using
cairo-quartz at all.
Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to
avoid this build breakage, we still recommend that bindings and
applications move to the new, and more accurate,
CAIRO_FONT_TYPE_QUARTZ name.
Replace the implementation of cairo-quartz-font to use CFFont instead
of ATSUI. The CGFont API is a better fit than ATSUI, and this new
implementation is also more correct than the old one as well.
This also adds the following new API call:
cairo_public cairo_font_face_t *
cairo_quartz_font_face_create_for_cgfont (CGFontRef font);
The previous cairo_quartz_font_face_create_for_atsu_font_id function
continues to exist and is part of the supported API going
forward. (However, the old name of that same function, which was
cairo_atsui_font_face_create_for_atsu_font_id is officially
deprecated. Any source code using the old name should be updated to
use the new name.)
Fix transformation of source pattern for cairo_stroke().
cairo-win32
-----------
Avoid crash in create_similar is cairo_win32_surface_create fails.
Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>)
===========================================================
This is the seventh snapshot in cairo's unstable 1.5 series. It comes
3 weeks after the 1.5.12 snapshot. This snapshot includes support for
arbitrary X server visuals, (including PseudoColor), which was the
final remaining cairo-specific item on the cairo 1.6 roadmap. It also
includes a huge number of improvements to the cairo-quartz backend. So
this is effectively a cairo 1.6 release candidate. We expect very few
changes from now until 1.6 and only for specific bug fixes.
API Change
----------
Rename ATSUI font backend to Quartz font backend. This affects the
following usage:
--enable-atsui -> --enable-quartz-font
CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT
CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ
cairo_atsui_font_face_create_for_atsu_font_id ->
cairo_quartz_font_font_create_for_atsu_font_id
This API change is justified by the cairo-quartz backend still be
marked as "experimental" rather than "supported", (though this is one
step toward making the change to "supported" before 1.6). Cairo will
still provide ABI compatibility with the old symbol name, however.
paginated (all of ps, pdf, svg, and win32-printing)
---------------------------------------------------
Optimize by not analyzing an image surface for transparency more than
once, (previously all images were analyzed twice).
cairo-ps and cairo-pdf
----------------------
Avoiding emitting a matrix into the stroke output when unnecessary,
(making output size more efficient).
Reduce rounding error of path shapes by factoring large scale factors
out of the path matrix, (ensuring that a fixed-number of printed
digits for path coordinates contains as much information as possible).
Reduce excess digits for text position coordinates. This makes the
output file size much smaller without making the result any less
correct.
cairo-ps
--------
Eliminate bug causing extraneous text repetition on Linux PostScript
output in some cases.
See: Mozilla Bug 419917 – Printed page contents are reflected
inside bordered tables (Linux-only)
https://bugzilla.mozilla.org/show_bug.cgi?id=419917
Optimize output when EXTEND_PAD is used.
cairo-pdf
---------
Fix to not use fill-stroke operator with transparent fill, (else PDF
output doesn't match the cairo-defined correct result). See:
https://bugs.launchpad.net/inkscape/+bug/202096
cairo-svg
---------
Fix stroke of path with a non-solid-color source pattern:
https://bugs.freedesktop.org/show_bug.cgi?id=14556
cairo-quartz
------------
Fix text rendering with gradient or image source pattern.
Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and
cairo_show_text()/cairo_show_glyphs().
Correctly handle gradients with non-identity transformations:
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=14248
Add native implementation of REPEAT and REFLECT extend modes for
gradients.
Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT,
_IN, _DEST_IN, and _DEST_ATOP).
Correctly handle endiannees in multi-architecture compiles on Mac OS
X.
Avoid behavior which would cause Core Graphics to print warnings to
the console in some cases.
cairo-win32
-----------
Fix handling of miter limit.
cairo-win32-printing
--------------------
Fix to not use a 1bpp temporary surface in some cases while printing,
(so grayscale data is preserved rather than just becoming black and
white).
cairo-xlib
----------
Add support for rendering to arbitrary TrueColor X server
visuals. This fixes at least the following bugs:
cairo doesn't support 8-bit truecolor visuals
https://bugs.freedesktop.org/show_bug.cgi?id=7735
cairo doesn't support 655 xlib format
https://bugs.freedesktop.org/show_bug.cgi?id=9719
Add support for rendering to 8-bit PseudoColor X server visuals. This
fixes the following bug:
Cairo doesn't support 8-bit pseudocolor visuals
https://bugs.freedesktop.org/show_bug.cgi?id=4945
Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>)
===========================================================
This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1
week after the 1.5.10 snapshot. This snapshot includes the
long-awaited change from 16.16 to 24.8 fixed-point values, (see below
for why you should care). It also includes several backend-specific
bug fixes.
24.8 fixed-point format
-----------------------
Cairo has always converted path coordinates to a fixed-point
representation very early in its processing. Historically, this has
been a 32-bit representation with 16 bits of integer for the
device-pixel grid and 16 bits of sub-pixel positioning. The choice of
16 bits for the integer coordinate space was based on the 16-bit limit
for X Window drawables.
This 16-bit limit has proven problematic for many applications. It's
an especially vexing problem when targeting non-X backends that don't
have any 16-bit restriction. But even when targeting cairo-xlib, it's
often desirable to draw a large shape, (say a background rectangle),
that extends beyond the surface bounds and expect it to fill the
surface completely, (rather than overflowing and triggering random
behavior).
Meanwhile, nobody has ever really needed 16 bits of sub-pixel
precision.
With this snapshot, the fixed-point system is still in place and is
still using a 32-bit representation, (future versions of cairo might
move entirely to floating-point when targeting PDF output for
example). But the representation now provides 24 bits of pixel
addressing and only 8 bits of sub-pixel positioning. This should give
a much less stifling space to many applications.
However, the underlying pixman library still has 16-bit limitations in
many places, (it has its roots in the X server as well). Until those
are also fixed, applications targeting cairo image surfaces, or
hitting software fallbacks when targeting other surfaces will still
encounter problems with device-space values needing more than 16
integer bits.
generic fixes
-------------
Add a few tests to the test suite to increase coverage.
Cleanup a few error-handling paths, (propagate error correctly).
cairo-ft
--------
Fix handling of font sizes smaller than 1 device pixel.
cairo-pdf
---------
Fix to properly save/restore clip when analyzing meta-surface
patterns, (fixing a couple of test-suite failures).
Implement native support for CAIRO_OPERATOR_SOURCE when the source
pattern is opaque.
Emit rectangles as PDF rectangles ("re" operator) rather than as
general paths.
cairo-ps
--------
Fix to work properly with the 16.16->24.8 change.
cairo-svg
---------
Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no
direct SVG support for reflected patterns).
Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8).
cairo-quartz
------------
Add new API for efficiently using image data as a source:
cairo_surface_t *
cairo_quartz_image_surface_create (cairo_surface_t *image_surface);
cairo_surface_t *
cairo_quartz_image_surface_get_image (cairo_surface_t *surface);
For full documentation, see:
https://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create
Several fixes for cairo_mask().
cairo-atsui
-----------
Change default from from Monaco to Helvetica to be more consistent
with other font backends.
Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>)
===========================================================
This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3
weeks after the 1.5.8 snapshot. This snapshot adds one new API
function, (cairo_has_current_point), and the usual mix of
improvements, (more efficient PostScript/PDF output, optimized
stroking), and fixes (more robust error-handling, etc.). See below for
details.
New API
-------
Add a new function to query if there is a current point:
cairo_bool_t
cairo_has_current_point (cairo_t *cr);
There is no current point immediately after cairo_create(), nor after
cairo_new_path() or cairo_new_sub_path(). There is a current point
after any of the path-creation functions, (cairo_move_to,
cairo_line_to, cairo_curve_to, etc.).
With this new function, we also revert the change of the return type
of cairo_get_current_point from cairo 1.5.8, (it's now a void function
again).
Optimizations
-------------
Optimize stroking code to avoid repeated calculation of redundant
values, (particularly significant for very large, offscreen paths).
General fixes
-------------
Patch a few more potential buffer overruns, (due to integer
overflow).
Many fixes and improvements to cairo's error-handling, (ensure that
correct error values are returned, clean up memory leaks on
error-handling paths, etc.).
Fix a potential infinite loop when stroking a spline with a pen that
has been transformed to a line segment.
Remove treating NULL as a synonym for a valid cairo_font_options_t*
with default values, (a change that had been introduced as of cairo
1.5.8).
Remove the altered handling of tolerance and fallback-resolution that
had been introduced as of cairo 1.5.4.
cairo-xlib
----------
Pass the original Drawable, (as opposed to the root window), to
XCreatePixmap when creating a similar surface. This gives the X server
more information so that it can be clever and efficient.
cairo-pdf
---------
Fix the rendering of repeating and reflecting patterns.
Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PDF viewers to fail to display pages).
Generate more efficient output when the same path is used for both
fill and stroke.
cairo-ps
--------
Start sharing much of the cairo-pdf code rather than implementing very
similar code in cairo-ps.
Implement native support for repeating and reflecting linear
gradients.
Implement reflected surface patterns.
Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PostScript viewers to crash).
Generate PostScript that will perform more efficiently and use less
memory on printers, (use currentfile instead of a giant string array
for image data, and avoid using PostScript patterns for paint() and
fill() when possible).
cairo-svg
---------
Avoid unnecessary rasterization when copying a "similar" surface to
another svg surface, (allow the SOURCE operator to be implemented with
all-vector operations if there are no underlying objects).
cairo-atsui
-----------
Eliminate infinite loop when attempting to render an empty string.
Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>)
==========================================================
This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2
weeks after the 1.5.6 snapshot. It adds a few new API functions. Most
notably all callers of cairo_image_surface_create_for_data should now
be calling cairo_format_stride_for_width to compute a legal stride
value. See below for more details.
New API in cairo 1.5.8
----------------------
We've added a new function that should be called to compute a legal
stride value before allocating data to be used with
cairo_image_surface_create_for_data:
int
cairo_format_stride_for_width (cairo_format_t format,
int width);
We've also added a new cairo_path_extents function that can be used to
compute a bounding box for geometry such as a single line segment,
(contrast with cairo_path_extents and cairo_stroke_extents):
void
cairo_path_extents (cairo_t *cr,
double *x1, double *y1,
double *x2, double *y2);
And finally, we've added a function to allow for querying the
XRenderPictFormat of a cairo-xlib surface:
XRenderPictFormat *
cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface);
API changes
-----------
Fix return types of cairo_surface_show_page and
cairo_surface_copy_page. This is an API change to functions that are
new in the 1.5 series, so not an API break compared to any stable
cairo release, (1.0.x, 1.2.x, 1.4.x).
Change the return type of cairo_get_current_point() from void to
cairo_status_t. This allows the caller to receive a
CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point
at the origin from no current point existing.
Performance improvement
-----------------------
Improve performance of clipping by using an optimized code path
internally, (with the ADD operator instead of IN).
General bug fixes
-----------------
Fix various cairo_*_extents functions to initialize the return-value
variables even in the case of a cairo_t in error.
Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE:
On discussion afterwards, we decided against this change so it has
been removed as of cairo 1.5.10.]
Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that
is, to avoid seams appearing when geometry and imagery share an
identical edge). Portions of this fix are in the pixman library and
will appear in a future release of that library.
Avoid triggering an error for a font size of 0.
Miscellaneous changes
---------------------
Require pixman >= 0.9.6.
There has been a tremendous amount improvement to cairo's
documentation. We're delighted that 100% of the public API has at
least some documentation in the API reference manual. Many thanks to
Behdad Esfahbod and Nis Martensen for leading this effort.
cairo-pdf and cairo-ps
----------------------
Eliminate failure when a Type 1 font is embedded with an explicit
glyph 0.
cairo-pdf
---------
Implement a more correct and more efficient approach for patterns with
an extend mode of CAIRO_EXTEND_REFLECT.
cairo-ps
--------
Fix image masks to properly pack and pad mask bits.
cairo-quartz
------------
Take care to only use DrawTiledImage for integer-aligned images, (and
use slower paths to get the correct result in other cases).
cairo-win32
-----------
Fix for older versions of mingw.
Improve the handling of the clipping with the win32 and win32-printing
surfaces.
Fix rendering of non black/white text.
Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>)
==========================================================
This is the third snapshot in cairo's unstable 1.5 series. It comes
about 6 weeks after the 1.5.4 snapshot. The only API addition compared
to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR).
The remainder of the changes are the usual accumulation of bug fixes
and improvements. See below for details.
General bug fixes
-----------------
Fix handling of fonts that contain a mixture of outline and bitmapped
glyphs. There was a change in this handling in 1.5.4 that improved
some cases and also regressed other cases. Now, all cases should be
handled quite well.
Fix alignment issues that were causing SIGBUS failures on SPARC.
Fix a regression (which first appeared in 1.5.2) where stroking under
a large scale would sometimes incorrectly replace a miter join with a
bevel join. (Thanks to Keith Packard.)
Fix reporting of zero-sized extents to be {0,0} rather than
{INT_MAX,INT_MIN}. This avoids several integer overflow and
allocations of massive regions in some cases.
Fix failures of gradients with no stops, (quartz, ps, and pdf).
Fix handling of Type 1 fonts on Windows platforms.
Fix handling of Type 1 fonts with no specific family name in the font
itself, (generate a CairoFont-x-y name).
Handle NULL string values in cairo_show_text, cairo_show_glyphs, and
friends.
Many robustness improvements along error-handling paths, (thanks as
always, to Chris "ickle" Wilson).
Various other minor fixes.
Paginated backends (PDF/PostScript/win32-printing)
--------------------------------------------------
Avoid unnecessary rasterization when using a paginated surface as a
source, (such as drawing from one pdf surface to another).
Fix replaying of paginated surface with more than one level of push/pop
group.
cairo-xlib
----------
Fix xlib backend to not consider recent X server release as having a
buggy repeat implementation in the Render extension.
cairo-pdf
---------
Fix PDF output to avoid triggering very slow rendering in PDF viewers,
(avoid starting and stopping the content stream for each pattern
emission).
Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below
the object being drawn.
Fix to avoid seams appearing between multiple fallback regions.
cairo-ps (PostScript)
---------------------
Use correct bounding box in Type 3 fonts.
Fix several bugs in cairo's PostScript output. These include making
the PostScript output more compatible with recent versions of
ghostscript that are more strict about Type 3 fonts, for
example.
Fix for win32 to not attempt to create temporary files in the root
directory, (where the user may not have write permission).
Avoid generating Level 3 PostScript if Level 2 is sufficient. Also,
add code in output documents to alert the user if Level 3 PostScript
is handed to a device that cannot handle PostScript beyond Level
2.
cairo-directfb
--------------
Various performance optimizations.
Fixed support for small surfaces (less than 8x8).
Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to
disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts
instead of A8.
cairo-os2
---------
Allow OS/2 APIs instead of C library allocation functions.
Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>)
==========================================================
This is the second snapshot in cairo's unstable 1.5 series. It comes
just over 1 month after the 1.5.2 snapshot. There are no API changes
or additions in 1.5.4 compared to 1.5.2, but there are several bug
fixes, and some optimizations. Most of these apply to particular
backends. See below for details.
General improvements
--------------------
Use less memory for spline approximation calculations.
Change how the tolerance value is interpreted with regard to
fallback-resolution. [Note: On further discussion, we decided against
this change for now. It is removed as of cairo 1.5.10.]
Fix precision of floating-point values in vector-output backends to
avoid rounding errors with very small numbers.
Xlib improvements
-----------------
Fix bug in glyph rendering with xlib, (due to everything being clipped
out). This was a regression in the 1.5.2 snapshot that was visible in
the GIMP, for example. See:
cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1
https://bugs.freedesktop.org/show_bug.cgi?id=13084
PostScript improvements
-----------------------
Fix bug leading to invalid PostScript files when rendering
text, (need "0 0 xyshow" instead of "0 xyshow").
Fix many issues with Type 3 fonts, including making the resulting text
extractable.
Quartz improvements
-------------------
Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X
layout nicely).
Fix gradients.
Fix EXTEND_NONE mode for patterns.
Fix cairo_quartz_surface_create to properly clear the new surface
in cairo_quartz_surface_create.
Fix to correctly handle 0x0 sized surfaces.
Optimize drawing of EXTEND_REPEAT patterns for OS X 10.5.
Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>)
==========================================================
This is the first snapshot in cairo's unstable 1.5 series. It comes 4
months after the 1.4.10 release. This snapshot includes significant
improvements to PDF and PostScript output, which is one of the things
in which we're most interested in getting feedback. There are a couple
of minor API additions, and several optimizations, (primarily in the
"print/vector" backends). And there are dozens of bug fixes and
robustness improvements.
New dependency on external pixman library
-----------------------------------------
A significant change in this snapshot compared to all previous cairo
releases is that cairo now depends on an external "pixman" library for
its software rendering. Previously this same code was compiled
internally as part of cairo, but now the code is separate so that both
cairo and the X server can now share common code, (thanks very much to
Søren Sandmann for his work on separating pixman and maintaining it).
So users will need to acquire and build pixman before being able to
build cairo. The current release is 0.9.6 and can be obtained from
here:
https://cairographics.org/releases/pixman-0.9.6.tar.gz
which can be verified with:
https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1
66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz
https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc
(signed by Carl Worth)
Major PDF/PostScript improvements
---------------------------------
Adrian Johnson has done some long-awaited work to make cairo's PDF and
PostScript output more interesting than ever before. First, many
operations that previously triggered image fallbacks will now be
rendered as native vectors. These operations include:
PDF: cairo_push_group, cairo_surface_create_similar,
cairo_mask, A8/A1 surface sources, repeating/reflecting linear
gradients.
PostScript: cairo_push_group, cairo_surface_create_similar,
gradients, bilevel alpha masks, (for example, all values either 0 or
255 for an A8 mask).
Not only that, but when an image fallback is required, it will now be
limited to only the necessary region. For example, a tiny translucent
image overlaying a small portion of text would previously caused an
entire PostScript page to be rendered as a giant image. Now, the
majority of that page will be nice text, and there will only be a tiny
image in the output.
Additionally, the PostScript output now carefully encodes text so that
if it is subsequently converted to PDF, the text will be
selectable.
This is very exciting progress, and we're hoping to hear from users
during the 1.5 series about how things have improved, (for example,
inkscape users doing cairo-based PDF export: please let us know how
things look). And feel free to pass your thanks along to Adrian for his excellent work.
NOTE: This much improved PDF output makes more sophisticated use of
functionality in the PDF specification. This means that cairo's output
will sometimes expose bugs in some free software PDF viewers, (evince,
poppler, and xpdf, for example), that are not yet ready for such PDF
files. We're working with the poppler maintainers to get these bugs
fixed as quickly as possible. In the meantime, please double-check
with other PDF viewers if cairo-generated PDF files are not being
rendered correctly. It may be due to a bug in the viewer rather than
in the PDF file that cairo has created.
Robustness improvements
-----------------------
Chris Wilson has made the largest contribution by far to cairo 1.5.2,
(in number of commits). His more than 150 commits include a huge
number of fixes to increase cairo's robustness. These fixes make cairo
more robust against invalid and degenerate input, (NaN, empty path,
etc.), against size-0 malloc calls, against memory leaks on
error-recovery paths, and against other failures during error
handling. He also implemented atomic operations to cairo, and used
them to fix cairo's previously non-thread-safe reference counting,
again improving robustness.
Chris has put a tremendous amount of time and effort into writing
analysis tools for this work, and in running those tools and fixing
the problems they report. We're very grateful for this work, and hope
that all cairo users appreciate the more robust implementation that
results from it.
This work is largely thankless, so it might make sense to notice
sometime that cairo has been running quite smoothly for you, and when
you do, send a quick "thank you" off to Chris Wilson, since it
is all definitely running smoother thanks to his work.
New API
-------
There are no major additions to cairo's core API. The only new,
generic functions are:
void
cairo_surface_copy_page (cairo_surface_t *surface);
void
cairo_surface_show_page (cairo_surface_t *surface);
which can now be used much more conveniently than the existing
cairo_copy_page and cairo_show_page functions in some
situations. These functions act identically, but require only a
cairo_surface_t* and not a cairo_t*.
All other API additions are specific to particular backends.
New cairo-win32 API (new font face function and "win32 printing" surface)
-------------------------------------------------------------------------
There is a new function for creating a win32 font face for both a
logfontw and an hfont together. This complements the existing
functions for creating a font face from one or the other:
cairo_font_face_t *
cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont,
HFONT font);
There is also a new "win32 printing" surface:
cairo_surface_t *
cairo_win32_printing_surface_create (HDC hdc);
This interface looks identical to the original
cairo_win32_surface_create, (both accept and HDC), but the behavior of
this new surface is very different. It should only be called with a
printing DC, and will result in all drawing commands being stored into
a meta-surface and emitted after each page is complete, with analysis
to do as minimal image-based fallbacks as necessary. The behavior and
implementation shares much with the PDF and PostScript backends.
New cairo-ps API (EPS and PostScript level control)
---------------------------------------------------
An often requested feature has been the ability to generate
Encapsulated PostScript (EPS) with cairo. We have that now with the
following very simple API. Just do cairo_ps_surface_create as usual
then call this function with a true value:
void
cairo_ps_surface_set_eps (cairo_surface_t *surface,
cairo_bool_t eps);
[NOTE: As always with snapshots, it's possible---though not very
likely---that the API could still be modified before a final
release. For example, this is the first public cairo function that
accepts a Boolean parameter. I'm generally opposed to Boolean
parameters, but this is probably the one case where I'm willing to
accept one, (namely a "set" function that accepts a single Boolean).]
Also, it is now possible to control what PostScript level to target,
(either level 2 or level 3), with the following new API:
typedef enum _cairo_ps_level {
CAIRO_PS_LEVEL_2,
CAIRO_PS_LEVEL_3
} cairo_ps_level_t;
void
cairo_ps_surface_restrict_to_level (cairo_surface_t *surface,
cairo_ps_level_t level);
void
cairo_ps_get_levels (cairo_ps_level_t const **levels,
int *num_levels);
const char *
cairo_ps_level_to_string (cairo_ps_level_t level);
Improvement for cairo-quartz
----------------------------
Brian Ewins had contributed several improvements to cairo-quartz. These
include an implementation of EXTEND_NONE for linear and radial
gradients, (so this extend mode will no longer trigger image fallbacks
for these gradients), as well as native surface-mask clipping, (only
on OS X 10.4+ where the CGContextClipToMask function is available).
He also fixed a semantic mismatch between cairo and quartz for dashing
with an odd number of entries in the dash array.
We're grateful for Brian since not many quartz-specific improvements
to cairo would be happening without him.
Optimizations
-------------
Optimize SVG output for when the same path is both filled and stroked,
and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud).
Optimize PS output to take less space (Ken Herron).
Make PS output more compliant with DSC recommendations (avoid initclip
and copy_page) (Adrian Johnson).
Make PDF output more compact (Adrian Johnson).
Release glyph surfaces after uploading them to the X server, (should
save some memory for many xlib-using cairo application). (Behdad
Esfahbod).
Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic).
win32-printing: Avoid falling back to images when alpha == 255
everywhere. (Adrian Johnson).
win32-printing: Avoid falling back for cairo_push_group and
cairo_surface_create_similar. (Adrian Johnson)
Bug fixes
---------
Avoid potential integer overflows when allocating large buffers
(Vladimir Vukicevic).
Preparations to allow the 16.16 fixed-point format to change to
24.8 (Vladimir Vukicevic).
Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and
abgr8888). (Carl Worth and Vladimir Vukicevic)
Fix bugs in PDF gradients (Adrian Johnson).
Fix cairo-xlib to build without requiring Xrender header
files (Behdad Esfahbod).
Make cairo more resilient in the case of glyphs not being available in
the current font. (Behdad Esfahbod)
Prevent crashes when both atsui and ft font backends are compiled in
(Brian Ewins).
Make font subsetting code more robust against fonts that don't include
optional tables (Adrian Johnson).
Fix CFF subsetting bug, (which manifested by generating PDF files that
Apple's Preview viewer could not read) (Adrian Johnson).
Fixed error handling for quartz and ATSUI backends (Brian Ewins).
Avoid rounding problems by pre-transforming to avoid integer-only
restrictions on transformation in GDI (Adrian Johnson).
Fixed an obscure bug (#7245) computing extents for some stroked
paths (Carl Worth).
Fix crashes due to extreme transformation of the pen, (seems to show
up in many .swf files for some reason) (Carl Worth).
Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>)
==========================================================
This is the fifth update in cairo's stable 1.4 series. It comes
roughly three weeks after the 1.4.8 release. The most significant
change in this release is a fix to avoid an X error in certain cases,
(that were causing OpenOffice.org to crash in Fedora). There is also a
semantic change to include child window contents when using an xlib
surface as a source, an optimization when drawing many rectangles, and
several minor fixes.
Eliminate X errors that were killing OO.o (Chris Wilson)
--------------------------------------------------------
Cairo is fixed to avoid the X errors propagated when cleaning up
Render Pictures after the application had already destroyed the
Drawable they reference. (It would be nice if the X server wouldn't
complain that some cleanup work is already done, but there you have
it.) This fixes the bug causing OpenOffice.org to crash as described
here:
XError on right click menus in OOo.
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811
Use IncludeInferiors when using xlib surface as a source (Ryan Lortie)
----------------------------------------------------------------------
When an xlib surface is used as the source of a draw operation the
contents of child windows are now included in the source data. The
semantics of drawing to xlib surfaces are unchanged (ie: draws are
still clipped by child windows overlapping the destination window).
Optimize drawing of many rectangles (Vladimir Vukicevic)
--------------------------------------------------------
Avoid O(N*N) loop when filling many axis-aligned rectangles, (either
many rectangles as separate sub-paths or due to dashing).
Miscellaneous fixes
-------------------
Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod)
Fix make check for systems that require executable files to have a
particular extension. (Behdad Esfahbod)
Eliminate some warnings in cairo-quartz. (Brian Ewins)
Fix build-breaking typo for cairo-directfb. (Chris Wilson)
Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>)
=========================================================
This is the fourth update in cairo's stable 1.4 series. It comes just
over five weeks after the 1.4.6 release. This release includes a
thread-safe surface-cache for solid patterns which significantly
improves text rendering with the xlib backend. Also, dozens of error
paths in cairo have been fixed thanks to extensive fault-injection
testing by Chris Wilson.
Surface cache for solid patterns
--------------------------------
Originally written by Jorn Baayen, the introduction of a small cache
for surfaces created for solid patterns improves performance
dramatically. For example, this reduces the volume of X requests
during text rendering to the same level as Xft.
This cache first made its appearance in a 1.3.x snapshot, but was
removed before appearing in any previous major release due to
complications with multi-threaded programs. For example, programs like
evince that would carefully restrict usage of cairo-xlib to a single
thread were unpleasantly surprised to find that using cairo-image in a
separate thread could trigger X requests.
Behdad Esfahbod designed a fix which was implemented by Chris
Wilson. Now, the necessary X requests are queued up until the next
time the application directly operates on an xlib surface.
Improved error handling paths
------------------------------
Chris Wilson continued the excellent work he started in cairo 1.4.4 to
make cairo much more robust against out-of-memory and other errors. He
applied his memory allocation fault injection cairo's main test suite,
(previously he had applied it to cairo's performance suite).
Chris's testing found dozens of bugs which he fixed. Many of these
bugs had perhaps never been hit by any users. But at least one was
hit by the gnome-about program which resulted in dozens of duplicated
bug reports against that program:
https://bugzilla.gnome.org/show_bug.cgi?id=431990
We were very pleasantly surprised to see this bug get fixed as a
side-effect of Chris's work. Well done, Chris!
Other fixes
-----------
Cleanup of mutex declarations (Behdad Esfahbod)
Remove unnecessary clip region from SVG output (Emmanuel Pacaud)
Remove Xsun from the buggy_repeat blacklist (Elaine Xiong)
ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins)
Quartz: fixed 'extend' behaviour for patterns, improved pattern performance,
and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic)
Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>)
=========================================================
This is the third update in cairo's stable 1.4 series. It comes a
little less than three weeks since the 1.4.4 release. This release
fixes the broken mutex initialization that made cairo 1.4.4 unusable
on win32, OS/2, and BeOS systems. This release also adds significant
improvements to cairo's PDF backend, (native gradients!), and a couple
of performance optimizations, (one of which is very significant for
users of the xlib backend). See below for more details.
Repaired mutex initialization
-----------------------------
We apologize that cairo 1.4.4 did little more than crash on many
platforms which are less-frequently used by the most regular cairo
maintainers, (win32, OS/2, and BeOS). The mutex initialization
problems that caused those crashes should be fixed now. And to avoid
similar problems in the future, we've now started posting pre-release
snapshots to get better testing, (subscribe to cairo@cairographics.org
if you're interested in getting notified of those and testing them).
PDF Improvements
----------------
Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have
several improvements to cairo's PDF backend to announce:
Native gradients:
As of cairo 1.4.6, cairo will now generate native PDF gradients in
many cases, (previously, the presence of a gradient on any page
would force rasterized output for that page). Currently, only
gradients with extend types of PAD (the default) or NONE will
generate native PDF gradients---others will still trigger
rasterization, (but look for support for other extend modes in a
future release). Many thanks to Miklós Erdélyi as well, who did the
initial work for this support.
Better compatibility with PDF viewers:
The PDF output from cairo should now be displayed correctly by a
wider range of PDF viewers. Adrian tested cairo's PDF output against
many PDF viewers, identified a common bug in many of those viewers
(ignoring the CTM matrix in some cases), and modified cairo's output
to avoid triggering that bugs (pre-transforming coordinates and
using an identity matrix).
Better OpenType/CFF subsetting:
Cairo will now embed CFF and TrueType fonts as CID fonts.
Performance optimizations
-------------------------
Faster cairo_paint_with_alpha:
The cairo_paint_with_alpha call is used to apply a uniform alpha
mask to a pattern. For example, it can be used to gradually fade an
image out or in. Jeff Muizelaar fixed some missing/broken
optimizations within the implementation of this function resulting
in cairo_paint_with_alpha being up to 4 times faster when using
cairo's image backend.
Optimize rendering of "off-screen" geometry:
Something that applications often do is to ask cairo to render
things that are either partially or wholly outside the current clip
region. Since 1.4.0 the image backend has been fixed to not waste
too much time in this case. But other backends have still been
suffering.
In particular, the xlib backend has often performed quite badly in
this situation. This is due to a bug in the implementation of
trapezoid rasterization in many X servers.
Now, in cairo 1.4.6 there is a higher-level fix for this
situation. Cairo now eliminates or clips trapezoids that are wholly
or partially outside the clip region before handing the trapezoids
to the backend. This means that the X server's performance bug is
avoided in almost all cases.
The net result is that doing an extreme zoom-in of vector-based
objects drawn with cairo might have previously brought the X server
to its knees as it allocated buffers large enough to fit all of the
geometry, (whether visible or not). But now the memory usage should
be bounded and performance should be dramatically better.
Miscellaneous
-------------
Behdad contributed an impressively long series of changes that
organizes cairo's internals in several ways that will be very
beneficial to cairo developers. Thanks, Behdad!
Behdad has also provided a utility for generating malloc statistics,
(which was used during the great malloc purges of 1.4.2 and
1.4.4). This utility isn't specific to cairo so may be of benefit to
others. It is found in cairo/util/malloc-stats.c and here are Behdad's
notes on using it:
To build, do:
make malloc-stats.so
inside util/, and to use, run:
LD_PRELOAD=malloc-stats.so some-program
For binaries managed by libtool, eg, cairo-perf, do:
../libtool --mode=execute /bin/true ./cairo-perf
LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf
Finally, the cairo-perf-diff-files utility was enhanced to allow for
generating performance reports from several runs of the same backend
while some system variables were changed. For example, this is now
being used to allow cairo-perf to measure the performance of various
different acceleration architectures and configuration options of the
X.org X server.
Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>)
=========================================================
This is the second update release in cairo's stable 1.4 series. It
comes just less than a month after 1.4.2. The changes since 1.4.2
consist primarily of bug fixes, but also include at least one
optimization. See below for details.
Of all the work that went into the 1.4.4 release
There have been lots of individuals doing lots of great work on cairo,
but two efforts during the 1.4.4 series deserve particular mention:
Internal cleanup of error handling, (Chris Wilson)
--------------------------------------------------
Chris contributed a tremendous series of patches (74 patches!) to
improve cairo's handling of out-of-memory and other errors. He began
by adding gcc's warn_unused_attribute to as many functions as
possible, and then launched into the ambitious efforts of adding
correct code to quiet the dozens of resulting warnings.
Chris also wrote a custom valgrind skin to systematically inject
malloc failures into cairo, and did all the work necessary to verify
that cairo's performance test suite runs to completion without
crashing.
The end result is a much more robust implementation. Previously, many
error conditions would have gone unnoticed and would have led to
assertion failures, segmentation faults, or other harder-to-diagnose
problems. Now, more than ever, cairo should cleanly let the user know
of problems through cairo_status and other similar status
functions. Well done, Chris!
More malloc reduction, (Mathias Hasselmann)
-------------------------------------------
After 1.4.0, Behdad launched an effort to chase down excessive calls
to malloc within the implementation of cairo. He fixed a lot of
malloc-happy objects for 1.4.2, but one of the worst offenders,
(pixman regions), was left around. Mathias contributed an excellent
series of 15 patches to finish off this effort.
The end result is a cairo that calls malloc much less often than it
did before. Compared to 1.4.2, 55% of the calls to malloc have been
eliminate, (and 60% have been eliminated compared to 1.4.0). Well
done, Mathias!
Other improvements since 1.4.2
------------------------------
• Centralize mutex declarations (will reduce future build breaks),
(Mathias Hasselmann)
• Reduce malloc by caching recently freed pattern objects (Chris
Wilson)
• Fix some broken composite operations (David Reveman)
https://bugs.freedesktop.org/show_bug.cgi?id=5777
Backend-specific fixes
----------------------
PDF:
• Use TJ operator for more compact representation of glyphs (Adrian
Johnson)
• Fix glyph positioning bug when glyphs are not horizontal
https://lists.freedesktop.org/archives/cairo/2007-April/010337.html
win32:
• Fix crash when rendering with bitmap fonts (Carl Worth)
https://bugzilla.mozilla.org/show_bug.cgi?id=376498
xlib:
• Turn metrics-hinting on by default (Behdad Esfahbod)
• Fix edge-effect problem with transformed images drawn to xlib
(Behdad Esfahbod)
https://bugs.freedesktop.org/show_bug.cgi?id=10508
• Avoid dereferencing a NULL screen. (Chris Wilson)
https://bugs.freedesktop.org/show_bug.cgi?id=10517
Quartz/ATSUI:
• Fix scaling of glyph surfaces
(Brian Ewins)
https://bugs.freedesktop.org/show_bug.cgi?id=9568
• Fix compilation failure when both xlib and quartz enabled
(Brian Ewins)
• Fix rounding bug leading to incorrectly positioned glyphs
(Robert O'Callahan)
https://bugs.freedesktop.org/show_bug.cgi?id=10531
Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>)
=========================================================
This is the first update release in cairo's stable 1.4 series. It
comes just less than 2 weeks after 1.4.0. We hadn't anticipated an
update this early, but we've managed to collect some important fixes
that we wanted to get out to cairo users as soon as possible, (6 fixes
for crashes, 1 case where graphical elements would not be drawn at
all, a handful of backend-specific bugs, and several important build
fixes).
There's almost nothing but bug fixes in this release, (see below one
optimization that Behdad did sneak in), so we recommend that everyone
upgrade to this release when possible.
Thanks to the many people that worked to fix these bugs, and those
that did the work to report them and to test the fixes, (wherever
possible both names are credited below).
Critical fixes
--------------
• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl
Worth's embarrassing typo).
https://bugs.freedesktop.org/show_bug.cgi?id=10235
• Fix potential buffer overflow, which on some systems with a checking
variant of snprintf would lead to a crash (Adrian Johnson, Stanislav
Brabec, and sangu).
https://bugs.freedesktop.org/show_bug.cgi?id=10267
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576
• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line
width is 0.0. (Carl Worth and Sebastien Bacher)
https://bugs.freedesktop.org/show_bug.cgi?id=10231
• Fix a crash on certain combinations of X server/video drivers (Carl
Worth and Tomas Carnecky).
https://bugs.freedesktop.org/show_bug.cgi?id=10250
• Fix a crash due to mishandling of invalid user input (Carl Worth and
Alexander Darovsky).
https://bugs.freedesktop.org/show_bug.cgi?id=9844
• xlib: Cleanup server-side glyph caches on XCloseDisplay. This
eliminated a crash detected by the perf suite, (and that
applications could have run into as well). (Chris Wilson)
Other bug fixes
---------------
• Fix for some geometry which simply disappeared under some
transformations---a stroked line with an extreme skew in X, for
example (Carl Worth and Jonathan Watt).
https://bugzilla.mozilla.org/show_bug.cgi?id=373632
• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1
(Emmanuel Pacaud).
• PDF: Set page group color space to DeviceRGB.
This fixes incorrect (muddy) transparent colors when rendering cairo
PDF output in some viewers. (Adrian Johnson, Adam Goode, and
MenTaLguY).
https://lists.freedesktop.org/archives/cairo/2006-November/008551.html
• win32: Return correct metrics when hinting is off, and fix font
descent computation (Behdad Esfahbod).
• quartz: Fix glyph interfaces to correctly return user-space rather
than device-space coordinates (Brian Ewins).
https://bugs.freedesktop.org/show_bug.cgi?id=9568
• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now
makes all tests that pass with xlib now pass with xcb (Carl Worth,
Jamey Sharp).
• Fix some memory leaks in the perf suite (Chris Wilson).
• Fix perf suite to consider changes in pixman/src (Mathias
Hasselmann).
Build fixes
-----------
• Don't include pre-generated cairo-features.h file. This was causing
build failures when building with the directfb backend enabled
(Behdad Esfahbod).
https://bugs.freedesktop.org/show_bug.cgi?id=10189
• Eliminate use of maintainer mode from cairo's automake/configure
script. This means that updates to files such as Makefile.am will
take effect, (by rerunning automake and friends as necessary) when
invoking make rather than being silently ignored. (Behdad Esfahbod)
• Don't compile cairo-deflate-stream.c, which depends on zlib, unless
building the pdf backend which requires it. (Carl Worth, Tor
Lillqvist)
https://bugs.freedesktop.org/show_bug.cgi?id=10202
• Don't make the ps backend link against zlib anymore, since it
doesn't require it (Carl Worth).
• Use "find !" rather than "find -not" for better portability (Thomas
Klausner).
https://bugs.freedesktop.org/show_bug.cgi?id=10226
• Don't use unsupported visibility attribute "hidden" on Solaris
(Gilles Dauphin, Thomas Klausner).
https://bugs.freedesktop.org/show_bug.cgi?id=10227
Optimization
------------
• It was Behdad that suggested we focus strictly on bug fixes now that
we shipped so many performance improvements in 1.4.0, but it was
also Behdad that got distracted by the chance to remove a lot of
mallocs from cairo. Paths, gstates, trapezoids, splines, polygons,
and gradient color stops will now use small, stack-allocated buffers
in the most common cases rather than calling malloc as
often. (Behdad Esfahbod). And look for more from Mathias Hasselmann
soon.
Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>)
=========================================================
The many people[*] who have been working hard on cairo are very
pleased to announce the long-awaited release of cairo 1.4. This
release comes 4 months after the last stable update release (1.2.6)
and 9 months since the initial release of 1.2.0.
The release notes below are intended to capture the highlights of the
changes that have occurred from the 1.2 series to the new 1.4.0
release.
Performance improvements
------------------------
Within the cairo project, the last 6 months or so has seen an intense
effort focusing on the performance of cairo itself. That effort has
paid off considerably, as can be seen in the following highlights of
some of the performance differences from cairo 1.2.6 to cairo 1.4.0.
(Note: The performance results reported here were measured on an x86
laptop. Many of the improvements in 1.4---particular those involving
text rendering---are even more dramatic on embedded platforms without
hardware floating-point units. Such devices played an important part
of many of the optimizations that found their way into cairo over the
last few months.)
• Dramatic improvement when drawing objects that are mostly off-screen
with the image backend (with the xlib backend this case is still
slow due to an X server bug):
image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup
███████████████████████████████████████████████▋
• Dramatic improvement when copying a small fraction of an image
surface to an xlib surface:
xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup
██████████████████████████▊
• Dramatic improvement to tessellation speed for complex objects:
image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup
████████████▏
xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup
████▉
xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup
▌
• Dramatic improvement to the speed of stroking rectilinear shapes,
(such as the outline of a rectangle or "box"):
image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup
███████████▋
xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup
███▌
• Dramatic improvements to text rendering speeds:
xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup
██▊
• 3x improvements to floating-point to fixed-point conversion speeds:
image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup
▉
• 2x improvements to linear gradient computation:
image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup
▋
• 2x improvement to a case common in PDF rendering:
image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup
▍
• 1.3x improvement to rectangle filling speed (note: this improvement
is new since 1.3.16---previously this test case was a 1.3x slowdown
compared to 1.2.6):
image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup
▎
xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup
▏
NOTE: In spite of our best efforts, there are some measurable
performance regressions in 1.4 compared to 1.2. It appears that the
primary problem is the increased overhead of the new tessellator when
drawing many, very simple shapes. The following test cases capture
some of that slowdown:
image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown
▏
image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown
▏
image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown
image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown
xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown
We did put some special effort into eliminating this slowdown for the
very common case of drawing axis-aligned rectangles with an identity
matrix (see the box-outline-stroke and rectangles speedup numbers
above). Eliminating the rest of this slowdown will be a worthwhile
project going forward.
Also note that the "box-outline-fill" case is a slowdown while
"box-outline-stroke" is a (huge) speedup. These two test cases
resulted from the fact that some GTK+ theme authors were filling
between two rectangles to avoid slow performance from the more natural
means of achieving the same shape by stroking a single rectangle. With
1.4 that workaround should definitely be eliminated as it will now
cause things to perform more slowly.
Greatly improved PDF output
---------------------------
We are very happy to be able to announce that cairo-generated PDF
output will now have text that can be selected, cut-and-pasted, and
searched with most capable PDF viewer applications. This is something
that was not ever possible with cairo 1.2.
Also, the PDF output now has much more compact encoding of text than
before. Cairo is now much more careful to not embed multiple copies of
the same font at different sizes. It also compresses text and font
streams within the PDF output.
API additions
-------------
There are several new functions available in 1.4 that were not
available in 1.2. Curiously, almost all of the new functions simply
allow the user to query state that has been set in cairo (many new
"get" functions) rather than providing any fundamentally new
operations. The new functionality is:
• Getting information about the current clip region
cairo_clip_extents
cairo_copy_clip_rectangle_list
cairo_rectangle_list_destroy
• Getting information about the current dash setting
cairo_get_dash_count
cairo_get_dash
• Getting information from a pattern
cairo_pattern_get_rgba
cairo_pattern_get_surface
cairo_pattern_get_color_stop_rgba
cairo_pattern_get_color_stop_count
cairo_pattern_get_linear_points
cairo_pattern_get_radial_circles
• Getting the current scaled font
cairo_get_scaled_font
• Getting reference counts
cairo_get_reference_count
cairo_surface_get_reference_count
cairo_pattern_get_reference_count
cairo_font_face_get_reference_count
cairo_scaled_font_get_reference_count
• Setting/getting user data on objects
cairo_set_user_data
cairo_get_user_data
cairo_pattern_set_user_data
cairo_pattern_get_user_data
cairo_scaled_font_set_user_data
cairo_scaled_font_get_user_data
• New cairo-win32 functions:
cairo_win32_surface_create_with_ddb
cairo_win32_surface_get_image
cairo_win32_scaled_font_get_logical_to_device
cairo_win32_scaled_font_get_device_to_logical
API deprecation
---------------
The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
worked as a format value for cairo_image_surface_create, and it wasn't
necessary for supporting 16-bit 565 X server visuals.
A sampling of bug fixes in cairo 1.4
------------------------------------
• Fixed radial gradients
• Fixed dashing (degenerate and "leaky" cases)
• Fixed transformed images in PDF/PS output (eliminate bogus repeating)
• Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
• cairo_show_page no longer needed for single-page output
• SVG: Fix bug preventing text from appearing in many viewers
• cairo-ft: Return correct metrics when hinting is off
• Eliminate crash in cairo_create_similar if nil surface is returned
• Eliminate crash after INVALID_RESTORE error
• Fix many bugs related to multi-threaded use and locking
• Fix for glyph spacing 32 times larger than desired (cairo-win32)
• Fixed several problems in cairo-atsui (assertion failures)
• Fix PDF output to avoid problems when printing from Acrobat Reader
• Fix segfault on Mac OS X (measuring a zero-length string)
• Fix text extents to not include the size of non-inked characters
• Fix for glyph cache race condition in glitz backend (Jinghua Luo)
• Fix make check to work on OPD platforms (IA64 or PPC64)
• Fix compilation problems of cairo "wideint" code on some platforms
• Many, many others...
Experimental backends (quartz, XCB, OS/2, BeOS, directfb)
---------------------------------------------------------
None of cairo's experimental backends are graduating to "supported"
status with 1.4.0, but two of them in particular (quartz and xcb), are
very close.
The quartz baceknd has been entirely rewritten and is now much more
efficient. The XCB backend has been updated to track the latest XCB
API (which recently had a 1.0 release).
We hope to see these backends become supported in a future release,
(once they are passing all the tests in cairo's test suite).
The experimental OS/2 backend is new in cairo 1.4 compared to cairo
1.2.
Documentation improvements
--------------------------
We have added documentation for several functions and types that
were previously undocumented, and improved documentation on other
ones. As of this release, there remain only two undocumented
symbols: cairo_filter_t and cairo_operator_t.
[*]Thanks to everyone
---------------------
I've accounted for 41 distinct people with attributed code added to
cairo between 1.2.6 and 1.4.0, (their names are below). That's an
impressive number, but there are certainly dozens more that
contributed with testing, suggestions, clarifying questions, and
encouragement. I'm grateful for the friendships that have developed as
we have worked on cairo together. Thanks to everyone for making this
all so much fun!
Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod,
Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger,
Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams,
Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov,
Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar,
Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen,
Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja,
Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell,
Pavel Roskin, Peter Weilbacher, Robert O'Callahan,
Soren Sandmann Pedersen, Stuart Parmenter, T Rowley,
Vladimir Vukicevic
Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>)
===========================================================
New API functions
-----------------
A few new public functions have been added to the cairo API since the
1.3.14 snapshot. These include a function to query the current scaled
font:
cairo_get_scaled_font
New functions to query the reference count of all cairo objects:
cairo_get_reference_count
cairo_surface_get_reference_count
cairo_pattern_get_reference_count
cairo_font_face_get_reference_count
cairo_scaled_font_get_reference_count
And new functions to allow the use of user_data with any cairo object,
(previously these were only available on cairo_surface_t and
cairo_font_face_t objects):
cairo_set_user_data
cairo_get_user_data
cairo_pattern_set_user_data
cairo_pattern_get_user_data
cairo_scaled_font_set_user_data
cairo_scaled_font_get_user_data
Usability improvement for PDF/PS/SVG generation
-----------------------------------------------
In previous versions of cairo, generating single-page output with the
cairo-pdf, cairo-ps, or cairo-svg backends required a final call to
cairo_show_page. This was often quite confusing as people would port
functional code from a non-paginated backend and be totally mystified
as to why the output was blank until they learned to add this call.
Now that call to cairo_show_page is optional, (it will be generated
implicitly if the user does not call it). So cairo_show_page is only
needed to explicitly separate multiple pages.
Greatly improved PDF output
---------------------------
We are very happy to be able to announce that cairo-generated PDF
output will now have text that can be selected, cut-and-paste, and
searched with most capable PDF viewer applications. This is something
that was not ever possible with cairo 1.2.
Also, the PDF output now has much more compact encoding of text than
before. Cairo is now much more careful to not embed multiple copies of
the same font at different sizes. It also compresses text and font
streams within the PDF output.
Major bug fixes
---------------
• Fixed radial gradients
The rendering of radial gradients has been greatly improved. In
the cairo 1.2 series, there was a serious regression affecting
radial gradients---results would be very incorrect unless one of
the gradient circles had a radius of 0.0 and a center point within
the other circle. These bugs have now been fixed.
• Fixed dashing
Several fixes have been made to the implementation of dashed
stroking. Previously, some dashed, stroked rectangles would
mis-render and fill half of the rectangle with a large triangular
shape. This bug has now been fixed.
• Fixed transformed images in PDF/PS output
In previous versions of cairo, painting with an image-based source
surface pattern to the PDF or PS backends would cause many kinds
of incorrect results. One of the most common problems was that an
image would be repeated many times even when the user had
explicitly requested no repetition with CAIRO_EXTEND_NONE. These
bugs have now been fixed.
• Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or
CAIRO_EXTEND_PAD with a surface-based pattern resulted in an
error, (cairo would stop rendering). This bug has now been
fixed.
Now, CAIRO_EXTEND_REFLECT should work properly with surface
patterns.
CAIRO_EXTEND_PAD is still not working correctly, but it will now
simply behave as CAIRO_EXTEND_NONE rather than triggering the
error.
New rewrite of quartz backend (still experimental)
--------------------------------------------------
Cairo's quartz backend has been entirely rewritten and is now much
more efficient. This backend is still marked as experimental, not
supported, but it is now much closer to becoming an officially
supported backend. (For people that used the experimental nquartz
backend in previous snapshots, that implementation has now been
renamed from "nquartz" to "quartz" and has replaced the old quartz
backend.)
Documentation improvements
--------------------------
We have added documentation for several functions and types that
were previously undocumented, and improved documentation on other
ones. As of this release, there remain only two undocumented
symbols: cairo_filter_t and cairo_operator_t.
Other bug fixes
---------------
• cairo-svg: Fix bug that was preventing text from appearing in many
viewers
• cairo-ft: Return correct metrics when hinting is off
• Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or
_cairo_ft_unscaled_font_lock_face
https://bugs.freedesktop.org/show_bug.cgi?id=10035
• cairo crashes in cairo_create_similar if nil surface returned by
other->backend->create_similar
https://bugs.freedesktop.org/show_bug.cgi?id=9844
• evolution crash in _cairo_gstate_backend_to_user()
https://bugs.freedesktop.org/show_bug.cgi?id=9906
• Fix memory leak in rectilinear stroking code
Things not in this release
--------------------------
• Solid-surface-pattern cache: This patch had been applied during
the 1.3.x series, but it was reverted due to some inter-thread
problems it caused. The patch is interesting since it made a big
benefit for text rendering performance---so we'll work to bring a
corrected version of this patch back as soon as possible.
Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>)
===========================================================
This is the seventh development snapshot in the 1.3 series, (and there
likely won't be many more before the 1.4.0 release). It comes just
over 3 weeks after the 1.3.12 snapshot.
Since we're so close to the 1.4.0 release, there are not a lot of new
features nor even a lot of new performance improvements in this
snapshot. Instead, there are a great number of bug fixes. Some are
long-standing bugs that we're glad to say goodbye to, and several are
fixes for regressions that were introduced as part of the optimization
efforts during the 1.3.x series.
PDF text selection fixed
------------------------
The inability to correctly select text in cairo-generated PDF has been
a defect ever since the initial support for the PDF backend in the
cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and
with most PDF viewer applications, the PDF generated by cairo will
allow text to be correctly selected for copy-and-paste, (as well as
searching).
We're very excited about this new functionality, (and very grateful to
Adrian Johnson, Behdad Esfahbod, and others that have put a lot of
work into this lately). Please test this new ability and give feedback
on the cairo@cairographics.org list.
Many thread-safety issues fixed
-------------------------------
We've discovered that no release of cairo has ever provided safe text
rendering from a multi-threaded application. With the 1.3.14 snapshot
a huge number of the bugs in this area have been fixed, and multiple
application dvelopers have now reported success at writing
multi-threaded applications with cairo.
Other fixes
-----------
Fixed a bug that was causing glyph spacing to be 32 times larger than
desired when using cairo-win32.
Fixed a regression in the rendering of linear gradients that had been
present since the 1.3.8 snapshot.
Fixed several problems in cairo-atsui that were leading to assertion
failures when rendering text.
Fix corrupted results when rendering a transformed source image
surface to an xlib surface. This was a regression that had been
present since the 1.3.2 snapshot.
Fixed PDF output to prevent problems printing from some versions of
Acrobat Reader, (a single glyph was being substituted for every
glyph).
And many other fixes as well, (see the logs for details).
Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>)
===========================================================
The relentless march toward the cairo 1.4 release continues, (even if
slightly late out of the starting blocks in 2007). This is the sixth
development snapshot in the 1.3 series. It comes 4 weeks after the
1.3.10 snapshot.
Performance
-----------
As usual, this snapshot has some fun performance improvements to show
off:
image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup
███████████████████████████████████████████████
image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup
██████████████████████████████████████████████
This 100x improvement, (and yes, that's 100x, not 100%), in the image
backend occurs when drawing large shapes where only a fraction of the
shape actually appears in the final result, (the rest being outside
the bounds of the destination surface). Many applications should see
speedups here, and the actual amount of speedup depends on the ratio
of non-visible to visible portions of geometry.
[Note: There remains a similar performance bug when drawing mostly
non-visible objects with the xlib backend. This is due to a similar
bug in the X server itself, but we hope a future cairo snapshot will
workaround that bug to get a similar speedup with the xlib backend.]
image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup
▍
image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup
▍
This speedup is due to further MMX optimization by Soeren Sandmann for
a case commonly hit when rendering PDF files, (and thanks to Jeff
Muizelaar for writing code to extract the test case for us).
There's another MMX optimization in this snapshot (without a fancy
speedup chart) by Dan Williams which improves compositing performance
specifically for the OLPC machine.
Thanks to Adrian Johnson, cairo's PDF output is now much more
efficient in the way it encodes text output. By reducing redundant
information and adding compression to text output streams, Adrian
achieved a ~25x improvement in the efficiency of encoding text in PDF
files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph).
Bug fixes
---------
In addition to those performance improvements, this snapshot includes
several bug fixes:
* A huge number of bug fixes for cairo-atsui text rendering, (for mac
OS X). These bugs affect font selection, glyph positioning, glyph
rendering, etc. One noteworthy bug fixes is that
cairo_select_font_face will no longer arbitrarily select bold nor
italic when not requested, (at least not when using a standard CSS2
font family name such as "serif", "sans-serif", "monospace", etc.).
All these fixes are thanks to Brian Ewins who continues to do a
great job as the new cairo-atsui maintainer.
* Fix PDF output so that images that are scaled down no longer
mysteriously repeat (Carl Worth).
* Fix segfault on Mac OS X dues to attempt to measure extents of a
zero-length string (Behdad Esfahbod).
* Fix text extents to not include the size of initial/trailing
non-inked characters (Behdad Esfahbod).
API tweaks
----------
Three functions have had API changes to improve consistency. Note that
the API functions being changed here are all functions that were
introduced as new functions during these 1.3.x snapshots. As always,
there will not be any API changes to functions included in a major
release (1.2.x, 1.4.x, etc.) of cairo.
The changes are as follows:
* Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list.
* Change cairo_get_dash_count to return an int rather than accepting a
pointer to an int for the return value.
* Change cairo_get_dash to have a void return type rather than
returning cairo_status_t.
It's possible there will be one more round of changes to these
functions, (and perhaps cairo_get_color_stop as well), as we seek to
establish a unifying convention for returning lists of values.
Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>)
===========================================================
Santa Claus is coming just a little bit early this year, and he's
bringing a shiny new cairo snapshot for all the good little boys and
girls to play with.
This is the fifth development snapshot in the 1.3 series. It comes 9
days after the 1.3.8 snapshot, and still well within our goal of
having a new snapshot every week, (though don't expect one next
week---we'll all be too stuffed with sugar plums).
Speaking of sugar plums, there's a sweet treat waiting in this cairo
snapshot---greatly improved performance for stroking rectilinear
shapes, like the ever common rectangle:
image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup
████████████████████████▋
image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup
████████████████████████▋
xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup
███████▋
xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup
████▍
In past releases of cairo, some people had noticed that using
cairo_stroke to draw rectilinear shapes could be awfully slow. Many
people had worked around this by using cairo_fill with a more complex
path and gotten a 5-15x performance benefit from that.
If you're one of those people, please rip that workaround out, as now
the more natural use of cairo_stroke should be 1.2-2x faster than the
unnatural use of cairo_fill.
And if you hadn't ever implemented that workaround, then you just
might get to see your stroked rectangles now get drawn 5-25x faster.
Beyond that performance fix, there are a handful of bug fixes in this
snapshot:
* Fix for glyph cache race condition in glitz backend (Jinghua Luo)
* Many fixes for ATSUI text rendering (Brian Ewins)
* Un-break recent optimization-triggered regression in rendering text
with a translation in the font matrix (Behdad Esfahbod)
* Fix make check to work on OPD platforms (IA64 or PPC64)
(Frederic Crozat)
* Fix a couple of character spacing issues on Windows
(Jonathan Watt)
Have fun with that, everybody, and we'll be back for more in the new
year, (with a plan to add the last of our performance improvements in
this round, fix a few bad, lingering bugs, and then finish off a nice,
stable 1.4 release before the end of January).
-Carl
Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>)
==========================================================
This is the fourth development snapshot in the 1.3 series. It comes
just slightly more than one week after the 1.3.6 snapshot.
After the bug fixes in 1.3.6, we're back to our original program of
weekly snapshots, each one faster than the one from the week
before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering
linear gradients (thanks to David Turner), and a significant reduction
in X traffic when rendering text (thanks to Xan Lopez and Behdad
Esfahbod), making cairo behave very much like Xft does.
A few other things in the 1.3.8 snapshot worth noting include a more
forgiving image comparator in the test suite, (using the "perceptual
diff" metric and GPL implementation by Hector Yee[*]), a bug fix for
broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even
better implementation of _cairo_lround, (not faster, but supporting a
more complete input range), from Daniel Amelang.
[*] http://pdiff.sourceforge.net/
Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>)
==========================================================
This is the third development snapshot in the 1.3 series. It comes two
weeks after the 1.3.4 snapshot.
We don't have fancy performance charts this week as the primary
changes in this snapshot are bug fixes. The performance work continues
and the next snapshot (planned for one week from today) should include
several improvements. The bug fixes in this snapshot include:
* Fix undesirable rounding in glyph positioning (Dan Amelang)
This bug was noticed by several users, most commonly by seeing
improper text spacing or scrambled glyphs as drawn by nautilus. For
example:
Update to cairo-1.3.4 worsen font rendering
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819
* Fix reduced range of valid input coordinates to tessellator
(M Joonas Pihlaja)
This bug was causing lots of assertion failures in mozilla as
mentioned here:
CAIRO_BO_GUARD_BITS and coordinate space?
https://lists.freedesktop.org/archives/cairo/2006-December/008743.html
* Fix several regressions in new tessellator (M Joonas Pihlaja)
Joonas just had a good eye for detail here. I don't think any
external cairo users had noticed any of these bugs yet.
* Fix compilation problems of cairo "wideint" code on some platforms
(Mathieu Lacage)
* Fix failed configure due to broken grep (Dan Amelang)
This bug was reported here:
AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't
work with binary file
https://bugs.freedesktop.org/show_bug.cgi?id=9124
* Remove the pkg-config minimum version requirement (Behdad Esfahbod)
Some systems ship with pkg-config 0.15 and there was really no good
reason for cairo to insist on having version 0.19 before it would
build.
There is also one new (but inert) feature in this snapshot. There's a
new option that can be passed to cairo's configure script:
--disable-some-floating-point
Disable certain code paths that rely heavily on double precision
floating-point calculation. This option can improve
performance on systems without a double precision floating-point
unit, but might degrade performance on those that do.
As of this snapshot, this option does not make any change to cairo,
but it is possible that future versions of cairo will respect this
option and change the implementation of various functions as
appropriate.
Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>)
==========================================================
This is the second development snapshot in the 1.3 series. It comes
one week after the 1.3.2 snapshot.
This snapshot has a couple of significant performance improvements,
and also adds new support for producing multi-page SVG output, (when
targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the
performance improvements are as follows:
1. The long-awaited "new tessellator".
The credit for this being an improvement goes to Joonas Pihlaja. He
took my really slow code and really put it through its paces to get
the dramatic performance improvement seen below (up to 38x faster
on realistic cases, and more than 10x faster for the zrusin_another
test).
His own writeup of the work he did is quite thorough, but more than
can be quoted here. Please see his post for the interesting details:
https://lists.freedesktop.org/archives/cairo/2006-November/008483.html
(Though note that this snapshot also includes some additional,
significant improvements that were only sketched out in that
email---see "Generating fewer trapezoids").
2. More floating-point improvements
Daniel Amelang continues to work the magic he began in the 1.3.2
snapshot. This time he short-circuits floating-point
transformations by identity matrices and applies the earlier
floating-to-fixed-point technique to the problem of rounding.
The improvements here will primarily benefit text performance, and
will benefit platforms without hardware floating-point more than
those that have it, (some text tests show 20% improvement on an x86
machine and closer to 80% improvement on arm).
The performance chart comparing 1.3.2 to 1.3.4 really speaks for
itself, (this is on an x86 laptop). This is quite a lot of progress
for one week:
xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup
███████████████████████████████████▉
xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup
██████████████████████▊
xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup
██████████████████████▍
image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup
██████████████████████▍
xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup
█████████████████
xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup
█████████████
xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup
█████████▋
image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup
█████████▍
image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup
████████▏
xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup
███████▉
image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup
█████▉
xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup
█████▊
xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup
█████
xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup
████▎
xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup
███▏
xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup
██▊
image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup
▍
image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup
▍
image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup
▎
xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup
▎
image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup
▎
image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup
▎
image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup
▎
image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup
▎
image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup
▎
image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup
▎
image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup
▎
image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup
▎
image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup
▎
We should point out that there is some potential for slowdown in this
snapshot. The following are the worst slowdowns reported by the cairo
performance suite when comparing 1.3.2 to 1.3.4:
image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown
▌
xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown
▎
image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown
▎
image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown
▏
image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown
▏
image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown
▏
image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown
▏
image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown
▏
image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown
▏
image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown
▏
image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown
▏
image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown
▏
The 45% slowdown for subimage_copy is an extreme case. It's unlikely
to hit many applications unless they often use cairo_rectangle;
cairo_fill to copy a single pixel at a time. In any case, it shows a
worst-case impact of the overhead of the new tessellator. The other
slowdowns (~ 10%) are probably more realistic, and still very
concerning.
We will work to ensure that performance regressions like these are not
present from one major release of cairo to the next, (for example,
from 1.2 to 1.4).
But we're putting this 1.3.4 snapshot out there now, even with this
potential slowdown so that people can experiment with it. If you've
got complex geometry, we hope you will see some benefit from the new
tessellator. If you've got primarily simple geometry, we hope things
won't slowdown too much, but please let us know what slowdown you see,
if any, so we can calibrate our performance suite against real-world
impacts.
Thanks, and have fun with cairo!
Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>)
==========================================================
This is the first development snapshot since the 1.2 stable series
branched off shortly after the 1.2.4 release in August 2006.
This snapshot includes all the bug fixes from the 1.2.6 release,
(since they originated here on the 1.3 branch first and were
cherry-picked over to 1.2). But more importantly, it contains some new
API in preparation for a future 1.4 release, and most importantly, it
contains several performance improvements.
The bug fixes will not be reviewed here, as most of them are already
described in the 1.2.6 release notes. But details for the new API and
some performance improvements are included here.
As with all snapshots, this is experimental code, and the new API
added here is still experimental and is not guaranteed to appear
unchanged in any future release of cairo.
API additions
-------------
Several new API additions are available in this release. There is a
common theme among all the additions in that they allow cairo to
advertise information about its state that it was refusing to
volunteer earlier. So this isn't groundbreaking new functionality, but
it is essential for easily achieving several tasks.
The new functions can be divided into three categories:
Getting information about the current clip region
-------------------------------------------------
cairo_clip_extents
cairo_copy_clip_rectangles
cairo_rectangle_list_destroy
Getting information about the current dash setting
--------------------------------------------------
cairo_get_dash_count
cairo_get_dash
Getting information from a pattern
----------------------------------
cairo_pattern_get_rgba
cairo_pattern_get_surface
cairo_pattern_get_color_stop_rgba
cairo_pattern_get_color_stop_count
cairo_pattern_get_linear_points
cairo_pattern_get_radial_circles
In each of these areas, we have new API for providing a list of
uniform values from cairo. The closest thing we had to this before was
cairo_copy_path, (which is rather unique in providing a list of
non-uniform data).
The copy_clip_rectangles/rectangle_list_destroy functions follow a
style similar to that of cairo_copy_path. Meanwhile, the dash and
pattern color stop functions introduce a new style in which there is a
single call to return the number of elements available (get_dash_count
and get_color_stop_count) and then a function to be called once to get
each element (get_dash and get_color_stop_rgba).
I'm interested in hearing feedback from users of these new API
functions, particularly from people writing language bindings. One
open question is whether the clip "getter" functionality should adopt
a style similar to that of the new dash and color_stop interfaces.
API deprecation
---------------
The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
worked as a format value for cairo_image_surface_create, and it wasn't
necessary for supporting 16-bit 565 X server visuals.
XCB backend changes
-------------------
The XCB backend has been updated to track the latest XCB API (which
recently had a 1.0 release).
New quartz backend
------------------
Vladimir Vukicevic has written a new "native quartz" backend which
will eventually replace the current "image-surface wrapping" quartz
backend. For now, both backends are available, (the old one is
"quartz" and the new one is "nquartz"). But it is anticipated that the
new backend will replace the old one and take on the "quartz" name
before this backend is marked as supported in a release of cairo.
New OS/2 backend
----------------
Doodle and Peter Weilbacher have contributed a new, experimental
backend for using cairo on OS/2 systems.
Performance improvements
------------------------
Here are some highlights from cairo's performance suite showing
improvements from cairo 1.2.6 to cairo 1.3.2. The command used to
generate this data is:
./cairo-perf-diff 1.2.6 HEAD
available in the perf/ directory of a recent checkout of cairo's
source, (the cairo-perf-diff script does require a git checkout and
will not work from a tar file---though ./cairo-perf can still be used
to generate a single report there and ./cairo-perf-diff-files can be
used to compare two reports).
Results are described below both for an x86 laptop (with an old Radeon
video card, recent X.org build, XAA, free software drivers), as well
as for a Nokia 770. First the x86 results with comments on each, (all
times are reported in milliseconds).
Copying subsets of an image surface to an xlib surface (much faster)
--------------------------------------------------------------------
xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup
█████████████████████████████████████████████████████
Thanks to Christopher (Monty) Montgomery for this big performance
improvement. Any application which has a large image surface and is
copying small pieces of it at a time to an xlib surface, (imagine an
application that loads a single image containing all the "sprites" for
that application), will benefit from this fix. The larger the ratio of
the image surface to the portion being copied, the larger the benefit.
Floating-point conversion (3x faster)
-------------------------------------
xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup
██
image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup
█▉
Thanks to Daniel Amelang, (and others who had contributed the idea
earlier), for this nice improvement in the speed of converting
floating-point values to fixed-point.
Text rendering (1.3 - 2x faster)
------------------------------
xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup
█▏
image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup
▍
I don't think we've ever set out to improve text performance
specifically, but we did it a bit anyway. I believe the extra
improvement in the xlib backend is due to Monty's image copying fix
above, and the rest is due to the floating-point conversion speedup.
Thin stroke improvements (1.5x faster)
---------------------------------------------
image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup
▋
xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup
▌
The most modest stuff to announce in this release is the 50%
improvement I made in the world_map case. This is in improvement that
should help basically anything that is doing strokes with many
straight line segments, (and the thinner the better, since that makes
tessellation dominate rasterization). The fixes here are to use a
custom quadrilateral tessellator rather than the generic tessellator
for straight line segments and the miter joins.
Performance results from the Nokia 770
--------------------------------------
xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup
██████████████████████████▍
xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup
████
image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup
█
xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup
▍
Here we see that the subimage_copy improvement was only about half as
large as the corresponding improvement on my laptop, (27x faster
compared to 54x) and the floating-point conversion fix also was quite
as significant, (2x compared to 3x). Oddly the improvement to text
rendering performance was more than twice as good (5x compared to
2x). I don't know what the reason for that is, but I don't think it's
anything anybody should complain about.
Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>)
==============================================================
This is the third bug fix release in the 1.2 series, coming less than
two months after the 1.2.4 release made on August 18.
The 1.2.4 release turned out to be a pretty solid one, except for a crash
bug when forwarding an X connection where the client and the server have
varying byte orders, eg. from a PPC to an i686. Other than that, various
other small bugs have been fixed.
Various improvements have been made in the testing infrastructure to prevent
false positives, and to make sure the generated cairo shared object behaves as
expected in terms of exported symbols and relocations.
There were a total of 89 changes since 1.2.4. The following list the most
important ones:
Common fixes
------------
- Avoid unsigned loop control variable to eliminate infinite,
memory-scribbling loop. (#7593)
- Fix cairo_image_surface_create to report INVALID_FORMAT errors.
Previously the detected error was being lost and a nil surface was
returned that erroneously reported CAIRO_STATUS_NO_MEMORY.
- Change _cairo_color_compute_shorts to not rely on any particular
floating-point epsilon value. (#7497)
- Fix infinite-join test case (bug #8379)
- Pass correct surface to create_similar in _cairo_clip_init_deep_copy().
PS/PDF fixes
------------
- Fix Type 1 embedding in PDF.
- Correct the value of /LastChar in the PDF Type 1 font dictionary.
- Improve error checking in TrueType subsetting.
- Compute right index when looking up left side bearing. (bug #8180)
- Correct an unsigned to signed conversion problem in truetype subsetting
bbox.
- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs.
- Add cairo version to PS header / PDF document info dictionary.
- Set CTM before path construction.
Win32 fixes
-----------
- Get correct unhinted outlines on win32. (bug 7603)
- Make cairo as a win32 static library possible.
- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too.
Build system fixes
------------------
- Define WINVER if it's not defined. (bug 6456)
- Fix the AMD64 final link by removing SLIM from pixman.
- Misc win32 compilation fixes.
- Add Sun Pro C definition of pixman_private.
- Use pixman_private consistently as prefix not suffix.
- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check
that the shared object, the .def file, and the public headers agree about
the exported symbols.
- Require pkg-config 0.19. (#8686)
Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>)
=========================================================
This is the second bug fix release in the 1.2 series, coming less than
two weeks after the 1.2.2 release made on August 8.
The big motivation for a quick release was that there were a log of
build system snags that people ran into with the 1.2.2 release. But,
by the time we got those all done, we found that we had a bunch of
fixes for cairo's rendering as well. So there's a lot of goodness in
here for such a short time period.
Rendering fixes
---------------
Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b
Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0
Fix support for type1 fonts on win32 (Adrian Johnson)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7
Fix assertion failure when rotating bitmap fonts (Carl Worth)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9
Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9
Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc
Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3
Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f
[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d
Build system fixes
------------------
Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68
Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774
Fix configure cache to not use stale results (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e
Fix to not pass unsupported warning options to the compiler (Jens Granseuer)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571
Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0
Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781
Fix test suite to not require signal.h to be present (Behdad Esfahbod)
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40
Code cleanups
-------------
Many useful warnings cleanups from sparse, valgrind, and careful eyes
(Kjartan Maraas, Pavel Roskin)
Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>)
=========================================================
This is the first bug fix release in the 1.2 series since the original
1.2.0 release made six weeks ago.
There were some very serious bugs in the 1.2.0 release, (see below),
so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2
release maintains source and binary compatibility with 1.2.0 and does
not make any API additions.
Fix crashes with BGR X servers
------------------------------
With cairo 1.2.0 many people reported problems with all cairo-using
programs, (including all GTK+ programs with GTK+ >= 2.8) immediately
crashing with a complaint about an unsupported image format. This bug
affected X servers that do not provide the Render extension and that
provide a visual with BGR rather than RGB channel order.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7294
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59
Fix the "disappearing text" bug
-------------------------------
With cairo 1.2.0 many people reported that text would disappear from
applications, sometimes reappearing with mouse motion or
selection. The text would disappear after the first space in a string
of text. This bug was caused by an underlying bug in (very common) X
servers, and only affected text rendered without antialiasing, (either
a bitmap font or a vector font with antialiasing disabled). The bug
was also exacerbated by a KDE migration bug that caused antialiasing
to be disabled more than desired.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7494
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14
see also:
Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681
KDE: http://qa.mandriva.com/show_bug.cgi?id=23990
Fix broken image fallback scaling (aka. "broken printing")
----------------------------------------------------------
The various "print" backends, (pdf, ps, and svg), sometimes fallback
to using image-based rendering for some operations. In cairo 1.2.0
these image fallbacks were scaled improperly. Applications using cairo
can influence the resolution of the image fallbacks with
cairo_surface_set_fallback_resolution. With the bug, any value other
than 72.0 would lead to incorrect results, (larger values would lead
to increasingly shrunken output).
report: https://bugs.freedesktop.org/show_bug.cgi?id=7533
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb
Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod)
----------------------------------------------------------------------------
The 1.2.0 release introduced an inadvertent change to how the
translation components of a font matrix are interpreted. In the 1.0
series, font matrix translation could be used to offset the glyph
origin, (though glyph metrics were reported incorrectly in
1.0). However in 1.2.0, the translation was applied to the advance
values between each glyph. The 1.2.0 behavior is fairly useless in
practice, and it was not intentional to introduce a semantic
change. With 1.2.2 we return to the 1.0 semantics, with a much better
implementation that provides correct glyph metrics.
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051
Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod)
-------------------------------------------------------------------------------------
There has been a long-standing issue with cairo_surface_create_similar
such that font options and other settings from the original
destination surface would not be preserved to the intermediate
"similar" surface. This could result in incorrect rendering
(particularly with respect to text hinting/antialiasing) with
fallbacks, for example.
report: https://bugs.freedesktop.org/show_bug.cgi?id=4106
fixes: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0
https://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec
xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic)
----------------------------------------------------------------------------
Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0
caused a significant performance regression when using the xlib
backend. This performance regression was particularly noticeable when
doing lots of text rendering and when using a high-latency connection
to the X server, (such as a remote X server over an ssh
connection). The slowdown was identified and fixed in 1.2.2.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7514
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c
PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson)
-------------------------------------------------------------------------
The cairo 1.2 series adds a supported pdf backend to cairo. In cairo
1.2.0 this backend required the freetype library, which was an
undesirable dependency on systems such as win32, (cairo is designed to
always prefer the "native" font system). As of cairo 1.2.2 the
freetype library is not required to use the pdf backend on the win32
platform.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7538
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691
PDF: Fix broken output on amd64 (Adrian Johnson)
------------------------------------------------
report: https://bugzilla.gnome.org/show_bug.cgi?id=349826
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60
PS: Fix broken output for truetype fonts > 64k (Adrian Johnson)
---------------------------------------------------------------
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94
PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop)
------------------------------------------------------------
Kent notices that with the PDF backend in cairo 1.2.0 as soon as a
stroke was performed with dashing, all subsequent strokes would also
be dashed. There was no way to turn dashing off again.
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256
Fix memory leaks in failure paths in gradient creation (Alfred Peng)
--------------------------------------------------------------------
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2
Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson)
------------------------------------------------------------
report: https://bugs.freedesktop.org/show_bug.cgi?id=7766
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd
Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng)
-----------------------------------------------------------------------------
report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6
Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron)
-------------------------------------------------------------------------------------
report: https://bugs.freedesktop.org/show_bug.cgi?id=7483
fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235
Various memory leak fixes
-------------------------
Fix memory leak in _cairo_surface_show_glyphs (bug 7766)
Fix file handle leak in failure path (bug 7616)
Fix some memory leaks in the test cases.
Fix some memory leaks in font subsetting code used in print backends.
Documentation improvements (Behdad Esfahbod)
--------------------------------------------
Added new documentation for several functions (cairo_show_page,
cairo_copy_page, cairo_in_stroke, cairo_in_fill).
Fixed some syntax errors that were preventing some existing
documentation from being published.
Fixed several minor typographical errors.
Added an index for new symbols in 1.2.
Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>)
=========================================================
This is the culmination of the work that has gone on within the 1.1
branch of cairo.
There has been one API addition since the cairo 1.1.10 snapshot:
cairo_xlib_surface_get_width
cairo_xlib_surface_get_height
There's also a new feature without any API change:
Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with
degenerate sub-paths, (cairo_move_to() followed by either
cairo_close_path() or a cairo_line_to() to the same location).
And at least the following bugs have been fixed:
6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2
6955 Some characters aren't displayed when using xlib (cache u...
7268 positive device_offset values don't work as source
* PDF emit_glyph function needs to support bitmapped glyphs
* PS emit_glyph function needs to support bitmapped glyphs
* SVG emit_glyph function needs to support bitmapped glyphs
* PDF: minefield page one is falling back unnecessarily
* PS/PDF: Fix broken placement for vertical glyphs
* PS: Fix to not draw BUTT-capped zero-length dash segments
* Do device offset before float->fixed conversion
https://bugzilla.gnome.org/show_bug.cgi?id=332266
* PS: Fix source surfaces with transformations
* PS: Fix to not draw BUTT-capped degenerate sub-paths
* PS: Don't walk off end of array when printing "~>"
* Fix some memory leaks in the test suite rig
* SVG: Fix memory leak when using cairo_mask
* Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are
still not yet fully implemented for surface patterns).
This has been a tremendous effort by everyone, and I'm proud to have
been a part of it. Congratulations to all contributors to cairo!
Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>)
===========================================================
This is the fifth in a series of snapshots working toward the 1.2
release of cairo.
The primary motivation for this snapshot is to fix a long-standing bug
that had long been silent, but as of the 1.1.8 snapshot started
causing crashes when run against 16-bit depth X servers, (often Xvnc
or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the
API.
This snapshot also includes a rewrite of cairo's SVG backend to
eliminate the dependency on libxml2. With this in place, cairo 1.2
will not depend on any libraries that cairo 1.0 did not.
As usual, there are also a few fixes for minor bugs.
Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>)
==========================================================
This is the fourth in a series of snapshots working toward the 1.2
release of cairo. At this point, all major features of the 1.2 release
are in place, leaving just a few bug fixes left.
In particular, there well be no additional API changes between this
1.1.8 snapshot and the 1.2 release.
The announcement for 1.1.6 mentioned several API changes being
considered. Only one of these changes was actually implemented
(set_dpi -> fallback_resolution). This change does introduce one
source-level incompatibility with respect to previous 1.1.x snapshots,
so see below for details.
Here is an abbreviated summary of changes since the 1.1.6 snapshot:
** API Change **
----------------
According to the plan mentioned in the 1.1.6 notes, one source-level
incompatible change has been implemented. The following three
functions have been removed from cairo's API:
cairo_pdf_surface_set_dpi
cairo_ps_surface_set_dpi
cairo_svg_surface_set_dpi
and in their place the following function has been added:
cairo_surface_set_fallback_resolution
The signature and semantics of the function remains the same, so it is
a simple matter of changing the name of the function when calling
it. As a transition mechanism, this snapshot will (on many systems)
build to include the old symbols so that code previously compiled will
still run. However, all source code using the old names must be
updated before it will compile. And the upcoming 1.2 release is not
anticipated to include the old symbols.
Finally, it should be pointed out that the old symbols never existed
in the supported API of any stable release of cairo. (In the stable
1.0 releases the PDF, PS, and SVG backends were advertised as
experimental and unstable.)
And, as always, cairo continues to maintain source and binary
compatibility between major releases. So applications compiled against
supported backends in a stable release of cairo (1.0.4 say) will
continue to compile and run without modification against new major
releases (1.2.0 say) without modification.
API additions
-------------
The following new functions have been added to cairo's API:
cairo_surface_get_content
cairo_debug_reset_static_data
cairo_image_surface_get_data
cairo_image_surface_get_format
cairo_image_surface_get_stride
cairo_win32_font_face_create_for_hfont
New, backend-specific pkg-config files
--------------------------------------
In addition to the original cairo.pc file, cairo will also now install
a pkg-config files for each configured backend, (for example
cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this
also includes optional font backends (such as cairo-ft.pc) and the
optional png functionality (cairo-png.pc).
These new pkg-config files should be very convenient for allowing
cairo-using code to easily check for the existing of optional
functionality in cairo without having to write complex rules to grub
through cairo header files or the compiled library looking for
symbols.
Printing backend (PS, PDF, and SVG)
-----------------------------------
Improving the quality of the "printing" backends has been a priority
of the development between cairo 1.1.6 and cairo 1.1.8.
The big improvement here is in the area of text output. Previously, at
best, text was output as paths without taking advantage of any font
support available in the output file format.
Now, at the minimum text paths will be shared by using type3 fonts
(for PS and PDF---and similarly, defs for SVG). Also, if possible,
type3 and truetype fonts will be embedded in PostScript and PDF
output. There are still some known bugs with this, (for example,
selecting text in a cairo-generated PDF file with an embedded truetype
font does not work). So there will be some more changes in this area
before cairo 1.2, but do try test this feature out as it exists so
far.
Many thanks to Kristian Høgsberg for the truetype and type1 font
embedding.
win32 backend
-------------
Performance improvements by preferring GDI over pixman rendering when possible.
Fixes for text rendering.
xlib backend
------------
Fix potentially big performance bug by making xlib's create_similar
try harder to create a pixmap of a depth matching that of the screen.
Bug fixes
---------
Among various other fixes, the following bugs listed in bugzilla have
been fixed:
Bug 2488: Patch to fix pixman samping location bug (#2488).
https://bugs.freedesktop.org/show_bug.cgi?id=2488
Bug 4196: undef MIN an MAX before defining to avoid duplicate definition
https://bugs.freedesktop.org/show_bug.cgi?id=4196
Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version
https://bugs.freedesktop.org/show_bug.cgi?id=4723
Bug 4882: Flag Sun's X server has having buggy_repeat.
https://bugs.freedesktop.org/show_bug.cgi?id=4882
Bug 5306: test/pdf2png: Add missing include of stdio.h
https://bugs.freedesktop.org/show_bug.cgi?id=5306
Bug 7075: Fix make clean to remove cairo.def
https://bugs.freedesktop.org/show_bug.cgi?id=7075
(Many thanks to Behdad Esfahbod for helping us track down and fix many
of these.)
Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>)
==========================================================
This is the third in a series of snapshots working toward the imminent
1.2 release of cairo. For a list of items still needing work on the
cairo 1.2 roadmap, please see:
https://cairographics.org/ROADMAP
As can be seen in that list, there are no longer any API additions
left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a
performance optimization (X server gradients) and a list of bug
fixes. This gives us a fair amount of freedom to cut the 1.2 release
at almost any point by deciding to defer remaining bug fixes to
subsequent maintenance releases such as 1.2.2 and 1.2.4.
Before we will do that, we must first be wiling to commit to all the
new API additions. As a heads-up, there are a couple of potential API
changes being considered. (Note that these are changes to new API
introduced during 1.1 so these will not introduce API
incompatibilities compared to the stable 1.0 series). The changes
being considered are:
cairo_get_group_target: may acquire x and y offset return
parameters. May also be eliminated in favor of
cairo_get_target assuming its role
cairo_pdf_surface_set_dpi:
cairo_ps_surface_set_dpi:
cairo_svg_surface_set_dpi: These functions may be removed in favor
of a new cairo_surface_set_fallback_resolution
Additionally there is the possibility of a slight change in the
semantics of cairo_set_line_width. We believe the current behavior of the sequence:
cairo_set_line_width; ... change CTM ...; cairo_stroke;
is buggy. It is currently behaving the same as:
... change CTM ...; cairo_set_line_width; cairo_stroke;
We are considering fixing this bug before 1.2 with the hope that
nobody is already relying on the buggy behavior described here. Do
shout if you suspect you might be in that position.
The items included in this snapshot (since the 1.1.4 snapshot) are
described below.
API additions
-------------
The long-awaited group-rendering support is now available with the
following function calls:
cairo_push_group
cairo_push_group_with_content
cairo_pop_group
cairo_pop_group_to_source
cairo_get_group_target
This API provides a much more convenient mechanism for doing rendering
to an intermediate surface without the need to manually create a
temporary cairo_surface_t and a temporary cairo_t and clean them up
afterwards.
Add the following missing get function to complement
cairo_surface_set_device_offset:
cairo_surface_get_device_offset
PDF backend (API addition)
--------------------------
The PDF backend now provides for per-page size changes, (similar to
what the PostScript backend got in the 1.1.4 snapshot). The new API
is:
cairo_pdf_surface_set_size
Xlib backend (API additions)
----------------------------
The following functions have been added to allow the extraction of
Xlib surface:
cairo_xlib_surface_get_display
cairo_xlib_surface_get_drawable
cairo_xlib_surface_get_screen
cairo_xlib_surface_get_visual
cairo_xlib_surface_get_depth
XCB backend (experimental)
--------------------------
Update backend so that it now compiles with the recent XCB 0.9 release.
Bug fixes and memory leak cleanup
---------------------------------
Various little things, nothing too significant though.
Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>)
==========================================================
This is the second in a series of snapshots working toward the
upcoming 1.2 release of cairo. For a list of items still needing work
on the cairo 1.2 roadmap, please see:
https://cairographics.org/ROADMAP
The items included in this snapshot (since the 1.1.2 snapshot) are
described below.
PostScript backend: new printing-oriented API
---------------------------------------------
We anticipate that with cairo 1.2, toolkits will begin to use cairo
for printing on systems that use PostScript as the spool format. To
support this use case, we have added 4 new function calls that are
specific to the PostScript backend:
cairo_ps_surface_set_size
cairo_ps_surface_dsc_comment
cairo_ps_surface_dsc_begin_setup
cairo_ps_surface_dsc_begin_page_setup
These functions allow variation of the page size/orientation from one
page to the next in the PostScript output. They also allow the toolkit
to provide per-document and per-page printer control options in a
device-independent way, (for example, by using PPD options and
emitting them as DSC comments into the PostScript output). This should
allow toolkits to provide very fine-grained control of many options
available in printers, (media size, media type, tray selection, etc.).
SVG backend: builds by default, version control
-----------------------------------------------
The SVG backend continues to see major improvements. It is expected
that the SVG backend will be a supported backend in the 1.2
release. This backend will now be built by default if its dependencies
(freetype and libxml2) are met.
Additionally, the SVG backend now has flexibility with regard to what
version of SVG it targets. It will target SVG 1.1 by default, which
will require image fallbacks for some of the "fancier" cairo
compositing operators. Or with the following new function calls:
cairo_svg_surface_restrict_to_version
cairo_svg_get_versions
cairo_svg_version_to_string
it can be made to target SVG 1.2 in which there is native support for
these compositing operators.
Bug fixes
---------
At least the following bugs have been fixed since the 1.1.2 snapshot:
crash at XRenderAddGlyphs
https://bugs.freedesktop.org/show_bug.cgi?id=4705
Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value"
https://bugs.freedesktop.org/show_bug.cgi?id=6792
Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185
https://bugzilla.mozilla.org/show_bug.cgi?id=336129
A couple of memory leaks.
Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>)
==========================================================
This is the first in a series of snapshots working toward the upcoming
1.2 release of cairo. (Subsequent snapshot will use successive even
numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is
backwards-compatible with the 1.0 series---it makes a few API
additions but does not remove any API.
PostScript and PDF backends are no longer "experimental"
--------------------------------------------------------
The major theme of the 1.2 release is improved PostScript and PDF
backends for cairo. Unlike the 1.0 series, in the 1.2 series these
backends will not be marked as experimental and will be enabled by
default. We encourage people to test this snapshot and the PS/PDF
backends in particular as much as possible.
The PostScript and PDF output is not yet ideal.
* One major problem with the PostScript output is that image
fallbacks are used more often than strictly necessary, and the
image fallbacks are at a lower resolution than desired, (the
cairo_ps_surface_set_dpi call is ignored).
* The major drawback of the current PDF backend implementation is
its text support. Every glyph is represented by a filled path in
the PDF file. The causes file sizes to be much larger and
rendering to be much slower than desired.
It is anticipated that both of these shortcomings will see some
improvements before the final 1.2 release.
In spite of those shortcomings, we hope that the PS and PDF backends
will yield faithful results for pretty much any cairo operations you
can throw at them. Please let us know if you are getting obviously
"different" results from the PS/PDF backends than from the image or
xlib backends.
Other new experimental backends
-------------------------------
This snapshot includes three new backends that did not exist in the
1.0 series:
* beos backend
* directfb backend
* svg backend
These are all currently marked "experimental" and are disabled by
default. But the SVG backend in particular has seen a lot of recent
development and is very close to passing the entire cairo test
suite. It is possible that this backend will become a fully supported
backend by the time of the cairo 1.2 release.
Public API additions
--------------------
There have been a few new API functions added to cairo, including:
New get_type functions for querying sub-types of object:
cairo_surface_get_type
cairo_pattern_get_type
cairo_font_face_get_type
cairo_scaled_font_get_type
More convenience in working with cairo_scaled_font_t with new getter
functions:
cairo_scaled_font_get_font_face
cairo_scaled_font_get_font_matrix
cairo_scaled_font_get_ctm
cairo_scaled_font_get_font_options
As well as a convenience function for setting a scaled font into a
cairo context:
cairo_set_scaled_font
and a function to allow text extents to be queried directly from a
scaled font, (without requiring a cairo_surface_t or a cairo_t):
cairo_scaled_font_text_extents
These new scaled font functions were motivated by the needs of the
pango library.
Finally, a new path-construction function was added which clears the
current point in preparation for a new sub path. This makes cairo_arc
easier to use in some situations:
cairo_new_sub_path
Before the 1.2 release is final we do still plan a few more API
additions specifically motivated by the needs of Mozilla/Firefox.
Optimizations and bug fixes
---------------------------
Shortly after the 1.0 maintenance series branched off the mainline
there was a major rework of the cairo font internals. This should
provide some good performance benefits, but it's also another area
people should look at closely for potential regressions.
There has not yet been any widespread, systematic optimization of
cairo, but various performance improvements have been made, (and some
of them are fairly significant). So if some things seem faster than
1.0 then things are good. If there are any performance regressions
compared to 1.0 then there is a real problem and we would like to hear
about that.
There has been a huge number of bug fixes---too many to mention in
detail. Again, things should be better, and never worse compared to
1.0. Please let us know if your testing shows otherwise.
Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>)
=========================================================
For each bug number XXXX below, see:
https://bugs.freedesktop.org/show_bug.cgi?id=XXXX
for more details.
General bug fixes
-----------------
* 4408 - Add support for dashing of stroked curves
(Carl Worth)
* 4409 - Fix dashing so that each dash is capped on both ends
(Carl Worth)
* 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags)
(Sebastien Bacher, Billy Biggs)
* 4299 - Fix crashes with text display in multi-threaded program
(Alexey Shabalin, Carl Worth)
* 4401 - Do not use sincos function since it is buggy on some platforms)
(Tim Mooney, Carl Worth)
* 4245 - Fix several bugs in the test suite exposed by amd64 systems
(Seemant Kulleen, Carl Worth)
* 4321 - Add missing byteswapping on GetImage/PutImage
(Sjoerd Simons, Owen Taylor)
* 4220 - Make the check for rectangular trapezoids simpler and more accurate
(Richard Stellingwerff, Owen Taylor)
* 4260 - Add missing channel-order swapping for antialised fonts
(Barbie LeVile, Owen Taylor)
* 4283 - Fix compilation failure with aggressive inlining (gcc -O3)
(Marco Manfredini, Owen Taylor)
* 4208 - Fix some warnings from sparse
(Kjartan Maraas, Billy Biggs)
* 4269 - Fix to not crash when compiled with -fomit-frame-pointer
(Ronald Wahl, Owen Taylor)
* 4263 - Improve performance for vertical gradients
(Richard Stellingwerff, Owen Taylor)
* 4231
* 4298 - Accommodate gentoo and Mandriva versions in X server vendor string check
(Billy Biggs, Frederic Crozat, Owen Taylor)
win32-specific fixes
--------------------
* 4599 - Fix "missing wedges" on some stroked paths (win32)
(Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard)
* 4612 - Fix disappearing text if first character out of surface (win32)
(Tim Rowley)
* 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32)
Aka. the "white rectangles" bug from mozilla-svg testing
(Tim Rowley)
* Various portability improvements for win32
(Hans Breuer, Owen Taylor, Carl Worth)
* 4593 - Fix font sizes to match user expectations (win32)
(Tor Lillqvist, Owen Taylor)
* 3927 - Fix to report metrics of size 0 for glyph-not-available (win32)
(Hans Breuer, Owen Taylor, Tor Lillqvist)
* Add locking primitives for win32
(Hans Breuer)
xlib-specific fixes
-------------------
* Fix crash from size-0 pixmap due to empty clip region (xlib)
(Radek Doulík, Carl Worth)
Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>)
=========================================================
Experimental backends
---------------------
* The Glitz, PS, PDF, Quartz, and XCB backends have been declared
experimental, and are not part of the API guarantees that accompany
this release. They are not built by default, even when the required
libraries are available, and must be enabled explicitly with
--enable-ps, --enable-pdf, --enable-quartz or --enable-xcb.
It is very painful for us to be pushing out a major release without
these backends enabled. There has been a tremendous amount of work
put into each one and all are quite functional to some
extent. However, each also has some limitations. And none of these
backends have been tested to the level of completeness and
correctness that we expect from cairo backends.
We do encourage people to experiment with these backends and report
success, failure, or means of improving them.
Operator behavior
-----------------
* Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators
behaved in an inconsistent and buggy fashion and could affect areas
outside the clip mask. In 0.9.0, these six "unbounded" operators
were fixed to consistently clear areas outside the shape but within
the clip mask. This is useful behavior for an operator such as IN,
but not what was expected for SOURCE and CLEAR. So, in this release
the behavior of SOURCE and CLEAR has been changed again. They now
affect areas only within both the source and shape. We can write
the new operators as:
SOURCE: dest' = (mask IN clip) ? source : dest
CLEAR: dest' = (mask IN clip) ? 0 : dest
Behavior and API changes
------------------------
* Setting the filter on a gradient pattern would change the
interpolation between color stops away from the normal linear
interpolation. This dubious behavior has been removed.
* The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros --
implementation details that leaked into cairo.h -- have been moved
into an internal header.
* The cairo_show_text function now advances the current point
according to the total advance values of the string.
API additions
-------------
* cairo_set_dash can now detect error and can set
CAIRO_STATUS_INVALID_DASH.
Features
--------
* When compiled against recent versions of fontconfig and FreeType,
artificial bold fonts can now be turned on from fonts.conf using
the FC_EMBOLDEN fontconfig key.
Optimization
------------
* The compositing code from the 'xserver' code tree has now been
completely merged into libpixman. This includes MMX optimization of
common operations.
* The image transformation code in libpixman has been improved and
now performs significantly faster.
Bug fixes
---------
* Several crashes related to corruption in the font caches have been
fixed.
* All test cases now match pixel-for-pixel on x86 and PPC; this
required fixing bugs in the compositing, stroking, and pattern
rendering code.
* Negative dash offsets have been fixed to work correctly.
* The stroking of paths with multiple subpaths has now been fixed to
apply caps to all subpaths rather than just the last one.
* Many build fixes for better portability on various systems.
* Lots of other bug fixes, but we're too tired to describe them in
more detail here.
Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>)
=========================================================
Release numbering
-----------------
* You will notice that this release jumped from 0.9.0 to 0.9.2. We've
decided to use an odd micro version number (eg. 0.9.1) to indicate
in-progress development between releases. As soon as 0.9.2 is
tagged, the version will be incremented in CVS to 0.9.3 where it
will stay until just before 0.9.4 is built, uploaded, and tagged.
So, even-micro == a released version, odd-micro == something in-between.
Libpixman dependency dropped
----------------------------
* As of this release, the dependency on an external libpixman has
been dropped. Instead, the code from libpixman needed for cairo has
been incorporated into the cairo source tree. The motivation for
this change is that while cairo's API is stable and ready to be
maintained after the 1.0 release, libpixman's API is not, so we do
not want to expose it at this time.
Also, the incorporation of libpixman into cairo also renames all
previously-public libpixman symbols in order to avoid any conflict
with a future release of libpixman
API additions
-------------
* Macros and functions have been added so that the version of cairo
can be queried at either compile-time or at run-time. The version
is made available as both a human-readable string and as a single
integer:
CAIRO_VERSION_STRING eg. "0.9.2"
CAIRO_VERSION eg. 000902
const char*
cairo_version_string (void); /* eg. "0.9.2" */
int
cairo_version (void); /* eg. 000902 */
A macro is provided to convert a three-part component version into
the encoded single-integer form:
CAIRO_VERSION_ENCODE(X,Y,Z)
For example, the CAIRO_VERSION value of 000902 is obtained as
CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version
comparisons easy, either at compile-time:
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2)
...
#endif
Or at run-time:
if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ }
Thread safety
-------------
* This release adds pthread-based locking (when available) to make
the caches used by cairo safe for threaded programs. Some may
remember a failed experiment with this locking between the 0.5.1
and 0.5.2 snapshots, (where even single-threaded programs that
linked with -lpthread would deadlock). We believe that that problem
has been fixed, so we are looking forward to testing and reports
from users with threaded applications.
Bug fixes
---------
* The XCB and Quartz backends failed to compiled in the 0.9.0 release
due to minor syntax errors. These have now been fixed.
* Various crashes in glitz and pixman due to size 0 glyphs have been
fixed.
Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>)
=========================================================
Soname change
-------------
* In all prior snapshots, the libtool library versioning was set to
1:0:0. As this release is intended to mark the beginning of
backwards-compatible releases, the versioning has been incremented
to 2:0:0. You will notice that the numeric extension on the
installed library filename will change similarly.
This change will also require all cairo-using applications to be
recompiled. We recognize that this may cause some frustration since
this release is backwards-compatible with 0.6.0 and in that sense
"shouldn't" require re-compilation. However, since all historical
snapshots have used the same 1:0:0 version in spite of incompatible
API changes between them, it was essential that the upcoming 1.0
release series have distinct library versioning.
All future releases will use the library versioning to properly
indicate compatibility between releases. So, any application
re-compiled now to work with the 0.9.0 will not need to be
recompiled when a compatible 1.0 release of cairo is made in the
future.
API additions
-------------
* Add new function calls to set/get the current antialiasing mode in
the graphics state:
cairo_set_antialias
cairo_get_antialias
This call accepts the same modes recently added for font options
(NONE or GRAY) but affects the rendering of geometry other than
text. The intent of this call is to enable more precise control of
which pixels are affected by each operation, for example to allow
for full-scene antialiasing for seam-free rendering. It is not
expected that non-antialiased rendering will perform better than
anti-aliased rendering.
* Three new functions were added to provide support for mixed cairo-
and non-cairo drawing to the same surface:
cairo_surface_mark_dirty
cairo_surface_mark_dirty_rectangle
cairo_surface_flush
* The return type of the several "reference" functions was change,
(API compatibly), from void to the same type as the argument. The
affected functions are:
cairo_font_face_reference
cairo_scaled_font_reference
cairo_pattern_reference
cairo_surface_reference
cairo_reference
This allows a convenient way to assign and reference in a single
statement.
Semantic changes
----------------
* The behavior of cairo_set_source with a pattern with a non-identity
matrix was previously not well-defined. The new behavior is as
follows:
The pattern's transformation matrix will be locked to the
user space in effect at the time of cairo_set_source(). This means
that further modifications of the CTM will not affect the source
pattern.
cairo-win32
-----------
* Some portability improvements, (eg. workaround for missing stdint.h).
cairo-ft
--------
* Updated to allow compilation with older versions of freetype.
Bug fixes
---------
* Fix the unbounded operators to actually produce a correct result,
(previously the results were artificially restricted to the
bounding box of whatever shape was being drawn rather than
extending out infinitely). The fixed operators are:
CAIRO_OPERATOR_CLEAR
CAIRO_OPERATOR_SOURCE
CAIRO_OPERATOR_OUT
CAIRO_OPERATOR_IN
CAIRO_OPERATOR_DEST_IN
CAIRO_OPERATOR_DEST_ATOP
* Fix cairo_mask and cairo_mask_surface to transform the mask by the
current transformation matrix (CTM).
* Fix cairo_set_source to lock the CTM used to transform the pattern.
* Workaround for X server Render bug involving repeating patterns
with a general transformation matrix.
* cairo_get_font_face fixed to return a "nil" font face object rather
than NULL on error.
* cairo_set_font_face fixed to not crash if given a NULL font face,
(which is the documented interface for restoring the default font
face).
* Fix xlib glyphset caching to not try to free a NULL glyph.
Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>)
==========================================================
API changes
-----------
* The prototypes of the following functions have changed:
cairo_xlib_surface_create_with_xrender_format
cairo_xlib_surface_create_for_bitmap
A Screen* parameter has been added to each. This allows the cairo
xlib backend to work correctly with multi-head X servers.
* The following function has been modified:
cairo_scaled_font_create
to accept a cairo_font_options_t*. See below fore more details.
* All opaque, reference-counted cairo objects have now been moved to a
standard error-handling scheme. The new objects to receive this
treatment are cairo_font_face_t, cairo_scaled_font_t, and
cairo_surface_t. (Previous snapshots already provided this scheme
for cairo_t, cairo_path_t, and cairo_pattern_t.)
This changes two functions to have a return type of void rather than
cairo_status_t:
cairo_scaled_font_extent
cairo_surface_finish
And significantly, none of the create functions for any of the
objects listed above will return NULL. The pointer returned from any
function will now always be a valid pointer and should always be
passed to the corresponding destroy function when finished
The simplest strategy for porting code is to switch from:
object = cairo_<object>_create ();
if (object == NULL)
goto BAILOUT;
/* act on object */
cairo_<object>_destroy (object);
to:
object = cairo_<object>_create ();
if (cairo_<object>_status (object))
goto BAILOUT;
/* act on object */
cairo_<object>_destroy (object);
But significantly, it is not required to check for an error status
before the "act on object" portions of the code above. All
operations on an object with an error status are, by definition,
no-ops without side effect. So new code might be written in an
easier-to-read style of:
object = cairo_<object>_create ();
/* act on object */
cairo_<object>_destroy (object);
with cairo_<object>_status checks placed only at strategic
locations. For example, passing an error object to another object,
(eg. cairo_set_source with an in-error pattern), will propagate the
error to the subsequent object (eg. the cairo_t). This means that
error checking can often be deferred even beyond the destruction of
a temporary object.
API additions
-------------
* New functions for checking the status of objects that have been
switched to the common error-handling scheme:
cairo_font_face_status
cairo_scaled_font_status
cairo_surface_status
* The _cairo_error function which was added in 0.5.1 has now been made
much more useful. In 0.5.1 only errors on cairo_t objects passed
through _cairo_error. Now, an error on any object should pass
through _cairo_error making it much more reliable as a debugging
mechanism for finding when an error first occurs.
* Added new font options support with a myriad of functions:
cairo_font_options_create
cairo_font_options_copy
cairo_font_options_destroy
cairo_font_options_status
cairo_font_options_merge
cairo_font_options_equal
cairo_font_options_hash
cairo_font_options_set_antialias
cairo_font_options_get_antialias
cairo_font_options_set_subpixel_order
cairo_font_options_get_subpixel_order
cairo_font_options_set_hint_style
cairo_font_options_get_hint_style
cairo_font_options_set_hint_metrics
cairo_font_options_get_hint_metrics
cairo_surface_get_font_options
cairo_ft_font_options_substitute
cairo_set_font_options
cairo_get_font_options
This new font options support allows the application to have much
more fine-grained control over how fonts are rendered.
Significantly, it also allows surface backends to have some
influence over the process. For example, the xlib backend now
queries existing Xft properties to set font option defaults.
* New function:
cairo_xlib_surface_set_drawable
which allows the target drawable for an xlib cairo_surface_t to be
changed to another with the same format, screen, and display. This
is necessary in certain double-buffering techniques.
New features
------------
* Sub-pixel text antialiasing is now supported.
Bug fixes
---------
* Fixed assertion failure in cairo_surface_create_similar when
application commits an error by passing a cairo_format_t rather than
a cairo_content_t.
* Avoid division by zero in various places (cairo-ft).
* Fix infinite loop when using non-default visuals (cairo-xlib).
* Eliminate segfault in cairo_image_surface_create_from_png_stream.
* Prevent errant sign-extension of masks on 64-bit architectures
(cairo-xlib and cairo-xcb).
* Other miscellaneous fixes.
Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>)
==========================================================
API changes
-----------
* New functions for creating patterns of a single color:
cairo_pattern_create_rgb
cairo_pattern_create_rgba
* Change cairo_surface_create_similar to accept a new type of
cairo_content_t rather than cairo_format_t:
typedef enum _cairo_content {
CAIRO_CONTENT_COLOR = 0x1000,
CAIRO_CONTENT_ALPHA = 0x2000,
CAIRO_CONTENT_COLOR_ALPHA = 0x3000
} cairo_content_t;
* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros.
* Remove unused status value:
CAIRO_STATUS_NO_TARGET_SURFACE
* Add new status values:
CAIRO_STATUS_INVALID_STATUS
* Require libpixman >= 0.1.5 (for necessary bug fixes)
Bug fixes
---------
* Fix cairo_surface_write_to_png for RGB24 images.
* Fix broken metrics and rendering for bitmap fonts. Add mostly
useless bitmap glyph transformation.
* Fix glyph caches to not eject entries that might be immediately
needed, (fixing intermittent crashes when rendering text).
* Fix all memory leaks found by running "make check-valgrind".
ATSUI backend changes
---------------------
* Allow building against < 10.3 SDK.
* Prevent crash on empty strings.
Glitz backend changes
---------------------
* Require glitz >= 0.4.4.
* Use frame buffer objects instead of pbuffers for accelerated
offscreen drawing.
* Minor improvement to gradient pattern creation.
PostScript backend fixes
------------------------
* Rewrite of the PS backend to generate more interesting output that
the old big-image implementation.
Win32 backend fixes
-------------------
* Implement glyph path support.
* Fix swap of blue and green values in the fill_rectangles path.
Xlib backend fixes
------------------
* Add optimization to use XCopyArea rather than XRenderComposite when
transforming only with an integer translation, and using SOURCE
operator or OVER with a source pattern without alpha.
Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>)
==========================================================
API changes
-----------
* Removed cairo_status_string(cairo_t*) and add
cairo_status_to_string(cairo_status_t) in its place. Code using
cairo_status_string can be ported forward as follows:
cairo_status (cr);
->
cairo_status_to_string (cairo_status (cr));
* Removed the BAD_NESTING restriction which means that two different
cairo_t objects can now interleave drawing to the same
cairo_surface_t without causing an error.
* The following functions which previously had a return type of
cairo_status_t now have a return type of void:
cairo_pattern_add_color_stop_rgba
cairo_pattern_set_matrix
cairo_pattern_get_matrix
cairo_pattern_set_extend
cairo_pattern_set_filter
See discussion of cairo_pattern_status below for more details.
API additions
-------------
* Improved error handling:
cairo_status_t
cairo_pattern_status (cairo_pattern_t *pattern);
This snapshot expands the status-based error handling scheme from
cairo_t to cairo_path_t and cairo_pattern_t. It also expands the
scheme so that object-creating functions, (cairo_create,
cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to
not return NULL. Instead, in the case of out-of-memory these
functions will return a static object with
status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the
functions cairo_status and cairo_pattern_status, or by direct
inspection of the new status field in cairo_path_t.
Please note that some objects, including cairo_surface_t and all of
the font-related objects have not been converted to this
error-handling scheme.
* In addition to the above changes, a new private function has been added:
_cairo_error
This function can be used to set a breakpoint in a debugger to make
it easier to find programming error in cairo-using code. (Currently,
_cairo_error is called when any error is detected within a cairo_t
context, but is not called for non-cairo_t errors such as for
cairo_path_t and cairo_pattern_t).
* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as
cairo_path_data_type_t).
Performance improvements
------------------------
* Made a minor performance improvement for clipping, (restrict clip
surface to the new intersected bounds).
* Optimize rendering of a solid source pattern with a pixel-aligned
rectangular path to use backend clipping rather than rasterization
and backend compositing.
* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha
is 1.0.
Bug fixes
---------
* Fixed memory leak in cairo_copy_path.
* A build fix for non-srcdir builds.
PDF backend fixes
-----------------
* New support for path-based clipping.
* Fix for text rotated to angles other than multiples of π/2.
Win32 backend fixes
-------------------
* Fix for text extents.
Xlib backend
------------
* Implemented a complex workaround for X server bug[*] related to
Render-based compositing with untransformed, repeating source
pictures. The workaround uses core Xlib when possible for
performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER
with an opaque source surface), and falls back to the pixman
image-based compositing otherwise.
[*] https://bugs.freedesktop.org/show_bug.cgi?id=3566
* Various bug fixes, particularly in the fallback paths.
Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>)
==========================================================
This is a pretty big, and fairly significant snapshot. It represents
between 2 and 3 months of solid work from a lot of people on improving
the API as much as possible. I'd like to express my appreciation and
congratulations to everyone who has worked on the big API Shakeup,
(whether in email battles over names, or fixing my silly bugs).
This snapshot will require some effort on the part of users, since
there are a _lot_ of API changes (ie. no cairo program ever written is
safe --- they're all broken now in at least one way). But, in spite of
that, we do encourage everyone to move their code to this snapshot as
soon as possible. And we're doing everything we can think of to make
the transition as smooth as possible.
The idea behind 0.5 is that we've tried to make every good API change
we could want now, and get them all done with. That is, between now
and the 1.0 release of cairo, we expect very few new API changes,
(though some will certainly sneak in). We will have some significant
additions, but the pain of moving code from cairo 0.4 to cairo 0.5
should be a one time experience, and things should be much smoother as
we continue to move toward cairo 1.0.
And with so many changes coming out for the first time in this 0.5
release, we really do need a lot of people trying this out to make
sure the ideas are solid before we freeze the API in preparation for
the 1.0 release.
OK, enough introduction. Here is a (not-quite-complete) description of
the API removals, changes and additions in this snapshot, (compared to
0.4.0)
API removals
============
The following public functions have been removed:
- cairo_set_target_*
This is a big change. See the description of cairo_create in
the API changes section for how to deal with this.
- cairo_set_alpha
Alpha blending hasn't gone away; there's just a much more
unified rendering model now. Almost all uses of
cairo_set_alpha will be trivially replaced with
cairo_set_source_rgba and a few others will be replaced just
as easily with cairo_paint_with_alpha.
- cairo_show_surface
Another useful function that we realized was muddling up the
rendering model. The replacement is quite easy:
cairo_set_source_surface and cairo_paint.
- cairo_matrix_create
- cairo_matrix_destroy
- cairo_matrix_copy
- cairo_matrix_get_affine
These functions supported an opaque cairo_matrix_t. We now
have an exposed cairo_matrix_t structure, so these can be
dropped.
- cairo_surface_set_repeat
- cairo_surface_set_matrix
- cairo_surface_set_filter
These properties don't belong on surfaces. If you were using
them, you'll just want to instead use
cairo_pattern_create_for_surface and then set these properties
on the pattern.
- cairo_copy
This was a confusing function and hopefully nobody will miss
it. But if you really don't find cairo_save/restore adequate,
let us know and we have another idea for a potential
replacement.
And while we're on the subject of removals, we carefully tightened up
the cairo header files so they no longer gratuitously include header
files that are not strictly necessary, (stdio.h, stdint.h, pixman.h,
Xrender.h, etc. and their dependencies). This may lead to some
surprising errors, so keep your eyes open for that.
API changes
===========
Here are some of the API changes that have occurred:
~ cairo_create(void) -> cairo_create(cairo_surface_t *)
This is the big change that breaks every program. The ability
to re-target a cairo_t was not particularly useful, but it did
introduce a lot of muddy semantic questions. To eliminate
that, cairo_create now requires its target surface to be
passed in at creation time. This isn't too hard to cope with
as the typical first operation after cairo_create was often
cairo_set_target_foo. So the order of those two swap and the
application instead has cairo_foo_surface_create, then
cairo_create.
~ cairo_current_* -> cairo_get_*
We had a strange mixture of cairo_get and cairo_current
functions. They've all been standardized on cairo_get, (though
note one is cairo_get_current_point).
~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE
~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER
Many of the cairo_operator_t symbolic values were renamed to
reduce the amount of abbreviation. The confusing "OP_REVERSE"
naming was also changed to use "DEST_OP" instead which is
easier to read and has wider acceptance in other
libraries/languages.
~ cairo_set_pattern -> cairo_set_source
~ cairo_set_rgb_color -> cairo_set_source_rgb
All of the various functions that changed the source
color/pattern were unified to use cairo_set_source names to
make the relation more clear.
~ cairo_transform_point -> cairo_user_to_device
~ cairo_transform_distance -> cairo_user_to_device_distance
~ cairo_inverse_transform_point -> cairo_device_to_user
~ cairo_inverse_transform_distance -> cairo_device_to_user_distance
These names just seemed a lot more clear.
~ cairo_init_clip -> cairo_reset_clip
~ cairo_concat_matrix -> cairo_transform
More abbreviation elimination
~ cairo_current_path -> cairo_copy_path
~ cairo_current_path_flat -> cairo_copy_path_flat
The former mechanism for examining the current path was a
function that required 3 or 4 callbacks. This was more
complexity than warranted in most situations. The new
cairo_copy_path function copies the current path into an
exposed data structure, and the documentation provides a
convenient idiom for navigating the path data.
API additions
-------------
+ cairo_paint
A generalized version of the painting operators cairo_stroke
and cairo_fill. The cairo_paint call applies the source paint
everywhere within the current clip region. Very useful for
clearing a surface to a solid color, or painting an image,
(see cairo_set_source_surface).
+ cairo_paint_with_alpha
Like cairo_paint but applying some alpha to the source,
(making the source paint translucent, eg. to blend an image on
top of another).
+ cairo_mask
A more generalized version of cairo_paint_with_alpha which
allows a pattern to specify the amount of translucence at each
point rather than using a constant value everywhere.
+ cairo_mask_surface
A convenience function on cairo_mask for when the mask pattern
is already contained within a surface.
+ cairo_surface_set_user_data
+ cairo_surface_get_user_data
+ cairo_font_face_set_user_data
+ cairo_font_face_get_user_data
Associate arbitrary data with a surface or font face for later
retrieval. Get notified when a surface or font face object is
destroyed.
+ cairo_surface_finish
Allows the user to instruct cairo to finish all of its
operations for a given surface. This provides a safe point for
doing things such as flushing and closing files that the
surface may have had open for writing.
+ cairo_fill_preserve
+ cairo_stroke_preserve
+ cairo_clip_preserve
One interesting change in cairo is that the path is no longer
part of the graphics state managed by
cairo_save/restore. This allows functions to construct paths
without interfering with the graphics state. But it prevents
the traditional idiom for fill-and-stroke:
cairo_save; cairo_fill; cairo_restore; cairo_stroke
Instead we know have alternate versions cairo cairo_fill,
cairo_stroke, and cairo_clip that preserve the current path
rather than consuming it. So the idiom now becomes simply:
cairo_fill_preserve; cairo_stroke
+ cairo_surface_write_to_png
+ cairo_surface_write_to_png_stream
In place of a single PNG backend, now a surface created
through any backend (except PDF currently) can be written out
to a PNG image.
+ cairo_image_surface_create_from_png
+ cairo_image_surface_create_from_png_stream
And its just as easy to load a PNG image into a surface as well.
+ cairo_append_path
With the new, exposed path data structure, it's now possible
to append bulk path data to the current path, (rather than
issuing a long sequence of cairo_move_to/line_to/curve_to
function calls).
Xlib and XCB backends
---------------------
Any cairo_format_t and Colormap arguments have been dropped from
cairo_xlib_surface_create. There are also two new
cairo_xlib|xcb_surface_create functions:
cairo_xlib|xcb_surface_create_for_bitmap
(Particular for creating A1 surfaces)
cairo_xlib|xcb_surface_create_with_xrender_format
(For any other surface types, not described by a Visual*)
All of these surface create functions now accept width and height. In
addition, there are new cairo_xlib|xcb_surface_set_size functions
which must be called each time a window that is underlying a surface
changes size.
Print backends (PS and PDF)
---------------------------
The old FILE* based interfaces have been eliminated. In their place we
have two different functions. One accepts a simple const char
*filename. The other is a more general function which accepts a
callback write function and a void* closure. This should allow the
flexibility needed to hook up with various stream object in many
languages.
In addition, when specifying the surface size during construction, the
units are now device-space units (ie. points) rather than inches. This
provides consistency with all the other surface types and also makes
it much easier to reason about the size of the surface when drawing to
it with the default identity matrix.
Finally, the DPI parameters, which are only needed to control the
quality of fallbacks, have been made optional. Nothing is required
during surface_create (300 DPI is assumed) and
cairo_ps|pdf_surface_set_dpi can be used to set alternate values if
needed.
Font system
-----------
Owen very graciously listened to feedback after the big font rework he
had done for 0.4, and came up with way to improve it even more. In 0.4
there was a cairo_font_t that was always pre-scaled. Now, there is an
unscaled cairo_font_face_t which is easier to construct, (eg. no
scaling matrix required) and work with, (it can be scaled and
transformed after being set on the graphics state). And the font size
manipulation functions are much easier. You can set an explicit size
and read/modify/write the font matrix with:
cairo_set_font_size
cairo_get_font_matrix
cairo_set_font_matrix
(Previously you could only multiply in a scale factor or a matrix.) A
pleasant side effect is that we can (and do) now have a default font
size that is reasonable, as opposed to the old default height of one
device-space unit which was useless until scaled.
Of course, the old pre-scaled font had allowed some performance
benefits when getting many metrics for a font. Those benefits are
still made available through the new cairo_scaled_font_t. And a
cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by
suppling a font_matrix and the desired CTM.
Quartz backend
--------------
Tim Rowley put in the work to bring the Quartz backend back after it
had been disabled in the 0.4.0 snapshot. He was not able to bring back
the function that allows one to create a cairo_font_t from an ATSUI
style:
cairo_font_t *
cairo_atsui_font_create (ATSUStyle style);
because he didn't have a test case for it. If you care about this
function, please provide a fairly minimal test and we'll try to bring
it back in an upcoming snapshot.
Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>)
==========================================================
New documentation
-----------------
Owen Taylor has converted cairo's documentation system to gtk-doc and
has begun some long-needed work on the documentation, which can now be
viewed online here:
https://cairographics.org/manual/
New backend: win32
------------------
This is the first snapshot to include a functional win32 backend,
(thanks to Owen Taylor). The interface is as follows:
#include <cairo-win32.h>
void
cairo_set_target_win32 (cairo_t *cr,
HDC hdc);
cairo_surface_t *
cairo_win32_surface_create (HDC hdc);
cairo_font_t *
cairo_win32_font_create_for_logfontw (LOGFONTW *logfont,
cairo_matrix_t *scale);
cairo_status_t
cairo_win32_font_select_font (cairo_font_t *font,
HDC hdc);
void
cairo_win32_font_done_font (cairo_font_t *font);
double
cairo_win32_font_get_scale_factor (cairo_font_t *font);
And see also the documentation at:
https://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html
Disabled backend: quartz
------------------------
Unfortunately, the quartz backend code is currently out of date with
respect to some recent backend interface changes. So, the quartz
backend is disabled in this snapshot.
If the quartz backend is brought up-to-date before the next snapshot,
we would be glad to make a 0.4.1 snapshot that re-enables it, (we do
not expect many more big backend interface changes).
API Changes
-----------
The font system has been revamped, (as Owen Taylor's work with
integrating pango and cairo gave us the first serious usage of the
non-toy font API).
One fundamental, user-visible change is that the cairo_font_t object
now represents a font that is scaled to a particular device
resolution. Further changes are described below.
cairo.h
-------
Removed cairo_font_set_transform and cairo_font_current_transform.
Added cairo_font_extents and cairo_font_glyph_extents. See
documentation for details:
https://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents
cairo-ft.h
----------
The cairo_ft_font API changed considerably. Please see the
documentation for details:
https://cairographics.org/manual/cairo-FreeType-Fonts.html
Performance
-----------
Make the fast-path clipping (pixel-aligned rectangles) faster.
Add optimization for applying a constant alpha to a pattern.
Optimize gradients that are horizontal or vertical in device space.
Xlib: When RENDER is not available, use image surfaces for
intermediate surfaces rather than xlib surfaces.
Backend-specific changes
------------------------
Glitz
-----
Major update to glitz backend. The output quality should now be just
as good as the image and xlib backends.
Track changes to glitz 0.4.0.
PDF
---
Various improvements to produce more conformant output.
Internals
---------
David Reveman contributed a large re-work of the cairo_pattern_t
implementation, providing cleaner code and more optimization
opportunities.
Backend interface changes
-------------------------
Rework backend interface to accept patterns, not surfaces for source
and mask.
Remove set_matrix, set_filter, and set_repeat functions.
More sophisticated backend interface for image fallbacks,
({acquire,release}_{source,dest}_image() and clone_similar).
Bug fixes
---------
Only install header files for backends that have been compiled.
Fixed some rounding errors leading to incorrectly placed glyphs.
Many other minor fixes.
Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>)
==========================================================
Major API changes
-----------------
1) The public header files will no longer be directly installed into
the system include directory. They will now be installed in a
subdirectory named "cairo", (eg. in /usr/include/cairo rather than
in /usr/include).
As always, the easiest way for applications to discover the
location of the header file is to let pkg-config generate the
necessary -I CFLAGS and -L/-l LDFLAGS. For example:
cc `pkg-config --cflags --libs cairo` -o foo foo.c
IMPORTANT: Users with old versions of cairo installed will need to
manually remove cairo.h and cairo-features.h from the
system include directories in order to prevent the old
headers from being used in preference to the new ones.
2) The backend-specific portions of the old monolithic cairo.h have
been split out into individual public header files. The new files
are:
cairo-atsui.h
cairo-ft.h
cairo-glitz.h
cairo-pdf.h
cairo-png.h
cairo-ps.h
cairo-quartz.h
cairo-xcb.h
cairo-xlib.h
Applications will need to be modified to explicitly include the new
header files where appropriate.
3) There are two new graphics backends in this snapshot, a PDF
backend, and a Quartz backend. There is also one new font backend,
ATSUI.
PDF backend
-----------
Kristian Høgsberg has contributed a new backend to allow cairo-based
applications to generate PDF output. The interface for creating a PDF
surface is similar to that of the PS backend, as can be seen in
cairo-pdf.h:
void
cairo_set_target_pdf (cairo_t *cr,
FILE *file,
double width_inches,
double height_inches,
double x_pixels_per_inch,
double y_pixels_per_inch);
cairo_surface_t *
cairo_pdf_surface_create (FILE *file,
double width_inches,
double height_inches,
double x_pixels_per_inch,
double y_pixels_per_inch);
Once a PDF surface has been created, applications can draw to it as
any other cairo surface.
This code is still a bit rough around the edges, and does not yet
support clipping, surface patterns, or transparent gradients. Text
only works with TrueType fonts at this point and only black text is
supported. Also, the size of the generated PDF files is currently
quite big.
Kristian is still actively developing this backend, so watch this
space for future progress.
Quartz backend
--------------
Calum Robinson has contributed a new backend to allow cairo
applications to target native Mac OS X windows through the Quartz
API. Geoff Norton integrated this backend into the current
configure-based build system, while Calum also provided Xcode build
support in the separate "macosx" module available in CVS.
The new interface, available in cairo-quartz.h, is as follows:
void
cairo_set_target_quartz_context (cairo_t *cr,
CGContextRef context,
int width,
int height);
cairo_surface_t *
cairo_quartz_surface_create (CGContextRef context,
int width,
int height);
There is an example program available in CVS in cairo-demo/quartz. It
is a port of Keith Packard's fdclock program originally written for
the xlib backend. A screenshot of this program running on Mac OS X is
available here:
https://cairographics.org/~cworth/images/fdclock-quartz.png
ATSUI font backend
------------------
This new font backend complements the Quartz backend by allowing
applications to use native font selection on Mac OS X. The interface
is a single new function:
cairo_font_t *
cairo_atsui_font_create (ATSUStyle style);
Minor API changes
-----------------
Prototype for non-existent function "cairo_ft_font_destroy" removed.
Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released
concurrently and has some useful performance improvements).
Default paint color is now opaque black, (was opaque white). Default
background color is transparent (as before).
Renamed "struct cairo" to "struct _cairo" to free up the word "cairo"
from the C++ identifier name space.
Functions returning multiple return values through provided pointers,
(cairo_matrix_get_affine, cairo_current_point, and
cairo_current_color_rgb), will now accept NULL for values the user
wants to ignore.
CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT.
Performance improvements
------------------------
Alexander Larsson provided some fantastic performance improvements
yielding a 10000% performance improvement in his application, (when
also including his performance work in libpixman-0.1.3). These include
* Fixed handling of cache misses.
* Creating intermediate clip surfaces at the minimal size required.
* Eliminating roundtrips when creating intermediate Xlib surfaces.
Implementation
--------------
Major re-work of font metrics system by Keith Packard. Font metrics
should now be much more reliable.
Glitz backend
-------------
Updated for glitz-0.3.0.
Bug fixes in reference counting.
Test suite
----------
New tests for cache crashing, rotating text, improper filling of
complex polygons, and leaky rasterization.
Bug fixes
---------
Fixed assertion failure when selecting the same font multiple times in
sequence.
Fixed reference counting so cache_destroy functions work.
Remove unintended copyright statement from files generated with
PostScript backend.
Fixed to eliminate new warnings from gcc 3.4 and gcc 4.
Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>)
===========================================================
New license: LGPL/MPL
---------------------
The most significant news with this release is that the license of
cairo has changed. It is now dual-licensed under the LGPL and the
MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and
COPYING-MPL-1.1.
I express my thanks to everyone involved in the license change process
for their patience and support!
New font and glyph internals
----------------------------
Graydon Hoare has put a tremendous amount of work into new internals
for handling fonts and glyphs, including caches where appropriate.
This work has no impact on the user-level API, but should result in
great performance improvements for applications using text.
New test suite
--------------
This snapshot of cairo includes a (small) test suite in
cairo/test. The tests can be run with "make check". The test suite was
designed to make it very easy to add new tests, and we hope to see
many contributions here. As you find bugs, please try adding a minimal
test case to the suite, and submit it with the bug report to the
cairo@cairographics.org mailing list. This will make it much easier
for us to track progress in fixing bugs.
New name for glitz backend
--------------------------
The gl backend has now been renamed to the glitz backend. This means
that the following names have changed:
CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE
cairo_set_target_gl -> cairo_set_target_glitz
cairo_gl_surface_create -> cairo_glitz_surface_create
This change obviously breaks backwards compatibility for applications
using the old gl backend.
Up-to-date with latest glitz snapshots
--------------------------------------
This snapshot of cairo is now up to date with the latest glitz
snapshot, (currently 0.2.3). We know that the latest cairo and glitz
snapshots have been incompatible for a very long time. We've finally
fixed that now and we're determined to not let that happen again.
Revert some tessellation regression bugs
----------------------------------------
People that have been seeing some tessellation bugs, (eg. leaked
fills), in the CVS version of cairo may have better luck with this
release. A change since the last snapshot was identified to trigger
some of these bugs and was reverted before making the snapshot. The
behavior should be the same as the previous (0.1.23) snapshot.
Miscellaneous changes
---------------------
Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients
easier.
Track XCB API change regarding iterators.
Various bug fixes
-----------------
Fix calculation of required number of vertices for pen.
Fix to avoid zero-dimensioned pixmaps.
Fix broken sort of pen vertices.
Fix bug when cairo_show_text called with a NULL string.
Fix clipping bugs.
Fix bug in computing image length with XCB.
Fix infinite loop bug in cairo_arc.
Fix memory management interactions with libpixman.
Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>)
========================================================
Fixes for gcc 3.4
-----------------
Fix prototype mismatches so that cairo can be built by gcc 3.4.
Updates to track glitz
----------------------
Various fixes to support the latest glitz snapshot (0.1.2).
Gradient updates
----------------
Radial gradients now support both inner and outer circles.
Transformed linear gradients are now properly handled.
Fixes for extend type reflect.
Glitz updates
-------------
Converted shading routines to use fixed point values and introduced a
shading operator structure for more efficient shading calculations.
Support compositing with mask surface when mask is solid or
multi-texturing is available.
PNG backend cleanups
--------------------
Fix output to properly compensate for pre-multiplied alpha format in cairo.
Add support for A8 and A1 image formats.
Bug fixes
---------
Avoid crash or infinite loop on null strings and degeneratively short
splines.
New? bugs in cairo_clip
-----------------------
There are some fairly serious bugs in cairo_clip. It is sometimes
causing an incorrect result. And even when it does work, it is
sometimes so slow as to be unusable. Some of these bugs may not be
new, (indeed cairo_clip has only ever had a braindead-slow
implementation), but I think they're worth mentioning here.
Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>)
========================================================
Cairo was updated to track the changes in libpixman, and now depends
on libpixman version 0.1.1.
Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>)
=============================================================
New OpenGL backend
------------------
The OpenGL backend provides hardware accelerated output for
X11 and OS X. The significant new functions are:
cairo_set_target_gl
cairo_gl_surface_create
Automatic detection of available backends
-----------------------------------------
The configure script now automatically detect what backends are
available, (use ./configure --disable-`backend' to prevent
compilation of specific backends).
Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>)
========================================================
New pattern API
---------------
David Reveman has contributed a new pattern API which enable linear
and radial gradient patterns in addition to the original surface-based
patterns. The significant new top-level functions are:
cairo_pattern_create_linear
cairo_pattern_create_radial
cairo_pattern_create_for_surface
cairo_pattern_add_color_stop
cairo_set_pattern
Any code using the old cairo_set_pattern, (which accepted a
cairo_surface_t rather than a cairo_pattern_t), will need to be
updated.
Update to XCB backend
---------------------
The XCB backend is now enabled by default, (use ./configure
--disable-xcb to turn it off).
Faster clipping
---------------
Graydon Hoare has added optimizations that make cairo_clip much faster
when the path is a pixel-aligned, rectangular region.
Bug fixes.
Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>)
========================================================
New PNG backend
---------------
Olivier Andrieu contributed a new PNG backend. It builds on the
existing image backend to make it easy to render "directly" to a
.png file. The user never needs to deal with the actual image
buffer. The significant new functions are:
cairo_set_target_png
cairo_png_surface_create
The PNG backend is not enabled by default so that by default there is
not a new dependency on libpng. Use ./configure --enable-png to enable
this backend.
Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>)
========================================================
Path query functionality
------------------------
It's now possible to query the current path. The two new functions
are:
cairo_current_path
cairo_current_path_flat
Each function accepts a number of callback functions that will be
called for each element in the path (move_to, line_to, curve_to,
close_path). The cairo_current_path_flat function does not accept a
curve_to callback. Instead, all curved portions of the path will be
converted to line segments, (within the current tolerance value). This
can be handy for doing things like text-on-path without having to
manually interpolate Bézier splines.
New XCB backend
---------------
Jamey Sharp has contributed a second X backend that uses the new, lean
XCB library rather than Xlib. It cannot currently be compiled at the
same time as the Xlib backend. See ./configure --enable-xcb.
Build fixes for cygwin.
Bug fixes.
Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>)
========================================================
Better text support
-------------------
This snapshot provides much better text support by implementing the
following four functions:
cairo_text_extents
cairo_glyph_extents
cairo_text_path
cairo_glyph_path
The text/glyph_extents functions can be used to determine the bounding
box (and advance) for text as if drawn by show_text/glyphs.
The text/glyph_path objects functions place text shapes on the current
path, where they can be subsequently manipulated. For example,
following these functions with cairo_stroke allows outline text to be
drawn. Calling cairo_clip allows clipping to a text-shaped region.
Combined dependencies
---------------------
The cairo core now depends only on the libpixman library. This single
library replaces the three previous libraries libic, libpixregion, and
slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of
the heavy lifting with this renaming effort.
Conditional compilation of backends
-----------------------------------
Cairo now allows optional backends to be disabled at compile time. The
following options may now be passed to the configure script:
--disable-xlib
--disable-ps
Note that the first option is a change from the old --without-x option
which will no longer have any effect.
OS X supported - several byte-order issues resolved
---------------------------------------------------
Cairo has now been successfully compiled under OS X. Testing revealed
that there were some byte-order problems in the PostScript backend and
the PNG generation in the demos. These have now been resolved.
2003-10
=======
Graydon Hoare <graydon@redhat.com> implemented the first real text
support using FreeType/fontconfig, (previous versions of cairo used
Xft and could only draw text when using an X backend).
2003-09
=======
Graydon Hoare <graydon@redhat.com> added the first real support for
running cairo with a non-render-aware X server.
Jamey Sharp <jamey@minilop.net> virtualized the backend font and
surface interfaces in September, 2003.
2003-06
=======
Xr is renamed cairo to avoid confusion since it no longer had a strict
dependence on X.
2003-05
=======
A new image surface backend is added to Xr. Keith Packard
<keithp@keithp.com> wrote the image compositing code in libic that is
used for the image_surface backend. This code was originally written
as the software fallback for the render extension within the X
server.
2002-06
=======
Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith
Packard <keithp@keithp.com> proposed the plan for a stateful drawing
library in C providing a PostScript-like rendering model.
LocalWords: mutex BeOS extraordinaire distro's URL lcd bool tarball
|