cairo 1.6.1-x86-mswin32 → 1.7.0-x86-mswin32

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 (410) hide show
  1. data/ChangeLog +285 -0
  2. data/NEWS +33 -0
  3. data/README +15 -4
  4. data/Rakefile +3 -0
  5. data/cairo/bin/libcairo-2.dll +0 -0
  6. data/cairo/bin/libpng12-0.dll +0 -0
  7. data/cairo/include/{libpng13/png.h → png.h} +285 -135
  8. data/cairo/include/{libpng13/pngconf.h → pngconf.h} +116 -72
  9. data/cairo/lib/cairo.lib +0 -0
  10. data/cairo/lib/libcairo.dll.a +0 -0
  11. data/cairo/lib/libpng.def +361 -371
  12. data/cairo/lib/libpng.lib +0 -0
  13. data/cairo/lib/libpng12.dll.a +0 -0
  14. data/cairo/lib/pkgconfig/cairo-pdf.pc +1 -1
  15. data/cairo/lib/pkgconfig/cairo-png.pc +2 -2
  16. data/cairo/lib/pkgconfig/cairo-ps.pc +1 -1
  17. data/cairo/lib/pkgconfig/cairo-svg.pc +1 -1
  18. data/cairo/lib/pkgconfig/cairo-win32-font.pc +1 -1
  19. data/cairo/lib/pkgconfig/cairo-win32.pc +1 -1
  20. data/cairo/lib/pkgconfig/cairo.pc +2 -2
  21. data/cairo/lib/pkgconfig/libpng.pc +10 -14
  22. data/cairo/lib/pkgconfig/libpng12.pc +10 -0
  23. data/cairo/make/{cairo-1.6.4-1.sh → cairo-1.6.4-2.sh} +3 -3
  24. data/cairo/make/libpng-1.2.29.sh +35 -0
  25. data/cairo/manifest/cairo-1.6.4-2.mft +6 -0
  26. data/cairo/manifest/{cairo-dev-1.6.4-1.mft → cairo-dev-1.6.4-2.mft} +2 -2
  27. data/cairo/manifest/libpng-1.2.29.mft +2 -0
  28. data/cairo/manifest/libpng-dev-1.2.29.mft +12 -0
  29. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING +0 -0
  30. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING-LGPL-2.1 +0 -0
  31. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING-MPL-1.1 +0 -0
  32. data/cairo/share/man/man3/libpng.3 +3680 -0
  33. data/cairo/share/man/man3/libpngpf.3 +274 -0
  34. data/cairo/share/man/man5/png.5 +74 -0
  35. data/doc/en/cairo-antialias.html +0 -3
  36. data/doc/en/cairo-clip-not-representable-error.html +0 -3
  37. data/doc/en/cairo-color-base.html +0 -3
  38. data/doc/en/cairo-color-cmyk.html +0 -3
  39. data/doc/en/cairo-color-hsv.html +0 -3
  40. data/doc/en/cairo-color-rgb.html +0 -3
  41. data/doc/en/cairo-color-x11.html +0 -3
  42. data/doc/en/cairo-color.html +0 -3
  43. data/doc/en/cairo-content.html +0 -3
  44. data/doc/en/cairo-context-blur.html +0 -3
  45. data/doc/en/cairo-context-circle.html +0 -3
  46. data/doc/en/cairo-context-color.html +0 -3
  47. data/doc/en/cairo-context-path.html +0 -3
  48. data/doc/en/cairo-context-rectangle.html +0 -3
  49. data/doc/en/cairo-context-triangle.html +0 -3
  50. data/doc/en/cairo-context.html +119 -102
  51. data/doc/en/cairo-error.html +0 -3
  52. data/doc/en/cairo-extend.html +0 -3
  53. data/doc/en/cairo-file-not-found.html +0 -3
  54. data/doc/en/cairo-fill-rule.html +0 -3
  55. data/doc/en/cairo-filter.html +0 -3
  56. data/doc/en/cairo-font-extents.html +67 -12
  57. data/doc/en/cairo-font-face.html +0 -3
  58. data/doc/en/cairo-font-options.html +26 -14
  59. data/doc/en/cairo-font-slant.html +0 -3
  60. data/doc/en/cairo-font-type-mismatch.html +47 -0
  61. data/doc/en/cairo-font-weight.html +0 -3
  62. data/doc/en/cairo-format.html +0 -3
  63. data/doc/en/cairo-glyph.html +0 -3
  64. data/doc/en/cairo-gradient-pattern.html +0 -3
  65. data/doc/en/cairo-hint-metrics.html +0 -3
  66. data/doc/en/cairo-hint-style.html +0 -3
  67. data/doc/en/cairo-image-surface.html +0 -3
  68. data/doc/en/cairo-invalid-clusters.html +47 -0
  69. data/doc/en/cairo-invalid-content-error.html +0 -3
  70. data/doc/en/cairo-invalid-dash-error.html +0 -3
  71. data/doc/en/cairo-invalid-dsc-comment-error.html +0 -3
  72. data/doc/en/cairo-invalid-format-error.html +0 -3
  73. data/doc/en/cairo-invalid-index-error.html +0 -3
  74. data/doc/en/cairo-invalid-matrix-error.html +0 -3
  75. data/doc/en/cairo-invalid-path-data-error.html +0 -3
  76. data/doc/en/cairo-invalid-pop-group-error.html +0 -3
  77. data/doc/en/cairo-invalid-restore-error.html +0 -3
  78. data/doc/en/cairo-invalid-slant.html +47 -0
  79. data/doc/en/cairo-invalid-status-error.html +0 -3
  80. data/doc/en/cairo-invalid-stride-error.html +0 -3
  81. data/doc/en/cairo-invalid-string-error.html +0 -3
  82. data/doc/en/cairo-invalid-visual-error.html +0 -3
  83. data/doc/en/cairo-invalid-weight.html +47 -0
  84. data/doc/en/cairo-lcd-filter.html +39 -0
  85. data/doc/en/cairo-line-cap.html +0 -3
  86. data/doc/en/cairo-line-join.html +0 -3
  87. data/doc/en/cairo-linear-pattern.html +0 -3
  88. data/doc/en/cairo-matrix.html +43 -41
  89. data/doc/en/cairo-negative-count.html +47 -0
  90. data/doc/en/cairo-no-current-point-error.html +0 -3
  91. data/doc/en/cairo-null-pointer-error.html +0 -3
  92. data/doc/en/cairo-operator.html +0 -3
  93. data/doc/en/cairo-paper-parse-error.html +0 -3
  94. data/doc/en/cairo-paper-unknown-paper-name.html +0 -3
  95. data/doc/en/cairo-paper-unknown-unit.html +0 -3
  96. data/doc/en/cairo-paper-unrecognized-paper-description.html +0 -3
  97. data/doc/en/cairo-paper.html +0 -3
  98. data/doc/en/cairo-path-close-path.html +0 -3
  99. data/doc/en/cairo-path-curve-to.html +0 -3
  100. data/doc/en/cairo-path-data-type.html +0 -3
  101. data/doc/en/cairo-path-data.html +0 -3
  102. data/doc/en/cairo-path-line-to.html +0 -3
  103. data/doc/en/cairo-path-move-to.html +0 -3
  104. data/doc/en/cairo-path.html +0 -3
  105. data/doc/en/cairo-pattern-type-mismatch-error.html +0 -3
  106. data/doc/en/cairo-pattern.html +0 -3
  107. data/doc/en/cairo-pdf-surface.html +0 -3
  108. data/doc/en/cairo-point.html +0 -3
  109. data/doc/en/cairo-ps-level.html +0 -3
  110. data/doc/en/cairo-ps-surface.html +0 -3
  111. data/doc/en/cairo-quartz-image-surface.html +0 -3
  112. data/doc/en/cairo-quartz-surface.html +0 -3
  113. data/doc/en/cairo-radial-pattern.html +0 -3
  114. data/doc/en/cairo-read-error.html +0 -3
  115. data/doc/en/cairo-rectangle.html +0 -3
  116. data/doc/en/cairo-scaled-font.html +13 -6
  117. data/doc/en/cairo-solid-pattern.html +0 -3
  118. data/doc/en/cairo-subpixel-order.html +0 -3
  119. data/doc/en/cairo-surface-finished-error.html +0 -3
  120. data/doc/en/cairo-surface-pattern.html +0 -3
  121. data/doc/en/cairo-surface-type-mismatch-error.html +0 -3
  122. data/doc/en/cairo-surface.html +22 -15
  123. data/doc/en/cairo-svg-surface.html +0 -3
  124. data/doc/en/cairo-svg-version.html +0 -3
  125. data/doc/en/cairo-temp-file-error.html +0 -3
  126. data/doc/en/cairo-text-cluster.html +84 -0
  127. data/doc/en/cairo-text-extents.html +78 -13
  128. data/doc/en/cairo-toy-font-face.html +67 -0
  129. data/doc/en/cairo-user-font-error.html +47 -0
  130. data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +94 -0
  131. data/doc/en/cairo-user-font-face.html +72 -0
  132. data/doc/en/cairo-user-font-immutable.html +47 -0
  133. data/doc/en/cairo-win32-printing-surface.html +0 -3
  134. data/doc/en/cairo-win32-surface.html +0 -3
  135. data/doc/en/cairo-write-error.html +0 -3
  136. data/doc/en/cairo.html +92 -80
  137. data/doc/en/index.html +327 -240
  138. data/doc/ja/cairo-clip-not-representable-error.html +1 -1
  139. data/doc/ja/cairo-color-base.html +1 -1
  140. data/doc/ja/cairo-color-cmyk.html +9 -9
  141. data/doc/ja/cairo-color-hsv.html +8 -8
  142. data/doc/ja/cairo-color-rgb.html +9 -9
  143. data/doc/ja/cairo-color.html +8 -8
  144. data/doc/ja/cairo-context-circle.html +1 -1
  145. data/doc/ja/cairo-context-color.html +1 -1
  146. data/doc/ja/cairo-context-path.html +2 -2
  147. data/doc/ja/cairo-context.html +435 -342
  148. data/doc/ja/cairo-font-extents.html +69 -15
  149. data/doc/ja/cairo-font-face.html +3 -3
  150. data/doc/ja/cairo-font-options.html +37 -12
  151. data/doc/ja/cairo-font-slant.html +1 -1
  152. data/doc/ja/cairo-font-type-mismatch.html +52 -0
  153. data/doc/ja/cairo-glyph.html +5 -5
  154. data/doc/ja/cairo-gradient-pattern.html +6 -6
  155. data/doc/ja/cairo-image-surface.html +8 -8
  156. data/doc/ja/cairo-invalid-clusters.html +55 -0
  157. data/doc/ja/cairo-invalid-restore-error.html +1 -1
  158. data/doc/ja/cairo-invalid-slant.html +57 -0
  159. data/doc/ja/cairo-invalid-weight.html +57 -0
  160. data/doc/ja/cairo-lcd-filter.html +63 -0
  161. data/doc/ja/cairo-line-join.html +1 -1
  162. data/doc/ja/cairo-linear-pattern.html +2 -2
  163. data/doc/ja/cairo-matrix.html +35 -24
  164. data/doc/ja/cairo-negative-count.html +52 -0
  165. data/doc/ja/cairo-paper-unknown-paper-name.html +2 -2
  166. data/doc/ja/cairo-paper-unknown-unit.html +2 -2
  167. data/doc/ja/cairo-paper-unrecognized-paper-description.html +1 -1
  168. data/doc/ja/cairo-paper.html +12 -12
  169. data/doc/ja/cairo-path-close-path.html +1 -1
  170. data/doc/ja/cairo-path-curve-to.html +1 -1
  171. data/doc/ja/cairo-path-data.html +8 -8
  172. data/doc/ja/cairo-path-line-to.html +1 -1
  173. data/doc/ja/cairo-path-move-to.html +1 -1
  174. data/doc/ja/cairo-path.html +21 -21
  175. data/doc/ja/cairo-pattern.html +4 -4
  176. data/doc/ja/cairo-pdf-surface.html +2 -2
  177. data/doc/ja/cairo-point.html +5 -5
  178. data/doc/ja/cairo-ps-level.html +2 -2
  179. data/doc/ja/cairo-ps-surface.html +6 -6
  180. data/doc/ja/cairo-quartz-image-surface.html +2 -2
  181. data/doc/ja/cairo-quartz-surface.html +3 -3
  182. data/doc/ja/cairo-radial-pattern.html +2 -2
  183. data/doc/ja/cairo-rectangle.html +5 -5
  184. data/doc/ja/cairo-scaled-font.html +53 -17
  185. data/doc/ja/cairo-solid-pattern.html +3 -3
  186. data/doc/ja/cairo-surface-pattern.html +2 -2
  187. data/doc/ja/cairo-surface.html +58 -36
  188. data/doc/ja/cairo-svg-surface.html +4 -4
  189. data/doc/ja/cairo-svg-version.html +2 -2
  190. data/doc/ja/cairo-text-cluster.html +102 -0
  191. data/doc/ja/cairo-text-extents.html +84 -22
  192. data/doc/ja/cairo-toy-font-face.html +107 -0
  193. data/doc/ja/cairo-user-font-error.html +55 -0
  194. data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +155 -0
  195. data/doc/ja/cairo-user-font-face.html +268 -0
  196. data/doc/ja/cairo-user-font-immutable.html +54 -0
  197. data/doc/ja/cairo-win32-printing-surface.html +3 -3
  198. data/doc/ja/cairo-win32-surface.html +4 -4
  199. data/doc/ja/cairo.html +110 -77
  200. data/doc/ja/index.html +292 -205
  201. data/extconf.rb +3 -1
  202. data/misc/update-colors.rb +0 -0
  203. data/pkg-config.rb +54 -28
  204. data/samples/agg/aa_test.rb +0 -0
  205. data/samples/blur.rb +0 -0
  206. data/samples/png.rb +0 -0
  207. data/samples/scalable.rb +0 -0
  208. data/samples/text-on-path.rb +0 -0
  209. data/samples/text2.rb +0 -0
  210. data/src/cairo.def +8 -0
  211. data/src/cairo.so +0 -0
  212. data/src/lib/cairo.rb +12 -7
  213. data/src/lib/cairo/constants.rb +1 -0
  214. data/src/libruby-cairo.a +0 -0
  215. data/src/rb_cairo.c +25 -3
  216. data/src/rb_cairo.h +29 -18
  217. data/src/rb_cairo_constants.c +39 -10
  218. data/src/rb_cairo_context.c +156 -15
  219. data/src/rb_cairo_exception.c +143 -3
  220. data/src/rb_cairo_font_extents.c +81 -6
  221. data/src/rb_cairo_font_face.c +646 -4
  222. data/src/rb_cairo_font_options.c +24 -2
  223. data/src/rb_cairo_glyph.c +5 -3
  224. data/src/rb_cairo_matrix.c +17 -1
  225. data/src/rb_cairo_pattern.c +4 -4
  226. data/src/rb_cairo_private.c +169 -5
  227. data/src/rb_cairo_private.h +45 -3
  228. data/src/rb_cairo_scaled_font.c +61 -3
  229. data/src/rb_cairo_surface.c +174 -59
  230. data/src/rb_cairo_text_cluster.c +151 -0
  231. data/src/rb_cairo_text_extents.c +85 -2
  232. data/test-unit/Rakefile +30 -0
  233. data/test-unit/bin/testrb +5 -0
  234. data/test-unit/lib/test/unit.rb +280 -0
  235. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  236. data/test-unit/lib/test/unit/assertions.rb +722 -0
  237. data/test-unit/lib/test/unit/attribute.rb +125 -0
  238. data/test-unit/lib/test/unit/autorunner.rb +254 -0
  239. data/test-unit/lib/test/unit/collector.rb +43 -0
  240. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  241. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  242. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  243. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  244. data/test-unit/lib/test/unit/color.rb +61 -0
  245. data/test-unit/lib/test/unit/diff.rb +524 -0
  246. data/test-unit/lib/test/unit/error.rb +124 -0
  247. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  248. data/test-unit/lib/test/unit/failure.rb +110 -0
  249. data/test-unit/lib/test/unit/fixture.rb +185 -0
  250. data/test-unit/lib/test/unit/notification.rb +125 -0
  251. data/test-unit/lib/test/unit/omission.rb +143 -0
  252. data/test-unit/lib/test/unit/pending.rb +146 -0
  253. data/test-unit/lib/test/unit/priority.rb +146 -0
  254. data/test-unit/lib/test/unit/runner/console.rb +46 -0
  255. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  256. data/test-unit/lib/test/unit/testcase.rb +281 -0
  257. data/test-unit/lib/test/unit/testresult.rb +89 -0
  258. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  259. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  260. data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
  261. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  262. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  263. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  264. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  265. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  266. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  267. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  268. data/test-unit/lib/test/unit/version.rb +7 -0
  269. data/test-unit/sample/adder.rb +13 -0
  270. data/test-unit/sample/subtracter.rb +12 -0
  271. data/test-unit/sample/tc_adder.rb +18 -0
  272. data/test-unit/sample/tc_subtracter.rb +18 -0
  273. data/test-unit/sample/ts_examples.rb +7 -0
  274. data/test-unit/test/collector/test_descendant.rb +135 -0
  275. data/test-unit/test/collector/test_dir.rb +406 -0
  276. data/test-unit/test/collector/test_load.rb +333 -0
  277. data/test-unit/test/collector/test_objectspace.rb +98 -0
  278. data/test-unit/test/run-test.rb +13 -0
  279. data/test-unit/test/test_assertions.rb +693 -0
  280. data/test-unit/test/test_attribute.rb +86 -0
  281. data/test-unit/test/test_color.rb +37 -0
  282. data/test-unit/test/test_diff.rb +477 -0
  283. data/test-unit/test/test_emacs_runner.rb +60 -0
  284. data/test-unit/test/test_error.rb +26 -0
  285. data/test-unit/test/test_failure.rb +33 -0
  286. data/test-unit/test/test_fixture.rb +252 -0
  287. data/test-unit/test/test_notification.rb +33 -0
  288. data/test-unit/test/test_omission.rb +81 -0
  289. data/test-unit/test/test_pending.rb +70 -0
  290. data/test-unit/test/test_priority.rb +89 -0
  291. data/test-unit/test/test_testcase.rb +430 -0
  292. data/test-unit/test/test_testresult.rb +113 -0
  293. data/test-unit/test/test_testsuite.rb +129 -0
  294. data/test-unit/test/testunit_test_util.rb +14 -0
  295. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  296. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  297. data/test-unit/test/util/test_observable.rb +102 -0
  298. data/test-unit/test/util/test_procwrapper.rb +36 -0
  299. data/test/cairo-test-utils.rb +18 -0
  300. data/test/run-test.rb +14 -1
  301. data/test/test_constants.rb +19 -0
  302. data/test/test_context.rb +117 -0
  303. data/test/test_exception.rb +27 -0
  304. data/test/test_font_extents.rb +36 -0
  305. data/test/test_font_face.rb +244 -0
  306. data/test/test_font_options.rb +32 -0
  307. data/test/test_pkg_config.rb +3 -2
  308. data/test/test_scaled_font.rb +34 -0
  309. data/test/test_surface.rb +41 -0
  310. data/test/test_text_cluster.rb +32 -0
  311. data/test/test_text_extents.rb +40 -0
  312. data/test/test_text_to_glyphs_data.rb +47 -0
  313. metadata +129 -109
  314. data/cairo/bin/libpng13.dll +0 -0
  315. data/cairo/lib/libpng13.dll.a +0 -0
  316. data/cairo/lib/pkgconfig/libpng13.pc +0 -14
  317. data/cairo/manifest/cairo-1.6.4-1.mft +0 -6
  318. data/cairo/manifest/libpng-dev-1.2.8.mft +0 -7
  319. data/doc/en/cairo-antialias.rd +0 -16
  320. data/doc/en/cairo-clip-not-representable-error.rd +0 -17
  321. data/doc/en/cairo-color-base.rd +0 -38
  322. data/doc/en/cairo-color-cmyk.rd +0 -107
  323. data/doc/en/cairo-color-hsv.rd +0 -91
  324. data/doc/en/cairo-color-rgb.rd +0 -95
  325. data/doc/en/cairo-color-x11.rd +0 -151
  326. data/doc/en/cairo-color.rd +0 -213
  327. data/doc/en/cairo-content.rd +0 -15
  328. data/doc/en/cairo-context-blur.rd +0 -15
  329. data/doc/en/cairo-context-circle.rd +0 -15
  330. data/doc/en/cairo-context-color.rd +0 -15
  331. data/doc/en/cairo-context-path.rd +0 -19
  332. data/doc/en/cairo-context-rectangle.rd +0 -15
  333. data/doc/en/cairo-context-triangle.rd +0 -15
  334. data/doc/en/cairo-context.rd +0 -491
  335. data/doc/en/cairo-error.rd +0 -16
  336. data/doc/en/cairo-extend.rd +0 -16
  337. data/doc/en/cairo-file-not-found.rd +0 -17
  338. data/doc/en/cairo-fill-rule.rd +0 -14
  339. data/doc/en/cairo-filter.rd +0 -18
  340. data/doc/en/cairo-font-extents.rd +0 -40
  341. data/doc/en/cairo-font-face.rd +0 -14
  342. data/doc/en/cairo-font-options.rd +0 -94
  343. data/doc/en/cairo-font-slant.rd +0 -15
  344. data/doc/en/cairo-font-weight.rd +0 -14
  345. data/doc/en/cairo-format.rd +0 -22
  346. data/doc/en/cairo-glyph.rd +0 -62
  347. data/doc/en/cairo-gradient-pattern.rd +0 -41
  348. data/doc/en/cairo-hint-metrics.rd +0 -15
  349. data/doc/en/cairo-hint-style.rd +0 -17
  350. data/doc/en/cairo-image-surface.rd +0 -47
  351. data/doc/en/cairo-invalid-content-error.rd +0 -17
  352. data/doc/en/cairo-invalid-dash-error.rd +0 -17
  353. data/doc/en/cairo-invalid-dsc-comment-error.rd +0 -17
  354. data/doc/en/cairo-invalid-format-error.rd +0 -17
  355. data/doc/en/cairo-invalid-index-error.rd +0 -17
  356. data/doc/en/cairo-invalid-matrix-error.rd +0 -17
  357. data/doc/en/cairo-invalid-path-data-error.rd +0 -17
  358. data/doc/en/cairo-invalid-pop-group-error.rd +0 -17
  359. data/doc/en/cairo-invalid-restore-error.rd +0 -17
  360. data/doc/en/cairo-invalid-status-error.rd +0 -17
  361. data/doc/en/cairo-invalid-stride-error.rd +0 -17
  362. data/doc/en/cairo-invalid-string-error.rd +0 -17
  363. data/doc/en/cairo-invalid-visual-error.rd +0 -17
  364. data/doc/en/cairo-line-cap.rd +0 -15
  365. data/doc/en/cairo-line-join.rd +0 -15
  366. data/doc/en/cairo-linear-pattern.rd +0 -28
  367. data/doc/en/cairo-matrix.rd +0 -186
  368. data/doc/en/cairo-no-current-point-error.rd +0 -17
  369. data/doc/en/cairo-null-pointer-error.rd +0 -17
  370. data/doc/en/cairo-operator.rd +0 -26
  371. data/doc/en/cairo-paper-parse-error.rd +0 -17
  372. data/doc/en/cairo-paper-unknown-paper-name.rd +0 -30
  373. data/doc/en/cairo-paper-unknown-unit.rd +0 -30
  374. data/doc/en/cairo-paper-unrecognized-paper-description.rd +0 -30
  375. data/doc/en/cairo-paper.rd +0 -141
  376. data/doc/en/cairo-path-close-path.rd +0 -21
  377. data/doc/en/cairo-path-curve-to.rd +0 -21
  378. data/doc/en/cairo-path-data-type.rd +0 -16
  379. data/doc/en/cairo-path-data.rd +0 -62
  380. data/doc/en/cairo-path-line-to.rd +0 -21
  381. data/doc/en/cairo-path-move-to.rd +0 -21
  382. data/doc/en/cairo-path.rd +0 -109
  383. data/doc/en/cairo-pattern-type-mismatch-error.rd +0 -17
  384. data/doc/en/cairo-pattern.rd +0 -62
  385. data/doc/en/cairo-pdf-surface.rd +0 -27
  386. data/doc/en/cairo-point.rd +0 -42
  387. data/doc/en/cairo-ps-level.rd +0 -24
  388. data/doc/en/cairo-ps-surface.rd +0 -55
  389. data/doc/en/cairo-quartz-image-surface.rd +0 -27
  390. data/doc/en/cairo-quartz-surface.rd +0 -27
  391. data/doc/en/cairo-radial-pattern.rd +0 -28
  392. data/doc/en/cairo-read-error.rd +0 -17
  393. data/doc/en/cairo-rectangle.rd +0 -54
  394. data/doc/en/cairo-scaled-font.rd +0 -50
  395. data/doc/en/cairo-solid-pattern.rd +0 -31
  396. data/doc/en/cairo-subpixel-order.rd +0 -17
  397. data/doc/en/cairo-surface-finished-error.rd +0 -17
  398. data/doc/en/cairo-surface-pattern.rd +0 -27
  399. data/doc/en/cairo-surface-type-mismatch-error.rd +0 -17
  400. data/doc/en/cairo-surface.rd +0 -72
  401. data/doc/en/cairo-svg-surface.rd +0 -44
  402. data/doc/en/cairo-svg-version.rd +0 -24
  403. data/doc/en/cairo-temp-file-error.rd +0 -17
  404. data/doc/en/cairo-text-extents.rd +0 -44
  405. data/doc/en/cairo-win32-printing-surface.rd +0 -27
  406. data/doc/en/cairo-win32-surface.rd +0 -31
  407. data/doc/en/cairo-write-error.rd +0 -17
  408. data/doc/en/cairo.rd +0 -95
  409. data/doc/en/index.rd +0 -1051
  410. data/samples/agg/aa_demo.rb +0 -47
