annotate src/graph_engine_skia.cpp @ 482:d38aca825822 Android_Skia

Import more functions for Skia graphic engine.
author Thinker K.F. Li <thinker@branda.to>
date Sun, 15 Nov 2009 16:23:21 +0800
parents 9a867333018b
children d984a6672be7
rev   line source
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
1 /*! \page ge_layer Graphic Engine Layer
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
2 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
3 * Graphic Engine Layer is an abstract of graphic engine; likes Cairo
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
4 * and Skia. It provides portability for the rest of MadButterfly.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
5 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
6 * The basic stratage of interface of graphic engine layer is defined
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
7 * according purpose of MadButterfly. For example, MadButterfly wants
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
8 * a function that can clear a canvas, we define a clear function.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
9 * Never define a indirectly way to finish the function. Never define
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
10 * a way to finish the function for the reason that some engine
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
11 * require you to finish the task in that procedure. It avoids
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
12 * binding graphic engine layer with any behavior of a graphic engine,
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
13 * and provides more compatible with other engines, to define
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
14 * interface of graphic engine layer according purpose of
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
15 * MadButterfly.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
16 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
17 * \section ge_mem Graphic Engine Layer Memory Management
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
18 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
19 * MadButterfly is responsible for management of objects and memory
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
20 * blocks returned by graphic engine layer, even for graphic engines
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
21 * that have management model. MadButterfly supposes memory blocks
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
22 * only be released when they are no more used. MadBufferfly is
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
23 * responsible for release them. So, even a graphic engine has
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
24 * reference count with objects, MadButterfly still keep a reference
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
25 * for every object returned by the engine until no one will use it.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
26 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
27 * \section ge_transform Transformation of Coordination System
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
28 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
29 * Points of pathes are transformed when it is added to the canvas
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
30 * with the transformation matrix at the time. So, changes of
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
31 * transformation matrix of an canvas will not affect points that had
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
32 * been added. It only affects points been added when the matrix is
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
33 * setted.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
34 */
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
35 #include <stdio.h>
479
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
36 #include <SkCanvas.h>
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
37 #include <SkBitmap.h>
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
38 #include <SkShader.h>
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
39 #include <SkDevice.h>
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
40 #include <SkGradientShader.h>
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
41 #include <SkXfermode.h>
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
42 #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
43
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
44 #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
45 #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
46
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
47 C_START
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
48
468
ae784a86ba82 C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
49 #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
50 #include "mb_shapes.h"
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
51 #include "mb_img_ldr.h"
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
52
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
53 /*! \brief Source pattern
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
54 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
55 * 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
56 * 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
57 * 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
58 * 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
59 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
60 struct _mbe_pattern_t {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
61 SkShader *shader;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
62 int w, h;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
63 int has_size;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
64 co_aix matrix[6];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
65 };
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
66
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
67 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
68 struct _mb_font_face_t *face;
473
ba64f928542b Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents: 472
diff changeset
69 co_aix fnt_mtx[6];
ba64f928542b Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents: 472
diff changeset
70 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
71 };
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
72 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
73 /*! \brief MadButterfly Graphic Engine Context.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
74 *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
75 * 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
76 * line-width, and transform matrix.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
77 */
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
78 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
79 SkCanvas *canvas;
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
80 SkPath *path, *subpath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
81 SkPaint *paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
82 SkRegion *saved_region;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
83
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
84 struct _mbe_states_t *states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
85 };
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
86
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
87 struct _mbe_states_t {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
88 mbe_pattern_t *ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
89 int ptn_owned;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
90 co_aix line_width;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
91 co_aix matrix[6];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
92 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
93 };
468
ae784a86ba82 C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
94
ae784a86ba82 C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
95 #ifndef ASSERT
ae784a86ba82 C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
96 #define ASSERT(x)
ae784a86ba82 C++ instead of C to bridge to Skia
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
97 #endif
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
98
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
99 #define PI 3.1415926535897931
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
100
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
101 #define CO_AIX_2_SKSCALAR(a) ((a) * 65536)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
102 #define SKSCALAR_2_CO_AIX(a) ((co_aix)(a) / 65536)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
103 #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
104 (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
105 (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
106 (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
107 (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
108 (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
109 (sk).setTranslateY(CO_AIX_2_SKSCALAR((mb)[5])); \
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
110 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
111 #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
112 (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
113 (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
114 (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
115 (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
116 (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
117 (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
118 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
119 #define MBSTOP_2_SKCOLOR(c) \
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
120 ((((int)((c)->a * 255)) << 24) | \
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
121 (((int)((c)->r * 255)) << 16) | \
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
122 (((int)((c)->g * 255)) << 8) | \
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
123 (((int)((c)->b * 255))))
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 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
126
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
127 static void
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
128 _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
129 SkCanvas *canvas = mbe->canvas;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
130 SkPath path;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
131 co_aix x, y;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
132 co_aix reverse[6];
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 *mbe->saved_region = canvas->getTotalClip();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
135
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
136 compute_reverse(ptn->matrix, reverse);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
137 x = 0; y = 0;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
138 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
139 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
140 x = 0; y = ptn->h;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
141 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
142 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
143 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
144 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
145 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
146 path.close();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
147
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
148 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
149 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
150
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
151 static void
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
152 _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
153 SkCanvas *canvas = mbe->canvas;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
154
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
155 canvas->setClipRegion(*mbe->saved_region);
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 _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
160 SkDevice *device;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
161 int w, h;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
162
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
163 device = canvas->getDevice();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
164 w = device->width();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
165 h = device->height();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
166 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
167 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
168
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
169 static void
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
170 _update_path(mbe_t *mbe) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
171 SkPath *path = mbe->path;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
172 SkPath *subpath = mbe->subpath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
173 SkMatrix canvas_matrix;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
174 SkPoint point;
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 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
177 path->addPath(*subpath, canvas_matrix);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
178
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
179 subpath->getLastPt(&point);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
180 subpath->rewind();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
181 subpath->moveTo(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
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
184 /*
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
185 * 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
186 * 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
187 * 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
188 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
189 static void
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
190 _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
191 SkPaint *paint = mbe->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
192 mbe_pattern_t *ptn = mbe->states->ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
193 SkShader *shader = ptn->shader;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
194 co_aix matrix[6];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
195 SkMatrix skmatrix;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
196
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
197 paint->setStyle(style);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
198
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
199 /* Local matrix of SkShader is a mapping from source pattern to
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
200 * user space. Unlikely, for Cairo is a mapping from user space
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
201 * to source pattern.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
202 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
203 matrix_mul(mbe->states->matrix, ptn->matrix, matrix);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
204 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
205 shader->setLocalMatrix(skmatrix);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
206 paint->setShader(shader);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
207
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
208 if(style == SkPaint::kStroke_Style)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
209 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
210
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
211 if(ptn->has_size)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
212 _prepare_sized_pattern(mbe, ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
213 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
214
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
215 static void
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
216 _finish_paint(mbe_t *mbe) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
217 mbe_pattern_t *ptn = mbe->states->ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
218
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
219 mbe->paint->reset();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
220 if(ptn->has_size)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
221 _finish_sized_pattern(mbe);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
222 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
223
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
224 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
225 mbe_pattern_t *ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
226 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
227
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
228 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
229 ptn->shader = SkShader::CreateBitmapShader(*bitmap,
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
230 SkShader::kClamp_TileMode,
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
231 SkShader::kClamp_TileMode);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
232 if(ptn->shader == NULL) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
233 free(ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
234 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
235 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
236
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
237 ptn->has_size = 1;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
238 ptn->w = bitmap->width();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
239 ptn->h = bitmap->height();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
240
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
241 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
242
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
243 return ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
244 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
245
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
246 mbe_pattern_t *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
247 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
248 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
249 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
250 mbe_pattern_t *ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
251 SkColor *colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
252 SkScalar *poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
253 grad_stop_t *stop;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
254 SkPoint center;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
255 int i;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
256
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
257 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
258 colors = new SkColor[stop_cnt];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
259 poses = new SkScalar[stop_cnt];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
260 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
261 goto fail;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
262
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
263 center.set(CO_AIX_2_SKSCALAR(cx1), CO_AIX_2_SKSCALAR(cy1));
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
264
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
265 stop = stops;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
266 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
267 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
268 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
269 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
270
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
271 /*
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
272 * 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
273 * 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
274 * two circles.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
275 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
276 ptn->shader =
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
277 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
278 colors, poses, stop_cnt,
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
279 SkShader::kClamp_TileMode);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
280 if(ptn->shader == NULL)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
281 goto fail;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
282
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
283 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
284
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
285 delete colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
286 delete poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
287 return ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
288
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
289 fail:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
290 if(ptn) free(ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
291 if(colors) delete colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
292 if(poses) delete poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
293 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
294 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
295
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
296 mbe_pattern_t *
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
297 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
298 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
299 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
300 mbe_pattern_t *ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
301 SkColor *colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
302 SkScalar *poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
303 grad_stop_t *stop;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
304 SkPoint points[2];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
305 int i;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
306
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
307 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
308 colors = new SkColor[stop_cnt];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
309 poses = new SkScalar[stop_cnt];
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
310 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
311 goto fail;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
312
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
313 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
314 points[1].set(CO_AIX_2_SKSCALAR(x1), CO_AIX_2_SKSCALAR(y1));
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
315
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
316 stop = stops;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
317 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
318 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
319 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
320 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
321
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 * 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
324 * 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
325 * two circles.
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
326 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
327 ptn->shader =
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
328 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
329 SkShader::kClamp_TileMode);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
330 if(ptn->shader == NULL)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
331 goto fail;
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 memcpy(ptn->matrix, id_matrix, sizeof(co_aix) * 6);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
334
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
335 delete colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
336 delete poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
337 return ptn;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
338
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
339 fail:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
340 if(ptn) free(ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
341 if(colors) delete colors;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
342 if(poses) delete poses;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
343 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
344 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
345
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
346 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
347 SkMatrix skmatrix;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
348
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
349 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
350
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
351 ptn->shader->setLocalMatrix(skmatrix);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
352 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
353
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
354 void mbe_pattern_destroy(mbe_pattern_t *ptn) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
355 if(ptn->shader)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
356 delete ptn->shader;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
357 free(ptn);
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
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
360 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
361 return ((SkBitmap *)surface)->rowBytes();
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 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
365 return ((SkBitmap *)surface)->height();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
366 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
367
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
368 int mbe_image_surface_get_width(mbe_surface_t *surface) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
369 return ((SkBitmap *)surface)->width();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
370 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
371
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
372 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
373 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
374 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
375
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
376 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
377
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
378 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
379 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
380 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
381 int width, int height,
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
382 int stride) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
383 SkBitmap *bitmap;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
384 SkBitmap::Config cfg;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
385
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
386 switch(fmt) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
387 case MB_IFMT_ARGB32:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
388 cfg = SkBitmap::kARGB_8888_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
389
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
390 case MB_IFMT_A8:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
391 cfg = SkBitmap::kA8_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
392
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
393 case MB_IFMT_A1:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
394 cfg = SkBitmap::kA1_Config; break;
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 case MB_IFMT_RGB16_565:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
397 cfg = SkBitmap::kRGB_565_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
398
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
399 case MB_IFMT_RGB24:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
400 default:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
401 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
402 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
403
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
404 bitmap = new SkBitmap();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
405 if(bitmap == NULL)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
406 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
407
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
408 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
409 bitmap->setPixels(data);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
410
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
411 return (mbe_surface_t *)bitmap;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
412 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
413
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
414 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
415 SkBitmap *bitmap = (SkBitmap *)surface;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
416 mb_img_fmt_t fmt;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
417 SkBitmap::Config cfg;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
418
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
419 cfg = bitmap->getConfig();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
420 switch(cfg) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
421 case SkBitmap::kARGB_8888_Config:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
422 fmt = MB_IFMT_ARGB32; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
423
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
424 case SkBitmap::kA8_Config:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
425 fmt = MB_IFMT_A8; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
426
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
427 case SkBitmap::kA1_Config:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
428 fmt = MB_IFMT_A1; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
429
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
430 case SkBitmap::kRGB_565_Config:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
431 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
432
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
433 default:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
434 fmt = MB_IFMT_DUMMY;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
435 }
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 return fmt;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
438 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
439
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
440 mbe_surface_t *
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
441 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
442 SkBitmap *bitmap;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
443 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
444
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
445 switch(fmt) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
446 case MB_IFMT_ARGB32:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
447 cfg = SkBitmap::kARGB_8888_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
448
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
449 case MB_IFMT_A8:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
450 cfg = SkBitmap::kA8_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
451
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
452 case MB_IFMT_A1:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
453 cfg = SkBitmap::kA1_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
454
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
455 case MB_IFMT_RGB16_565:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
456 cfg = SkBitmap::kRGB_565_Config; break;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
457
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
458 case MB_IFMT_RGB24:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
459 default:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
460 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
461 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
462
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
463 bitmap = new SkBitmap();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
464 if(bitmap == NULL)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
465 return NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
466
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
467 bitmap->setConfig(cfg, width, height);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
468 bitmap->allocPixels();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
469
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
470 return (mbe_surface_t *)bitmap;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
471 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
472
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
473 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
474 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
475
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
476 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
477 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
478 mbe_scaled_font_t *
473
ba64f928542b Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents: 472
diff changeset
479 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
480 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
481 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
482 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
483 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
484 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
485
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_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
487
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
488 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
489 SkPaint *paint = canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
490 SkColorFilter *filter;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
491 SkColor color;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
492
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
493 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
494 filter =
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
495 SkColorFilter::CreatePorterDuffFilter(color,
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
496 SkPorterDuff::kSrcOver_Mode);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
497 mbe_paint(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
498
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
499 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
500
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
501 void mbe_surface_destroy(mbe_surface_t *surface) {}
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
502 void mbe_set_source_rgba(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
503 co_aix r, co_aix g, co_aix b, co_aix a) {}
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
504 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
505 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
506 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
507
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
508 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
509 canvas->states->line_width = width;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
510 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
511
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
512 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
513
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
514 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
515 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
516 SkPaint *paint = canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
517 SkPath *path = canvas->path;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
518 SkRegion *saved_clip = NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
519 co_aix x, y;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
520
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
521 ASSERT(paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
522 ASSERT(ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
523 ASSERT(path);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
524
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
525 if(!canvas->subpath->isEmpty())
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
526 _update_path(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
527
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
528 _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
529
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
530 canvas->canvas->drawPath(*path, *paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
531
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
532 _finish_paint(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
533 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
534
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
535 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
536 canvas->states->ptn = source;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
537 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
538
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
539 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
540 SkRegion clip;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
541
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
542 _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
543 canvas->canvas->setClipRegion(clip);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
544 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
545
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
546 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
547 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
548 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
549
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
550 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
551 canvas->subpath->close();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
552 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
553
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
554 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
555
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
556 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
557 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
558 SkPath *subpath = canvas->subpath;
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 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
561 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
562 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
563 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
564
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
565 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
566 return 0;
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
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
569 void mbe_new_path(mbe_t *canvas) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
570 canvas->subpath->reset();
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
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
573 void mbe_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
574 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
575 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
576 SkPath *subpath = canvas->subpath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
577
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
578 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
579 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
580 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
581 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
582
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
583 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
584 struct _mbe_states_t *states;
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 _update_path(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
587
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
588 states = canvas->states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
589 ASSERT(states->next);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
590 canvas->states = states->next;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
591 free(states);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
592 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
593
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
594 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
595 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
596 CO_AIX_2_SKSCALAR(y));
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
597 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
598
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
599 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
600 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
601 CO_AIX_2_SKSCALAR(y));
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
602 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
603
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
604 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
605 SkRegion region, dev_region;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
606 bool in_fill;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
607
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
608 if(!canvas->subpath->isEmpty())
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
609 _update_path(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
610
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
611 _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
612 region.setPath(*canvas->path, dev_region);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
613
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
614 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
615
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
616 return in_fill;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
617 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
618
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
619 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
620 SkPath *path = canvas->path;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
621 SkPaint *paint = canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
622
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
623 ASSERT(ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
624 ASSERT(path);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
625 ASSERT(paint);
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 if(!canvas->subpath->isEmpty())
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
628 _update_path(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
629
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
630 _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
631
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
632 canvas->canvas->drawPath(*path, *paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
633
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
634 _finish_paint(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
635
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
636 path->reset();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
637 }
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
638
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
639 mbe_t *mbe_create(mbe_surface_t *target) {
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
640 mbe_t *mbe;
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
641 struct _mbe_states_t *states;
479
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
642 SkBitmap *bitmap = (SkBitmap *)target;
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
643
479
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
644 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
645 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
646 return NULL;
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
647
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
648 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
649 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
650 states = mbe->states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
651 if(states == NULL) {
479
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
652 free(mbe);
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
653 return NULL;
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
654 }
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
655
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
656 mbe->canvas = new SkCanvas(*bitmap);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
657 mbe->path = new SkPath();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
658 mbe->subpath = new SkPath();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
659 mbe->saved_region = new SkRegion();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
660 mbe->paint = new SkPaint();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
661 states->ptn = NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
662 states->ptn_owned = 0;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
663 states->line_width = 0;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
664 states->next = NULL;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
665
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
666 if(mbe->canvas == NULL || mbe->path == NULL ||
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
667 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
668 mbe->saved_region == NULL)
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
669 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
670
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
671 memcpy(states->matrix, id_matrix, sizeof(co_aix) * 6);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
672
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
673 return mbe;
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
674
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
675 fail:
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
676 if(mbe->canvas) delete mbe->canvas;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
677 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
678 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
679 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
680 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
681 free(states);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
682 free(mbe);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
683
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
684 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
685 }
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
686
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
687 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
688 struct _mbe_states_t *states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
689
479
9a867333018b mbe_create() and mbe_destroy() pass the compilation.
Thinker K.F. Li <thinker@branda.to>
parents: 473
diff changeset
690 delete canvas->canvas;
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
691 delete canvas->path;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
692 delete canvas->subpath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
693 delete canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
694 delete canvas->saved_region;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
695 while(canvas->states) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
696 states = canvas->states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
697 canvas->states = states->next;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
698
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
699 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
700 mbe_pattern_destroy(states->ptn);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
701 free(states);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
702 }
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
703 free(canvas);
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
704 }
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
705
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
706 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
707 SkPaint *paint = canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
708
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
709 ASSERT(paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
710
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
711 _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
712
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
713 canvas->canvas->drawPaint(*paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
714
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
715 _finish_paint(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
716 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
717
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
718 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
719 struct _mbe_states_t *states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
720
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
721 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
722 ASSERT(states);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
723
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
724 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
725 states->next = canvas->states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
726 canvas->states = states;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
727 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
728
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
729 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
730 mbe_fill_preserve(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
731 canvas->path->reset();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
732 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
733
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
734 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
735 if(!canvas->subpath->isEmpty())
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
736 _update_path(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
737
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
738 canvas->canvas->clipPath(*canvas->path, SkRegion::kIntersect_Op);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
739 canvas->path->reset();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
740 }
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
741
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
742 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
743 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
744 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
745
482
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
746 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
747 SkColor color = 0;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
748
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
749 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
750 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
751
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
752 void mbe_copy_source(mbe_t *canvas) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
753 SkPaint *paint = canvas->paint;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
754 SkXfermode *mode;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
755
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
756 _prepare_paint(canvas, SkPaint::kFill_Style);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
757 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
758 paint->setXfermode(mode);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
759 mode->unref();
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
760
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
761 canvas->canvas->drawPaint(*paint);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
762
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
763 _finish_paint(canvas);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
764 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
765
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
766 void mbe_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
767 _update_path(mbe);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
768
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
769 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
770 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
771
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
772 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
773 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
774 SkPoint point;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
775 SkPath *subpath = mbe->subpath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
776 SkRect rect;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
777 SkScalar x0, y0;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
778 SkScalar ang_start, ang_stop;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
779 SkScalar sweep;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
780 SkScalar r; /* radius */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
781
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
782 subpath->getLastPt(&point);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
783 x0 = point.fX;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
784 y0 = point.fX;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
785 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
786 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
787 ang_stop = CO_AIX_2_SKSCALAR(angle_stop * 180 / PI);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
788
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
789 /* 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
790 * 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
791 * 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
792 * 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
793 */
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
794 if(ang_start > ang_stop) {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
795 SkPath tmppath;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
796 SkMatrix matrix;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
797 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
798 0, -1, 0};
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
799
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
800 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
801 sweep = ang_start - ang_stop;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
802 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
803
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
804 reflect[2] = x;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
805 reflect[5] = y;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
806 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
807 subpath->addPath(tmppath, matrix);
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
808 } else {
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
809 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
810 sweep = ang_stop - ang_start;
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
811 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
812 }
d38aca825822 Import more functions for Skia graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents: 479
diff changeset
813 }
472
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
814
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
815
4254eaa699d0 Declare functions that should be implemented by Skia graphic engine
Thinker K.F. Li <thinker@branda.to>
parents: 469
diff changeset
816 C_END