Mercurial > MadButterfly
annotate src/graph_engine_skia.cpp @ 880:ac3e8492ad74 abs_n_rel_center
Formalize path data for MadButterfly.
Inkscape and other editors would omit 'l' or 'L' after 'm' or 'M'.
MadButterfly can not handle it, now. So, we work around it at SVG
parser.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sat, 25 Sep 2010 18:46:37 +0800 |
parents | 586e50f82c1f |
children | 7b4e80ab671a |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
3 /*! \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
|
4 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
5 * 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
|
6 * 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
|
7 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
8 * 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
|
9 * 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
|
10 * 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
|
11 * 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
|
12 * 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
|
13 * 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
|
14 * 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
|
15 * 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
|
16 * 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
|
17 * MadButterfly. |
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 * \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
|
20 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
21 * 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
|
22 * 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
|
23 * 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
|
24 * 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
|
25 * 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
|
26 * 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
|
27 * 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
|
28 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
29 * \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
|
30 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
31 * 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
|
32 * 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
|
33 * 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
|
34 * 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
|
35 * setted. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
36 */ |
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 <stdio.h> |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
38 #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
|
39 #include <SkBitmap.h> |
495
9e36e06fcc18
Include SkRegion.h for graph_engine_skia.cpp
Thinker K.F. Li <thinker@branda.to>
parents:
483
diff
changeset
|
40 #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
|
41 #include <SkShader.h> |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
42 #include <SkDevice.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
43 #include <SkGradientShader.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
44 #include <SkXfermode.h> |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
45 #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
|
46 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
47 #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
|
48 #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
|
49 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
50 C_START |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
51 |
468
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
52 #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
|
53 #include "mb_shapes.h" |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
54 #include "mb_img_ldr.h" |
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 /*! \brief Source pattern |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
57 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
58 * 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
|
59 * 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
|
60 * 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
|
61 * 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
|
62 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
63 struct _mbe_pattern_t { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
64 SkShader *shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
65 int w, h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
66 int has_size; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
67 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
68 }; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
69 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
70 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
|
71 struct _mb_font_face_t *face; |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
72 co_aix fnt_mtx[6]; |
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
73 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
|
74 }; |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
75 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
|
76 /*! \brief MadButterfly Graphic Engine Context. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
77 * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
78 * 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
|
79 * line-width, and transform matrix. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
80 */ |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
81 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
|
82 SkCanvas *canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
83 SkPath *path, *subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
84 SkPaint *paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
85 SkRegion *saved_region; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
86 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
87 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
88 }; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
89 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
90 struct _mbe_states_t { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
91 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
92 int ptn_owned; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
93 co_aix line_width; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
94 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
95 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
|
96 }; |
468
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
97 |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
98 #ifndef ASSERT |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
99 #define ASSERT(x) |
ae784a86ba82
C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
100 #endif |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
101 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
102 #define PI 3.1415926535897931 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
103 |
483
d984a6672be7
Fix bug of translate between co_aix and SkScalar.
Thinker K.F. Li <thinker@branda.to>
parents:
482
diff
changeset
|
104 #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
|
105 #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
|
106 #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
|
107 (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
|
108 (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
|
109 (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
|
110 (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
|
111 (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
|
112 (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
|
113 (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
|
114 (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
|
115 (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
|
116 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
117 #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
|
118 (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
|
119 (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
|
120 (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
|
121 (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
|
122 (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
|
123 (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
|
124 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
125 #define MBSTOP_2_SKCOLOR(c) \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
126 ((((int)((c)->a * 255)) << 24) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
127 (((int)((c)->r * 255)) << 16) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
128 (((int)((c)->g * 255)) << 8) | \ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
129 (((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
|
130 #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
|
131 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
132 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
|
133 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
134 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
135 _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
|
136 SkCanvas *canvas = mbe->canvas; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
137 SkPath path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
138 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
139 co_aix reverse[6]; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
140 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
141 *mbe->saved_region = canvas->getTotalClip(); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
142 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
143 compute_reverse(ptn->matrix, reverse); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
144 x = 0; y = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
145 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
|
146 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
|
147 x = 0; y = ptn->h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 path.close(); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
154 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
155 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
|
156 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
157 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
158 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
159 _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
|
160 SkCanvas *canvas = mbe->canvas; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
161 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
162 canvas->setClipRegion(*mbe->saved_region); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
163 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
164 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
165 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
166 _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
|
167 SkDevice *device; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
168 int w, h; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
169 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
170 device = canvas->getDevice(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
171 w = device->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
172 h = device->height(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
173 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
|
174 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
175 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
176 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
177 _update_path(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
178 SkPath *path = mbe->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
179 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
180 SkMatrix canvas_matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
181 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
182 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
183 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
|
184 path->addPath(*subpath, canvas_matrix); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
185 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
186 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
187 subpath->rewind(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
188 subpath->moveTo(point); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
191 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
192 * 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
|
193 * 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
|
194 * 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
|
195 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
196 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
197 _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
|
198 SkPaint *paint = mbe->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
199 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
|
200 SkShader *shader; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
201 co_aix matrix[6]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
202 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
203 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
204 paint->setStyle(style); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
205 |
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
|
206 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
|
207 /* 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
|
208 * 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
|
209 * 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
|
210 */ |
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 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 } |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
217 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
218 if(style == SkPaint::kStroke_Style) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
219 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
|
220 |
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
|
221 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
|
222 _prepare_sized_pattern(mbe, ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
223 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
224 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
225 static void |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
226 _finish_paint(mbe_t *mbe) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
227 mbe_pattern_t *ptn = mbe->states->ptn; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
228 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
229 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
|
230 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
|
231 _finish_sized_pattern(mbe); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
232 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
233 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
234 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
|
235 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
236 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
|
237 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
238 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
|
239 ptn->shader = SkShader::CreateBitmapShader(*bitmap, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
240 SkShader::kClamp_TileMode, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
241 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
242 if(ptn->shader == NULL) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
243 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
244 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
245 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
246 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
247 ptn->has_size = 1; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
248 ptn->w = bitmap->width(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
249 ptn->h = bitmap->height(); |
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 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
252 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
253 return ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
254 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
255 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
256 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
257 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
|
258 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
|
259 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
|
260 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
261 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
262 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
263 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
264 SkPoint center; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
265 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
266 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
267 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
|
268 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
269 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
270 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
|
271 goto fail; |
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 center.set(CO_AIX_2_SKSCALAR(cx1), CO_AIX_2_SKSCALAR(cy1)); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
274 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
275 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
276 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
|
277 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
|
278 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
|
279 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
280 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
281 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
282 * 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
|
283 * 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
|
284 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
285 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
286 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
287 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
|
288 colors, poses, stop_cnt, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
289 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
290 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
291 goto fail; |
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 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
294 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
295 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
296 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
297 return ptn; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
298 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
299 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
300 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
301 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
302 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
303 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
304 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
305 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
306 mbe_pattern_t * |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 mbe_pattern_t *ptn; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
311 SkColor *colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
312 SkScalar *poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
313 grad_stop_t *stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
314 SkPoint points[2]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
315 int i; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
316 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
317 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
|
318 colors = new SkColor[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
319 poses = new SkScalar[stop_cnt]; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
320 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
|
321 goto fail; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
322 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
323 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
|
324 points[1].set(CO_AIX_2_SKSCALAR(x1), CO_AIX_2_SKSCALAR(y1)); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
325 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
326 stop = stops; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
327 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
|
328 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
|
329 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
|
330 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
331 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
332 /* |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
333 * 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
|
334 * 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
|
335 * two circles. |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
336 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
337 ptn->shader = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
338 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
|
339 SkShader::kClamp_TileMode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
340 if(ptn->shader == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
341 goto fail; |
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 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
344 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
345 delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
346 delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
347 return ptn; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
348 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
349 fail: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
350 if(ptn) free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
351 if(colors) delete colors; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
352 if(poses) delete poses; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
353 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
354 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
355 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
356 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
|
357 SkMatrix skmatrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
358 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
359 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
|
360 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
361 ptn->shader->setLocalMatrix(skmatrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
362 } |
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 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
|
365 if(ptn->shader) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
366 delete ptn->shader; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
367 free(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
368 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
369 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
370 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
|
371 return ((SkBitmap *)surface)->rowBytes(); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
374 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
|
375 return ((SkBitmap *)surface)->height(); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
378 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
|
379 return ((SkBitmap *)surface)->width(); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
382 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
|
383 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
|
384 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
385 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
386 mbe_surface_t *mbe_image_surface_create_from_png(const char *filename) {} |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
387 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
388 mbe_surface_t * |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
389 mbe_image_surface_create_for_data(unsigned char *data, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
390 mb_img_fmt_t fmt, |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
391 int width, int height, |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
392 int stride) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
393 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
394 SkBitmap::Config cfg; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
395 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
396 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
397 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
398 cfg = SkBitmap::kARGB_8888_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
399 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
400 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
401 cfg = SkBitmap::kA8_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
402 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
403 case MB_IFMT_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
404 cfg = SkBitmap::kA1_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
405 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
406 case MB_IFMT_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
407 cfg = SkBitmap::kRGB_565_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
408 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
409 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
410 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
411 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
412 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
413 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
414 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
415 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
416 return NULL; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
417 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
418 bitmap->setConfig(cfg, width, height, stride); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
419 bitmap->setPixels(data); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
420 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
421 return (mbe_surface_t *)bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
422 } |
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 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
|
425 SkBitmap *bitmap = (SkBitmap *)surface; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
426 mb_img_fmt_t fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
427 SkBitmap::Config cfg; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
428 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
429 cfg = bitmap->getConfig(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
430 switch(cfg) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
431 case SkBitmap::kARGB_8888_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
432 fmt = MB_IFMT_ARGB32; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
433 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
434 case SkBitmap::kA8_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
435 fmt = MB_IFMT_A8; break; |
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 case SkBitmap::kA1_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
438 fmt = MB_IFMT_A1; break; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
439 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
440 case SkBitmap::kRGB_565_Config: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
441 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
|
442 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
443 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
444 fmt = MB_IFMT_DUMMY; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
445 } |
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 return fmt; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
448 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
449 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
450 mbe_surface_t * |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
451 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
|
452 SkBitmap *bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
453 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
|
454 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
455 switch(fmt) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
456 case MB_IFMT_ARGB32: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
457 cfg = SkBitmap::kARGB_8888_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
458 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
459 case MB_IFMT_A8: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
460 cfg = SkBitmap::kA8_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
461 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
462 case MB_IFMT_A1: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
463 cfg = SkBitmap::kA1_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
464 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
465 case MB_IFMT_RGB16_565: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
466 cfg = SkBitmap::kRGB_565_Config; break; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
467 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
468 case MB_IFMT_RGB24: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
469 default: |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
470 return NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
471 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
472 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
473 bitmap = new SkBitmap(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
474 if(bitmap == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
475 return NULL; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
476 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
477 bitmap->setConfig(cfg, width, height); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
478 bitmap->allocPixels(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
479 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
480 return (mbe_surface_t *)bitmap; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
481 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
482 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
483 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
|
484 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
485 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
486 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
|
487 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
|
488 mbe_scaled_font_t * |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
472
diff
changeset
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
496 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
|
497 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
498 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
|
499 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
500 SkColorFilter *filter; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
501 SkColor color; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
502 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
503 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
|
504 filter = |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
505 SkColorFilter::CreatePorterDuffFilter(color, |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
506 SkPorterDuff::kSrcOver_Mode); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
507 mbe_paint(canvas); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
508 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
509 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
510 |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
511 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
|
512 SkBitmap *bmap = (SkBitmap *)surface; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
513 |
508
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
514 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
|
515 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
516 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
517 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
|
518 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
|
519 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
|
520 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
|
521 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
|
522 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
|
523 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
|
524 } |
b106fa78a090
Add functions of mbe_set_source_rgba() and mbe_surface_destroy().
Thinker K.F. Li <thinker@branda.to>
parents:
497
diff
changeset
|
525 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
526 void mbe_set_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
|
527 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
|
528 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
|
529 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
530 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
|
531 canvas->states->line_width = width; |
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 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
534 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
|
535 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
536 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
|
537 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
|
538 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
539 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
540 SkRegion *saved_clip = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
541 co_aix x, y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
542 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
543 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
544 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
545 ASSERT(path); |
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 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
548 _update_path(canvas); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
549 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
550 _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
|
551 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
552 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
553 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
554 _finish_paint(canvas); |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
557 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
|
558 canvas->states->ptn = source; |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
561 void mbe_reset_clip(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
562 SkRegion clip; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
563 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
564 _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
|
565 canvas->canvas->setClipRegion(clip); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
566 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
567 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
568 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
|
569 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
|
570 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
571 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
572 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
|
573 canvas->subpath->close(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
574 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
575 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
576 void mbe_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
|
577 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
578 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
|
579 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
|
580 SkPath *subpath = canvas->subpath; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
581 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
582 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
|
583 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
|
584 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
|
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 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
|
588 return 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
589 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
590 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
591 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
|
592 canvas->subpath->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
593 canvas->path->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
594 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
595 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
596 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
|
597 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
|
598 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
|
599 SkPath *subpath = canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
600 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
601 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
|
602 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
|
603 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
|
604 } |
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 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
|
607 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
608 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
609 _update_path(canvas); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
610 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
611 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
612 ASSERT(states->next); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
613 canvas->states = states->next; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
614 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
615 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
616 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
617 void mbe_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
|
618 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
|
619 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
620 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
621 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
622 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
|
623 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
|
624 CO_AIX_2_SKSCALAR(y)); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
625 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
626 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
627 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
|
628 SkRegion region, dev_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
629 bool in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
630 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
631 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
632 _update_path(canvas); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
633 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
634 _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
|
635 region.setPath(*canvas->path, dev_region); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
636 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
637 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
|
638 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
639 return in_fill; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
640 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
641 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
642 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
|
643 SkPath *path = canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
644 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
645 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
646 ASSERT(ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
647 ASSERT(path); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
648 ASSERT(paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
649 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
650 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
651 _update_path(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
652 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
653 _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
|
654 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
655 canvas->canvas->drawPath(*path, *paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
656 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
657 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
658 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
659 path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
660 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
661 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
662 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
663 /*! \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
|
664 * |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
665 * 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
|
666 * 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
|
667 */ |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
668 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
|
669 mbe_t *mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
670 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
|
671 |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
672 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
|
673 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
|
674 return NULL; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
675 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
676 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
|
677 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
|
678 states = mbe->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
679 if(states == NULL) { |
479
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
680 free(mbe); |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
681 return NULL; |
9a867333018b
mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
682 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
683 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
684 canvas->ref(); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
685 mbe->canvas = canvas; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
686 mbe->path = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
687 mbe->subpath = new SkPath(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
688 mbe->saved_region = new SkRegion(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
689 mbe->paint = new SkPaint(); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
690 states->ptn = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
691 states->ptn_owned = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
692 states->line_width = 0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
693 states->next = NULL; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
694 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
695 if(mbe->path == NULL || |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
696 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
|
697 mbe->saved_region == NULL) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
698 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
|
699 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
700 memcpy(states->matrix, id_matrix, sizeof(co_aix) * 6); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
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 return mbe; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
703 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
704 fail: |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
705 canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
706 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
|
707 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
|
708 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
|
709 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
|
710 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
711 free(mbe); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
712 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
713 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
|
714 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
715 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
716 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
|
717 mbe_t *mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
718 SkBitmap *bitmap = (SkBitmap *)target; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
719 SkCanvas *canvas; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
720 |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
721 canvas = new SkCanvas(*bitmap); |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
722 if(canvas == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
723 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
724 return NULL; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
725 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
726 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
727 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
|
728 canvas->unref(); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
729 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
730 if(mbe == NULL) { |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
731 delete bitmap; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
732 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
733 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
734 return mbe; |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
735 } |
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
736 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
737 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
|
738 struct _mbe_states_t *states; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
739 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
740 canvas->canvas->unref(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
741 delete canvas->path; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
742 delete canvas->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
743 delete canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
744 delete canvas->saved_region; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
745 while(canvas->states) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
746 states = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
747 canvas->states = states->next; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
748 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
749 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
|
750 mbe_pattern_destroy(states->ptn); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
751 free(states); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
752 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
753 free(canvas); |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
754 } |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
755 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
756 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
|
757 SkPaint *paint = canvas->paint; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
758 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
759 ASSERT(paint); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
760 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
761 _prepare_paint(canvas, SkPaint::kFill_Style); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
762 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
763 canvas->canvas->drawPaint(*paint); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
764 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
765 _finish_paint(canvas); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
766 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
767 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
768 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
|
769 struct _mbe_states_t *states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
770 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
771 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
|
772 ASSERT(states); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
773 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
774 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
|
775 states->next = canvas->states; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
776 canvas->states = states; |
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 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
779 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
|
780 mbe_fill_preserve(canvas); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
781 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
782 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
783 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
784 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
785 void mbe_clip(mbe_t *canvas) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
786 if(!canvas->subpath->isEmpty()) |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
787 _update_path(canvas); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
788 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
789 canvas->canvas->clipPath(*canvas->path, SkRegion::kIntersect_Op); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
790 canvas->path->rewind(); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
791 canvas->subpath->rewind(); |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
792 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
793 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
794 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
|
795 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
|
796 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
|
797 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
798 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
|
799 SkColor color = 0; |
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 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
|
802 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
803 |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
804 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
|
805 SkPaint *paint = dst->paint; |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
806 const SkBitmap *bmap; |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
807 SkXfermode *mode; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
808 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
809 /* _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
|
810 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
|
811 paint->setXfermode(mode); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
812 bmap = &src->canvas->getDevice()->accessBitmap(false); |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
813 |
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
814 dst->canvas->drawBitmap(*bmap, 0, 0, paint); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
815 |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
816 paint->reset(); |
512
d186d1e24458
Change prototype of mbe_copy_source().
Thinker K.F. Li <thinker@branda.to>
parents:
511
diff
changeset
|
817 mode->unref(); |
513
6394a1e33b2f
Rewind/reset path and subpath.
Thinker K.F. Li <thinker@branda.to>
parents:
512
diff
changeset
|
818 /* _finish_paint(dst); */ |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
819 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
820 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
821 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
|
822 _update_path(mbe); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
823 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
824 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
|
825 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
826 |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
827 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
|
828 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
|
829 SkPoint point; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
830 SkPath *subpath = mbe->subpath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
831 SkRect rect; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
832 SkScalar x0, y0; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
833 SkScalar ang_start, ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
834 SkScalar sweep; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
835 SkScalar r; /* radius */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
836 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
837 subpath->getLastPt(&point); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
838 x0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
839 y0 = point.fX; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
840 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
|
841 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
|
842 ang_stop = CO_AIX_2_SKSCALAR(angle_stop * 180 / PI); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
843 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
844 /* 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
|
845 * 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
|
846 * 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
|
847 * 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
|
848 */ |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
849 if(ang_start > ang_stop) { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
850 SkPath tmppath; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
851 SkMatrix matrix; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
852 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
|
853 0, -1, 0}; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
514
diff
changeset
|
854 |
482
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
855 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
|
856 sweep = ang_start - ang_stop; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
857 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
|
858 |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
859 reflect[2] = x; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
860 reflect[5] = y; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
861 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
|
862 subpath->addPath(tmppath, matrix); |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
863 } else { |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
864 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
|
865 sweep = ang_stop - ang_start; |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
866 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
|
867 } |
d38aca825822
Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
479
diff
changeset
|
868 } |
472
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
869 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
870 |
4254eaa699d0
Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents:
469
diff
changeset
|
871 C_END |