@@ -3,7 +3,7 @@
3
3
  * Ruby Cairo Binding
4
4
  *
5
5
  * $Author: kou $
6
- * $Date: 2007/05/03 02:47:39 $
6
+ * $Date: 2008-08-17 05:12:37 $
7
7
  *
8
8
  * Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
9
9
  * Copyright 2004-2005 MenTaLguY <mental@rydia.com>
@@ -46,36 +46,94 @@ rb_cairo_font_extents_to_ruby_object (cairo_font_extents_t *extents)
46
46
  }
47
47
  }
48
48
 
49
- static VALUE
49
+ static VALUE
50
+ cr_font_extents_allocate (VALUE klass)
51
+ {
52
+ return Data_Wrap_Struct (klass, NULL, -1, NULL);
53
+ }
54
+
55
+ static VALUE
56
+ cr_font_extents_initialize (VALUE self)
57
+ {
58
+ cairo_font_extents_t *extents;
59
+
60
+ extents = ALLOC (cairo_font_extents_t);
61
+ extents->ascent = 1.0;
62
+ extents->descent = 0.0;
63
+ extents->height = 1.0;
64
+ extents->max_x_advance = 1.0;
65
+ extents->max_y_advance = 0.0;
66
+
67
+ DATA_PTR (self) = extents;
68
+
69
+ return Qnil;
70
+ }
71
+
72
+ static VALUE
50
73
  cr_font_extents_ascent (VALUE self)
