annotate src/graph_engine_skia.cpp @ 489:23c7667b3ec0 Android_Skia

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