annotate src/graph_engine_skia.cpp @ 795:46a4cd4d382b

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