51
74
  {
52
75
  return rb_float_new (_SELF(self)->ascent);
53
76
  }
54
77
 
55
- static VALUE
78
+ static VALUE
79
+ cr_font_extents_set_ascent (VALUE self, VALUE ascent)
80
+ {
81
+ _SELF(self)->ascent = NUM2DBL (ascent);
82
+ return self;
83
+ }
84
+
85
+ static VALUE
56
86
  cr_font_extents_descent (VALUE self)
57
87
  {
58
88
  return rb_float_new (_SELF(self)->descent);
59
89
  }
60
90
 
61
- static VALUE
91
+ static VALUE
92
+ cr_font_extents_set_descent (VALUE self, VALUE descent)
93
+ {
94
+ _SELF(self)->descent = NUM2DBL (descent);
95
+ return self;
96
+ }
97
+
98
+ static VALUE
62
99
  cr_font_extents_height (VALUE self)
63
100
  {
64
101
  return rb_float_new (_SELF(self)->height);
65
102
  }
66
103
 
67
- static VALUE
104
+ static VALUE
105
+ cr_font_extents_set_height (VALUE self, VALUE height)
106
+ {
107
+ _SELF(self)->height = NUM2DBL (height);
108
+ return self;
109
+ }
110
+
111
+ static VALUE
68
112
  cr_font_extents_max_x_advance (VALUE self)
