leaky-dashed-stroke.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * Copyright © 2008 Chris Wilson
  3. *
  4. * Permission to use, copy, modify, distribute, and sell this software
  5. * and its documentation for any purpose is hereby granted without
  6. * fee, provided that the above copyright notice appear in all copies
  7. * and that both that copyright notice and this permission notice
  8. * appear in supporting documentation, and that the name of
  9. * Chris Wilson not be used in advertising or publicity pertaining to
  10. * distribution of the software without specific, written prior
  11. * permission. Chris Wilson makes no representations about the
  12. * suitability of this software for any purpose. It is provided "as
  13. * is" without express or implied warranty.
  14. *
  15. * CHRIS WILSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
  16. * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  17. * FITNESS, IN NO EVENT SHALL CHRIS WILSON BE LIABLE FOR ANY SPECIAL,
  18. * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  19. * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  20. * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
  21. * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  22. *
  23. * Author: Chris Wilson <chris@chris-wilson.co.uk>
  24. */
  25. /* Extracted from a test case reported by Jeff Muizelaar found whilst running
  26. * firefox http://people.mozilla.com/~jmuizelaar/BerlinDistricts-check.svg
  27. */
  28. #include "cairo-test.h"
  29. #define WIDTH 205
  30. #define HEIGHT 260
  31. static cairo_test_status_t
  32. draw (cairo_t *cr, int width, int height)
  33. {
  34. const double dash[2] = {.5, .5};
  35. cairo_set_source_rgb (cr, 1, 1, 1);
  36. cairo_paint (cr);
  37. cairo_set_source_rgb (cr, 1., 0., 0);
  38. /* By adjusting the miter limit, we can see variations on the artifact.
  39. * cairo_set_miter_limit (cr, 4.);
  40. */
  41. cairo_translate (cr, -720, -484);
  42. cairo_scale (cr, 2.5, 2.5);
  43. cairo_set_dash (cr, dash, 2, 0);
  44. cairo_move_to (cr, 293.622, 330);
  45. cairo_line_to (cr, 293.703, 337.028);
  46. cairo_line_to (cr, 297.45, 336.851);
  47. cairo_line_to (cr, 308.88, 342.609);
  48. cairo_line_to (cr, 309.736, 346.107);
  49. cairo_line_to (cr, 312.972, 348.128);
  50. cairo_line_to (cr, 312.977, 353.478);
  51. cairo_line_to (cr, 322.486, 359.355);
  52. cairo_line_to (cr, 320.831, 363.642);
  53. cairo_line_to (cr, 315.175, 367.171);
  54. cairo_line_to (cr, 308.987, 365.715);
  55. cairo_line_to (cr, 301.3, 365.964);
  56. cairo_line_to (cr, 304.712, 368.852);
  57. cairo_line_to (cr, 305.349, 373.022);
  58. cairo_line_to (cr, 303.211, 376.551);
  59. cairo_line_to (cr, 304.915, 382.855);
  60. cairo_line_to (cr, 323.715, 400.475);
  61. cairo_line_to (cr, 355.323, 424.072);
  62. cairo_line_to (cr, 443.078, 426.534);
  63. cairo_line_to (cr, 455.26, 400.603);
  64. cairo_line_to (cr, 471.924, 392.604);
  65. cairo_line_to (cr, 478.556, 390.797);
  66. cairo_line_to (cr, 477.715, 386);
  67. cairo_line_to (cr, 456.807, 376.507);
  68. cairo_line_to (cr, 449.134, 368.722);
  69. cairo_line_to (cr, 449.147, 365.847);
  70. cairo_line_to (cr, 439.981, 361.692);
  71. cairo_line_to (cr, 439.994, 358.603);
  72. cairo_line_to (cr, 454.645, 336.128);
  73. cairo_line_to (cr, 434.995, 324.005);
  74. cairo_line_to (cr, 423.884, 319.354);
  75. cairo_line_to (cr, 421.098, 312.569);
  76. cairo_line_to (cr, 424.291, 305.997);
  77. cairo_line_to (cr, 431.308, 305.069);
  78. cairo_line_to (cr, 437.257, 296.882);
  79. cairo_line_to (cr, 448.544, 296.808);
  80. cairo_line_to (cr, 452.113, 290.651);
  81. cairo_line_to (cr, 448.469, 285.483);
  82. cairo_line_to (cr, 442.903, 282.877);
  83. cairo_line_to (cr, 447.798, 281.124);
  84. cairo_line_to (cr, 454.622, 274.911);
  85. cairo_line_to (cr, 449.491, 269.978);
  86. cairo_line_to (cr, 443.666, 253.148);
  87. cairo_line_to (cr, 445.741, 250.834);
  88. cairo_line_to (cr, 441.87, 247.131);
  89. cairo_line_to (cr, 436.932, 246.203);
  90. cairo_line_to (cr, 430.5, 251.252);
  91. cairo_line_to (cr, 427.483, 250.751);
  92. cairo_line_to (cr, 427.26, 253.572);
  93. cairo_line_to (cr, 423.621, 255.539);
  94. cairo_line_to (cr, 423.824, 257.933);
  95. cairo_line_to (cr, 425.239, 259.582);
  96. cairo_line_to (cr, 422.385, 261.443);
  97. cairo_line_to (cr, 421.665, 260.53);
  98. cairo_line_to (cr, 419.238, 262.819);
  99. cairo_line_to (cr, 418.731, 257.849);
  100. cairo_line_to (cr, 419.72, 255.227);
  101. cairo_line_to (cr, 418.786, 250.258);
  102. cairo_line_to (cr, 405.685, 235.254);
  103. cairo_line_to (cr, 427.167, 215.127);
  104. cairo_line_to (cr, 413.852, 196.281);
  105. cairo_line_to (cr, 420.177, 192.379);
  106. cairo_line_to (cr, 419.885, 185.701);
  107. cairo_line_to (cr, 413.401, 185.428);
  108. cairo_line_to (cr, 407.985, 186.863);
  109. cairo_line_to (cr, 397.11, 189.112);
  110. cairo_line_to (cr, 390.505, 186.664);
  111. cairo_line_to (cr, 388.527, 183.694);
  112. cairo_line_to (cr, 336.503, 221.048);
  113. cairo_line_to (cr, 367.028, 241.656);
  114. cairo_line_to (cr, 365.103, 244.117);
  115. cairo_line_to (cr, 364.886, 246.792);
  116. cairo_line_to (cr, 361.467, 247.119);
  117. cairo_line_to (cr, 360.396, 245.525);
  118. cairo_line_to (cr, 356.336, 245.638);
  119. cairo_line_to (cr, 353.344, 242.122);
  120. cairo_line_to (cr, 347.149, 242.876);
  121. cairo_line_to (cr, 341.809, 256.652);
  122. cairo_line_to (cr, 342.232, 268.72);
  123. cairo_line_to (cr, 329.579, 269.095);
  124. cairo_line_to (cr, 327.001, 271.009);
  125. cairo_line_to (cr, 325.579, 275.598);
  126. cairo_line_to (cr, 318.941, 277.313);
  127. cairo_line_to (cr, 306.048, 277.231);
  128. cairo_line_to (cr, 304.071, 276.27);
  129. cairo_line_to (cr, 301.153, 277.175);
  130. cairo_line_to (cr, 293.52, 277.529);
  131. cairo_line_to (cr, 290.682, 281.947);
  132. cairo_line_to (cr, 293.911, 286.63);
  133. cairo_line_to (cr, 302.417, 290.547);
  134. cairo_line_to (cr, 303.521, 294.73);
  135. cairo_line_to (cr, 307.787, 298.088);
  136. cairo_line_to (cr, 311.718, 299.126);
  137. cairo_line_to (cr, 313.255, 302.146);
  138. cairo_line_to (cr, 314.6, 306.206);
  139. cairo_line_to (cr, 322.603, 308.96);
  140. cairo_line_to (cr, 321.718, 314.477);
  141. cairo_line_to (cr, 319.596, 320.341);
  142. cairo_line_to (cr, 300.689, 323.69);
  143. cairo_line_to (cr, 301.232, 326.789);
  144. cairo_line_to (cr, 293.622, 330);
  145. cairo_close_path (cr);
  146. cairo_stroke (cr);
  147. return CAIRO_TEST_SUCCESS;
  148. }
  149. CAIRO_TEST (leaky_dashed_stroke,
  150. "Exercises bug in which a dashed stroke leaks in from outside the surface",
  151. "dash, stroke", /* keywords */
  152. NULL, /* requirements */
  153. WIDTH, HEIGHT,
  154. NULL, draw)