Mercurial > MadButterfly
annotate src/graph_engine_cairo.c @ 880:ac3e8492ad74 abs_n_rel_center
Formalize path data for MadButterfly.
Inkscape and other editors would omit 'l' or 'L' after 'm' or 'M'.
MadButterfly can not handle it, now. So, we work around it at SVG
parser.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sat, 25 Sep 2010 18:46:37 +0800 |
parents | 586e50f82c1f |
children | 74e3ba4d3fa1 |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 #include <fontconfig/fontconfig.h> |
480
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
4 #include <cairo-ft.h> |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 #include "mb_graph_engine_cairo.h" |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 #include "mb_shapes.h" |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 #ifndef ASSERT |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 #define ASSERT(x) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 #endif |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 /*! \brief Find out a font pattern. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 * |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 * This function use fontconfig to decide a font file in pattern. It can |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 * replaced by other mechanism if you think it is not what you want. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 * |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 * \param slant make font prune if it it non-zero. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 * \param weight make font normal if it is 100. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 */ |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
20 static |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
21 FcPattern *query_font_pattern(const char *family, int slant, int weight) { |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
22 FcPattern *ptn, *p, *fn_ptn; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
23 FcValue val; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
24 FcConfig *cfg; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
25 FcBool r; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
26 FcResult result; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
27 static int slant_map[] = { /* from MB_FONT_SLANT_* to FC_SLANT_* */ |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
28 FC_SLANT_ROMAN, |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
29 FC_SLANT_ROMAN, |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
30 FC_SLANT_ITALIC, |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
31 FC_SLANT_OBLIQUE}; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
32 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
33 cfg = FcConfigGetCurrent(); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
34 ptn = FcPatternCreate(); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
35 p = FcPatternCreate(); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
36 if(ptn == NULL || p == NULL) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
37 goto err; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
38 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
39 val.type = FcTypeString; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
40 val.u.s = family; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
41 FcPatternAdd(ptn, "family", val, FcTrue); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
42 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
43 val.type = FcTypeInteger; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
44 val.u.i = slant_map[slant]; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
45 FcPatternAdd(ptn, "slant", val, FcTrue); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
46 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
47 val.type = FcTypeInteger; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
48 val.u.i = weight; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
49 FcPatternAdd(ptn, "weight", val, FcTrue); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
50 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
51 r = FcConfigSubstituteWithPat(cfg, ptn, NULL, FcMatchPattern); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
52 if(!r) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
53 goto err; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
54 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
55 r = FcConfigSubstituteWithPat(cfg, p, ptn, FcMatchFont); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
56 if(!r) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
57 goto err; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
58 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
59 FcDefaultSubstitute(p); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
60 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
61 fn_ptn = FcFontMatch(cfg, p, &result); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
62 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
63 /* It is supposed to return FcResultMatch. But, it is no, now. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
64 * I don't know why. Someone should figure out the issue. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
65 */ |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
66 #if 0 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
67 if(result != FcResultMatch) { |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
68 printf("%d %d\n", result, FcResultMatch); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
69 goto err; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
70 } |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
71 #endif |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
72 if(fn_ptn == NULL) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
73 goto err; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
74 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
75 FcPatternDestroy(ptn); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
76 FcPatternDestroy(p); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
77 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
78 return fn_ptn; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
79 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
80 err: |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
81 if(ptn) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
82 FcPatternDestroy(ptn); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
83 if(p) |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
84 FcPatternDestroy(p); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
85 return NULL; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
86 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
87 } |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
88 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
89 /*! \brief Find out a font face for a pattern specified. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
90 * |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
91 * The pattern, here, is a vector of family, slant, and weight. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
92 * This function base on fontconfig and cairo FreeType font supporting. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
93 * You can replace this function with other font mechanisms. |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
94 */ |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
95 mbe_font_face_t * |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
96 mbe_query_font_face(const char *family, int slant, int weight) { |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
97 mbe_font_face_t *cface; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
98 FcPattern *ptn; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
99 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
100 ptn = query_font_pattern(family, slant, weight); |
469
4dc0be6c044a
Add copy and clear graphic engine functions.
Thinker K.F. Li <thinker@branda.to>
parents:
465
diff
changeset
|
101 cface = cairo_ft_font_face_create_for_pattern(ptn); |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
102 FcPatternDestroy(ptn); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
103 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
104 return cface; |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
105 } |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
106 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
107 void |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
108 mbe_free_font_face(mbe_font_face_t *face) { |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
109 ASSERT(face == NULL); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
110 |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
111 mbe_font_face_destroy(face); |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
112 } |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
113 |
480
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
114 mbe_pattern_t * |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
115 mbe_pattern_create_radial(co_aix cx0, co_aix cy0, co_aix radius0, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
116 co_aix cx1, co_aix cy1, co_aix radius1, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
117 grad_stop_t *stops, int stop_cnt) { |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
118 cairo_pattern_t *ptn; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
119 grad_stop_t *stop; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
120 int i; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
121 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
122 ptn = cairo_pattern_create_radial(cx0, cy0, radius0, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
123 cx1, cy1, radius1); |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
124 if(ptn == NULL) |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
125 return NULL; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
480
diff
changeset
|
126 |
480
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
127 stop = stops; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
128 for(i = 0; i < stop_cnt; i++) { |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
129 cairo_pattern_add_color_stop_rgba(ptn, stop->offset, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
130 stop->r, stop->g, stop->b, stop->a); |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
131 stop++; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
132 } |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
133 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
134 return ptn; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
135 } |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
136 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
137 mbe_pattern_t * |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
138 mbe_pattern_create_linear(co_aix x0, co_aix y0, co_aix x1, co_aix y1, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
139 grad_stop_t *stops, int stop_cnt) { |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
140 cairo_pattern_t *ptn; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
141 grad_stop_t *stop; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
142 int i; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
143 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
144 ptn = cairo_pattern_create_linear(x0, y0, x1, y1); |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
145 if(ptn == NULL) |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
146 return NULL; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
147 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
148 stop = stops; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
149 for(i = 0; i < stop_cnt; i++) { |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
150 cairo_pattern_add_color_stop_rgba(ptn, stop->offset, |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
151 stop->r, stop->g, stop->b, stop->a); |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
152 stop++; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
153 } |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
154 |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
155 return ptn; |
e813ac222f48
Merge add colors into constructor of gradient pattern.
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
156 } |