69
113
  {
70
114
  return rb_float_new (_SELF(self)->max_x_advance);
71
115
  }
72
116
 
73
- static VALUE
117
+ static VALUE
118
+ cr_font_extents_set_max_x_advance (VALUE self, VALUE max_x_advance)
119
+ {
120
+ _SELF(self)->max_x_advance = NUM2DBL (max_x_advance);
121
+ return self;
122
+ }
123
+
124
+ static VALUE
74
125
  cr_font_extents_max_y_advance (VALUE self)
75
126
  {
76
127
  return rb_float_new (_SELF(self)->max_y_advance);
77
128
  }
78
129
 
130
+ static VALUE
131
+ cr_font_extents_set_max_y_advance (VALUE self, VALUE max_y_advance)
132
+ {
133
+ _SELF(self)->max_y_advance = NUM2DBL (max_y_advance);
134
+ return self;
135
+ }
136
+
79
137
  static VALUE
80
138
  cr_font_extents_to_s (VALUE self)
81
139
  {
@@ -110,16 +168,33 @@ Init_cairo_font_extents (void)
110
168
  rb_cCairo_FontExtents =
111
169
  rb_define_class_under (rb_mCairo, "FontExtents", rb_cObject);
112
170
 
171
+ rb_define_alloc_func (rb_cCairo_FontExtents, cr_font_extents_allocate);
172
+
173
+ rb_define_method (rb_cCairo_FontExtents, "initialize",
174
+ cr_font_extents_initialize, 0);
175
+
113
176
  rb_define_method (rb_cCairo_FontExtents, "ascent",
114
177
  cr_font_extents_ascent, 0);
178
+ rb_define_method (rb_cCairo_FontExtents, "set_ascent",
179
+ cr_font_extents_set_ascent, 1);
115
180
  rb_define_method (rb_cCairo_FontExtents, "descent",
116
181
  cr_font_extents_descent, 0);
182
+ rb_define_method (rb_cCairo_FontExtents, "set_descent",
183
+ cr_font_extents_set_descent, 1);
117
184
  rb_define_method (rb_cCairo_FontExtents, "height",
118
185
  cr_font_extents_height, 0);
186
+ rb_define_method (rb_cCairo_FontExtents, "set_height",
187
+ cr_font_extents_set_height, 1);
119
188
  rb_define_method (rb_cCairo_FontExtents, "max_x_advance",
120
189
  cr_font_extents_max_x_advance, 0);
190
+ rb_define_method (rb_cCairo_FontExtents, "set_max_x_advance",
191
+ cr_font_extents_set_max_x_advance, 1);
121
192
  rb_define_method (rb_cCairo_FontExtents, "max_y_advance",
122
193
  cr_font_extents_max_y_advance, 0);
194
+ rb_define_method (rb_cCairo_FontExtents, "set_max_y_advance",
195
+ cr_font_extents_set_max_y_advance, 1);
123
196
 
124
197
  rb_define_method (rb_cCairo_FontExtents, "to_s", cr_font_extents_to_s, 0);
198
+
199
+ RB_CAIRO_DEF_SETTERS (rb_cCairo_FontExtents);
125
200
  }
