Skip to content

Commit 7df2d52

Browse files
author
zhangjipeng
committed
refactor: adjust svg player code
Signed-off-by: zhangjipeng <zhangjipeng@xiaomi.com>
1 parent bb864a5 commit 7df2d52

3 files changed

Lines changed: 86 additions & 112 deletions

File tree

ext/svg/psx_svg_player.cpp

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -423,14 +423,6 @@ static INLINE float _attr_as_number(const psx_svg_attr* a)
423423
return a->value.fval;
424424
}
425425

426-
static psx_svg_player_options _default_options(void)
427-
{
428-
psx_svg_player_options opt;
429-
opt.loop = false;
430-
opt.dpi = 96;
431-
return opt;
432-
}
433-
434426
static INLINE const psx_svg_attr* _find_attr(const psx_svg_node* node, psx_svg_attr_type type)
435427
{
436428
if (!node) {
@@ -2130,9 +2122,7 @@ static void _collect_anims(psx_svg_player* p, const psx_svg_node* node)
21302122
extern "C" {
21312123
#endif
21322124

2133-
static psx_svg_player* _psx_svg_player_create_impl(const psx_svg_node* root,
2134-
const psx_svg_player_options* opt_in,
2135-
psx_result* out)
2125+
psx_svg_player* psx_svg_player_create(const psx_svg_node* root, psx_result* out)
21362126
{
21372127
if (out) {
21382128
*out = S_OK;
@@ -2144,8 +2134,6 @@ static psx_svg_player* _psx_svg_player_create_impl(const psx_svg_node* root,
21442134
return NULL;
21452135
}
21462136

2147-
psx_svg_player_options opt = opt_in ? *opt_in : _default_options();
2148-
21492137
psx_svg_player* p = (psx_svg_player*)mem_malloc(sizeof(psx_svg_player));
21502138
if (!p) {
21512139
if (out) {
@@ -2156,8 +2144,8 @@ static psx_svg_player* _psx_svg_player_create_impl(const psx_svg_node* root,
21562144
memset(p, 0, sizeof(psx_svg_player));
21572145

21582146
p->root = root;
2159-
p->loop = opt.loop;
2160-
p->dpi = (opt.dpi > 0) ? opt.dpi : 96;
2147+
p->loop = false;
2148+
p->dpi = 96; // default dpi
21612149

21622150
p->render_list = psx_svg_render_list_create(root);
21632151
if (!p->render_list) {
@@ -2211,16 +2199,6 @@ static psx_svg_player* _psx_svg_player_create_impl(const psx_svg_node* root,
22112199
return p;
22122200
}
22132201

2214-
psx_svg_player* psx_svg_player_create(const psx_svg_node* root,
2215-
const psx_svg_player_options* opt_in,
2216-
psx_result* out)
2217-
{
2218-
// We may need non-const access internally for indices/caches, but we do not
2219-
// mutate the DOM in this minimal implementation.
2220-
return _psx_svg_player_create_impl((psx_svg_node*)root, opt_in, out);
2221-
}
2222-
2223-
22242202
void psx_svg_player_destroy(psx_svg_player* p)
22252203
{
22262204
if (!p) {
@@ -2428,6 +2406,19 @@ bool psx_svg_player_get_loop(const psx_svg_player* p)
24282406
return p ? p->loop : false;
24292407
}
24302408

2409+
void psx_svg_player_set_dpi(psx_svg_player* p, int32_t dpi)
2410+
{
2411+
if (!p) {
2412+
return;
2413+
}
2414+
p->dpi = dpi;
2415+
}
2416+
2417+
int32_t psx_svg_player_get_dpi(const psx_svg_player* p)
2418+
{
2419+
return p ? p->dpi : 0;
2420+
}
2421+
24312422
void psx_svg_player_draw(psx_svg_player* p, ps_context* ctx)
24322423
{
24332424
if (!p || !ctx || !p->render_list) {
@@ -2531,7 +2522,6 @@ const psx_svg_node* psx_svg_player_get_node_by_id(const psx_svg_player* p, const
25312522

25322523
// FIXME: change to tree travls
25332524

2534-
25352525
// Parser stores element id into node->content(). We do a simple DFS.
25362526
const psx_svg_node* stack[64];
25372527
uint32_t sp = 0;

ext/svg/psx_svg_player.h

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,6 @@ extern "C" {
3838

3939
typedef struct psx_svg_player psx_svg_player;
4040

41-
// Player create options
42-
typedef struct {
43-
// If true, player will loop when reaching end time.
44-
// Default: false.
45-
bool loop;
46-
47-
// Document dpi for unit conversion (px/in/cm/mm/pt/pc). Default: 96.
48-
int32_t dpi;
49-
} psx_svg_player_options;
50-
5141
// Player status
5242
typedef enum {
5343
PSX_SVG_PLAYER_STOPPED = 0,
@@ -62,18 +52,21 @@ typedef enum {
6252
PSX_SVG_ANIM_EVENT_REPEAT,
6353
} psx_svg_anim_event_type;
6454

65-
typedef void (*psx_svg_anim_event_cb)(psx_svg_anim_event_type type,
66-
const char* anim_id,
67-
void* user);
55+
typedef void (*psx_svg_anim_event_cb)(psx_svg_anim_event_type type, const char* anim_id, void* user_data);
6856

6957
// Create a player from an already-parsed SVG DOM root.
7058
// The player internally builds a render list once and reuses it each frame.
71-
psx_svg_player* psx_svg_player_create(const psx_svg_node* root,
72-
const psx_svg_player_options* opt,
73-
psx_result* err);
74-
59+
psx_svg_player* psx_svg_player_create(const psx_svg_node* root, psx_result* err);
7560
void psx_svg_player_destroy(psx_svg_player* p);
7661

62+
// Loop
63+
void psx_svg_player_set_loop(psx_svg_player* p, bool loop);
64+
bool psx_svg_player_get_loop(const psx_svg_player* p);
65+
66+
// Dpi
67+
void psx_svg_player_set_dpi(psx_svg_player* p, int32_t dpi);
68+
int32_t psx_svg_player_get_dpi(const psx_svg_player* p);
69+
7770
// Playback control
7871
void psx_svg_player_play(psx_svg_player* p);
7972
void psx_svg_player_pause(psx_svg_player* p);
@@ -86,10 +79,6 @@ float psx_svg_player_get_time(const psx_svg_player* p);
8679
float psx_svg_player_get_duration(const psx_svg_player* p); // -1 for indefinite/unknown
8780
psx_svg_player_state psx_svg_player_get_state(const psx_svg_player* p);
8881

89-
// Loop
90-
void psx_svg_player_set_loop(psx_svg_player* p, bool loop);
91-
bool psx_svg_player_get_loop(const psx_svg_player* p);
92-
9382
// Rendering
9483
// Draws current frame into the provided Picasso context.
9584
void psx_svg_player_draw(psx_svg_player* p, ps_context* ctx);

0 commit comments

Comments
 (0)