Mercurial > MadButterfly
annotate src/graph_engine_skia.cpp @ 513:6394a1e33b2f Android_Skia
Rewind/reset path and subpath.
In previously, only path was reseted for a new path. But, subpath
should also be reseted/rewinded for first relative moveto.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Tue, 01 Dec 2009 22:55:27 +0800 |
parents | d186d1e24458 |
children | 663d361eb3b8 |
rev | line source |
---|---|
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
1 /*! \page ge_layer Graphic Engine Layer |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
2 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
3 * Graphic Engine Layer is an abstract of graphic engine; likes Cairo |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
4 * and Skia. It provides portability for the rest of MadButterfly. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
5 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
6 * The basic stratage of interface of graphic engine layer is defined |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
7 * according purpose of MadButterfly. For example, MadButterfly wants |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
8 * a function that can clear a canvas, we define a clear function. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
9 * Never define a indirectly way to finish the function. Never define |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
10 * a way to finish the function for the reason that some engine |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
11 * require you to finish the task in that procedure. It avoids |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
12 * binding graphic engine layer with any behavior of a graphic engine, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
13 * and provides more compatible with other engines, to define |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
14 * interface of graphic engine layer according purpose of |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
15 * MadButterfly. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
16 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
17 * \section ge_mem Graphic Engine Layer Memory Management |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
18 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
19 * MadButterfly is responsible for management of objects and memory |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
20 * blocks returned by graphic engine layer, even for graphic engines |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
21 * that have management model. MadButterfly supposes memory blocks |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
22 * only be released when they are no more used. MadBufferfly is |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
23 * responsible for release them. So, even a graphic engine has |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
24 * reference count with objects, MadButterfly still keep a reference |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
25 * for every object returned by the engine until no one will use it. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
26 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
27 * \section ge_transform Transformation of Coordination System |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
28 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
29 * Points of pathes are transformed when it is added to the canvas |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
30 * with the transformation matrix at the time. So, changes of |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
31 * transformation matrix of an canvas will not affect points that had |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
32 * been added. It only affects points been added when the matrix is |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
33 * setted. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
34 */ |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
35 #include <stdio.h> |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
36 #include <SkCanvas.h> |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
37 #include <SkBitmap.h> |
495
9e36e06fcc18
Include SkRegion.h for graph_engine_skia.cpp
Thinker K.F. Li <thinker@branda.to>
parents:
483
diff
changeset
|
38 #include <SkRegion.h> |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
39 #include <SkShader.h> |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
40 #include <SkDevice.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
41 #include <SkGradientShader.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
42 #include <SkXfermode.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
43 #include <SkColorFilter.h> |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
44 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
45 #define C_START extern "C" { |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
46 #define C_END } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
47 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
48 C_START |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
49 |
468
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
50 #include "mb_graph_engine_skia.h" |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
51 #include "mb_shapes.h" |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
52 #include "mb_img_ldr.h" |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
53 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
54 /*! \brief Source pattern |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
55 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
56 * For Skia, source pattern is SkShader with some decoration. Since |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
57 * SkShade will repeative tiling or extenting edge color, it can not |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
58 * stop tiling and extenting for fixed size bitmap. So, we need to |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
59 * translate mbe_paint() into a drawing of a rectangle. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
60 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
61 struct _mbe_pattern_t { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
62 SkShader *shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
63 int w, h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
64 int has_size; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
65 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
66 }; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
67 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
68 struct _mbe_scaled_font_t { |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
69 struct _mb_font_face_t *face; |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
70 co_aix fnt_mtx[6]; |
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
71 co_aix ctm[6]; |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
72 }; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
73 struct _mbe_font_face_t {}; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
74 /*! \brief MadButterfly Graphic Engine Context. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
75 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
76 * A context comprises source pattern, target surface, path, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
77 * line-width, and transform matrix. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
78 */ |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
79 struct _mbe_t { |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
80 SkCanvas *canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
81 SkPath *path, *subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
82 SkPaint *paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
83 SkRegion *saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
84 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
85 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
86 }; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
87 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
88 struct _mbe_states_t { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
89 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
90 int ptn_owned; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
91 co_aix line_width; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
92 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
93 struct _mbe_states_t *next; |
469
4dc0be6c044a
Add copy and clear graphic engine functions.
Thinker K.F. Li <thinker@branda.to>
parents:
468
diff
changeset
|
94 }; |
468
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
95 |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
96 #ifndef ASSERT |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
97 #define ASSERT(x) |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
98 #endif |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
99 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
100 #define PI 3.1415926535897931 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
101 |
483
d984a6672be7
Fix bug of translate between co_aix and SkScalar.
Thinker K.F. Li <thinker@branda.to>
parents:
482
diff
changeset
|
102 #define CO_AIX_2_SKSCALAR(a) ((SkScalar)a) |
d984a6672be7
Fix bug of translate between co_aix and SkScalar.
Thinker K.F. Li <thinker@branda.to>
parents:
482
diff
changeset
|
103 #define SKSCALAR_2_CO_AIX(a) ((co_aix)(a)) |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
104 #define MB_MATRIX_2_SKMATRIX(sk, mb) { \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
105 (sk).setScaleX(CO_AIX_2_SKSCALAR((mb)[0])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
106 (sk).setSkewX(CO_AIX_2_SKSCALAR((mb)[1])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
107 (sk).setTranslateX(CO_AIX_2_SKSCALAR((mb)[2])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
108 (sk).setSkewY(CO_AIX_2_SKSCALAR((mb)[3])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
109 (sk).setScaleY(CO_AIX_2_SKSCALAR((mb)[4])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
110 (sk).setTranslateY(CO_AIX_2_SKSCALAR((mb)[5])); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
111 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
112 #define SKMATRIX_2_MB_MATRIX(mb, sk) { \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
113 (mb)[0] = SKSCALAR_2_CO_AIX((sk).getScaleX()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
114 (mb)[1] = SKSCALAR_2_CO_AIX((sk).getSkewX()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
115 (mb)[2] = SKSCALAR_2_CO_AIX((sk).getTranslateX()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
116 (mb)[3] = SKSCALAR_2_CO_AIX((sk).getSkewY()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
117 (mb)[4] = SKSCALAR_2_CO_AIX((sk).getScaleY()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
118 (mb)[5] = SKSCALAR_2_CO_AIX((sk).getTranslateY()); \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
119 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
120 #define MBSTOP_2_SKCOLOR(c) \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
121 ((((int)((c)->a * 255)) << 24) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
122 (((int)((c)->r * 255)) << 16) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
123 (((int)((c)->g * 255)) << 8) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
124 (((int)((c)->b * 255)))) |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
125 #define MB_CO_COMP_2_SK(c) (((int)((c) * 255)) & 0xff) |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
126 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
127 static const co_aix id_matrix[6] = { 1, 0, 0, 0, 1, 0 }; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
128 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
129 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
130 _prepare_sized_pattern(mbe_t *mbe, mbe_pattern_t *ptn) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
131 SkCanvas *canvas = mbe->canvas; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
132 SkPath path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
133 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
134 co_aix reverse[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
135 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
136 *mbe->saved_region = canvas->getTotalClip(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
137 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
138 compute_reverse(ptn->matrix, reverse); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
139 x = 0; y = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
140 matrix_trans_pos(reverse, &x, &y); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
141 path.moveTo(CO_AIX_2_SKSCALAR(x), CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
142 x = 0; y = ptn->h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
143 matrix_trans_pos(reverse, &x, &y); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
144 path.moveTo(CO_AIX_2_SKSCALAR(x), CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
145 x = ptn->w; y = ptn->h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
146 matrix_trans_pos(reverse, &x, &y); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
147 path.moveTo(CO_AIX_2_SKSCALAR(x), CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
148 path.close(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
149 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
150 canvas->clipPath(path, SkRegion::kIntersect_Op); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
151 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
152 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
153 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
154 _finish_sized_pattern(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
155 SkCanvas *canvas = mbe->canvas; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
156 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
157 canvas->setClipRegion(*mbe->saved_region); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
158 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
159 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
160 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
161 _canvas_device_region(SkCanvas *canvas, SkRegion *region) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
162 SkDevice *device; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
163 int w, h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
164 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
165 device = canvas->getDevice(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
166 w = device->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
167 h = device->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
168 region->setRect(0, 0, w, h); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
169 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
170 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
171 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
172 _update_path(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
173 SkPath *path = mbe->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
174 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
175 SkMatrix canvas_matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
176 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
177 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
178 MB_MATRIX_2_SKMATRIX(canvas_matrix, mbe->states->matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
179 path->addPath(*subpath, canvas_matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
180 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
181 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
182 subpath->rewind(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
183 subpath->moveTo(point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
184 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
185 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
186 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
187 * When a function want to use the paint associated with a canvas to |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
188 * draw, it should call _prepare_paint() can make the paint ready. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
189 * And, call _finish_paint() when the paint is no more used. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
190 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
191 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
192 _prepare_paint(mbe_t *mbe, SkPaint::Style style) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
193 SkPaint *paint = mbe->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
194 mbe_pattern_t *ptn = mbe->states->ptn; |
511
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
195 SkShader *shader; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
196 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
197 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
198 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
199 paint->setStyle(style); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
200 |
511
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
201 if(ptn != NULL) { |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
202 /* Local matrix of SkShader is a mapping from source pattern to |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
203 * user space. Unlikely, for Cairo is a mapping from user space |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
204 * to source pattern. |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
205 */ |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
206 shader = ptn->shader; |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
207 matrix_mul(mbe->states->matrix, ptn->matrix, matrix); |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
208 MB_MATRIX_2_SKMATRIX(skmatrix, matrix); |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
209 shader->setLocalMatrix(skmatrix); |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
210 paint->setShader(shader); |
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
211 } |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
212 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
213 if(style == SkPaint::kStroke_Style) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
214 paint->setStrokeWidth(CO_AIX_2_SKSCALAR(mbe->states->line_width)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
215 |
511
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
216 if(ptn != NULL && ptn->has_size) |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
217 _prepare_sized_pattern(mbe, ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
218 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
219 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
220 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
221 _finish_paint(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
222 mbe_pattern_t *ptn = mbe->states->ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
223 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
224 mbe->paint->reset(); |
511
caa087976b17
Fix the issue of segmentation fault when the pattern of a mbe is not setted.
Thinker K.F. Li <thinker@branda.to>
parents:
508
diff
changeset
|
225 if(ptn != NULL && ptn->has_size) |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
226 _finish_sized_pattern(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
227 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
228 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
229 mbe_pattern_t *mbe_pattern_create_for_surface(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
230 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
231 SkBitmap *bitmap = (SkBitmap *)surface; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
232 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
233 ptn = (mbe_pattern_t *)malloc(sizeof(mbe_pattern_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
234 ptn->shader = SkShader::CreateBitmapShader(*bitmap, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
235 SkShader::kClamp_TileMode, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
236 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
237 if(ptn->shader == NULL) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
238 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
239 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
240 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
241 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
242 ptn->has_size = 1; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
243 ptn->w = bitmap->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
244 ptn->h = bitmap->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
245 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
246 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
247 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
248 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
249 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
250 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
251 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
252 mbe_pattern_create_radial(co_aix cx0, co_aix cy0, co_aix radius0, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
253 co_aix cx1, co_aix cy1, co_aix radius1, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
254 grad_stop_t *stops, int stop_cnt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
255 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
256 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
257 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
258 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
259 SkPoint center; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
260 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
261 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
262 ptn = (mbe_pattern_t *)malloc(sizeof(mbe_pattern_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
263 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
264 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
265 if(ptn == NULL || colors == NULL || poses == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
266 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
267 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
268 center.set(CO_AIX_2_SKSCALAR(cx1), CO_AIX_2_SKSCALAR(cy1)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
269 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
270 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
271 for(i = 0; i < stop_cnt; i++) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
272 colors[i] = MBSTOP_2_SKCOLOR(stop); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
273 poses[i] = CO_AIX_2_SKSCALAR(stop->offset); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
274 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
275 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
276 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
277 * cx0, cy0 and radius0 is not used. Since Skia is still not |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
278 * support two circles radial. And, SVG 1.2 is also not support |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
279 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
280 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
281 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
282 SkGradientShader::CreateRadial(center, CO_AIX_2_SKSCALAR(radius1), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
283 colors, poses, stop_cnt, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
284 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
285 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
286 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
287 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
288 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
289 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
290 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
291 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
292 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
293 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
294 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
295 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
296 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
297 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
298 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
299 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
300 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
301 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
302 mbe_pattern_create_linear(co_aix x0, co_aix y0, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
303 co_aix x1, co_aix y1, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
304 grad_stop_t *stops, int stop_cnt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
305 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
306 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
307 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
308 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
309 SkPoint points[2]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
310 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
311 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
312 ptn = (mbe_pattern_t *)malloc(sizeof(mbe_pattern_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
313 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
314 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
315 if(ptn == NULL || colors == NULL || poses == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
316 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
317 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
318 points[0].set(CO_AIX_2_SKSCALAR(x0), CO_AIX_2_SKSCALAR(y0)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
319 points[1].set(CO_AIX_2_SKSCALAR(x1), CO_AIX_2_SKSCALAR(y1)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
320 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
321 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
322 for(i = 0; i < stop_cnt; i++) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
323 colors[i] = MBSTOP_2_SKCOLOR(stop); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
324 poses[i] = CO_AIX_2_SKSCALAR(stop->offset); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
325 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
326 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
327 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
328 * cx0, cy0 and radius0 is not used. Since Skia is still not |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
329 * support two circles radial. And, SVG 1.2 is also not support |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
330 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
331 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
332 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
333 SkGradientShader::CreateLinear(points, colors, poses, stop_cnt, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
334 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
335 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
336 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
337 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
338 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
339 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
340 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
341 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
342 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
343 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
344 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
345 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
346 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
347 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
348 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
349 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
350 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
351 void mbe_pattern_set_matrix(mbe_pattern_t *ptn, const co_aix matrix[6]) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
352 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
353 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
354 MB_MATRIX_2_SKMATRIX(skmatrix, matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
355 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
356 ptn->shader->setLocalMatrix(skmatrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
357 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
358 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
359 void mbe_pattern_destroy(mbe_pattern_t *ptn) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
360 if(ptn->shader) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
361 delete ptn->shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
362 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
363 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
364 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
365 int mbe_image_surface_get_stride(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
366 return ((SkBitmap *)surface)->rowBytes(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
367 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
368 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
369 int mbe_image_surface_get_height(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
370 return ((SkBitmap *)surface)->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
371 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
372 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
373 int mbe_image_surface_get_width(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
374 return ((SkBitmap *)surface)->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
375 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
376 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
377 unsigned char *mbe_image_surface_get_data(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
378 return (unsigned char *)((SkBitmap *)surface)->getPixels(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
379 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
380 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
381 mbe_surface_t *mbe_image_surface_create_from_png(const char *filename) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
382 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
383 mbe_surface_t * |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
384 mbe_image_surface_create_for_data(unsigned char *data, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
385 mb_img_fmt_t fmt, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
386 int width, int height, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
387 int stride) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
388 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
389 SkBitmap::Config cfg; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
390 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
391 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
392 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
393 cfg = SkBitmap::kARGB_8888_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
394 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
395 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
396 cfg = SkBitmap::kA8_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
397 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
398 case MB_IFMT_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
399 cfg = SkBitmap::kA1_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
400 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
401 case MB_IFMT_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
402 cfg = SkBitmap::kRGB_565_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
403 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
404 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
405 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
406 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
407 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
408 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
409 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
410 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
411 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
412 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
413 bitmap->setConfig(cfg, width, height, stride); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
414 bitmap->setPixels(data); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
415 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
416 return (mbe_surface_t *)bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
417 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
418 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
419 mb_img_fmt_t mbe_image_surface_get_format(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
420 SkBitmap *bitmap = (SkBitmap *)surface; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
421 mb_img_fmt_t fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
422 SkBitmap::Config cfg; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
423 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
424 cfg = bitmap->getConfig(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
425 switch(cfg) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
426 case SkBitmap::kARGB_8888_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
427 fmt = MB_IFMT_ARGB32; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
428 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
429 case SkBitmap::kA8_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
430 fmt = MB_IFMT_A8; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
431 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
432 case SkBitmap::kA1_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
433 fmt = MB_IFMT_A1; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
434 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
435 case SkBitmap::kRGB_565_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
436 fmt = MB_IFMT_RGB16_565; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
437 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
438 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
439 fmt = MB_IFMT_DUMMY; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
440 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
441 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
442 return fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
443 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
444 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
445 mbe_surface_t * |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
446 mbe_image_surface_create(mb_img_fmt_t fmt, int width, int height) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
447 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
448 SkBitmap::Config cfg; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
449 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
450 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
451 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
452 cfg = SkBitmap::kARGB_8888_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
453 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
454 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
455 cfg = SkBitmap::kA8_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
456 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
457 case MB_IFMT_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
458 cfg = SkBitmap::kA1_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
459 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
460 case MB_IFMT_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
461 cfg = SkBitmap::kRGB_565_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
462 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
463 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
464 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
465 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
466 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
467 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
468 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
469 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
470 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
471 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
472 bitmap->setConfig(cfg, width, height); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
473 bitmap->allocPixels(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
474 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
475 return (mbe_surface_t *)bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
476 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
477 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
478 mbe_scaled_font_t *mbe_scaled_font_reference(mbe_scaled_font_t *scaled) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
479 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
480 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
481 void mbe_scaled_font_destroy(mbe_scaled_font_t *scaled) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
482 mbe_font_face_t *mbe_font_face_reference(mbe_font_face_t *face) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
483 mbe_scaled_font_t * |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
484 mbe_scaled_font_create(mbe_font_face_t *face, co_aix fnt_mtx[6], |
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
485 co_aix ctm[6]) {} |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
486 mbe_scaled_font_t *mbe_get_scaled_font(mbe_t *canvas) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
487 void mbe_scaled_font_text_extents(mbe_scaled_font_t *scaled, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
488 const char *txt, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
489 mbe_text_extents_t *extents) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
490 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
491 void mbe_font_face_destroy(mbe_font_face_t *face) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
492 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
493 void mbe_paint_with_alpha(mbe_t *canvas, co_aix alpha) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
494 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
495 SkColorFilter *filter; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
496 SkColor color; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
497 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
498 color = ((uint32_t)(alpha * 255)) << 24; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
499 filter = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
500 SkColorFilter::CreatePorterDuffFilter(color, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
501 SkPorterDuff::kSrcOver_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
502 mbe_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
503 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
504 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
505 |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
506 void mbe_surface_destroy(mbe_surface_t *surface) { |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
507 SkBitmap *bmap = (SkBitmap *)surface; |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
508 |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
509 delete bmap; |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
510 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
511 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
512 void mbe_set_source_rgba(mbe_t *canvas, |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
513 co_aix r, co_aix g, co_aix b, co_aix a) { |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
514 canvas->paint->setARGB(MB_CO_COMP_2_SK(a), |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
515 MB_CO_COMP_2_SK(r), |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
516 MB_CO_COMP_2_SK(g), |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
517 MB_CO_COMP_2_SK(b)); |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
518 canvas->states->ptn = NULL; |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
519 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
520 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
521 void mbe_set_scaled_font(mbe_t *canvas, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
522 const mbe_scaled_font_t *scaled) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
523 void mbe_set_source_rgb(mbe_t *canvas, co_aix r, co_aix g, co_aix b) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
524 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
525 void mbe_set_line_width(mbe_t *canvas, co_aix width) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
526 canvas->states->line_width = width; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
527 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
528 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
529 mbe_font_face_t *mbe_get_font_face(mbe_t *canvas) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
530 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
531 void mbe_fill_preserve(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
532 mbe_pattern_t *ptn = canvas->states->ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
533 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
534 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
535 SkRegion *saved_clip = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
536 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
537 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
538 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
539 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
540 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
541 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
542 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
543 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
544 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
545 _prepare_paint(canvas, SkPaint::kFill_Style); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
546 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
547 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
548 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
549 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
550 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
551 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
552 void mbe_set_source(mbe_t *canvas, mbe_pattern_t *source) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
553 canvas->states->ptn = source; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
554 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
555 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
556 void mbe_reset_clip(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
557 SkRegion clip; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
558 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
559 _canvas_device_region(canvas->canvas, &clip); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
560 canvas->canvas->setClipRegion(clip); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
561 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
562 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
563 mbe_surface_t *mbe_get_target(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
564 return (mbe_surface_t *)&canvas->canvas->getDevice()->accessBitmap(false); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
565 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
566 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
567 void mbe_close_path(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
568 canvas->subpath->close(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
569 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
570 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
571 void mbe_text_path(mbe_t *canvas, const char *txt) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
572 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
573 void mbe_rectangle(mbe_t *canvas, co_aix x, co_aix y, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
574 co_aix width, co_aix height) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
575 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
576 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
577 subpath->addRect(CO_AIX_2_SKSCALAR(x), CO_AIX_2_SKSCALAR(y), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
578 CO_AIX_2_SKSCALAR(x + width), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
579 CO_AIX_2_SKSCALAR(y + height)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
580 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
581 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
582 int mbe_in_stroke(mbe_t *canvas, co_aix x, co_aix y) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
583 return 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
584 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
585 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
586 void mbe_new_path(mbe_t *canvas) { |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
587 canvas->subpath->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
588 canvas->path->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
589 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
590 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
591 void mbe_curve_to(mbe_t *canvas, co_aix x1, co_aix y1, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
592 co_aix x2, co_aix y2, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
593 co_aix x3, co_aix y3) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
594 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
595 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
596 subpath->cubicTo(CO_AIX_2_SKSCALAR(x1), CO_AIX_2_SKSCALAR(y1), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
597 CO_AIX_2_SKSCALAR(x2), CO_AIX_2_SKSCALAR(y2), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
598 CO_AIX_2_SKSCALAR(x3), CO_AIX_2_SKSCALAR(y3)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
599 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
600 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
601 void mbe_restore(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
602 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
603 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
604 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
605 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
606 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
607 ASSERT(states->next); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
608 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
609 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
610 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
611 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
612 void mbe_move_to(mbe_t *canvas, co_aix x, co_aix y) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
613 canvas->subpath->moveTo(CO_AIX_2_SKSCALAR(x), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
614 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
615 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
616 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
617 void mbe_line_to(mbe_t *canvas, co_aix x, co_aix y) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
618 canvas->subpath->lineTo(CO_AIX_2_SKSCALAR(x), |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
619 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
620 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
621 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
622 int mbe_in_fill(mbe_t *canvas, co_aix x, co_aix y) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
623 SkRegion region, dev_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
624 bool in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
625 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
626 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
627 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
628 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
629 _canvas_device_region(canvas->canvas, &dev_region); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
630 region.setPath(*canvas->path, dev_region); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
631 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
632 in_fill = region.contains(x, y); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
633 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
634 return in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
635 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
636 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
637 void mbe_stroke(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
638 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
639 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
640 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
641 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
642 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
643 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
644 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
645 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
646 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
647 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
648 _prepare_paint(canvas, SkPaint::kStroke_Style); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
649 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
650 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
651 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
652 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
653 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
654 path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
655 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
656 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
657 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
658 /*! \brief Create a mbe from a SkCanvas. |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
659 * |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
660 * It is only used for Android JNI. It is used to create mbe_t from a |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
661 * SkCanvas created by Canvas class of Android Java application. |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
662 */ |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
663 mbe_t *skia_mbe_create_by_canvas(SkCanvas *canvas) { |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
664 mbe_t *mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
665 struct _mbe_states_t *states; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
666 |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
667 mbe = (mbe_t *)malloc(sizeof(mbe_t)); |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
668 if(mbe == NULL) |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
669 return NULL; |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
670 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
671 mbe->states = (struct _mbe_states_t *) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
672 malloc(sizeof(struct _mbe_states_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
673 states = mbe->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
674 if(states == NULL) { |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
675 free(mbe); |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
676 return NULL; |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
677 } |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
678 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
679 canvas->ref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
680 mbe->canvas = canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
681 mbe->path = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
682 mbe->subpath = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
683 mbe->saved_region = new SkRegion(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
684 mbe->paint = new SkPaint(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
685 states->ptn = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
686 states->ptn_owned = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
687 states->line_width = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
688 states->next = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
689 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
690 if(mbe->path == NULL || |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
691 mbe->subpath == NULL || mbe->paint == NULL || |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
692 mbe->saved_region == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
693 goto fail; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
694 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
695 memcpy(states->matrix, id_matrix, sizeof(co_aix) * 6); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
696 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
697 return mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
698 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
699 fail: |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
700 canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
701 if(mbe->path) delete mbe->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
702 if(mbe->subpath) delete mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
703 if(mbe->paint) delete mbe->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
704 if(mbe->saved_region) delete mbe->saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
705 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
706 free(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
707 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
708 return NULL; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
709 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
710 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
711 mbe_t *mbe_create(mbe_surface_t *target) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
712 mbe_t *mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
713 SkBitmap *bitmap = (SkBitmap *)target; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
714 SkCanvas *canvas; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
715 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
716 canvas = new SkCanvas(*bitmap); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
717 if(canvas == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
718 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
719 return NULL; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
720 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
721 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
722 mbe = skia_mbe_create_by_canvas(canvas); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
723 canvas->unref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
724 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
725 if(mbe == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
726 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
727 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
728 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
729 return mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
730 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
731 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
732 void mbe_destroy(mbe_t *canvas) { |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
733 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
734 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
735 canvas->canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
736 delete canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
737 delete canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
738 delete canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
739 delete canvas->saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
740 while(canvas->states) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
741 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
742 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
743 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
744 if(states->ptn && states->ptn_owned) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
745 mbe_pattern_destroy(states->ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
746 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
747 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
748 free(canvas); |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
749 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
750 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
751 void mbe_paint(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
752 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
753 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
754 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
755 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
756 _prepare_paint(canvas, SkPaint::kFill_Style); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
757 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
758 canvas->canvas->drawPaint(*paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
759 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
760 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
761 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
762 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
763 void mbe_save(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
764 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
765 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
766 states = (struct _mbe_states_t *)malloc(sizeof(struct _mbe_states_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
767 ASSERT(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
768 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
769 memcpy(states, canvas->states, sizeof(struct _mbe_states_t)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
770 states->next = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
771 canvas->states = states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
772 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
773 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
774 void mbe_fill(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
775 mbe_fill_preserve(canvas); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
776 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
777 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
778 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
779 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
780 void mbe_clip(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
781 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
782 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
783 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
784 canvas->canvas->clipPath(*canvas->path, SkRegion::kIntersect_Op); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
785 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
786 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
787 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
788 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
789 mbe_font_face_t * mbe_query_font_face(const char *family, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
790 int slant, int weight) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
791 void mbe_free_font_face(mbe_font_face_t *face) {} |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
792 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
793 void mbe_clear(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
794 SkColor color = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
795 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
796 canvas->canvas->drawColor(color, SkPorterDuff::kClear_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
797 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
798 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
799 void mbe_copy_source(mbe_t *src, mbe_t *dst) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
800 SkPaint *paint = dst->paint; |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
801 const SkBitmap *bmap; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
802 SkXfermode *mode; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
803 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
804 /* _prepare_paint(dst, SkPaint::kFill_Style); */ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
805 mode = SkPorterDuff::CreateXfermode(SkPorterDuff::kSrc_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
806 paint->setXfermode(mode); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
807 bmap = &src->canvas->getDevice()->accessBitmap(false); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
808 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
809 dst->canvas->drawBitmap(*bmap, 0, 0, paint); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
810 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
811 paint->reset(); |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
812 mode->unref(); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
813 /* _finish_paint(dst); */ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
814 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
815 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
816 void mbe_transform(mbe_t *mbe, co_aix matrix[6]) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
817 _update_path(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
818 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
819 matrix_mul(matrix, mbe->states->matrix, mbe->states->matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
820 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
821 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
822 void mbe_arc(mbe_t *mbe, co_aix x, co_aix y, co_aix radius, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
823 co_aix angle_start, co_aix angle_stop) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
824 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
825 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
826 SkRect rect; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
827 SkScalar x0, y0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
828 SkScalar ang_start, ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
829 SkScalar sweep; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
830 SkScalar r; /* radius */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
831 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
832 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
833 x0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
834 y0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
835 r = CO_AIX_2_SKSCALAR(radius); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
836 ang_start = CO_AIX_2_SKSCALAR(angle_start * 180 / PI); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
837 ang_stop = CO_AIX_2_SKSCALAR(angle_stop * 180 / PI); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
838 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
839 /* Skia can only draw an arc in clockwise directly. We negative |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
840 * start and stop point to draw the arc in the mirror along x-axis |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
841 * in a sub-path. Then, the sub-path are reflected along x-axis, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
842 * again. We get a right path, and add it to the path of mbe_t. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
843 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
844 if(ang_start > ang_stop) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
845 SkPath tmppath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
846 SkMatrix matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
847 co_aix reflect[6] = { 1, 0, 0, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
848 0, -1, 0}; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
849 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
850 rect.set(-r, -r, r, r); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
851 sweep = ang_start - ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
852 tmppath.arcTo(rect, -ang_start, sweep, false); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
853 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
854 reflect[2] = x; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
855 reflect[5] = y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
856 MB_MATRIX_2_SKMATRIX(matrix, reflect); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
857 subpath->addPath(tmppath, matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
858 } else { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
859 rect.set(x0 - r, y0 - r, x0 + r, y0 + r); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
860 sweep = ang_stop - ang_start; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
861 subpath->arcTo(rect, ang_start, sweep, false); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
862 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
863 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
864 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
865 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
866 C_END |