@@ -3,7 +3,7 @@
3
3
  * Ruby Cairo Binding
4
4
  *
5
5
  * $Author: kou $
6
- * $Date: 2007/05/20 09:25:37 $
6
+ * $Date: 2008-08-17 06:11:51 $
7
7
  *
8
8
  * Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
9
9
  * Copyright 2004-2005 MenTaLguY <mental@rydia.com>
@@ -17,29 +17,87 @@
17
17
  #include "rb_cairo_private.h"
18
18
 
19
19
  VALUE rb_cCairo_FontFace;
20
+ VALUE rb_cCairo_ToyFontFace = Qnil;
21
+ VALUE rb_cCairo_UserFontFace = Qnil;
22
+ VALUE rb_cCairo_UserFontFace_TextToGlyphsData = Qnil;
23
+
24
+ #if CAIRO_CHECK_VERSION(1, 7, 2)
25
+ static cairo_user_data_key_t ruby_object_key;
26
+ static ID cr_id_call;
27
+ static ID cr_id_new;
28
+
29
+ static ID cr_id_init;
30
+ static ID cr_id_render_glyph;
31
+ static ID cr_id_text_to_glyphs;
32
+ static ID cr_id_unicode_to_glyph;
33
+
34
+ static ID cr_id_at_glyphs;
35
+ static ID cr_id_at_clusters;
36
+ static ID cr_id_at_backward;
37
+ static ID cr_id_at_need_glyphs;
38
+ static ID cr_id_at_need_clusters;
39
+ static ID cr_id_at_need_backward;
40
+ #endif
20
41
 
21
42
  #define _SELF (RVAL2CRFONTFACE(self))
22
43
 
44
+ static inline void
45
+ cr_font_face_check_status (cairo_font_face_t *face)
46
+ {
47
+ rb_cairo_check_status (cairo_font_face_status (face));
48
+ }
49
+
23
50
  cairo_font_face_t *
24
51
  rb_cairo_font_face_from_ruby_object (VALUE obj)
25
52
  {
26
53
  cairo_font_face_t *face;
54
+
27
55
  if (!rb_cairo__is_kind_of (obj, rb_cCairo_FontFace))
28
56
  {
29
- rb_raise (rb_eTypeError, "not a cairo font face");
57
+ rb_raise (rb_eTypeError,
58
+ "not a cairo font face: %s",
59
+ rb_cairo__inspect (obj));
30
60
  }
31
61
  Data_Get_Struct (obj, cairo_font_face_t, face);
62
+ if (!face)
63
+ rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
64
+ cr_font_face_check_status (face);
32
65
  return face;
33
66
  }
34
67
 
68
+ static void
69
+ cr_font_face_free (void *ptr)
70
+ {
71
+ if (ptr)
72
+ {
73
+ cairo_font_face_t *face = ptr;
74
+ cairo_font_face_destroy (face);
75
+ }
76
+ }
77
+
35
78
  VALUE
36
79
  rb_cairo_font_face_to_ruby_object (cairo_font_face_t *face)
37
80
  {
38
81
  if (face)
39
82
  {
83
+ VALUE klass;
84
+
85
+ switch (cairo_font_face_get_type (face))
86
+ {
87
+ #if CAIRO_CHECK_VERSION(1, 7, 2)
88
+ case CAIRO_FONT_TYPE_TOY:
89
+ klass = rb_cCairo_ToyFontFace;
90
+ break;
91
+ case CAIRO_FONT_TYPE_USER:
92
+ klass = rb_cCairo_UserFontFace;
93
+ break;
94
+ #endif
95
+ default:
96
+ klass = rb_cCairo_FontFace;
97
+ break;
98
+ }
40
99
  cairo_font_face_reference (face);
41
- return Data_Wrap_Struct (rb_cCairo_FontFace, NULL,
42
- cairo_font_face_destroy, face);
100
+ return Data_Wrap_Struct (klass, NULL, cr_font_face_free, face);
43
101
  }
44
102
  else
45
103
  {
@@ -47,10 +105,594 @@ rb_cairo_font_face_to_ruby_object (cairo_font_face_t *face)
47
105
  }
48
106
  }
49
107
 
