cairo 1.8.3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of cairo might be problematic. Click here for more details.

Files changed (352) hide show
  1. data/AUTHORS +4 -0
  2. data/COPYING +59 -0
  3. data/GPL +340 -0
  4. data/NEWS +163 -0
  5. data/Rakefile +190 -0
  6. data/doc/doc.css +91 -0
  7. data/doc/en/cairo-antialias.html +38 -0
  8. data/doc/en/cairo-clip-not-representable-error.html +47 -0
  9. data/doc/en/cairo-color-base.html +69 -0
  10. data/doc/en/cairo-color-cmyk.html +157 -0
  11. data/doc/en/cairo-color-hsv.html +137 -0
  12. data/doc/en/cairo-color-rgb.html +142 -0
  13. data/doc/en/cairo-color-x11.html +173 -0
  14. data/doc/en/cairo-color.html +238 -0
  15. data/doc/en/cairo-content.html +37 -0
  16. data/doc/en/cairo-context-blur.html +39 -0
  17. data/doc/en/cairo-context-circle.html +39 -0
  18. data/doc/en/cairo-context-color.html +39 -0
  19. data/doc/en/cairo-context-path.html +44 -0
  20. data/doc/en/cairo-context-rectangle.html +39 -0
  21. data/doc/en/cairo-context-triangle.html +39 -0
  22. data/doc/en/cairo-context.html +643 -0
  23. data/doc/en/cairo-error.html +44 -0
  24. data/doc/en/cairo-extend.html +38 -0
  25. data/doc/en/cairo-file-not-found.html +47 -0
  26. data/doc/en/cairo-fill-rule.html +36 -0
  27. data/doc/en/cairo-filter.html +40 -0
  28. data/doc/en/cairo-font-extents.html +129 -0
  29. data/doc/en/cairo-font-face.html +38 -0
  30. data/doc/en/cairo-font-options.html +139 -0
  31. data/doc/en/cairo-font-slant.html +37 -0
  32. data/doc/en/cairo-font-type-mismatch.html +47 -0
  33. data/doc/en/cairo-font-weight.html +36 -0
  34. data/doc/en/cairo-format.html +46 -0
  35. data/doc/en/cairo-glyph.html +99 -0
  36. data/doc/en/cairo-gradient-pattern.html +74 -0
  37. data/doc/en/cairo-hint-metrics.html +37 -0
  38. data/doc/en/cairo-hint-style.html +39 -0
  39. data/doc/en/cairo-image-surface.html +82 -0
  40. data/doc/en/cairo-invalid-clusters.html +47 -0
  41. data/doc/en/cairo-invalid-content-error.html +47 -0
  42. data/doc/en/cairo-invalid-dash-error.html +47 -0
  43. data/doc/en/cairo-invalid-dsc-comment-error.html +47 -0
  44. data/doc/en/cairo-invalid-format-error.html +47 -0
  45. data/doc/en/cairo-invalid-index-error.html +47 -0
  46. data/doc/en/cairo-invalid-matrix-error.html +47 -0
  47. data/doc/en/cairo-invalid-path-data-error.html +47 -0
  48. data/doc/en/cairo-invalid-pop-group-error.html +47 -0
  49. data/doc/en/cairo-invalid-restore-error.html +47 -0
  50. data/doc/en/cairo-invalid-slant.html +47 -0
  51. data/doc/en/cairo-invalid-status-error.html +47 -0
  52. data/doc/en/cairo-invalid-stride-error.html +47 -0
  53. data/doc/en/cairo-invalid-string-error.html +47 -0
  54. data/doc/en/cairo-invalid-visual-error.html +47 -0
  55. data/doc/en/cairo-invalid-weight.html +47 -0
  56. data/doc/en/cairo-line-cap.html +37 -0
  57. data/doc/en/cairo-line-join.html +37 -0
  58. data/doc/en/cairo-linear-pattern.html +60 -0
  59. data/doc/en/cairo-matrix.html +259 -0
  60. data/doc/en/cairo-negative-count.html +47 -0
  61. data/doc/en/cairo-no-current-point-error.html +47 -0
  62. data/doc/en/cairo-null-pointer-error.html +47 -0
  63. data/doc/en/cairo-operator.html +48 -0
  64. data/doc/en/cairo-paper-parse-error.html +47 -0
  65. data/doc/en/cairo-paper-unknown-paper-name.html +66 -0
  66. data/doc/en/cairo-paper-unknown-unit.html +66 -0
  67. data/doc/en/cairo-paper-unrecognized-paper-description.html +66 -0
  68. data/doc/en/cairo-paper.html +184 -0
  69. data/doc/en/cairo-path-close-path.html +49 -0
  70. data/doc/en/cairo-path-curve-to.html +49 -0
  71. data/doc/en/cairo-path-data-type.html +38 -0
  72. data/doc/en/cairo-path-data.html +98 -0
  73. data/doc/en/cairo-path-line-to.html +49 -0
  74. data/doc/en/cairo-path-move-to.html +49 -0
  75. data/doc/en/cairo-path.html +155 -0
  76. data/doc/en/cairo-pattern-type-mismatch-error.html +47 -0
  77. data/doc/en/cairo-pattern.html +99 -0
  78. data/doc/en/cairo-pdf-surface.html +57 -0
  79. data/doc/en/cairo-point.html +74 -0
  80. data/doc/en/cairo-ps-level.html +49 -0
  81. data/doc/en/cairo-ps-surface.html +92 -0
  82. data/doc/en/cairo-quartz-image-surface.html +57 -0
  83. data/doc/en/cairo-quartz-surface.html +57 -0
  84. data/doc/en/cairo-radial-pattern.html +60 -0
  85. data/doc/en/cairo-read-error.html +47 -0
  86. data/doc/en/cairo-rectangle.html +89 -0
  87. data/doc/en/cairo-scaled-font.html +94 -0
  88. data/doc/en/cairo-solid-pattern.html +62 -0
  89. data/doc/en/cairo-subpixel-order.html +39 -0
  90. data/doc/en/cairo-surface-finished-error.html +47 -0
  91. data/doc/en/cairo-surface-pattern.html +57 -0
  92. data/doc/en/cairo-surface-type-mismatch-error.html +47 -0
  93. data/doc/en/cairo-surface.html +121 -0
  94. data/doc/en/cairo-svg-surface.html +77 -0
  95. data/doc/en/cairo-svg-version.html +49 -0
  96. data/doc/en/cairo-temp-file-error.html +47 -0
  97. data/doc/en/cairo-text-cluster-flag.html +35 -0
  98. data/doc/en/cairo-text-cluster.html +84 -0
  99. data/doc/en/cairo-text-extents.html +144 -0
  100. data/doc/en/cairo-toy-font-face.html +67 -0
  101. data/doc/en/cairo-user-font-error.html +47 -0
  102. data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +94 -0
  103. data/doc/en/cairo-user-font-face.html +72 -0
  104. data/doc/en/cairo-user-font-immutable.html +47 -0
  105. data/doc/en/cairo-win32-printing-surface.html +57 -0
  106. data/doc/en/cairo-win32-surface.html +62 -0
  107. data/doc/en/cairo-write-error.html +47 -0
  108. data/doc/en/cairo.html +131 -0
  109. data/doc/en/index.html +1154 -0
  110. data/doc/index.html +18 -0
  111. data/doc/ja/cairo-antialias.html +57 -0
  112. data/doc/ja/cairo-clip-not-representable-error.html +56 -0
  113. data/doc/ja/cairo-color-base.html +75 -0
  114. data/doc/ja/cairo-color-cmyk.html +152 -0
  115. data/doc/ja/cairo-color-hsv.html +135 -0
  116. data/doc/ja/cairo-color-rgb.html +145 -0
  117. data/doc/ja/cairo-color-x11.html +183 -0
  118. data/doc/ja/cairo-color.html +317 -0
  119. data/doc/ja/cairo-content.html +51 -0
  120. data/doc/ja/cairo-context-blur.html +53 -0
  121. data/doc/ja/cairo-context-circle.html +54 -0
  122. data/doc/ja/cairo-context-color.html +52 -0
  123. data/doc/ja/cairo-context-path.html +77 -0
  124. data/doc/ja/cairo-context-rectangle.html +60 -0
  125. data/doc/ja/cairo-context-triangle.html +47 -0
  126. data/doc/ja/cairo-context.html +1542 -0
  127. data/doc/ja/cairo-error.html +56 -0
  128. data/doc/ja/cairo-extend.html +56 -0
  129. data/doc/ja/cairo-file-not-found.html +51 -0
  130. data/doc/ja/cairo-fill-rule.html +58 -0
  131. data/doc/ja/cairo-filter.html +43 -0
  132. data/doc/ja/cairo-font-extents.html +164 -0
  133. data/doc/ja/cairo-font-face.html +55 -0
  134. data/doc/ja/cairo-font-options.html +189 -0
  135. data/doc/ja/cairo-font-slant.html +50 -0
  136. data/doc/ja/cairo-font-type-mismatch.html +52 -0
  137. data/doc/ja/cairo-font-weight.html +47 -0
  138. data/doc/ja/cairo-format.html +81 -0
  139. data/doc/ja/cairo-glyph.html +115 -0
  140. data/doc/ja/cairo-gradient-pattern.html +119 -0
  141. data/doc/ja/cairo-hint-metrics.html +57 -0
  142. data/doc/ja/cairo-hint-style.html +64 -0
  143. data/doc/ja/cairo-image-surface.html +131 -0
  144. data/doc/ja/cairo-invalid-clusters.html +55 -0
  145. data/doc/ja/cairo-invalid-content-error.html +54 -0
  146. data/doc/ja/cairo-invalid-dash-error.html +54 -0
  147. data/doc/ja/cairo-invalid-dsc-comment-error.html +54 -0
  148. data/doc/ja/cairo-invalid-format-error.html +54 -0
  149. data/doc/ja/cairo-invalid-index-error.html +54 -0
  150. data/doc/ja/cairo-invalid-matrix-error.html +54 -0
  151. data/doc/ja/cairo-invalid-path-data-error.html +54 -0
  152. data/doc/ja/cairo-invalid-pop-group-error.html +54 -0
  153. data/doc/ja/cairo-invalid-restore-error.html +55 -0
  154. data/doc/ja/cairo-invalid-slant.html +57 -0
  155. data/doc/ja/cairo-invalid-status-error.html +55 -0
  156. data/doc/ja/cairo-invalid-stride-error.html +55 -0
  157. data/doc/ja/cairo-invalid-string-error.html +54 -0
  158. data/doc/ja/cairo-invalid-visual-error.html +57 -0
  159. data/doc/ja/cairo-invalid-weight.html +57 -0
  160. data/doc/ja/cairo-line-cap.html +50 -0
  161. data/doc/ja/cairo-line-join.html +53 -0
  162. data/doc/ja/cairo-linear-pattern.html +87 -0
  163. data/doc/ja/cairo-matrix.html +354 -0
  164. data/doc/ja/cairo-negative-count.html +52 -0
  165. data/doc/ja/cairo-no-current-point-error.html +54 -0
  166. data/doc/ja/cairo-null-pointer-error.html +54 -0
  167. data/doc/ja/cairo-operator.html +51 -0
  168. data/doc/ja/cairo-paper-parse-error.html +55 -0
  169. data/doc/ja/cairo-paper-unknown-paper-name.html +76 -0
  170. data/doc/ja/cairo-paper-unknown-unit.html +75 -0
  171. data/doc/ja/cairo-paper-unrecognized-paper-description.html +76 -0
  172. data/doc/ja/cairo-paper.html +357 -0
  173. data/doc/ja/cairo-path-close-path.html +57 -0
  174. data/doc/ja/cairo-path-curve-to.html +70 -0
  175. data/doc/ja/cairo-path-data-type.html +53 -0
  176. data/doc/ja/cairo-path-data.html +127 -0
  177. data/doc/ja/cairo-path-line-to.html +62 -0
  178. data/doc/ja/cairo-path-move-to.html +62 -0
  179. data/doc/ja/cairo-path.html +144 -0
  180. data/doc/ja/cairo-pattern-type-mismatch-error.html +56 -0
  181. data/doc/ja/cairo-pattern.html +128 -0
  182. data/doc/ja/cairo-pdf-surface.html +86 -0
  183. data/doc/ja/cairo-point.html +90 -0
  184. data/doc/ja/cairo-ps-level.html +62 -0
  185. data/doc/ja/cairo-ps-surface.html +214 -0
  186. data/doc/ja/cairo-quartz-image-surface.html +75 -0
  187. data/doc/ja/cairo-quartz-surface.html +93 -0
  188. data/doc/ja/cairo-radial-pattern.html +93 -0
  189. data/doc/ja/cairo-read-error.html +55 -0
  190. data/doc/ja/cairo-rectangle.html +109 -0
  191. data/doc/ja/cairo-scaled-font.html +180 -0
  192. data/doc/ja/cairo-solid-pattern.html +87 -0
  193. data/doc/ja/cairo-subpixel-order.html +57 -0
  194. data/doc/ja/cairo-surface-finished-error.html +54 -0
  195. data/doc/ja/cairo-surface-pattern.html +68 -0
  196. data/doc/ja/cairo-surface-type-mismatch-error.html +56 -0
  197. data/doc/ja/cairo-surface.html +213 -0
  198. data/doc/ja/cairo-svg-surface.html +114 -0
  199. data/doc/ja/cairo-svg-version.html +66 -0
  200. data/doc/ja/cairo-temp-file-error.html +50 -0
  201. data/doc/ja/cairo-text-cluster-flag.html +46 -0
  202. data/doc/ja/cairo-text-cluster.html +102 -0
  203. data/doc/ja/cairo-text-extents.html +163 -0
  204. data/doc/ja/cairo-toy-font-face.html +107 -0
  205. data/doc/ja/cairo-user-font-error.html +55 -0
  206. data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +156 -0
  207. data/doc/ja/cairo-user-font-face.html +268 -0
  208. data/doc/ja/cairo-user-font-immutable.html +54 -0
  209. data/doc/ja/cairo-win32-printing-surface.html +80 -0
  210. data/doc/ja/cairo-win32-surface.html +100 -0
  211. data/doc/ja/cairo-write-error.html +55 -0
  212. data/doc/ja/cairo.html +177 -0
  213. data/doc/ja/index.html +1156 -0
  214. data/ext/cairo/cairo.def +104 -0
  215. data/ext/cairo/extconf.rb +80 -0
  216. data/ext/cairo/rb_cairo.c +104 -0
  217. data/ext/cairo/rb_cairo.h +275 -0
  218. data/ext/cairo/rb_cairo_constants.c +478 -0
  219. data/ext/cairo/rb_cairo_context.c +1693 -0
  220. data/ext/cairo/rb_cairo_exception.c +354 -0
  221. data/ext/cairo/rb_cairo_font_extents.c +200 -0
  222. data/ext/cairo/rb_cairo_font_face.c +713 -0
  223. data/ext/cairo/rb_cairo_font_options.c +197 -0
  224. data/ext/cairo/rb_cairo_glyph.c +161 -0
  225. data/ext/cairo/rb_cairo_matrix.c +366 -0
  226. data/ext/cairo/rb_cairo_path.c +459 -0
  227. data/ext/cairo/rb_cairo_pattern.c +540 -0
  228. data/ext/cairo/rb_cairo_private.c +242 -0
  229. data/ext/cairo/rb_cairo_private.h +114 -0
  230. data/ext/cairo/rb_cairo_scaled_font.c +235 -0
  231. data/ext/cairo/rb_cairo_surface.c +1371 -0
  232. data/ext/cairo/rb_cairo_text_cluster.c +151 -0
  233. data/ext/cairo/rb_cairo_text_extents.c +221 -0
  234. data/extconf.rb +45 -0
  235. data/lib/1.8/cairo.so +0 -0
  236. data/lib/1.9/cairo.so +0 -0
  237. data/lib/cairo.rb +151 -0
  238. data/lib/cairo/color.rb +267 -0
  239. data/lib/cairo/colors.rb +656 -0
  240. data/lib/cairo/constants.rb +24 -0
  241. data/lib/cairo/context.rb +29 -0
  242. data/lib/cairo/context/blur.rb +45 -0
  243. data/lib/cairo/context/circle.rb +9 -0
  244. data/lib/cairo/context/color.rb +11 -0
  245. data/lib/cairo/context/path.rb +116 -0
  246. data/lib/cairo/context/rectangle.rb +33 -0
  247. data/lib/cairo/context/triangle.rb +12 -0
  248. data/lib/cairo/paper.rb +183 -0
  249. data/lib/cairo/papers.rb +41 -0
  250. data/lib/cairo/path.rb +15 -0
  251. data/lib/cairo/point.rb +7 -0
  252. data/misc/update-colors.rb +143 -0
  253. data/pkg-config.rb +313 -0
  254. data/samples/agg/README +4 -0
  255. data/samples/agg/aa_test.rb +304 -0
  256. data/samples/blur.rb +47 -0
  257. data/samples/pac.rb +99 -0
  258. data/samples/pac2.rb +171 -0
  259. data/samples/png.rb +45 -0
  260. data/samples/scalable.rb +56 -0
  261. data/samples/text-on-path.rb +60 -0
  262. data/samples/text2.rb +131 -0
  263. data/test-unit/Rakefile +30 -0
  264. data/test-unit/bin/testrb +5 -0
  265. data/test-unit/lib/test/unit.rb +280 -0
  266. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  267. data/test-unit/lib/test/unit/assertions.rb +722 -0
  268. data/test-unit/lib/test/unit/attribute.rb +125 -0
  269. data/test-unit/lib/test/unit/autorunner.rb +254 -0
  270. data/test-unit/lib/test/unit/collector.rb +43 -0
  271. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  272. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  273. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  274. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  275. data/test-unit/lib/test/unit/color.rb +61 -0
  276. data/test-unit/lib/test/unit/diff.rb +524 -0
  277. data/test-unit/lib/test/unit/error.rb +124 -0
  278. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  279. data/test-unit/lib/test/unit/failure.rb +110 -0
  280. data/test-unit/lib/test/unit/fixture.rb +185 -0
  281. data/test-unit/lib/test/unit/notification.rb +125 -0
  282. data/test-unit/lib/test/unit/omission.rb +143 -0
  283. data/test-unit/lib/test/unit/pending.rb +146 -0
  284. data/test-unit/lib/test/unit/priority.rb +146 -0
  285. data/test-unit/lib/test/unit/runner/console.rb +46 -0
  286. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  287. data/test-unit/lib/test/unit/testcase.rb +281 -0
  288. data/test-unit/lib/test/unit/testresult.rb +89 -0
  289. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  290. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  291. data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
  292. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  293. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  294. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  295. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  296. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  297. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  298. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  299. data/test-unit/lib/test/unit/version.rb +7 -0
  300. data/test-unit/sample/adder.rb +13 -0
  301. data/test-unit/sample/subtracter.rb +12 -0
  302. data/test-unit/sample/tc_adder.rb +18 -0
  303. data/test-unit/sample/tc_subtracter.rb +18 -0
  304. data/test-unit/sample/ts_examples.rb +7 -0
  305. data/test-unit/test/collector/test_descendant.rb +135 -0
  306. data/test-unit/test/collector/test_dir.rb +406 -0
  307. data/test-unit/test/collector/test_load.rb +333 -0
  308. data/test-unit/test/collector/test_objectspace.rb +98 -0
  309. data/test-unit/test/run-test.rb +13 -0
  310. data/test-unit/test/test_assertions.rb +693 -0
  311. data/test-unit/test/test_attribute.rb +86 -0
  312. data/test-unit/test/test_color.rb +37 -0
  313. data/test-unit/test/test_diff.rb +477 -0
  314. data/test-unit/test/test_emacs_runner.rb +60 -0
  315. data/test-unit/test/test_error.rb +26 -0
  316. data/test-unit/test/test_failure.rb +33 -0
  317. data/test-unit/test/test_fixture.rb +252 -0
  318. data/test-unit/test/test_notification.rb +33 -0
  319. data/test-unit/test/test_omission.rb +81 -0
  320. data/test-unit/test/test_pending.rb +70 -0
  321. data/test-unit/test/test_priority.rb +89 -0
  322. data/test-unit/test/test_testcase.rb +430 -0
  323. data/test-unit/test/test_testresult.rb +113 -0
  324. data/test-unit/test/test_testsuite.rb +129 -0
  325. data/test-unit/test/testunit_test_util.rb +14 -0
  326. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  327. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  328. data/test-unit/test/util/test_observable.rb +102 -0
  329. data/test-unit/test/util/test_procwrapper.rb +36 -0
  330. data/test/cairo-test-utils.rb +18 -0
  331. data/test/run-test.rb +28 -0
  332. data/test/test_color.rb +17 -0
  333. data/test/test_constants.rb +16 -0
  334. data/test/test_context.rb +105 -0
  335. data/test/test_exception.rb +27 -0
  336. data/test/test_font_extents.rb +36 -0
  337. data/test/test_font_face.rb +244 -0
  338. data/test/test_font_options.rb +13 -0
  339. data/test/test_paper.rb +81 -0
  340. data/test/test_pkg_config.rb +123 -0
  341. data/test/test_scaled_font.rb +34 -0
  342. data/test/test_surface.rb +41 -0
  343. data/test/test_text_cluster.rb +32 -0
  344. data/test/test_text_extents.rb +40 -0
  345. data/test/test_text_to_glyphs_data.rb +51 -0
  346. data/tmp/x86-mingw32/cairo/1.8.7/fake.rb +6 -0
  347. data/tmp/x86-mingw32/cairo/1.8.7/mkmf.rb +1836 -0
  348. data/tmp/x86-mingw32/cairo/1.8.7/rbconfig.rb +183 -0
  349. data/tmp/x86-mingw32/cairo/1.9.2/fake.rb +6 -0
  350. data/tmp/x86-mingw32/cairo/1.9.2/mkmf.rb +2079 -0
  351. data/tmp/x86-mingw32/cairo/1.9.2/rbconfig.rb +226 -0
  352. metadata +437 -0
