2
/******************************************************************************
3
* MODULE : tm_cairo.cpp
4
* DESCRIPTION: Interface with Cairo
5
* COPYRIGHT : (C) 2008 Massimiliano Gubinelli
6
*******************************************************************************
7
* This software falls under the GNU general public license version 3 or later.
8
* It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
9
* in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
10
******************************************************************************/
12
#include "dyn_link.hpp"
19
static bool tm_cairo_initialized= false;
20
static bool tm_cairo_error = true;
22
void (*tm_cairo_move_to) (cairo_t *cr, double x, double y);
23
void (*tm_cairo_show_glyphs) (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs);
24
cairo_status_t (*tm_cairo_font_face_status) (cairo_font_face_t *font_face);
25
void (*tm_cairo_set_source_surface) (cairo_t *cr, cairo_surface_t *surface, double x, double y);
26
void (*tm_cairo_new_path) (cairo_t *cr);
27
void (*tm_cairo_stroke) (cairo_t *cr);
28
cairo_status_t (*tm_cairo_font_face_set_user_data) (cairo_font_face_t *font_face, const cairo_user_data_key_t *key, void *user_data, cairo_destroy_func_t destroy);
29
void (*tm_cairo_set_antialias) (cairo_t *cr, cairo_antialias_t antialias);
30
void (*tm_cairo_set_font_size) (cairo_t *cr, double size);
31
void (*tm_cairo_fill) (cairo_t *cr);
32
void (*tm_cairo_set_source_rgba) (cairo_t *cr, double red, double green, double blue, double alpha);
33
cairo_surface_t * (*tm_cairo_ps_surface_create) (const char *filename, double width_in_points, double height_in_points);
34
const char * (*tm_cairo_status_to_string) (cairo_status_t status);
35
void (*tm_cairo_set_source_rgb) (cairo_t *cr, double red, double green, double blue);
36
void (*tm_cairo_close_path) (cairo_t *cr);
37
void (*tm_cairo_restore) (cairo_t *cr);
38
void (*tm_cairo_translate) (cairo_t *cr, double tx, double ty);
39
void (*tm_cairo_set_font_face) (cairo_t *cr, cairo_font_face_t *font_face);
40
void (*tm_cairo_font_face_destroy) (cairo_font_face_t *font_face);
41
void (*tm_cairo_set_line_width) (cairo_t *cr, double width);
42
cairo_surface_t * (*tm_cairo_image_surface_create_from_png) (const char *filename);
43
cairo_font_face_t * (*tm_cairo_ft_font_face_create_for_ft_face) (FT_Face face, int load_flags);
44
int (*tm_cairo_image_surface_get_width) (cairo_surface_t *surface);
45
void (*tm_cairo_scale) (cairo_t *cr, double sx, double sy);
46
void (*tm_cairo_mask) (cairo_t *cr, cairo_pattern_t *pattern);
47
void (*tm_cairo_set_operator) (cairo_t *cr, cairo_operator_t op);
48
cairo_surface_t * (*tm_cairo_image_surface_create) (cairo_format_t format, int width, int height);
49
void (*tm_cairo_paint) (cairo_t *cr);
50
void (*tm_cairo_rectangle) (cairo_t *cr, double x, double y, double width, double height);
51
void (*tm_cairo_set_line_cap) (cairo_t *cr, cairo_line_cap_t line_cap);
52
void (*tm_cairo_set_line_join) (cairo_t *cr, cairo_line_join_t line_join);
53
cairo_surface_t * (*tm_cairo_surface_reference) (cairo_surface_t *surface);
54
void (*tm_cairo_line_to) (cairo_t *cr, double x, double y);
55
cairo_status_t (*tm_cairo_status) (cairo_t *cr);
56
void (*tm_cairo_show_page) (cairo_t *cr);
57
cairo_t * (*tm_cairo_reference) (cairo_t *cr);
58
cairo_t * (*tm_cairo_create) (cairo_surface_t *target);
59
void (*tm_cairo_surface_destroy) (cairo_surface_t *surface);
60
void (*tm_cairo_set_fill_rule) (cairo_t *cr, cairo_fill_rule_t fill_rule);
61
void (*tm_cairo_destroy) (cairo_t *cr);
62
void (*tm_cairo_save) (cairo_t *cr);
63
void (*tm_cairo_set_source) (cairo_t *cr, cairo_pattern_t *source);
64
int (*tm_cairo_image_surface_get_height) (cairo_surface_t *surface);
65
void (*tm_cairo_mask_surface) (cairo_t *cr, cairo_surface_t *surface, double surface_x, double surface_y);
69
tm_cairo_initialize () {
70
if (tm_cairo_initialized) return tm_cairo_error;
71
tm_cairo_initialized= true;
74
#define CAIRO_LINK(a,b) b = a
76
#define CAIRO_LINK(LIBFUNC,LOCALFUNC) \
77
(void) symbol_install ("/usr/lib/cairo.so", #LIBFUNC , (pointer&) LOCALFUNC); \
78
if (LOCALFUNC == NULL) return true;
80
int status= debug_off ();
83
CAIRO_LINK(cairo_move_to, tm_cairo_move_to);
84
CAIRO_LINK(cairo_show_glyphs, tm_cairo_show_glyphs);
85
CAIRO_LINK(cairo_font_face_status, tm_cairo_font_face_status);
86
CAIRO_LINK(cairo_set_source_surface, tm_cairo_set_source_surface);
87
CAIRO_LINK(cairo_new_path, tm_cairo_new_path);
88
CAIRO_LINK(cairo_stroke, tm_cairo_stroke);
89
CAIRO_LINK(cairo_font_face_set_user_data, tm_cairo_font_face_set_user_data);
90
CAIRO_LINK(cairo_set_antialias, tm_cairo_set_antialias);
91
CAIRO_LINK(cairo_set_font_size, tm_cairo_set_font_size);
92
CAIRO_LINK(cairo_fill, tm_cairo_fill);
93
CAIRO_LINK(cairo_set_source_rgba, tm_cairo_set_source_rgba);
94
CAIRO_LINK(cairo_ps_surface_create, tm_cairo_ps_surface_create);
95
CAIRO_LINK(cairo_status_to_string, tm_cairo_status_to_string);
96
CAIRO_LINK(cairo_set_source_rgb, tm_cairo_set_source_rgb);
97
CAIRO_LINK(cairo_close_path, tm_cairo_close_path);
98
CAIRO_LINK(cairo_restore, tm_cairo_restore);
99
CAIRO_LINK(cairo_translate, tm_cairo_translate);
100
CAIRO_LINK(cairo_set_font_face, tm_cairo_set_font_face);
101
CAIRO_LINK(cairo_font_face_destroy, tm_cairo_font_face_destroy);
102
CAIRO_LINK(cairo_set_line_width, tm_cairo_set_line_width);
103
CAIRO_LINK(cairo_image_surface_create_from_png, tm_cairo_image_surface_create_from_png);
104
CAIRO_LINK(cairo_ft_font_face_create_for_ft_face, tm_cairo_ft_font_face_create_for_ft_face);
105
CAIRO_LINK(cairo_image_surface_get_width, tm_cairo_image_surface_get_width);
106
CAIRO_LINK(cairo_scale, tm_cairo_scale);
107
CAIRO_LINK(cairo_mask, tm_cairo_mask);
108
CAIRO_LINK(cairo_set_operator, tm_cairo_set_operator);
109
CAIRO_LINK(cairo_image_surface_create, tm_cairo_image_surface_create);
110
CAIRO_LINK(cairo_paint, tm_cairo_paint);
111
CAIRO_LINK(cairo_rectangle, tm_cairo_rectangle);
112
CAIRO_LINK(cairo_set_line_cap, tm_cairo_set_line_cap);
113
CAIRO_LINK(cairo_set_line_join, tm_cairo_set_line_join);
114
CAIRO_LINK(cairo_surface_reference, tm_cairo_surface_reference);
115
CAIRO_LINK(cairo_line_to, tm_cairo_line_to);
116
CAIRO_LINK(cairo_status, tm_cairo_status);
117
CAIRO_LINK(cairo_show_page, tm_cairo_show_page);
118
CAIRO_LINK(cairo_reference, tm_cairo_reference);
119
CAIRO_LINK(cairo_create, tm_cairo_create);
120
CAIRO_LINK(cairo_surface_destroy, tm_cairo_surface_destroy);
121
CAIRO_LINK(cairo_set_fill_rule, tm_cairo_set_fill_rule);
122
CAIRO_LINK(cairo_destroy, tm_cairo_destroy);
123
CAIRO_LINK(cairo_save, tm_cairo_save);
124
CAIRO_LINK(cairo_set_source, tm_cairo_set_source);
125
CAIRO_LINK(cairo_image_surface_get_height, tm_cairo_image_surface_get_height);
126
CAIRO_LINK(cairo_mask_surface, tm_cairo_mask_surface);
130
if (DEBUG_AUTO) cout << "TeXmacs] With linked Cairo support\n";
132
if (DEBUG_AUTO) cout << "TeXmacs] Installed Cairo support\n";
137
tm_cairo_error= false;
142
tm_cairo_present () {
143
return !tm_cairo_initialize ();
148
bool tm_cairo_initialize () { return true; }
149
bool tm_cairo_present () { return false; }