annotate src/graph_engine_skia.cpp @ 704:d950487bd9f9

Flush mb_rt, immediately, after redraw_all()
author Thinker K.F. Li <thinker@branda.to>
date Fri, 13 Aug 2010 11:10:49 +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