108
+ static VALUE
109
+ cr_font_face_allocate (VALUE klass)
110
+ {
111
+ return Data_Wrap_Struct (klass, NULL, cr_font_face_free, NULL);
112
+ }
113
+
114
+ #if CAIRO_CHECK_VERSION(1, 7, 2)
115
+ static VALUE
116
+ cr_toy_font_face_initialize (int argc, VALUE *argv, VALUE self)
117
+ {
118
+ cairo_font_face_t *face;
119
+ VALUE rb_family, rb_slant, rb_weight;
120
+ const char *family;
121
+ cairo_font_slant_t slant;
122
+ cairo_font_weight_t weight;
123
+
124
+ rb_scan_args (argc, argv, "03", &rb_family, &rb_slant, &rb_weight);
125
+
126
+ if (NIL_P (rb_family))
127
+ {
128
+ family = "";
129
+ }
130
+ else if (rb_cairo__is_kind_of (rb_family, rb_cString))
131
+ {
132
+ family = RSTRING_PTR (rb_family);
133
+ }
134
+ else if (rb_cairo__is_kind_of (rb_family, rb_cSymbol))
135
+ {
136
+ family = rb_id2name (SYM2ID (rb_family));
137
+ }
138
+ else
139
+ {
140
+ rb_raise (rb_eArgError,
141
+ "family name should be nil, String or Symbol: %s",
142
+ rb_cairo__inspect (rb_family));
143
+ }
144
+
145
+ if (NIL_P (rb_slant))
146
+ slant = CAIRO_FONT_SLANT_NORMAL;
147
+ else
148
+ slant = RVAL2CRFONTSLANT (rb_slant);
149
+
150
+ if (NIL_P (rb_weight))
151
+ weight = CAIRO_FONT_WEIGHT_NORMAL;
152
+ else
153
+ weight = RVAL2CRFONTWEIGHT (rb_weight);
154
+
155
+ face = cairo_toy_font_face_create (family, slant, weight);
156
+ cr_font_face_check_status (face);
157
+ DATA_PTR (self) = face;
158
+
159
+ return Qnil;
160
+ }
161
+
162
+ static VALUE
163
+ cr_toy_font_face_get_family (VALUE self)
164
+ {
165
+ return CSTR2RVAL (cairo_toy_font_face_get_family (_SELF));
166
+ }
167
+
168
+ static VALUE
169
+ cr_toy_font_face_get_slant (VALUE self)
170
+ {
171
+ return INT2NUM (cairo_toy_font_face_get_slant (_SELF));
172
+ }
173
+
174
+ static VALUE
175
+ cr_toy_font_face_get_weight (VALUE self)
176
+ {
177
+ return INT2NUM (cairo_toy_font_face_get_weight (_SELF));
178
+ }
179
+
180
+ typedef struct cr_user_font_face_invoke_data
181
+ {
182
+ VALUE receiver;
183
+ ID method;
184
+ int argc;
185
+ VALUE *argv;
186
+ cairo_status_t *status;
187
+ VALUE result;
188
+ cr_callback_func_t after_hook;
189
+ void *after_hook_data;
190
+ } cr_user_font_face_invoke_data_t;
191
+
192
+ static VALUE
193
+ cr_user_font_face_invoke_body (VALUE user_data)
194
+ {
195
+ cr_user_font_face_invoke_data_t *data;
196
+ VALUE result;
197
+
198
+ data = (cr_user_font_face_invoke_data_t *)user_data;
199
+ result = rb_funcall2 (data->receiver, data->method, data->argc, data->argv);
200
+ data->result = result;
201
+ if (data->after_hook)
202
+ result = data->after_hook(user_data);
203
+ return result;
204
+ }
205
+
206
+ static VALUE
207
+ cr_user_font_face_invoke_rescue (VALUE user_data, VALUE exception)
208
+ {
209
+ cr_user_font_face_invoke_data_t *data;
210
+
211
+ data = (cr_user_font_face_invoke_data_t *)user_data;
212
+ *(data->status) = rb_cairo__exception_to_status (exception);
213
+
214
+ if (*(data->status) == -1)
215
+ rb_exc_raise (exception);
216
+
217
+ return Qnil;
218
+ }
219
+
220
+ static VALUE
221
+ cr_user_font_face_invoke_func (VALUE user_data)
222
+ {
223
+ return rb_rescue2 (cr_user_font_face_invoke_body, user_data,
224
+ cr_user_font_face_invoke_rescue, user_data, rb_eException,
225
+ (VALUE)0);
226
+ }
227
+
228
+ static VALUE
229
+ cr_user_font_face_init_func_after (VALUE user_data)
230
+ {
231
+ cr_user_font_face_invoke_data_t *data;
232
+ cairo_font_extents_t *extents;
233
+
234
+ data = (cr_user_font_face_invoke_data_t *)user_data;
235
+ extents = data->after_hook_data;
236
+
237
+ *extents = *(RVAL2CRFONTEXTENTS (data->argv[2]));
238
+
239
+ return data->result;
240
+ }
241
+
242
+ static cairo_status_t
243
+ cr_user_font_face_init_func (cairo_scaled_font_t *scaled_font,
244
+ cairo_t *cr, cairo_font_extents_t *extents)
245
+ {
246
+ cairo_status_t status = CAIRO_STATUS_SUCCESS;
247
+ cairo_font_face_t *face;
248
+ VALUE self;
249
+ VALUE receiver = Qnil;
250
+ ID id_method_name = cr_id_call;
251
+
252
+ face = cairo_scaled_font_get_font_face (scaled_font);
253
+ self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
254
+ receiver = rb_ivar_get (self, cr_id_init);
255
+ if (NIL_P (receiver) && rb_obj_respond_to (self, cr_id_init, Qtrue))
256
+ {
257
+ receiver = self;
258
+ id_method_name = cr_id_init;
259
+ }
260
+
261
+ if (!NIL_P (receiver))
262
+ {
263
+ cr_user_font_face_invoke_data_t data;
264
+ VALUE argv[3];
265
+
266
+ argv[0] = CRSCALEDFONT2RVAL (scaled_font);
267
+ argv[1] = CRCONTEXT2RVAL (cr);
268
+ argv[2] = CRFONTEXTENTS2RVAL (extents);
269
+
270
+ data.receiver = receiver;
271
+ data.method = id_method_name;
272
+ data.argc = 3;
273
+ data.argv = argv;
274
+ data.status = &status;
275
+ data.after_hook = cr_user_font_face_init_func_after;
276
+ data.after_hook_data = extents;
277
+
278
+ rb_cairo__invoke_callback (cr_user_font_face_invoke_func, (VALUE)&data);
279
+ }
280
+
281
+ return status;
282
+ }
283
+
284
+ static VALUE
285
+ cr_user_font_face_render_glyph_func_after (VALUE user_data)
286
+ {
287
+ cr_user_font_face_invoke_data_t *data;
288
+ cairo_text_extents_t *extents;
289
+
290
+ data = (cr_user_font_face_invoke_data_t *)user_data;
291
+ extents = data->after_hook_data;
292
+
293
+ *extents = *(RVAL2CRTEXTEXTENTS (data->argv[3]));
294
+
295
+ return data->result;
296
+ }
297
+
298
+ static cairo_status_t
299
+ cr_user_font_face_render_glyph_func (cairo_scaled_font_t *scaled_font,
300
+ unsigned long glyph,
301
+ cairo_t *cr,
302
+ cairo_text_extents_t *extents)
303
+ {
304
+ cairo_status_t status = CAIRO_STATUS_SUCCESS;
305
+ cairo_font_face_t *face;
306
+ VALUE self;
307
+ VALUE receiver = Qnil;
308
+ ID id_method_name = cr_id_call;
309
+
310
+ face = cairo_scaled_font_get_font_face (scaled_font);
311
+ self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
312
+ receiver = rb_ivar_get (self, cr_id_render_glyph);
313
+ if (NIL_P (receiver) && rb_obj_respond_to (self, cr_id_render_glyph, Qtrue))
314
+ {
315
+ receiver = self;
316
+ id_method_name = cr_id_render_glyph;
317
+ }
318
+
319
+ if (!NIL_P (receiver))
320
+ {
321
+ cr_user_font_face_invoke_data_t data;
322
+ VALUE argv[4];
323
+
324
+ argv[0] = CRSCALEDFONT2RVAL (scaled_font);
325
+ argv[1] = ULONG2NUM (glyph);
326
+ argv[2] = CRCONTEXT2RVAL (cr);
327
+ argv[3] = CRTEXTEXTENTS2RVAL (extents);
328
+
329
+ data.receiver = receiver;
330
+ data.method = id_method_name;
331
+ data.argc = 4;
332
+ data.argv = argv;
333
+ data.status = &status;
334
+ data.after_hook = cr_user_font_face_render_glyph_func_after;
335
+ data.after_hook_data = extents;
336
+
337
+ rb_cairo__invoke_callback (cr_user_font_face_invoke_func, (VALUE)&data);
338
+ }
339
+
340
+ return status;
341
+ }
342
+
343
+ typedef struct _cr_text_to_glyphs_after_hook_data {
344
+ VALUE text_to_glyphs_data;
345
+ cairo_glyph_t **glyphs;
346
+ int *num_glyphs;
347
+ cairo_text_cluster_t **clusters;
348
+ int *num_clusters;
349
+ cairo_bool_t *backward;
350
+ } cr_text_to_glyphs_after_hook_data_t;
351
+
352
+ static VALUE
353
+ cr_user_font_face_text_to_glyphs_func_after (VALUE user_data)
354
+ {
355
+ cr_user_font_face_invoke_data_t *data;
356
+ cr_text_to_glyphs_after_hook_data_t *after_hook_data;
357
+ VALUE text_to_glyphs_data;
358
+
359
+
360
+ data = (cr_user_font_face_invoke_data_t *)user_data;
361
+ after_hook_data = data->after_hook_data;
362
+ text_to_glyphs_data = after_hook_data->text_to_glyphs_data;
363
+
364
+ if (after_hook_data->glyphs)
365
+ {
366
+ VALUE rb_glyphs;
367
+
368
+ rb_glyphs = rb_ivar_get (text_to_glyphs_data, cr_id_at_glyphs);
369
+ rb_cairo__glyphs_from_ruby_object (rb_glyphs,
370
+ after_hook_data->glyphs,
371
+ after_hook_data->num_glyphs);
372
+ }
373
+
374
+ if (after_hook_data->clusters)
375
+ {
376
+ VALUE rb_clusters;
377
+
378
+ rb_clusters = rb_ivar_get (text_to_glyphs_data, cr_id_at_clusters);
379
+ rb_cairo__text_clusters_from_ruby_object (rb_clusters,
380
+ after_hook_data->clusters,
381
+ after_hook_data->num_clusters);
382
+ }
383
+
384
+ if (after_hook_data->backward)
385
+ {
386
+ VALUE rb_backward;
387
+
388
+ rb_backward = rb_ivar_get (text_to_glyphs_data, cr_id_at_backward);
389
+ *(after_hook_data->backward) = RVAL2CBOOL (rb_backward);
390
+ }
391
+
392
+ return data->result;
393
+ }
394
+
395
+ static cairo_status_t
396
+ cr_user_font_face_text_to_glyphs_func (cairo_scaled_font_t *scaled_font,
397
+ const char *utf8, int utf8_len,
398
+ cairo_glyph_t **glyphs, int *num_glyphs,
399
+ cairo_text_cluster_t **clusters,
400
+ int *num_clusters,
401
+ cairo_bool_t *backward)
402
+ {
403
+ cairo_status_t status = CAIRO_INT_STATUS_UNSUPPORTED;
404
+ cairo_font_face_t *face;
405
+ VALUE self;
406
+ VALUE receiver = Qnil;
407
+ ID id_method_name = cr_id_call;
408
+
409
+ face = cairo_scaled_font_get_font_face (scaled_font);
410
+ self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
411
+ receiver = rb_ivar_get (self, cr_id_text_to_glyphs);
412
+ if (NIL_P (receiver) && rb_obj_respond_to (self, cr_id_text_to_glyphs, Qtrue))
413
+ {
414
+ receiver = self;
415
+ id_method_name = cr_id_text_to_glyphs;
416
+ }
417
+
418
+ if (NIL_P (receiver))
419
+ {
420
+ if (num_glyphs)
421
+ *num_glyphs = -1;
422
+ }
423
+ else
424
+ {
425
+ cr_user_font_face_invoke_data_t data;
426
+ cr_text_to_glyphs_after_hook_data_t after_hook_data;
427
+ VALUE text_to_glyphs_data;
428
+ VALUE argv[3];
429
+
430
+ argv[0] = CRSCALEDFONT2RVAL (scaled_font);
431
+ argv[1] = rb_str_new (utf8, utf8_len);
432
+ text_to_glyphs_data = rb_funcall (rb_cCairo_UserFontFace_TextToGlyphsData,
433
+ cr_id_new,
434
+ 3,
435
+ CBOOL2RVAL (glyphs != NULL),
436
+ CBOOL2RVAL (clusters != NULL),
437
+ CBOOL2RVAL (backward != NULL));
438
+ argv[2] = text_to_glyphs_data;
439
+
440
+ data.receiver = receiver;
441
+ data.method = id_method_name;
442
+ data.argc = 3;
443
+ data.argv = argv;
444
+ data.status = &status;
445
+ data.after_hook = cr_user_font_face_text_to_glyphs_func_after;
446
+ data.after_hook_data = &after_hook_data;
447
+
448
+ after_hook_data.text_to_glyphs_data = text_to_glyphs_data;
449
+ after_hook_data.glyphs = glyphs;
450
+ after_hook_data.num_glyphs = num_glyphs;
451
+ after_hook_data.clusters = clusters;
452
+ after_hook_data.num_clusters = num_clusters;
453
+ after_hook_data.backward = backward;
454
+
455
+ rb_cairo__invoke_callback (cr_user_font_face_invoke_func, (VALUE)&data);
456
+ }
457
+
458
+ return status;
459
+ }
460
+
461
+ static VALUE
462
+ cr_user_font_face_unicode_to_glyph_func_after (VALUE user_data)
463
+ {
464
+ cr_user_font_face_invoke_data_t *data;
465
+ unsigned long *glyph_index;
466
+
467
+ data = (cr_user_font_face_invoke_data_t *)user_data;
468
+ glyph_index = data->after_hook_data;
469
+
470
+ *glyph_index = NUM2ULONG (data->result);
471
+
472
+ return data->result;
473
+ }
474
+
475
+ static cairo_status_t
476
+ cr_user_font_face_unicode_to_glyph_func (cairo_scaled_font_t *scaled_font,
477
+ unsigned long unicode,
478
+ unsigned long *glyph_index)
479
+ {
480
+ cairo_status_t status = CAIRO_STATUS_SUCCESS;
481
+ cairo_font_face_t *face;
482
+ VALUE self;
483
+ VALUE receiver = Qnil;
484
+ ID id_method_name = cr_id_call;
485
+
486
+ face = cairo_scaled_font_get_font_face (scaled_font);
487
+ self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
488
+ receiver = rb_ivar_get (self, cr_id_unicode_to_glyph);
489
+ if (NIL_P (receiver) &&
490
+ rb_obj_respond_to (self, cr_id_unicode_to_glyph, Qtrue))
491
+ {
492
+ receiver = self;
493
+ id_method_name = cr_id_unicode_to_glyph;
494
+ }
495
+
496
+ if (NIL_P (receiver))
497
+ {
498
+ *glyph_index = unicode;
499
+ }
500
+ else
501
+ {
502
+ cr_user_font_face_invoke_data_t data;
503
+ VALUE argv[2];
504
+
505
+ argv[0] = CRSCALEDFONT2RVAL (scaled_font);
506
+ argv[1] = ULONG2NUM (unicode);
507
+
508
+ data.receiver = receiver;
509
+ data.method = id_method_name;
510
+ data.argc = 2;
511
+ data.argv = argv;
512
+ data.status = &status;
513
+ data.after_hook = cr_user_font_face_unicode_to_glyph_func_after;
514
+ data.after_hook_data = glyph_index;
515
+
516
+ rb_cairo__invoke_callback (cr_user_font_face_invoke_func, (VALUE)&data);
517
+ }
518
+
519
+ return status;
520
+ }
521
+
522
+
523
+ static VALUE
524
+ cr_user_font_face_initialize (VALUE self)
525
+ {
526
+ cairo_font_face_t *face;
527
+
528
+ face = cairo_user_font_face_create ();
529
+ cr_font_face_check_status (face);
530
+
531
+ cairo_font_face_set_user_data (face, &ruby_object_key, (void *)self, NULL);
532
+
533
+ cairo_user_font_face_set_init_func
534
+ (face, cr_user_font_face_init_func);
535
+ cairo_user_font_face_set_render_glyph_func
536
+ (face, cr_user_font_face_render_glyph_func);
537
+ cairo_user_font_face_set_text_to_glyphs_func
538
+ (face, cr_user_font_face_text_to_glyphs_func);
539
+ cairo_user_font_face_set_unicode_to_glyph_func
540
+ (face, cr_user_font_face_unicode_to_glyph_func);
541
+
542
+ rb_ivar_set (self, cr_id_init, Qnil);
543
+ rb_ivar_set (self, cr_id_render_glyph, Qnil);
544
+ rb_ivar_set (self, cr_id_text_to_glyphs, Qnil);
545
+ rb_ivar_set (self, cr_id_unicode_to_glyph, Qnil);
546
+
547
+ DATA_PTR (self) = face;
548
+
549
+ return Qnil;
550
+ }
551
+
552
+ static VALUE
553
+ cr_user_font_face_on_init (VALUE self)
554
+ {
555
+ rb_ivar_set (self, cr_id_init, rb_block_proc ());
556
+ return self;
557
+ }
558
+
559
+ static VALUE
560
+ cr_user_font_face_on_render_glyph (VALUE self)
561
+ {
562
+ rb_ivar_set (self, cr_id_render_glyph, rb_block_proc ());
563
+ return self;
564
+ }
565
+
566
+ static VALUE
567
+ cr_user_font_face_on_text_to_glyphs (VALUE self)
568
+ {
569
+ rb_ivar_set (self, cr_id_text_to_glyphs, rb_block_proc ());
570
+ return self;
571
+ }
572
+
573
+ static VALUE
574
+ cr_user_font_face_on_unicode_to_glyph (VALUE self)
575
+ {
576
+ rb_ivar_set (self, cr_id_unicode_to_glyph, rb_block_proc ());
577
+ return self;
578
+ }
579
+
580
+
581
+ static VALUE
582
+ cr_text_to_glyphs_data_initialize (VALUE self,
583
+ VALUE need_glyphs, VALUE need_clusters,
584
+ VALUE need_backward)
585
+ {
586
+ rb_ivar_set (self, cr_id_at_glyphs, Qnil);
587
+ rb_ivar_set (self, cr_id_at_clusters, Qnil);
588
+ rb_ivar_set (self, cr_id_at_backward, Qfalse);
589
+ rb_ivar_set (self, cr_id_at_need_glyphs, need_glyphs);
590
+ rb_ivar_set (self, cr_id_at_need_clusters, need_clusters);
591
+ rb_ivar_set (self, cr_id_at_need_backward, need_backward);
592
+
593
+ return Qnil;
594
+ }
595
+
596
+ static VALUE
597
+ cr_text_to_glyphs_data_backward_p (VALUE self)
598
+ {
599
+ return rb_ivar_get (self, cr_id_at_backward);
600
+ }
601
+
602
+ static VALUE
603
+ cr_text_to_glyphs_data_need_glyphs (VALUE self)
604
+ {
605
+ return rb_ivar_get (self, cr_id_at_need_glyphs);
606
+ }
607
+
608
+ static VALUE
609
+ cr_text_to_glyphs_data_need_clusters (VALUE self)
610
+ {
611
+ return rb_ivar_get (self, cr_id_at_need_clusters);
612
+ }
613
+
614
+ static VALUE
615
+ cr_text_to_glyphs_data_need_backward (VALUE self)
616
+ {
617
+ return rb_ivar_get (self, cr_id_at_need_backward);
618
+ }
619
+ #endif
50
620
 
