cairo 1.6.3 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +206 -0
- data/NEWS +13 -0
- data/README +10 -3
- data/Rakefile +3 -2
- data/doc/en/cairo-antialias.html +0 -3
- data/doc/en/cairo-clip-not-representable-error.html +1 -4
- data/doc/en/cairo-color-base.html +0 -3
- data/doc/en/cairo-color-cmyk.html +1 -4
- data/doc/en/cairo-color-hsv.html +137 -0
- data/doc/en/cairo-color-rgb.html +142 -0
- data/doc/en/cairo-color-x11.html +173 -0
- data/doc/en/cairo-color.html +238 -0
- data/doc/en/cairo-content.html +37 -0
- data/doc/en/cairo-context-blur.html +39 -0
- data/doc/en/cairo-context-circle.html +39 -0
- data/doc/en/cairo-context-color.html +39 -0
- data/doc/en/cairo-context-path.html +44 -0
- data/doc/en/cairo-context-rectangle.html +0 -3
- data/doc/en/cairo-context-triangle.html +39 -0
- data/doc/en/cairo-context.html +124 -107
- data/doc/en/cairo-error.html +44 -0
- data/doc/en/cairo-extend.html +38 -0
- data/doc/en/cairo-file-not-found.html +1 -4
- data/doc/en/cairo-fill-rule.html +36 -0
- data/doc/en/cairo-filter.html +0 -3
- data/doc/en/cairo-font-extents.html +129 -0
- data/doc/en/cairo-font-face.html +38 -0
- data/doc/en/cairo-font-options.html +154 -0
- data/doc/en/cairo-font-slant.html +0 -3
- data/doc/en/cairo-font-type-mismatch.html +47 -0
- data/doc/en/cairo-font-weight.html +0 -3
- data/doc/en/cairo-format.html +0 -3
- data/doc/en/cairo-glyph.html +99 -0
- data/doc/en/cairo-gradient-pattern.html +74 -0
- data/doc/en/cairo-hint-metrics.html +37 -0
- data/doc/en/cairo-hint-style.html +0 -3
- data/doc/en/cairo-image-surface.html +82 -0
- data/doc/en/cairo-invalid-clusters.html +47 -0
- data/doc/en/cairo-invalid-content-error.html +47 -0
- data/doc/en/cairo-invalid-dash-error.html +0 -3
- data/doc/en/cairo-invalid-dsc-comment-error.html +47 -0
- data/doc/en/cairo-invalid-format-error.html +47 -0
- data/doc/en/cairo-invalid-index-error.html +47 -0
- data/doc/en/cairo-invalid-matrix-error.html +0 -3
- data/doc/en/cairo-invalid-path-data-error.html +47 -0
- data/doc/en/cairo-invalid-pop-group-error.html +1 -4
- data/doc/en/cairo-invalid-restore-error.html +47 -0
- data/doc/en/cairo-invalid-slant.html +47 -0
- data/doc/en/cairo-invalid-status-error.html +47 -0
- data/doc/en/cairo-invalid-stride-error.html +0 -3
- data/doc/en/cairo-invalid-string-error.html +47 -0
- data/doc/en/cairo-invalid-visual-error.html +47 -0
- data/doc/en/cairo-invalid-weight.html +47 -0
- data/doc/en/cairo-lcd-filter.html +39 -0
- data/doc/en/cairo-line-cap.html +37 -0
- data/doc/en/cairo-line-join.html +37 -0
- data/doc/en/cairo-linear-pattern.html +60 -0
- data/doc/en/cairo-matrix.html +259 -0
- data/doc/en/cairo-negative-count.html +47 -0
- data/doc/en/cairo-no-current-point-error.html +47 -0
- data/doc/en/cairo-null-pointer-error.html +0 -3
- data/doc/en/cairo-operator.html +0 -3
- data/doc/en/cairo-paper-parse-error.html +0 -3
- data/doc/en/cairo-paper-unknown-paper-name.html +66 -0
- data/doc/en/cairo-paper-unknown-unit.html +66 -0
- data/doc/en/cairo-paper-unrecognized-paper-description.html +1 -4
- data/doc/en/cairo-paper.html +0 -3
- data/doc/en/cairo-path-close-path.html +49 -0
- data/doc/en/cairo-path-curve-to.html +1 -4
- data/doc/en/cairo-path-data-type.html +0 -3
- data/doc/en/cairo-path-data.html +0 -3
- data/doc/en/cairo-path-line-to.html +1 -4
- data/doc/en/cairo-path-move-to.html +1 -4
- data/doc/en/cairo-path.html +0 -3
- data/doc/en/cairo-pattern-type-mismatch-error.html +47 -0
- data/doc/en/cairo-pattern.html +0 -3
- data/doc/en/cairo-pdf-surface.html +1 -4
- data/doc/en/cairo-point.html +0 -3
- data/doc/en/cairo-ps-level.html +49 -0
- data/doc/en/cairo-ps-surface.html +1 -4
- data/doc/en/cairo-quartz-image-surface.html +57 -0
- data/doc/en/cairo-quartz-surface.html +1 -4
- data/doc/en/cairo-radial-pattern.html +60 -0
- data/doc/en/cairo-read-error.html +47 -0
- data/doc/en/cairo-rectangle.html +0 -3
- data/doc/en/cairo-scaled-font.html +94 -0
- data/doc/en/cairo-solid-pattern.html +62 -0
- data/doc/en/cairo-subpixel-order.html +0 -3
- data/doc/en/cairo-surface-finished-error.html +1 -4
- data/doc/en/cairo-surface-pattern.html +0 -3
- data/doc/en/cairo-surface-type-mismatch-error.html +47 -0
- data/doc/en/cairo-surface.html +22 -15
- data/doc/en/cairo-svg-surface.html +77 -0
- data/doc/en/cairo-svg-version.html +0 -3
- data/doc/en/cairo-temp-file-error.html +47 -0
- data/doc/en/cairo-text-cluster.html +84 -0
- data/doc/en/cairo-text-extents.html +144 -0
- data/doc/en/cairo-toy-font-face.html +67 -0
- data/doc/en/cairo-user-font-error.html +47 -0
- data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +94 -0
- data/doc/en/cairo-user-font-face.html +72 -0
- data/doc/en/cairo-user-font-immutable.html +47 -0
- data/doc/en/cairo-win32-printing-surface.html +57 -0
- data/doc/en/cairo-win32-surface.html +62 -0
- data/doc/en/cairo-write-error.html +47 -0
- data/doc/en/cairo.html +92 -80
- data/doc/en/index.html +1076 -989
- data/doc/ja/cairo-clip-not-representable-error.html +1 -1
- data/doc/ja/cairo-color-base.html +1 -1
- data/doc/ja/cairo-color-cmyk.html +9 -9
- data/doc/ja/cairo-color-hsv.html +8 -8
- data/doc/ja/cairo-color-rgb.html +9 -9
- data/doc/ja/cairo-color.html +8 -8
- data/doc/ja/cairo-context-circle.html +1 -1
- data/doc/ja/cairo-context-color.html +1 -1
- data/doc/ja/cairo-context-path.html +2 -2
- data/doc/ja/cairo-context.html +435 -342
- data/doc/ja/cairo-font-extents.html +69 -15
- data/doc/ja/cairo-font-face.html +3 -3
- data/doc/ja/cairo-font-options.html +37 -12
- data/doc/ja/cairo-font-slant.html +1 -1
- data/doc/ja/cairo-font-type-mismatch.html +52 -0
- data/doc/ja/cairo-glyph.html +5 -5
- data/doc/ja/cairo-gradient-pattern.html +6 -6
- data/doc/ja/cairo-image-surface.html +8 -8
- data/doc/ja/cairo-invalid-clusters.html +55 -0
- data/doc/ja/cairo-invalid-restore-error.html +1 -1
- data/doc/ja/cairo-invalid-slant.html +57 -0
- data/doc/ja/cairo-invalid-weight.html +57 -0
- data/doc/ja/cairo-lcd-filter.html +63 -0
- data/doc/ja/cairo-line-join.html +1 -1
- data/doc/ja/cairo-linear-pattern.html +2 -2
- data/doc/ja/cairo-matrix.html +35 -24
- data/doc/ja/cairo-negative-count.html +52 -0
- data/doc/ja/cairo-paper-unknown-paper-name.html +2 -2
- data/doc/ja/cairo-paper-unknown-unit.html +2 -2
- data/doc/ja/cairo-paper-unrecognized-paper-description.html +1 -1
- data/doc/ja/cairo-paper.html +12 -12
- data/doc/ja/cairo-path-close-path.html +1 -1
- data/doc/ja/cairo-path-curve-to.html +1 -1
- data/doc/ja/cairo-path-data.html +8 -8
- data/doc/ja/cairo-path-line-to.html +1 -1
- data/doc/ja/cairo-path-move-to.html +1 -1
- data/doc/ja/cairo-path.html +21 -21
- data/doc/ja/cairo-pattern.html +4 -4
- data/doc/ja/cairo-pdf-surface.html +2 -2
- data/doc/ja/cairo-point.html +5 -5
- data/doc/ja/cairo-ps-level.html +2 -2
- data/doc/ja/cairo-ps-surface.html +6 -6
- data/doc/ja/cairo-quartz-image-surface.html +2 -2
- data/doc/ja/cairo-quartz-surface.html +3 -3
- data/doc/ja/cairo-radial-pattern.html +2 -2
- data/doc/ja/cairo-rectangle.html +5 -5
- data/doc/ja/cairo-scaled-font.html +53 -17
- data/doc/ja/cairo-solid-pattern.html +3 -3
- data/doc/ja/cairo-surface-pattern.html +2 -2
- data/doc/ja/cairo-surface.html +58 -36
- data/doc/ja/cairo-svg-surface.html +4 -4
- data/doc/ja/cairo-svg-version.html +2 -2
- data/doc/ja/cairo-text-cluster.html +102 -0
- data/doc/ja/cairo-text-extents.html +84 -22
- data/doc/ja/cairo-toy-font-face.html +107 -0
- data/doc/ja/cairo-user-font-error.html +55 -0
- data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +155 -0
- data/doc/ja/cairo-user-font-face.html +268 -0
- data/doc/ja/cairo-user-font-immutable.html +54 -0
- data/doc/ja/cairo-win32-printing-surface.html +3 -3
- data/doc/ja/cairo-win32-surface.html +4 -4
- data/doc/ja/cairo.html +110 -77
- data/doc/ja/index.html +292 -205
- data/extconf.rb +1 -0
- data/src/cairo.def +8 -0
- data/src/lib/cairo.rb +12 -7
- data/src/lib/cairo/constants.rb +1 -0
- data/src/rb_cairo.c +25 -3
- data/src/rb_cairo.h +22 -1
- data/src/rb_cairo_constants.c +24 -1
- data/src/rb_cairo_context.c +147 -6
- data/src/rb_cairo_exception.c +143 -3
- data/src/rb_cairo_font_extents.c +81 -6
- data/src/rb_cairo_font_face.c +646 -4
- data/src/rb_cairo_font_options.c +24 -2
- data/src/rb_cairo_glyph.c +5 -3
- data/src/rb_cairo_matrix.c +17 -1
- data/src/rb_cairo_private.c +169 -5
- data/src/rb_cairo_private.h +36 -2
- data/src/rb_cairo_scaled_font.c +61 -3
- data/src/rb_cairo_surface.c +77 -52
- data/src/rb_cairo_text_cluster.c +151 -0
- data/src/rb_cairo_text_extents.c +85 -2
- data/test-unit/Rakefile +30 -0
- data/test-unit/bin/testrb +5 -0
- data/test-unit/lib/test/unit.rb +280 -0
- data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
- data/test-unit/lib/test/unit/assertions.rb +722 -0
- data/test-unit/lib/test/unit/attribute.rb +125 -0
- data/test-unit/lib/test/unit/autorunner.rb +254 -0
- data/test-unit/lib/test/unit/collector.rb +43 -0
- data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
- data/test-unit/lib/test/unit/collector/dir.rb +108 -0
- data/test-unit/lib/test/unit/collector/load.rb +135 -0
- data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
- data/test-unit/lib/test/unit/color.rb +61 -0
- data/test-unit/lib/test/unit/diff.rb +524 -0
- data/test-unit/lib/test/unit/error.rb +124 -0
- data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
- data/test-unit/lib/test/unit/failure.rb +110 -0
- data/test-unit/lib/test/unit/fixture.rb +185 -0
- data/test-unit/lib/test/unit/notification.rb +125 -0
- data/test-unit/lib/test/unit/omission.rb +143 -0
- data/test-unit/lib/test/unit/pending.rb +146 -0
- data/test-unit/lib/test/unit/priority.rb +146 -0
- data/test-unit/lib/test/unit/runner/console.rb +46 -0
- data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
- data/test-unit/lib/test/unit/testcase.rb +281 -0
- data/test-unit/lib/test/unit/testresult.rb +89 -0
- data/test-unit/lib/test/unit/testsuite.rb +110 -0
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
- data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
- data/test-unit/lib/test/unit/util/observable.rb +90 -0
- data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
- data/test-unit/lib/test/unit/version.rb +7 -0
- data/test-unit/sample/adder.rb +13 -0
- data/test-unit/sample/subtracter.rb +12 -0
- data/test-unit/sample/tc_adder.rb +18 -0
- data/test-unit/sample/tc_subtracter.rb +18 -0
- data/test-unit/sample/ts_examples.rb +7 -0
- data/test-unit/test/collector/test_descendant.rb +135 -0
- data/test-unit/test/collector/test_dir.rb +406 -0
- data/test-unit/test/collector/test_load.rb +333 -0
- data/test-unit/test/collector/test_objectspace.rb +98 -0
- data/test-unit/test/run-test.rb +13 -0
- data/test-unit/test/test_assertions.rb +693 -0
- data/test-unit/test/test_attribute.rb +86 -0
- data/test-unit/test/test_color.rb +37 -0
- data/test-unit/test/test_diff.rb +477 -0
- data/test-unit/test/test_emacs_runner.rb +60 -0
- data/test-unit/test/test_error.rb +26 -0
- data/test-unit/test/test_failure.rb +33 -0
- data/test-unit/test/test_fixture.rb +252 -0
- data/test-unit/test/test_notification.rb +33 -0
- data/test-unit/test/test_omission.rb +81 -0
- data/test-unit/test/test_pending.rb +70 -0
- data/test-unit/test/test_priority.rb +89 -0
- data/test-unit/test/test_testcase.rb +430 -0
- data/test-unit/test/test_testresult.rb +113 -0
- data/test-unit/test/test_testsuite.rb +129 -0
- data/test-unit/test/testunit_test_util.rb +14 -0
- data/test-unit/test/ui/test_testrunmediator.rb +20 -0
- data/test-unit/test/util/test_backtracefilter.rb +41 -0
- data/test-unit/test/util/test_observable.rb +102 -0
- data/test-unit/test/util/test_procwrapper.rb +36 -0
- data/test/cairo-test-utils.rb +18 -0
- data/test/run-test.rb +14 -1
- data/test/test_constants.rb +19 -0
- data/test/test_context.rb +117 -0
- data/test/test_exception.rb +27 -0
- data/test/test_font_extents.rb +36 -0
- data/test/test_font_face.rb +244 -0
- data/test/test_font_options.rb +32 -0
- data/test/test_pkg_config.rb +3 -2
- data/test/test_scaled_font.rb +34 -0
- data/test/test_surface.rb +13 -0
- data/test/test_text_cluster.rb +32 -0
- data/test/test_text_extents.rb +40 -0
- data/test/test_text_to_glyphs_data.rb +47 -0
- metadata +156 -175
- data/doc/en/cairo-antialias.rbl +0 -8
- data/doc/en/cairo-antialias.rd +0 -16
- data/doc/en/cairo-antialias.rdc +0 -16
- data/doc/en/cairo-clip-not-representable-error.rbl +0 -4
- data/doc/en/cairo-clip-not-representable-error.rd +0 -17
- data/doc/en/cairo-clip-not-representable-error.rdc +0 -17
- data/doc/en/cairo-color-base.rbl +0 -11
- data/doc/en/cairo-color-base.rd +0 -38
- data/doc/en/cairo-color-base.rdc +0 -38
- data/doc/en/cairo-color-cmyk.rbl +0 -28
- data/doc/en/cairo-color-cmyk.rd +0 -107
- data/doc/en/cairo-color-cmyk.rdc +0 -107
- data/doc/en/cairo-color-hsv.rd +0 -91
- data/doc/en/cairo-color-rgb.rd +0 -95
- data/doc/en/cairo-color-x11.rd +0 -151
- data/doc/en/cairo-color.rd +0 -213
- data/doc/en/cairo-content.rd +0 -15
- data/doc/en/cairo-context-blur.rd +0 -15
- data/doc/en/cairo-context-circle.rd +0 -15
- data/doc/en/cairo-context-color.rd +0 -15
- data/doc/en/cairo-context-path.rd +0 -19
- data/doc/en/cairo-context-rectangle.rbl +0 -5
- data/doc/en/cairo-context-rectangle.rd +0 -15
- data/doc/en/cairo-context-rectangle.rdc +0 -15
- data/doc/en/cairo-context-triangle.rd +0 -15
- data/doc/en/cairo-context.rbl +0 -123
- data/doc/en/cairo-context.rd +0 -491
- data/doc/en/cairo-context.rdc +0 -491
- data/doc/en/cairo-error.rd +0 -16
- data/doc/en/cairo-extend.rd +0 -16
- data/doc/en/cairo-file-not-found.rbl +0 -4
- data/doc/en/cairo-file-not-found.rd +0 -17
- data/doc/en/cairo-file-not-found.rdc +0 -17
- data/doc/en/cairo-fill-rule.rd +0 -14
- data/doc/en/cairo-filter.rbl +0 -10
- data/doc/en/cairo-filter.rd +0 -18
- data/doc/en/cairo-filter.rdc +0 -18
- data/doc/en/cairo-font-extents.rd +0 -40
- data/doc/en/cairo-font-face.rd +0 -14
- data/doc/en/cairo-font-options.rd +0 -94
- data/doc/en/cairo-font-slant.rbl +0 -7
- data/doc/en/cairo-font-slant.rd +0 -15
- data/doc/en/cairo-font-slant.rdc +0 -15
- data/doc/en/cairo-font-weight.rbl +0 -6
- data/doc/en/cairo-font-weight.rd +0 -14
- data/doc/en/cairo-font-weight.rdc +0 -14
- data/doc/en/cairo-format.rbl +0 -10
- data/doc/en/cairo-format.rd +0 -22
- data/doc/en/cairo-format.rdc +0 -22
- data/doc/en/cairo-glyph.rd +0 -62
- data/doc/en/cairo-gradient-pattern.rd +0 -41
- data/doc/en/cairo-hint-metrics.rd +0 -15
- data/doc/en/cairo-hint-style.rbl +0 -9
- data/doc/en/cairo-hint-style.rd +0 -17
- data/doc/en/cairo-hint-style.rdc +0 -17
- data/doc/en/cairo-image-surface.rd +0 -47
- data/doc/en/cairo-invalid-content-error.rd +0 -17
- data/doc/en/cairo-invalid-dash-error.rbl +0 -4
- data/doc/en/cairo-invalid-dash-error.rd +0 -17
- data/doc/en/cairo-invalid-dash-error.rdc +0 -17
- data/doc/en/cairo-invalid-dsc-comment-error.rd +0 -17
- data/doc/en/cairo-invalid-format-error.rd +0 -17
- data/doc/en/cairo-invalid-index-error.rd +0 -17
- data/doc/en/cairo-invalid-matrix-error.rbl +0 -4
- data/doc/en/cairo-invalid-matrix-error.rd +0 -17
- data/doc/en/cairo-invalid-matrix-error.rdc +0 -17
- data/doc/en/cairo-invalid-path-data-error.rd +0 -17
- data/doc/en/cairo-invalid-pop-group-error.rbl +0 -4
- data/doc/en/cairo-invalid-pop-group-error.rd +0 -17
- data/doc/en/cairo-invalid-pop-group-error.rdc +0 -17
- data/doc/en/cairo-invalid-restore-error.rd +0 -17
- data/doc/en/cairo-invalid-status-error.rd +0 -17
- data/doc/en/cairo-invalid-stride-error.rbl +0 -4
- data/doc/en/cairo-invalid-stride-error.rd +0 -17
- data/doc/en/cairo-invalid-stride-error.rdc +0 -17
- data/doc/en/cairo-invalid-string-error.rd +0 -17
- data/doc/en/cairo-invalid-visual-error.rd +0 -17
- data/doc/en/cairo-line-cap.rd +0 -15
- data/doc/en/cairo-line-join.rd +0 -15
- data/doc/en/cairo-linear-pattern.rd +0 -28
- data/doc/en/cairo-matrix.rd +0 -186
- data/doc/en/cairo-no-current-point-error.rd +0 -17
- data/doc/en/cairo-null-pointer-error.rbl +0 -4
- data/doc/en/cairo-null-pointer-error.rd +0 -17
- data/doc/en/cairo-null-pointer-error.rdc +0 -17
- data/doc/en/cairo-operator.rbl +0 -18
- data/doc/en/cairo-operator.rd +0 -26
- data/doc/en/cairo-operator.rdc +0 -26
- data/doc/en/cairo-paper-parse-error.rbl +0 -4
- data/doc/en/cairo-paper-parse-error.rd +0 -17
- data/doc/en/cairo-paper-parse-error.rdc +0 -17
- data/doc/en/cairo-paper-unknown-paper-name.rd +0 -30
- data/doc/en/cairo-paper-unknown-unit.rd +0 -30
- data/doc/en/cairo-paper-unrecognized-paper-description.rbl +0 -8
- data/doc/en/cairo-paper-unrecognized-paper-description.rd +0 -30
- data/doc/en/cairo-paper-unrecognized-paper-description.rdc +0 -30
- data/doc/en/cairo-paper.rbl +0 -76
- data/doc/en/cairo-paper.rd +0 -141
- data/doc/en/cairo-paper.rdc +0 -141
- data/doc/en/cairo-path-close-path.rd +0 -21
- data/doc/en/cairo-path-curve-to.rbl +0 -6
- data/doc/en/cairo-path-curve-to.rd +0 -21
- data/doc/en/cairo-path-curve-to.rdc +0 -21
- data/doc/en/cairo-path-data-type.rbl +0 -8
- data/doc/en/cairo-path-data-type.rd +0 -16
- data/doc/en/cairo-path-data-type.rdc +0 -16
- data/doc/en/cairo-path-data.rbl +0 -17
- data/doc/en/cairo-path-data.rd +0 -62
- data/doc/en/cairo-path-data.rdc +0 -62
- data/doc/en/cairo-path-line-to.rbl +0 -6
- data/doc/en/cairo-path-line-to.rd +0 -21
- data/doc/en/cairo-path-line-to.rdc +0 -21
- data/doc/en/cairo-path-move-to.rbl +0 -6
- data/doc/en/cairo-path-move-to.rd +0 -21
- data/doc/en/cairo-path-move-to.rdc +0 -21
- data/doc/en/cairo-path.rbl +0 -32
- data/doc/en/cairo-path.rd +0 -109
- data/doc/en/cairo-path.rdc +0 -109
- data/doc/en/cairo-pattern-type-mismatch-error.rd +0 -17
- data/doc/en/cairo-pattern.rbl +0 -17
- data/doc/en/cairo-pattern.rd +0 -62
- data/doc/en/cairo-pattern.rdc +0 -62
- data/doc/en/cairo-pdf-surface.rbl +0 -8
- data/doc/en/cairo-pdf-surface.rd +0 -27
- data/doc/en/cairo-pdf-surface.rdc +0 -27
- data/doc/en/cairo-point.rbl +0 -12
- data/doc/en/cairo-point.rd +0 -42
- data/doc/en/cairo-point.rdc +0 -42
- data/doc/en/cairo-ps-level.rd +0 -24
- data/doc/en/cairo-ps-surface.rbl +0 -15
- data/doc/en/cairo-ps-surface.rd +0 -55
- data/doc/en/cairo-ps-surface.rdc +0 -55
- data/doc/en/cairo-quartz-image-surface.rd +0 -27
- data/doc/en/cairo-quartz-surface.rbl +0 -8
- data/doc/en/cairo-quartz-surface.rd +0 -27
- data/doc/en/cairo-quartz-surface.rdc +0 -27
- data/doc/en/cairo-radial-pattern.rd +0 -28
- data/doc/en/cairo-read-error.rd +0 -17
- data/doc/en/cairo-rectangle.rbl +0 -15
- data/doc/en/cairo-rectangle.rd +0 -54
- data/doc/en/cairo-rectangle.rdc +0 -54
- data/doc/en/cairo-scaled-font.rd +0 -50
- data/doc/en/cairo-solid-pattern.rd +0 -31
- data/doc/en/cairo-subpixel-order.rbl +0 -9
- data/doc/en/cairo-subpixel-order.rd +0 -17
- data/doc/en/cairo-subpixel-order.rdc +0 -17
- data/doc/en/cairo-surface-finished-error.rbl +0 -4
- data/doc/en/cairo-surface-finished-error.rd +0 -17
- data/doc/en/cairo-surface-finished-error.rdc +0 -17
- data/doc/en/cairo-surface-pattern.rbl +0 -8
- data/doc/en/cairo-surface-pattern.rd +0 -27
- data/doc/en/cairo-surface-pattern.rdc +0 -27
- data/doc/en/cairo-surface-type-mismatch-error.rd +0 -17
- data/doc/en/cairo-surface.rbl +0 -19
- data/doc/en/cairo-surface.rd +0 -72
- data/doc/en/cairo-surface.rdc +0 -72
- data/doc/en/cairo-svg-surface.rd +0 -44
- data/doc/en/cairo-svg-version.rbl +0 -9
- data/doc/en/cairo-svg-version.rd +0 -24
- data/doc/en/cairo-svg-version.rdc +0 -24
- data/doc/en/cairo-temp-file-error.rd +0 -17
- data/doc/en/cairo-text-extents.rd +0 -44
- data/doc/en/cairo-win32-printing-surface.rd +0 -27
- data/doc/en/cairo-win32-surface.rd +0 -31
- data/doc/en/cairo-write-error.rd +0 -17
- data/doc/en/cairo.rbl +0 -80
- data/doc/en/cairo.rd +0 -95
- data/doc/en/cairo.rdc +0 -95
- data/doc/en/index.rbl +0 -1
- data/doc/en/index.rd +0 -1051
- data/doc/en/index.rdc +0 -1051
- data/samples/agg/aa_demo.rb +0 -47
- data/src/lib/cairo/table.rb +0 -29
data/src/rb_cairo_exception.c
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Ruby Cairo Binding
|
|
4
4
|
*
|
|
5
5
|
* $Author: kou $
|
|
6
|
-
* $Date: 2008-
|
|
6
|
+
* $Date: 2008-08-16 12:52:16 $
|
|
7
7
|
*
|
|
8
8
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
|
9
9
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
#include "rb_cairo.h"
|
|
16
|
+
#include "rb_cairo_private.h"
|
|
16
17
|
|
|
17
18
|
static VALUE rb_eCairo_InvalidRestoreError;
|
|
18
19
|
static VALUE rb_eCairo_InvalidPopGroupError;
|
|
@@ -41,6 +42,15 @@ static VALUE rb_eCairo_ClipNotRepresentableError;
|
|
|
41
42
|
static VALUE rb_eCairo_TempFileError;
|
|
42
43
|
static VALUE rb_eCairo_InvalidStrideError;
|
|
43
44
|
#endif
|
|
45
|
+
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
|
46
|
+
static VALUE rb_eCairo_FontTypeMismatch;
|
|
47
|
+
static VALUE rb_eCairo_UserFontImmutable;
|
|
48
|
+
static VALUE rb_eCairo_UserFontError;
|
|
49
|
+
static VALUE rb_eCairo_NegativeCount;
|
|
50
|
+
static VALUE rb_eCairo_InvalidClusters;
|
|
51
|
+
static VALUE rb_eCairo_InvalidSlant;
|
|
52
|
+
static VALUE rb_eCairo_InvalidWeight;
|
|
53
|
+
#endif
|
|
44
54
|
|
|
45
55
|
void
|
|
46
56
|
rb_cairo_check_status (cairo_status_t status)
|
|
@@ -126,10 +136,110 @@ rb_cairo_check_status (cairo_status_t status)
|
|
|
126
136
|
case CAIRO_STATUS_INVALID_STRIDE:
|
|
127
137
|
rb_raise (rb_eCairo_InvalidStringError, string);
|
|
128
138
|
break;
|
|
139
|
+
#endif
|
|
140
|
+
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
|
141
|
+
case CAIRO_STATUS_FONT_TYPE_MISMATCH:
|
|
142
|
+
rb_raise (rb_eCairo_FontTypeMismatch, string);
|
|
143
|
+
break;
|
|
144
|
+
case CAIRO_STATUS_USER_FONT_IMMUTABLE:
|
|
145
|
+
rb_raise (rb_eCairo_UserFontImmutable, string);
|
|
146
|
+
break;
|
|
147
|
+
case CAIRO_STATUS_USER_FONT_ERROR:
|
|
148
|
+
rb_raise (rb_eCairo_UserFontError, string);
|
|
149
|
+
break;
|
|
150
|
+
case CAIRO_STATUS_NEGATIVE_COUNT:
|
|
151
|
+
rb_raise (rb_eCairo_NegativeCount, string);
|
|
152
|
+
break;
|
|
153
|
+
case CAIRO_STATUS_INVALID_CLUSTERS:
|
|
154
|
+
rb_raise (rb_eCairo_InvalidClusters, string);
|
|
155
|
+
break;
|
|
156
|
+
case CAIRO_STATUS_INVALID_SLANT:
|
|
157
|
+
rb_raise (rb_eCairo_InvalidSlant, string);
|
|
158
|
+
break;
|
|
159
|
+
case CAIRO_STATUS_INVALID_WEIGHT:
|
|
160
|
+
rb_raise (rb_eCairo_InvalidWeight, string);
|
|
161
|
+
break;
|
|
129
162
|
#endif
|
|
130
163
|
}
|
|
131
164
|
}
|
|
132
165
|
|
|
166
|
+
cairo_status_t
|
|
167
|
+
rb_cairo__exception_to_status (VALUE exception)
|
|
168
|
+
{
|
|
169
|
+
if (NIL_P (exception))
|
|
170
|
+
return CAIRO_STATUS_SUCCESS;
|
|
171
|
+
else if (rb_cairo__is_kind_of (exception, rb_eNoMemError))
|
|
172
|
+
return CAIRO_STATUS_NO_MEMORY;
|
|
173
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidRestoreError))
|
|
174
|
+
return CAIRO_STATUS_INVALID_RESTORE;
|
|
175
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidPopGroupError))
|
|
176
|
+
return CAIRO_STATUS_INVALID_POP_GROUP;
|
|
177
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_NoCurrentPointError))
|
|
178
|
+
return CAIRO_STATUS_NO_CURRENT_POINT;
|
|
179
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidMatrixError))
|
|
180
|
+
return CAIRO_STATUS_INVALID_MATRIX;
|
|
181
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidStatusError))
|
|
182
|
+
return CAIRO_STATUS_INVALID_STATUS;
|
|
183
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_NullPointerError))
|
|
184
|
+
return CAIRO_STATUS_NULL_POINTER;
|
|
185
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidStringError))
|
|
186
|
+
return CAIRO_STATUS_INVALID_STRING;
|
|
187
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidPathDataError))
|
|
188
|
+
return CAIRO_STATUS_INVALID_PATH_DATA;
|
|
189
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_ReadError))
|
|
190
|
+
return CAIRO_STATUS_READ_ERROR;
|
|
191
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_WriteError))
|
|
192
|
+
return CAIRO_STATUS_WRITE_ERROR;
|
|
193
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_SurfaceFinishedError))
|
|
194
|
+
return CAIRO_STATUS_SURFACE_FINISHED;
|
|
195
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_SurfaceTypeMismatchError))
|
|
196
|
+
return CAIRO_STATUS_SURFACE_TYPE_MISMATCH;
|
|
197
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_PatternTypeMismatchError))
|
|
198
|
+
return CAIRO_STATUS_PATTERN_TYPE_MISMATCH;
|
|
199
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidContentError))
|
|
200
|
+
return CAIRO_STATUS_INVALID_CONTENT;
|
|
201
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidFormatError))
|
|
202
|
+
return CAIRO_STATUS_INVALID_FORMAT;
|
|
203
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidVisualError))
|
|
204
|
+
return CAIRO_STATUS_INVALID_VISUAL;
|
|
205
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_FileNotFoundError))
|
|
206
|
+
return CAIRO_STATUS_FILE_NOT_FOUND;
|
|
207
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidDashError))
|
|
208
|
+
return CAIRO_STATUS_INVALID_DASH;
|
|
209
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidDscCommentError))
|
|
210
|
+
return CAIRO_STATUS_INVALID_DSC_COMMENT;
|
|
211
|
+
#if CAIRO_CHECK_VERSION(1, 3, 0)
|
|
212
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidIndexError))
|
|
213
|
+
return CAIRO_STATUS_INVALID_INDEX;
|
|
214
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_ClipNotRepresentableError))
|
|
215
|
+
return CAIRO_STATUS_CLIP_NOT_REPRESENTABLE;
|
|
216
|
+
#endif
|
|
217
|
+
#if CAIRO_CHECK_VERSION(1, 5, 6)
|
|
218
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_TempFileError))
|
|
219
|
+
return CAIRO_STATUS_TEMP_FILE_ERROR;
|
|
220
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidStringError))
|
|
221
|
+
return CAIRO_STATUS_INVALID_STRIDE;
|
|
222
|
+
#endif
|
|
223
|
+
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
|
224
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_FontTypeMismatch))
|
|
225
|
+
return CAIRO_STATUS_FONT_TYPE_MISMATCH;
|
|
226
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_UserFontImmutable))
|
|
227
|
+
return CAIRO_STATUS_USER_FONT_IMMUTABLE;
|
|
228
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_UserFontError))
|
|
229
|
+
return CAIRO_STATUS_USER_FONT_ERROR;
|
|
230
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_NegativeCount))
|
|
231
|
+
return CAIRO_STATUS_NEGATIVE_COUNT;
|
|
232
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidClusters))
|
|
233
|
+
return CAIRO_STATUS_INVALID_CLUSTERS;
|
|
234
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidSlant))
|
|
235
|
+
return CAIRO_STATUS_INVALID_SLANT;
|
|
236
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidWeight))
|
|
237
|
+
return CAIRO_STATUS_INVALID_WEIGHT;
|
|
238
|
+
#endif
|
|
239
|
+
|
|
240
|
+
return -1;
|
|
241
|
+
}
|
|
242
|
+
|
|
133
243
|
void
|
|
134
244
|
Init_cairo_exception ()
|
|
135
245
|
{
|
|
@@ -208,7 +318,37 @@ Init_cairo_exception ()
|
|
|
208
318
|
rb_eCairo_Error);
|
|
209
319
|
|
|
210
320
|
rb_eCairo_InvalidStrideError =
|
|
211
|
-
|
|
212
|
-
|
|
321
|
+
rb_define_class_under (rb_mCairo, "InvalidStrideError",
|
|
322
|
+
rb_eArgError);
|
|
323
|
+
#endif
|
|
324
|
+
|
|
325
|
+
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
|
326
|
+
rb_eCairo_FontTypeMismatch =
|
|
327
|
+
rb_define_class_under (rb_mCairo, "FontTypeMismatch",
|
|
328
|
+
rb_eCairo_Error);
|
|
329
|
+
|
|
330
|
+
rb_eCairo_UserFontImmutable =
|
|
331
|
+
rb_define_class_under (rb_mCairo, "UserFontImmutable",
|
|
332
|
+
rb_eCairo_Error);
|
|
333
|
+
|
|
334
|
+
rb_eCairo_UserFontError =
|
|
335
|
+
rb_define_class_under (rb_mCairo, "UserFontError",
|
|
336
|
+
rb_eCairo_Error);
|
|
337
|
+
|
|
338
|
+
rb_eCairo_NegativeCount =
|
|
339
|
+
rb_define_class_under (rb_mCairo, "NegativeCount",
|
|
340
|
+
rb_eCairo_Error);
|
|
341
|
+
|
|
342
|
+
rb_eCairo_InvalidClusters =
|
|
343
|
+
rb_define_class_under (rb_mCairo, "InvalidClusters",
|
|
344
|
+
rb_eArgError);
|
|
345
|
+
|
|
346
|
+
rb_eCairo_InvalidSlant =
|
|
347
|
+
rb_define_class_under (rb_mCairo, "InvalidSlant",
|
|
348
|
+
rb_eCairo_Error);
|
|
349
|
+
|
|
350
|
+
rb_eCairo_InvalidWeight =
|
|
351
|
+
rb_define_class_under (rb_mCairo, "InvalidWeight",
|
|
352
|
+
rb_eArgError);
|
|
213
353
|
#endif
|
|
214
354
|
}
|
data/src/rb_cairo_font_extents.c
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Ruby Cairo Binding
|
|
4
4
|
*
|
|
5
5
|
* $Author: kou $
|
|
6
|
-
* $Date:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|
data/src/rb_cairo_font_face.c
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Ruby Cairo Binding
|
|
4
4
|
*
|
|
5
5
|
* $Author: kou $
|
|
6
|
-
* $Date:
|
|
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,
|
|
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 (
|
|
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
|
}
|