@@ -0,0 +1,24 @@
1
+ module Cairo
2
+ define_constants = Proc.new do |const_module, prefix, target|
3
+ target ||= self
4
+ const_module.constants.each do |const_name|
5
+ target.const_set([prefix, const_name].compact.join("_"),
6
+ const_module.const_get(const_name))
7
+ end
8
+ end
9
+
10
+ %w(operator antialias fill_rule line_cap line_join font_slant
11
+ font_weight subpixel_order hint_style hint_metrics content
12
+ format extend filter).each do |name|
13
+ module_name = name.split(/_/).collect {|component| component.capitalize}.join
14
+ define_constants.call(const_get(module_name), name.upcase)
15
+ end
16
+
17
+ define_constants.call(PathDataType, "PATH")
18
+ define_constants.call(PathDataType, nil, Path)
19
+ define_constants.call(SVGVersion, nil, SVGSurface)
20
+ define_constants.call(SVGVersion, "SVG")
21
+ if const_defined?(:TextClusterFlag)
22
+ define_constants.call(TextClusterFlag, "TEXT_CLUSTER_FLAG")
23
+ end
24
+ end
@@ -0,0 +1,29 @@
1
+ require 'cairo/context/rectangle'
2
+ require 'cairo/context/triangle'
3
+ require 'cairo/context/circle'
4
+ require 'cairo/context/path'
5
+ require 'cairo/context/blur'
6
+ require 'cairo/context/color'
7
+
8
+ module Cairo
9
+ class Context
10
+ include Rectangle
11
+ include Triangle
12
+ include Circle
13
+ include Path
14
+ include Blur
15
+ include Color
16
+
17
+ def stroke_preserve(&block)
18
+ stroke(true, &block)
19
+ end
20
+
21
+ def fill_preserve(&block)
22
+ fill(true, &block)
23
+ end
24
+
25
+ def clip_preserve(&block)
26
+ clip(true, &block)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,45 @@
1
+ module Cairo
2
+ class Context
3
+ module Blur
4
+ def pseudo_blur(radius=3, &block)
5
+ raise ArgumentError, "should specify block" if block.nil?
6
+ pattern = push_group(Cairo::CONTENT_COLOR_ALPHA, false, &block)
7
+
8
+ save do
9
+ set_source(pattern)
10
+ paint(0.5)
11
+ end
12
+
13
+ 1.step(radius, 1) do |i|
14
+ opacity = 0.075 - 0.005 * i
15
+ next if opacity <= 0
16
+ 5.downto(1) do |ratio|
17
+ r = i / ratio.to_f
18
+ r_13 = r / 3.0
19
+ r_23 = 2 * r_13
20
+ [
21
+ [-r, 0],
22
+ [-r_23, r_23],
23
+ [-r_23, r_13],
24
+ [0, r],
25
+ [r_13, r_23],
26
+ [r_23, r_23],
27
+ [r, 0],
28
+ [r_23, -r_13],
29
+ [r_23, -r_23],
30
+ [0, -r],
31
+ [-r_13, -r_23],
32
+ [-r_23, -r_23],
33
+ ].each do |x, y|
34
+ save do
35
+ translate(x, y)
36
+ set_source(pattern)
37
+ paint(opacity)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ module Cairo
2
+ class Context
3
+ module Circle
4
+ def circle(center_x, center_y, radius)
5
+ arc(center_x, center_y, radius, 0, 2 * Math::PI)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require 'cairo/color'
2
+
3
+ module Cairo
4
+ class Context
5
+ module Color
6
+ def set_source_color(color)
7
+ set_source_rgba(*Cairo::Color.parse(color).to_rgb.to_a)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,116 @@
1
+ module Cairo
2
+ class Context
3
+ module Path
4
+ def transform_path(path, &block)
5
+ transformed_path = Cairo::Path.new
6
+ path.each do |type, points|
7
+ case type
8
+ when PATH_MOVE_TO
9
+ transformed_path.move_to(*points.collect(&block).flatten)
10
+ when PATH_LINE_TO
11
+ transformed_path.line_to(*points.collect(&block).flatten)
12
+ when PATH_CURVE_TO
13
+ transformed_path.curve_to(*points.collect(&block).flatten)
14
+ when PATH_CLOSE_PATH
15
+ transformed_path.close
16
+ end
17
+ end
18
+ transformed_path
19
+ end
20
+
21
+ def map_path_onto(path)
22
+ parameterized_path = parameterize_path(path)
23
+ transformed_path = transform_path(copy_path) do |x, y|
24
+ current_point = nil
25
+ d = x
26
+ i = -1
27
+ type = points = nil
28
+ path.each do |type, points|
29
+ i += 1
30
+ break if d < parameterized_path[i]
31
+ d -= parameterized_path[i]
32
+ case type
33
+ when PATH_MOVE_TO
34
+ current_point = points[0]
35
+ when PATH_LINE_TO
36
+ current_point = points[0]
37
+ when PATH_CURVE_TO
38
+ current_point = points[2]
39
+ when PATH_CLOSE_PATH
40
+ end
41
+ end
42
+
43
+ case type
44
+ when PATH_MOVE_TO
45
+ [x, y]
46
+ when PATH_LINE_TO
47
+ ratio = d / parameterized_path[i]
48
+ current_x, current_y = current_point
49
+ lx, ly = points[0]
50
+ new_x = current_x * (1 - ratio) + lx * ratio
51
+ new_y = current_y * (1 - ratio) + ly * ratio
52
+ dx = -(current_x - lx)
53
+ dy = -(current_y - ly)
54
+
55
+ ratio = y / parameterized_path[i]
56
+ [new_x + -dy * ratio, new_y + dx * ratio]
57
+ when PATH_CURVE_TO
58
+ ratio = d / parameterized_path[i]
59
+ current_x, current_y = current_point
60
+ cx0, cy0 = points[0]
61
+ cx1, cy1 = points[1]
62
+ cx2, cy2 = points[2]
63
+
64
+ new_x = current_x * (1 - ratio) * (1 - ratio) * (1 - ratio) +
65
+ 3 * cx0 * (1 - ratio) * (1 - ratio) * ratio +
66
+ 3 * cx1 * (1 - ratio) * ratio * ratio +
67
+ cx2 * ratio * ratio * ratio
68
+ new_y = current_y * (1 - ratio) * (1 - ratio) * (1 - ratio) +
69
+ 3 * cy0 * (1 - ratio) * (1 - ratio) * ratio +
70
+ 3 * cy1 * (1 - ratio) * ratio * ratio +
71
+ cy2 * ratio * ratio * ratio
72
+
73
+ dx = -3 * current_x * (1 - ratio) * (1 - ratio) +
74
+ 3 * cx0 * (1 - 4 * ratio + 3 * ratio * ratio) +
75
+ 3 * cx1 * ( 2 * ratio - 3 * ratio * ratio) +
76
+ 3 * cx2 * ratio * ratio
77
+ dy = -3 * current_y * (1 - ratio) * (1 - ratio) +
78
+ 3 * cy0 * (1 - 4 * ratio + 3 * ratio * ratio) +
79
+ 3 * cy1 * ( 2 * ratio - 3 * ratio * ratio) +
80
+ 3 * cy2 * ratio * ratio
81
+
82
+ ratio = y / Math.sqrt(dx ** 2 + dy ** 2)
83
+
84
+ [new_x + -dy * ratio, new_y + dx * ratio]
85
+ when PATH_CLOSE_PATH
86
+ [x, y]
87
+ end
88
+ end
89
+ new_path
90
+ append_path(transformed_path)
91
+ end
92
+
93
+ private
94
+ def parameterize_path(path)
95
+ current_point = nil
96
+ path.collect do |type, points|
97
+ result = 0
98
+ case type
99
+ when PATH_MOVE_TO
100
+ current_point = points[0]
101
+ when PATH_LINE_TO
102
+ result = current_point.distance(points[0])
103
+ current_point = points[0]
104
+ when PATH_CURVE_TO
105
+ result = current_point.distance(points[0])
106
+ result += points[0].distance(points[1])
107
+ result += points[1].distance(points[2])
108
+ current_point = points[2]
109
+ when PATH_CLOSE_PATH
110
+ end
111
+ result
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,33 @@
1
+ module Cairo
2
+ class Context
3
+ module Rectangle
4
+ def rounded_rectangle(x, y, width, height, x_radius, y_radius=nil)
5
+ x1 = x
6
+ x2 = x1 + width
7
+ y1 = y
8
+ y2 = y1 + height
9
+
10
+ y_radius ||= x_radius
11
+
12
+ x_radius = [x_radius, width / 2.0].min
13
+ y_radius = [y_radius, height / 2.0].min
14
+
15
+ xr1 = x_radius
16
+ xr2 = x_radius / 2.0
17
+ yr1 = y_radius
18
+ yr2 = y_radius / 2.0
19
+
20
+ move_to(x1 + xr1, y1)
21
+ line_to(x2 - xr1, y1)
22
+ curve_to(x2 - xr2, y1, x2, y1 + yr2, x2, y1 + yr1)
23
+ line_to(x2, y2 - yr1)
24
+ curve_to(x2, y2 - yr2, x2 - xr2, y2, x2 - xr1, y2)
25
+ line_to(x1 + xr1, y2)
26
+ curve_to(x1 + xr2, y2, x1, y2 - yr2, x1, y2 - yr1)
27
+ line_to(x1, y1 + yr1)
28
+ curve_to(x1, y1 + yr2, x1 + xr2, y1, x1 + xr1, y1)
29
+ close_path
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,12 @@
1
+ module Cairo
2
+ class Context
3
+ module Triangle
4
+ def triangle(x1, y1, x2, y2, x3, y3)
5
+ move_to(x1, y1)
6
+ line_to(x2, y2)
7
+ line_to(x3, y3)
8
+ close_path
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,183 @@
1
+ module Cairo
2
+ class Paper
3
+ class ParseError < ArgumentError
4
+ end
5
+
6
+ class UnknownPaperName < ParseError
7
+ attr_reader :name
8
+ def initialize(name)
9
+ @name = name
10
+ super("unknown paper name: #{name}")
11
+ end
12
+ end
13
+
14
+ class UnknownUnit < ParseError
15
+ attr_reader :unit
16
+ def initialize(unit)
17
+ @unit = unit
18
+ super("unknown unit: #{unit}")
19
+ end
20
+ end
21
+
22
+ class UnrecognizedPaperDescription < ParseError
23
+ attr_reader :description
24
+ def initialize(description)
25
+ @description = description
26
+ super("unrecognized paper description: #{description.inspect}")
27
+ end
28
+ end
29
+
30
+ class << self
31
+ def parse(paper_description, robust=false)
32
+ case paper_description
33
+ when Paper
34
+ return paper_description.dup
35
+ when Symbol
36
+ paper = resolve_constant(paper_description)
37
+ return paper.dup if paper
38
+ raise UnknownPaperName.new(paper_description)
39
+ when String
40
+ paper = resolve_constant(paper_description)
41
+ paper ||= parse_size(paper_description)
42
+ return paper.dup if paper
43
+ when Array
44
+ return new(*paper_description)
45
+ end
46
+
47
+ raise UnrecognizedPaperDescription.new(paper_description) if robust
48
+ nil
49
+ end
50
+
51
+ @@default_unit = nil
52
+ def default_unit
53
+ @@default_unit
54
+ end
55
+
56
+ def default_unit=(unit)
57
+ @@default_unit = unit
58
+ end
59
+
60
+ @@unit_resolvers = {}
61
+ def register_unit_resolver(from_units, to_units, &resolver)
62
+ from_units = [from_units] unless from_units.is_a?(Array)
63
+ to_units = [to_units] unless to_units.is_a?(Array)
64
+ from_units.each do |from_unit|
65
+ @@unit_resolvers[from_unit] ||= []
66
+ to_units.each do |unit|
67
+ @@unit_resolvers[from_unit] << [unit, resolver]
68
+ end
69
+ end
70
+ end
71
+
72
+ def resolve_unit(size, from_unit, to_unit)
73
+ from_unit ||= default_unit
74
+ return size if from_unit == to_unit
75
+ from_units = @@unit_resolvers[from_unit] || []
76
+ raise UnknownUnit.new(from_unit) if from_units.empty?
77
+ from_units.each do |unit, resolver|
78
+ return resolver.call(size) if to_unit == unit
79
+ end
80
+ raise UnknownUnit.new(to_unit)
81
+ end
82
+
83
+ private
84
+ def resolve_constant(name)
85
+ name = name.to_s.upcase.gsub(/\s+|-/, '_')
86
+ if /\A[A-Z]/ =~ name and const_defined?(name)
87
+ const_get(name)
88
+ else
89
+ nil
90
+ end
91
+ end
92
+
93
+ def parse_size(size)
94
+ size_re = /(\d+(\.\d*)?)/
95
+ unit_re = /([a-zA-Z]+?)/
96
+ if /\A#{size_re}#{unit_re}?x#{size_re}#{unit_re}?(?:#(.*))?\z/ !~ size
97
+ return nil
98
+ end
99
+
100
+ width = $1
101
+ width_fractional = $2
102
+ width_unit = $3
103
+ height = $4
104
+ height_fractional = $5
105
+ height_unit = $6
106
+ name = $7
107
+ width = width_fractional ? Float(width) : Integer(width)
108
+ height = height_fractional ? Float(height) : Integer(height)
109
+ new(resolve_unit(width, width_unit, "pt"),
110
+ resolve_unit(height, height_unit, "pt"),
111
+ nil, name)
112
+ end
113
+ end
114
+
115
+ self.default_unit = "pt"
116
+ register_unit_resolver("pt", ["in", "inch"]) {|size| size / 72.0}
117
+ register_unit_resolver(["in", "inch"], "pt") {|size| size * 72}
118
+ register_unit_resolver("pt", "mm") {|size| size * 25.4 / 72.0}
119
+ register_unit_resolver("mm", "pt") {|size| size / 25.4 * 72}
120
+ register_unit_resolver("pt", "cm") {|size| size * 2.54 / 72.0}
121
+ register_unit_resolver("cm", "pt") {|size| size / 2.54 * 72}
122
+ register_unit_resolver("pt", "m") {|size| size * 0.0254 / 72.0}
123
+ register_unit_resolver("m", "pt") {|size| size / 0.0254 * 72}
124
+
125
+ attr_reader :unit
126
+ attr_writer :width, :height
127
+ attr_accessor :name
128
+ def initialize(width, height, unit=nil, name=nil)
129
+ @width = width
130
+ @height = height
131
+ @unit = unit
132
+ @name = name
133
+ end
134
+
135
+ def unit=(unit)
136
+ if @unit != unit
137
+ @width = self.class.resolve_unit(width, @unit, unit)
138
+ @height = self.class.resolve_unit(height, @unit, unit)
139
+ end
140
+ @unit = unit
141
+ end
142
+
143
+ def width(unit=nil)
144
+ return @width if unit.nil?
145
+ self.class.resolve_unit(@width, @unit, unit)
146
+ end
147
+
148
+ def height(unit=nil)
149
+ return @height if unit.nil?
150
+ self.class.resolve_unit(@height, @unit, unit)
151
+ end
152
+
153
+ def size(unit=nil)
154
+ [width(unit), height(unit)]
155
+ end
156
+
157
+ def ==(other)
158
+ other.is_a?(self.class) and @name == other.name and
159
+ width_in_delta?(other.width(@unit)) and
160
+ height_in_delta?(other.height(@unit))
161
+ end
162
+
163
+ def to_s
164
+ string = "#{@width}#{@unit}x#{@height}#{@unit}"
165
+ string << "\##{@name}" if @name
166
+ string
167
+ end
168
+
169
+ private
170
+ def width_in_delta?(value, delta=nil)
171
+ in_delta?(@width, delta, value)
172
+ end
173
+
174
+ def height_in_delta?(value, delta=nil)
175
+ in_delta?(@height, delta, value)
176
+ end
177
+
178
+ def in_delta?(value, delta, other)
179
+ delta ||= 0.001
180
+ value - delta < other and other < value + delta
181
+ end
182
+ end
183
+ end