51
621
  void
52
622
  Init_cairo_font (void)
53
623
  {
624
+ #if CAIRO_CHECK_VERSION(1, 7, 2)
625
+ cr_id_call = rb_intern ("call");
626
+ cr_id_new = rb_intern ("new");
627
+
628
+ cr_id_init = rb_intern ("init");
629
+ cr_id_render_glyph = rb_intern ("render_glyph");
630
+ cr_id_text_to_glyphs = rb_intern ("text_to_glyphs");
631
+ cr_id_unicode_to_glyph = rb_intern ("unicode_to_glyph");
632
+
633
+ cr_id_at_glyphs = rb_intern ("@glyphs");
634
+ cr_id_at_clusters = rb_intern ("@clusters");
635
+ cr_id_at_backward = rb_intern ("@backward");
636
+ cr_id_at_need_glyphs = rb_intern ("@need_glyphs");
637
+ cr_id_at_need_clusters = rb_intern ("@need_clusters");
638
+ cr_id_at_need_backward = rb_intern ("@need_backward");
639
+ #endif
640
+
54
641
  rb_cCairo_FontFace =
55
642
  rb_define_class_under (rb_mCairo, "FontFace", rb_cObject);
643
+ rb_define_alloc_func (rb_cCairo_FontFace, cr_font_face_allocate);
644
+
645
+ #if CAIRO_CHECK_VERSION(1, 7, 2)
646
+ rb_cCairo_ToyFontFace =
647
+ rb_define_class_under (rb_mCairo, "ToyFontFace", rb_cCairo_FontFace);
648
+
649
+ rb_define_method (rb_cCairo_ToyFontFace, "initialize",
650
+ cr_toy_font_face_initialize, -1);
651
+
652
+ rb_define_method (rb_cCairo_ToyFontFace, "family",
653
+ cr_toy_font_face_get_family, 0);
654
+ rb_define_method (rb_cCairo_ToyFontFace, "slant",
655
+ cr_toy_font_face_get_slant, 0);
656
+ rb_define_method (rb_cCairo_ToyFontFace, "weight",
657
+ cr_toy_font_face_get_weight, 0);
658
+
659
+
660
+ rb_cCairo_UserFontFace =
661
+ rb_define_class_under (rb_mCairo, "UserFontFace", rb_cCairo_FontFace);
662
+
663
+ rb_define_method (rb_cCairo_UserFontFace, "initialize",
664
+ cr_user_font_face_initialize, 0);
665
+
666
+ rb_define_method (rb_cCairo_UserFontFace, "on_init",
667
+ cr_user_font_face_on_init, 0);
668
+ rb_define_method (rb_cCairo_UserFontFace, "on_render_glyph",
669
+ cr_user_font_face_on_render_glyph, 0);
670
+ rb_define_method (rb_cCairo_UserFontFace, "on_text_to_glyphs",
671
+ cr_user_font_face_on_text_to_glyphs, 0);
672
+ rb_define_method (rb_cCairo_UserFontFace, "on_unicode_to_glyph",
673
+ cr_user_font_face_on_unicode_to_glyph, 0);
674
+
675
+
676
+ rb_cCairo_UserFontFace_TextToGlyphsData =
677
+ rb_define_class_under (rb_cCairo_UserFontFace,
678
+ "TextToGlyphsData", rb_cObject);
679
+ rb_attr (rb_cCairo_UserFontFace_TextToGlyphsData, rb_intern ("glyphs"),
680
+ CR_TRUE, CR_TRUE, CR_TRUE);
681
+ rb_attr (rb_cCairo_UserFontFace_TextToGlyphsData, rb_intern ("clusters"),
682
+ CR_TRUE, CR_TRUE, CR_TRUE);
683
+ rb_attr (rb_cCairo_UserFontFace_TextToGlyphsData, rb_intern ("backward"),
684
+ CR_FALSE, CR_TRUE, CR_TRUE);
685
+
686
+ rb_define_method (rb_cCairo_UserFontFace_TextToGlyphsData,
687
+ "initialize", cr_text_to_glyphs_data_initialize, 3);
688
+
689
+ rb_define_method (rb_cCairo_UserFontFace_TextToGlyphsData,
690
+ "backward?", cr_text_to_glyphs_data_backward_p, 0);
691
+ rb_define_method (rb_cCairo_UserFontFace_TextToGlyphsData,
692
+ "need_glyphs?", cr_text_to_glyphs_data_need_glyphs, 0);
693
+ rb_define_method (rb_cCairo_UserFontFace_TextToGlyphsData,
694
+ "need_clusters?", cr_text_to_glyphs_data_need_clusters, 0);
695
+ rb_define_method (rb_cCairo_UserFontFace_TextToGlyphsData,
696
+ "need_backward?", cr_text_to_glyphs_data_need_backward, 0);
697
+ #endif
56
698
  }