Mercurial > MadButterfly
annotate src/graph_engine_skia.cpp @ 615:0f0abc48e10a openvg
mbe_new_path() for OpenVG
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Thu, 08 Jul 2010 11:29:58 +0800 |
parents | 39d27911c3ae |
children | 7b4e80ab671a |
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 |
602
ac2e6468a22a
Replace mbe_image_surface_create_from_png() with mbe_pattern_create_image()
Thinker K.F. Li <thinker@branda.to>
parents:
586
diff
changeset
|
354 mbe_pattern_t * |
ac2e6468a22a
Replace mbe_image_surface_create_from_png() with mbe_pattern_create_image()
Thinker K.F. Li <thinker@branda.to>
parents:
586
diff
changeset
|
355 mbe_pattern_create_image(mb_img_data_t *img) { |
ac2e6468a22a
Replace mbe_image_surface_create_from_png() with mbe_pattern_create_image()
Thinker K.F. Li <thinker@branda.to>
parents:
586
diff
changeset
|
356 return NULL; |
ac2e6468a22a
Replace mbe_image_surface_create_from_png() with mbe_pattern_create_image()
Thinker K.F. Li <thinker@branda.to>
parents:
586
diff
changeset
|
357 } |
ac2e6468a22a
Replace mbe_image_surface_create_from_png() with mbe_pattern_create_image()
Thinker K.F. Li <thinker@branda.to>
parents:
586
diff
changeset
|
358 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
359 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
|
360 SkMatrix skmatrix; |
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 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
|
363 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
364 ptn->shader->setLocalMatrix(skmatrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
365 } |
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 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
|
368 if(ptn->shader) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
369 delete ptn->shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
370 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
371 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
372 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
373 int mbe_image_surface_get_stride(mbe_surface_t *surface) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
374 return ((SkBitmap *)surface)->rowBytes(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
375 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
376 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
377 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
|
378 return ((SkBitmap *)surface)->height(); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
381 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
|
382 return ((SkBitmap *)surface)->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
383 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
384 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
385 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
|
386 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
|
387 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
388 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
389 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
|
390 SkBitmap *bitmap = (SkBitmap *)surface; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
391 mb_img_fmt_t fmt; |
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 cfg = bitmap->getConfig(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
395 switch(cfg) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
396 case SkBitmap::kARGB_8888_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
397 fmt = MB_IFMT_ARGB32; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
398 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
399 case SkBitmap::kA8_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
400 fmt = MB_IFMT_A8; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
401 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
402 case SkBitmap::kA1_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
403 fmt = MB_IFMT_A1; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
404 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
405 case SkBitmap::kRGB_565_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
406 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
|
407 |
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 fmt = MB_IFMT_DUMMY; |
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 return fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
413 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
414 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
415 mbe_surface_t * |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
416 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
|
417 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
418 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
|
419 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
420 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
421 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
422 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
|
423 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
424 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
425 cfg = SkBitmap::kA8_Config; break; |
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 case MB_IFMT_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
428 cfg = SkBitmap::kA1_Config; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
429 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
430 case MB_IFMT_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
431 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
|
432 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
433 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
434 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
435 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
436 } |
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 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
439 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
440 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
441 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
442 bitmap->setConfig(cfg, width, height); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
443 bitmap->allocPixels(); |
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 (mbe_surface_t *)bitmap; |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
448 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
|
449 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
450 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
451 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
|
452 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
|
453 mbe_scaled_font_t * |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
454 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
|
455 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
|
456 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
|
457 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
|
458 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
|
459 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
|
460 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
461 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
|
462 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
463 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
|
464 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
465 SkColorFilter *filter; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
466 SkColor color; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
467 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
468 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
|
469 filter = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
470 SkColorFilter::CreatePorterDuffFilter(color, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
471 SkPorterDuff::kSrcOver_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
472 mbe_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
473 |
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 |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
476 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
|
477 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
|
478 |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
479 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
|
480 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
481 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 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
|
488 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
|
489 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
490 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
491 void mbe_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
|
492 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
|
493 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
|
494 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
495 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
|
496 canvas->states->line_width = width; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
497 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
498 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
499 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
|
500 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
501 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
|
502 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
|
503 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
504 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
505 SkRegion *saved_clip = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
506 co_aix x, y; |
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 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
509 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
510 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
511 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
512 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
513 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
514 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
515 _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
|
516 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
517 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
518 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
519 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
520 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
521 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
522 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
|
523 canvas->states->ptn = source; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
524 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
525 |
586
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
526 void mbe_reset_scissoring(mbe_t *canvas) { |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
527 SkRegion clip; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
528 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
529 _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
|
530 canvas->canvas->setClipRegion(clip); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
531 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
532 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
533 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
|
534 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
|
535 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
536 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
537 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
|
538 canvas->subpath->close(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
539 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
540 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
541 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
|
542 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
543 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
|
544 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
|
545 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
546 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
547 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
|
548 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
|
549 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
|
550 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
551 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
552 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
|
553 return 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
554 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
555 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
556 void mbe_new_path(mbe_t *canvas) { |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
557 canvas->subpath->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
558 canvas->path->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
559 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
560 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
561 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
|
562 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
|
563 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
|
564 SkPath *subpath = canvas->subpath; |
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 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
|
567 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
|
568 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
|
569 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
570 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
571 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
|
572 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
573 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
574 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
575 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
576 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
577 ASSERT(states->next); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
578 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
579 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
580 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
581 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
582 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
|
583 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
|
584 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
585 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
586 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
587 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
|
588 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
|
589 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
590 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
591 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
592 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
|
593 SkRegion region, dev_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
594 bool in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
595 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
596 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
597 _update_path(canvas); |
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 _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
|
600 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
|
601 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
602 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
|
603 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
604 return in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
605 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
606 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
607 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
|
608 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
609 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
610 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
611 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
612 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
613 ASSERT(paint); |
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 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
616 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
617 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
618 _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
|
619 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
620 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
621 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
622 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
623 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
624 path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
625 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
626 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
627 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
628 /*! \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
|
629 * |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
630 * 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
|
631 * 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
|
632 */ |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
633 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
|
634 mbe_t *mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
635 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
|
636 |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
637 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
|
638 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
|
639 return NULL; |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
640 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
641 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
|
642 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
|
643 states = mbe->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
644 if(states == NULL) { |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
645 free(mbe); |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
646 return NULL; |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
647 } |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
648 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
649 canvas->ref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
650 mbe->canvas = canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
651 mbe->path = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
652 mbe->subpath = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
653 mbe->saved_region = new SkRegion(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
654 mbe->paint = new SkPaint(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
655 states->ptn = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
656 states->ptn_owned = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
657 states->line_width = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
658 states->next = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
659 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
660 if(mbe->path == NULL || |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
661 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
|
662 mbe->saved_region == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
663 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
|
664 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
665 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
|
666 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
667 return mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
668 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
669 fail: |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
670 canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
671 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
|
672 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
|
673 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
|
674 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
|
675 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
676 free(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
677 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
678 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
|
679 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
680 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
681 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
|
682 mbe_t *mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
683 SkBitmap *bitmap = (SkBitmap *)target; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
684 SkCanvas *canvas; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
685 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
686 canvas = new SkCanvas(*bitmap); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
687 if(canvas == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
688 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
689 return NULL; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
690 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
691 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
692 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
|
693 canvas->unref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
694 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
695 if(mbe == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
696 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
697 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
698 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
699 return mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
700 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
701 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
702 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
|
703 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
704 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
705 canvas->canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
706 delete canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
707 delete canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
708 delete canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
709 delete canvas->saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
710 while(canvas->states) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
711 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
712 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
713 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
714 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
|
715 mbe_pattern_destroy(states->ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
716 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
717 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
718 free(canvas); |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
719 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
720 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
721 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
|
722 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
723 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
724 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
725 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
726 _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
|
727 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
728 canvas->canvas->drawPaint(*paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
729 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
730 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
731 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
732 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
733 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
|
734 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
735 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
736 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
|
737 ASSERT(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
738 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
739 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
|
740 states->next = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
741 canvas->states = states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
742 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
743 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
744 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
|
745 mbe_fill_preserve(canvas); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
746 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
747 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
748 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
749 |
586
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
750 void mbe_scissoring(mbe_t *canvas, int n_areas, area_t **areas) { |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
751 int i; |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
752 area_t *area; |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
753 SkPath *path; |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
754 |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
755 mbe_new_path(canvas); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
756 |
586
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
757 path = canvas->path; |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
758 for(i = 0; i < n_areas; i++) { |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
759 area = areas[i]; |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
760 path->addRect(CO_AIX_2_SKSCALAR(area->x), CO_AIX_2_SKSCALAR(area->y), |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
761 CO_AIX_2_SKSCALAR(area->x + area->width), |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
762 CO_AIX_2_SKSCALAR(area->y + area->height)); |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
763 } |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
764 |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
765 canvas->canvas->clipPath(*path, SkRegion::kIntersect_Op); |
b42d69ab8857
Replace mbe_clip() with mbe_scissoring()
Thinker K.F. Li <thinker@branda.to>
parents:
514
diff
changeset
|
766 path->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
767 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
768 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
769 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
|
770 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
|
771 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
|
772 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
773 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
|
774 SkColor color = 0; |
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 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
|
777 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
778 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
779 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
|
780 SkPaint *paint = dst->paint; |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
781 const SkBitmap *bmap; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
782 SkXfermode *mode; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
783 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
784 /* _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
|
785 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
|
786 paint->setXfermode(mode); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
787 bmap = &src->canvas->getDevice()->accessBitmap(false); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
788 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
789 dst->canvas->drawBitmap(*bmap, 0, 0, paint); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
790 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
791 paint->reset(); |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
792 mode->unref(); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
793 /* _finish_paint(dst); */ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
794 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
795 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
796 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
|
797 _update_path(mbe); |
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 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
|
800 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
801 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
802 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
|
803 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
|
804 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
805 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
806 SkRect rect; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
807 SkScalar x0, y0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
808 SkScalar ang_start, ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
809 SkScalar sweep; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
810 SkScalar r; /* radius */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
811 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
812 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
813 x0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
814 y0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
815 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
|
816 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
|
817 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
|
818 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
819 /* 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
|
820 * 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
|
821 * 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
|
822 * 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
|
823 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
824 if(ang_start > ang_stop) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
825 SkPath tmppath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
826 SkMatrix matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
827 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
|
828 0, -1, 0}; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
829 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
830 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
|
831 sweep = ang_start - ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
832 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
|
833 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
834 reflect[2] = x; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
835 reflect[5] = y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
836 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
|
837 subpath->addPath(tmppath, matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
838 } else { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
839 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
|
840 sweep = ang_stop - ang_start; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
841 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
|
842 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
843 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
844 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
845 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
846 C_END |