Mercurial > MadButterfly
annotate src/graph_engine_skia.cpp @ 631:01e960bfc9ff
Implement text style parser
author | wycc |
---|---|
date | Wed, 21 Jul 2010 07:26:12 +0800 |
parents | 663d361eb3b8 |
children | b42d69ab8857 586e50f82c1f |
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])); \ |
514
663d361eb3b8
Set perspective of 3x3 matrix when translate MB matrix to SkMatrix.
Thinker K.F. Li <thinker@branda.to>
parents:
513
diff
changeset
|
111 (sk).setPerspX(0); \ |
663d361eb3b8
Set perspective of 3x3 matrix when translate MB matrix to SkMatrix.
Thinker K.F. Li <thinker@branda.to>
parents:
513
diff
changeset
|
112 (sk).setPerspY(0); \ |
663d361eb3b8
Set perspective of 3x3 matrix when translate MB matrix to SkMatrix.
Thinker K.F. Li <thinker@branda.to>
parents:
513
diff
changeset
|
113 (sk).set(SkMatrix::kMPersp2, 1); \ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
114 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
115 #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
|
116 (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
|
117 (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
|
118 (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
|
119 (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
|
120 (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
|
121 (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
|
122 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
123 #define MBSTOP_2_SKCOLOR(c) \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
124 ((((int)((c)->a * 255)) << 24) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
125 (((int)((c)->r * 255)) << 16) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
126 (((int)((c)->g * 255)) << 8) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
127 (((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
|
128 #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
|
129 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
130 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
|
131 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
132 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
133 _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
|
134 SkCanvas *canvas = mbe->canvas; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
135 SkPath path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
136 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
137 co_aix reverse[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
138 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
139 *mbe->saved_region = canvas->getTotalClip(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
140 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
141 compute_reverse(ptn->matrix, reverse); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
142 x = 0; y = 0; |
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 = 0; 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 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
|
149 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
|
150 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
|
151 path.close(); |
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 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
|
154 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
155 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
156 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
157 _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
|
158 SkCanvas *canvas = mbe->canvas; |
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 canvas->setClipRegion(*mbe->saved_region); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
161 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
162 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
163 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
164 _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
|
165 SkDevice *device; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
166 int w, h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
167 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
168 device = canvas->getDevice(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
169 w = device->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
170 h = device->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
171 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
|
172 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
173 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
174 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
175 _update_path(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
176 SkPath *path = mbe->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
177 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
178 SkMatrix canvas_matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
179 SkPoint point; |
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 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
|
182 path->addPath(*subpath, canvas_matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
183 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
184 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
185 subpath->rewind(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
186 subpath->moveTo(point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
187 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
188 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
189 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
190 * 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
|
191 * 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
|
192 * 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
|
193 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
194 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
195 _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
|
196 SkPaint *paint = mbe->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
197 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
|
198 SkShader *shader; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
199 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
200 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
201 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
202 paint->setStyle(style); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
203 |
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
|
204 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
|
205 /* 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
|
206 * 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
|
207 * 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
|
208 */ |
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 = 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 } |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
215 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
216 if(style == SkPaint::kStroke_Style) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
217 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
|
218 |
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
|
219 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
|
220 _prepare_sized_pattern(mbe, ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
221 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
222 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
223 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
224 _finish_paint(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
225 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
|
226 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
227 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
|
228 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
|
229 _finish_sized_pattern(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
230 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
231 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
232 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
|
233 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
234 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
|
235 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
236 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
|
237 ptn->shader = SkShader::CreateBitmapShader(*bitmap, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
238 SkShader::kClamp_TileMode, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
239 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
240 if(ptn->shader == NULL) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
241 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
242 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
243 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
244 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
245 ptn->has_size = 1; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
246 ptn->w = bitmap->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
247 ptn->h = bitmap->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
248 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
249 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
|
250 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
251 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
252 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
253 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
254 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
255 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
|
256 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
|
257 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
|
258 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
259 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
260 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
261 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
262 SkPoint center; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
263 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
264 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
265 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
|
266 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
267 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
268 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
|
269 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
270 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
271 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
|
272 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
273 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
274 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
|
275 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
|
276 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
|
277 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
278 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
279 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
280 * 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
|
281 * 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
|
282 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
283 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
284 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
285 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
|
286 colors, poses, stop_cnt, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
287 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
288 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
289 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
290 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
291 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
|
292 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
293 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
294 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
295 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
296 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
297 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
298 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
299 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
300 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
301 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
302 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
303 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
304 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
305 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
|
306 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
|
307 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
|
308 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
309 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
310 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
311 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
312 SkPoint points[2]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
313 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
314 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
315 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
|
316 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
317 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
318 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
|
319 goto fail; |
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 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
|
322 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
|
323 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
324 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
325 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
|
326 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
|
327 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
|
328 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
329 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
330 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
331 * 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
|
332 * 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
|
333 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
334 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
335 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
336 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
|
337 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
338 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
339 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
340 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
341 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
|
342 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
343 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
344 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
345 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
346 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
347 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
348 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
349 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
350 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
351 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
352 } |
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 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
|
355 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
356 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
357 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
|
358 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
359 ptn->shader->setLocalMatrix(skmatrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
360 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
361 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
362 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
|
363 if(ptn->shader) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
364 delete ptn->shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
365 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
366 } |
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 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
|
369 return ((SkBitmap *)surface)->rowBytes(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
370 } |
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 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
|
373 return ((SkBitmap *)surface)->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
374 } |
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 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
|
377 return ((SkBitmap *)surface)->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
378 } |
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 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
|
381 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
|
382 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
383 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
384 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
|
385 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
386 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
|
387 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
|
388 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
|
389 int width, int height, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
390 int stride) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
391 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
392 SkBitmap::Config cfg; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
393 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
394 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
395 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
396 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
|
397 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
398 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
399 cfg = SkBitmap::kA8_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_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
402 cfg = SkBitmap::kA1_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_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
405 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
|
406 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
407 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
408 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
409 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
410 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
411 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
412 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
413 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
414 return NULL; |
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 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
|
417 bitmap->setPixels(data); |
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 return (mbe_surface_t *)bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
420 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
421 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
422 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
|
423 SkBitmap *bitmap = (SkBitmap *)surface; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
424 mb_img_fmt_t fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
425 SkBitmap::Config cfg; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
426 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
427 cfg = bitmap->getConfig(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
428 switch(cfg) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
429 case SkBitmap::kARGB_8888_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
430 fmt = MB_IFMT_ARGB32; 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::kA8_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
433 fmt = MB_IFMT_A8; 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::kA1_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
436 fmt = MB_IFMT_A1; 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 case SkBitmap::kRGB_565_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
439 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
|
440 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
441 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
442 fmt = MB_IFMT_DUMMY; |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
445 return fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
446 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
447 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
448 mbe_surface_t * |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
449 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
|
450 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
451 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
|
452 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
453 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
454 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
455 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
|
456 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
457 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
458 cfg = SkBitmap::kA8_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_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
461 cfg = SkBitmap::kA1_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_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
464 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
|
465 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
466 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
467 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
468 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
469 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
470 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
471 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
472 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
473 return NULL; |
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 bitmap->setConfig(cfg, width, height); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
476 bitmap->allocPixels(); |
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 return (mbe_surface_t *)bitmap; |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
481 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
|
482 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
483 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
484 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
|
485 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
|
486 mbe_scaled_font_t * |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
487 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
494 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
|
495 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
496 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
|
497 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
498 SkColorFilter *filter; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
499 SkColor color; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
500 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
501 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
|
502 filter = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
503 SkColorFilter::CreatePorterDuffFilter(color, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
504 SkPorterDuff::kSrcOver_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
505 mbe_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
506 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
507 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
508 |
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 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
|
510 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
|
511 |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
512 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
|
513 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
514 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
515 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
|
516 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
|
517 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
|
518 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
|
519 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
|
520 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
|
521 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
|
522 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
523 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
528 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
|
529 canvas->states->line_width = width; |
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 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
532 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
|
533 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
534 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
|
535 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
|
536 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
537 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
538 SkRegion *saved_clip = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
539 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
540 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
541 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
542 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
543 ASSERT(path); |
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 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
546 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
547 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
548 _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
|
549 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
550 canvas->canvas->drawPath(*path, *paint); |
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 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
553 } |
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 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
|
556 canvas->states->ptn = source; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
557 } |
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 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
|
560 SkRegion 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 _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
|
563 canvas->canvas->setClipRegion(clip); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
564 } |
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 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
|
567 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
|
568 } |
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 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
|
571 canvas->subpath->close(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
572 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
573 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
574 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
|
575 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
576 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
|
577 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
|
578 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
579 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
580 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
|
581 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
|
582 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
|
583 } |
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 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
|
586 return 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
587 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
588 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
589 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
|
590 canvas->subpath->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
591 canvas->path->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
592 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
593 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
594 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
|
595 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
|
596 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
|
597 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
598 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
599 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
|
600 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
|
601 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
|
602 } |
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 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
|
605 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
606 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
607 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
608 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
609 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
610 ASSERT(states->next); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
611 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
612 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
613 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
614 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
615 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
|
616 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
|
617 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
618 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
619 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
620 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
|
621 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
|
622 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
623 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
624 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
625 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
|
626 SkRegion region, dev_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
627 bool in_fill; |
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 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
630 _update_path(canvas); |
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 _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
|
633 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
|
634 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
635 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
|
636 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
637 return in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
638 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
639 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
640 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
|
641 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
642 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
643 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
644 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
645 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
646 ASSERT(paint); |
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 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
649 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
650 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
651 _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
|
652 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
653 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
654 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
655 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
656 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
657 path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
658 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
659 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
660 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
661 /*! \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
|
662 * |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
663 * 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
|
664 * 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
|
665 */ |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
666 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
|
667 mbe_t *mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
668 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
|
669 |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
670 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
|
671 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
|
672 return NULL; |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
673 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
674 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
|
675 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
|
676 states = mbe->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
677 if(states == NULL) { |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
678 free(mbe); |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
679 return NULL; |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
680 } |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
681 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
682 canvas->ref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
683 mbe->canvas = canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
684 mbe->path = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
685 mbe->subpath = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
686 mbe->saved_region = new SkRegion(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
687 mbe->paint = new SkPaint(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
688 states->ptn = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
689 states->ptn_owned = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
690 states->line_width = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
691 states->next = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
692 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
693 if(mbe->path == NULL || |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
694 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
|
695 mbe->saved_region == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
696 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
|
697 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
698 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
|
699 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
700 return mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
701 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
702 fail: |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
703 canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
704 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
|
705 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
|
706 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
|
707 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
|
708 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
709 free(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
710 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
711 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
|
712 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
713 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
714 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
|
715 mbe_t *mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
716 SkBitmap *bitmap = (SkBitmap *)target; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
717 SkCanvas *canvas; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
718 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
719 canvas = new SkCanvas(*bitmap); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
720 if(canvas == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
721 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
722 return NULL; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
723 } |
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 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
|
726 canvas->unref(); |
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 if(mbe == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
729 delete bitmap; |
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 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
732 return mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
733 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
734 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
735 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
|
736 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
737 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
738 canvas->canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
739 delete canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
740 delete canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
741 delete canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
742 delete canvas->saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
743 while(canvas->states) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
744 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
745 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
746 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
747 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
|
748 mbe_pattern_destroy(states->ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
749 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
750 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
751 free(canvas); |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
752 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
753 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
754 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
|
755 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
756 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
757 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
758 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
759 _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
|
760 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
761 canvas->canvas->drawPaint(*paint); |
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 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
764 } |
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 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
|
767 struct _mbe_states_t *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 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
|
770 ASSERT(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
771 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
772 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
|
773 states->next = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
774 canvas->states = states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
775 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
776 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
777 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
|
778 mbe_fill_preserve(canvas); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
779 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
780 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
781 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
782 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
783 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
|
784 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
785 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
786 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
787 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
|
788 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
789 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
790 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
791 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
792 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
|
793 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
|
794 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
|
795 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
796 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
|
797 SkColor color = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
798 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
799 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
|
800 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
801 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
802 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
|
803 SkPaint *paint = dst->paint; |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
804 const SkBitmap *bmap; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
805 SkXfermode *mode; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
806 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
807 /* _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
|
808 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
|
809 paint->setXfermode(mode); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
810 bmap = &src->canvas->getDevice()->accessBitmap(false); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
811 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
812 dst->canvas->drawBitmap(*bmap, 0, 0, paint); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
813 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
814 paint->reset(); |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
815 mode->unref(); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
816 /* _finish_paint(dst); */ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
817 } |
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 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
|
820 _update_path(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
821 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
822 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
|
823 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
824 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
825 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
|
826 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
|
827 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
828 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
829 SkRect rect; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
830 SkScalar x0, y0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
831 SkScalar ang_start, ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
832 SkScalar sweep; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
833 SkScalar r; /* radius */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
834 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
835 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
836 x0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
837 y0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
838 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
|
839 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
|
840 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
|
841 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
842 /* 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
|
843 * 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
|
844 * 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
|
845 * 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
|
846 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
847 if(ang_start > ang_stop) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
848 SkPath tmppath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
849 SkMatrix matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
850 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
|
851 0, -1, 0}; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
852 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
853 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
|
854 sweep = ang_start - ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
855 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
|
856 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
857 reflect[2] = x; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
858 reflect[5] = y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
859 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
|
860 subpath->addPath(tmppath, matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
861 } else { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
862 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
|
863 sweep = ang_stop - ang_start; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
864 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
|
865 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
866 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
867 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
868 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
869 C_END |