diff options
author | William Wilgus <wilgus.william@gmail.com> | 2024-12-03 01:09:24 -0500 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2024-12-03 01:21:28 -0500 |
commit | 68d4fd0e5bb357fbe5d06fc5faa4db6d000aefcc (patch) | |
tree | 9b5d63153f446a9bdfc70f90c5b6b5db152ddc83 | |
parent | f1010005b051cdaeaeee0b23ad85b14e9c05be12 (diff) | |
download | rockbox-68d4fd0e5b.tar.gz rockbox-68d4fd0e5b.zip |
skin_engine minor refactoring struct alignment No Functional Changes
Move some elements around to save 720 bytes in the skin engine with cabbie
saves some code manipulating the skin_helpers arrays in skin_engine
eliminate conditionals checking for pre/post process functions
using a dummy fn(), consolidate pre/post process into a single function
adding a bool preprocess to indicate stage
Change-Id: Id2df4706b73e9025c7300be135dc02e135e587fe
-rw-r--r-- | apps/gui/skin_engine/skin_engine.c | 35 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 4 | ||||
-rw-r--r-- | apps/gui/skin_engine/wps_internals.h | 21 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.c | 20 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.h | 3 | ||||
-rw-r--r-- | lib/skin_parser/skin_parser.h | 9 |
6 files changed, 49 insertions, 43 deletions
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c index d27f210aa5..4d48feb989 100644 --- a/apps/gui/skin_engine/skin_engine.c +++ b/apps/gui/skin_engine/skin_engine.c @@ -53,16 +53,24 @@ static bool skins_initialised = false; static char* get_skin_filename(char *buf, size_t buf_size, enum skinnable_screens skin, enum screen_type screen); -static struct gui_skin_helper { - int (*preproccess)(enum screen_type screen, struct wps_data *data); - int (*postproccess)(enum screen_type screen, struct wps_data *data); +struct gui_skin_helper { + void (*process)(enum screen_type screen, struct wps_data *data, bool preprocess); char* (*default_skin)(enum screen_type screen); bool load_on_boot; -} skin_helpers[SKINNABLE_SCREENS_COUNT] = { - [CUSTOM_STATUSBAR] = { sb_preproccess, sb_postproccess, sb_create_from_settings, true }, - [WPS] = { NULL, NULL, wps_default_skin, true }, +}; + +void dummy_process(enum screen_type screen, struct wps_data *data, bool preprocess) +{ (void)screen, (void)data, (void)preprocess; } /* dummy replaces conditionals */ + +static const struct gui_skin_helper empty_skin_helper = {&dummy_process,NULL,false}; +static const struct gui_skin_helper const * skin_helpers[SKINNABLE_SCREENS_COUNT] = +{ +#define SKH(proc, def, lob) &((struct gui_skin_helper){proc, def, lob}) + &empty_skin_helper, + [CUSTOM_STATUSBAR] = SKH(sb_process, sb_create_from_settings, true), + [WPS] = SKH(dummy_process, wps_default_skin, true), #if CONFIG_TUNER - [FM_SCREEN] = { NULL, NULL, default_radio_skin, false } + [FM_SCREEN] = SKH(dummy_process, default_radio_skin, false), #endif }; @@ -71,7 +79,6 @@ static struct gui_skin { struct wps_data data; struct skin_stats stats; bool failsafe_loaded; - bool needs_full_update; } skins[SKINNABLE_SCREENS_COUNT][NB_SCREENS]; @@ -187,7 +194,7 @@ void settings_apply_skins(void) } gui_skin_reset(&skins[i][j]); skins[i][j].gui_wps.display = &screens[j]; - if (skin_helpers[i].load_on_boot) + if (skin_helpers[i]->load_on_boot) skin_get_gwps(i, j); } } @@ -206,24 +213,22 @@ void skin_load(enum skinnable_screens skin, enum screen_type screen, { bool loaded = false; - if (skin_helpers[skin].preproccess) - skin_helpers[skin].preproccess(screen, &skins[skin][screen].data); + skin_helpers[skin]->process(screen, &skins[skin][screen].data, true); if (buf && *buf) loaded = skin_data_load(screen, &skins[skin][screen].data, buf, isfile, &skins[skin][screen].stats); - if (!loaded && skin_helpers[skin].default_skin) + if (!loaded && skin_helpers[skin]->default_skin) { loaded = skin_data_load(screen, &skins[skin][screen].data, - skin_helpers[skin].default_skin(screen), false, + skin_helpers[skin]->default_skin(screen), false, &skins[skin][screen].stats); skins[skin][screen].failsafe_loaded = loaded; } skins[skin][screen].needs_full_update = true; - if (skin_helpers[skin].postproccess) - skin_helpers[skin].postproccess(screen, &skins[skin][screen].data); + skin_helpers[skin]->process(screen, &skins[skin][screen].data, false); #ifdef HAVE_BACKDROP_IMAGE if (loaded) skin_backdrops_preload(); diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 779f6810a2..bfce5e89ea 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -2162,6 +2162,10 @@ static bool skin_load_fonts(struct wps_data *data) static int convert_viewport(struct wps_data *data, struct skin_element* element) { + if (element->tag) + DEBUGF("%s %s\n", __func__, element->tag->name); + else + DEBUGF("%s %s\n", __func__, "?"); struct skin_viewport *skin_vp = skin_buffer_alloc(sizeof(*skin_vp)); struct screen *display = &screens[curr_screen]; diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index c4e319fca5..b5365a3f77 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -98,8 +98,8 @@ struct gui_img { struct bitmap bm; int buflib_handle; OFFSETTYPE(char*) label; - bool loaded; /* load state */ int display; + bool loaded; /* load state */ bool using_preloaded_icons; /* using the icon system instead of a bmp */ bool is_9_segment; bool dither; @@ -114,6 +114,9 @@ struct image_display { struct progressbar { enum skin_token_type type; + bool follow_lang_direction; + bool horizontal; + char setting_offset; /* regular pb */ short x; /* >=0: explicitly set in the tag -> y-coord within the viewport @@ -122,17 +125,14 @@ struct progressbar { short y; short width; short height; - bool follow_lang_direction; OFFSETTYPE(struct gui_img *) image; - bool invert_fill_direction; bool nofill; bool noborder; bool nobar; OFFSETTYPE(struct gui_img *) slider; - bool horizontal; - char setting_offset; + OFFSETTYPE(struct gui_img *) backdrop; const struct settings_list *setting; }; @@ -185,10 +185,10 @@ struct gradient_config { struct skin_viewport { struct viewport vp; /* The LCD viewport struct */ struct frame_buffer_t framebuf; /* holds reference to current framebuffer */ - char hidden_flags; - bool is_infovp; OFFSETTYPE(char*) label; int parsed_fontid; + char hidden_flags; + bool is_infovp; #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) bool output_to_backdrop_buffer; bool fgbg_changed; @@ -213,14 +213,15 @@ struct touchregion { short int hpad; /* padding to height */ bool reverse_bar; /* if true 0% is the left or top */ bool allow_while_locked; + bool armed; /* A region is armed on press. Only armed regions are triggered + on repeat or release. */ enum { PRESS, /* quick press only */ LONG_PRESS, /* Long press without repeat */ REPEAT, /* long press allowing repeats */ } press_length; int action; /* action this button will return */ - bool armed; /* A region is armed on press. Only armed regions are triggered - on repeat or release. */ + union { /* Extra data, action dependant */ struct touchsetting { const struct settings_list *setting; /* setting being controlled */ @@ -365,8 +366,8 @@ struct wps_data #endif #ifdef HAVE_TOUCHSCREEN - OFFSETTYPE(struct skin_token_list *) touchregions; bool touchscreen_locked; + OFFSETTYPE(struct skin_token_list *) touchregions; #endif #ifdef HAVE_ALBUMART OFFSETTYPE(struct skin_albumart *) albumart; diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c index e0b49efdae..800578832a 100644 --- a/apps/gui/statusbar-skinned.c +++ b/apps/gui/statusbar-skinned.c @@ -76,16 +76,15 @@ enum themable_icons sb_get_icon(enum screen_type screen) return sbs_has_title[screen] ? sbs_icon[screen] : Icon_NOICON + 2; } -int sb_preproccess(enum screen_type screen, struct wps_data *data) -{ - (void)data; - sbs_loaded[screen] = false; - sbs_has_title[screen] = false; - viewportmanager_theme_enable(screen, false, NULL); - return 1; -} -int sb_postproccess(enum screen_type screen, struct wps_data *data) +void sb_process(enum screen_type screen, struct wps_data *data, bool preprocess) { + if (preprocess) + { + sbs_loaded[screen] = false; + sbs_has_title[screen] = false; + viewportmanager_theme_enable(screen, false, NULL); + return; + } if (data->wps_loaded) { /* hide the sb's default viewport because it has nasty effect with stuff @@ -100,7 +99,7 @@ int sb_postproccess(enum screen_type screen, struct wps_data *data) { if (!next_vp) { /* no second viewport, let parsing fail */ - return 0; + return; } /* hide this viewport, forever */ vp->hidden_flags = VP_NEVER_VISIBLE; @@ -109,7 +108,6 @@ int sb_postproccess(enum screen_type screen, struct wps_data *data) sbs_loaded[screen] = true; } viewportmanager_theme_undo(screen, false); - return 1; } static OFFSETTYPE(char*) infovp_label[NB_SCREENS]; diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h index e8fa14e676..4e7c461f90 100644 --- a/apps/gui/statusbar-skinned.h +++ b/apps/gui/statusbar-skinned.h @@ -49,8 +49,7 @@ int sb_touch_to_button(int context); #endif int sb_get_backdrop(enum screen_type screen); -int sb_preproccess(enum screen_type screen, struct wps_data *data); -int sb_postproccess(enum screen_type screen, struct wps_data *data); +void sb_process(enum screen_type screen, struct wps_data *data, bool preprocess); void do_sbs_update_callback(unsigned short id, void *param); #endif /* __STATUSBAR_SKINNED_H__ */ diff --git a/lib/skin_parser/skin_parser.h b/lib/skin_parser/skin_parser.h index 4f613d219d..00ac68258c 100644 --- a/lib/skin_parser/skin_parser.h +++ b/lib/skin_parser/skin_parser.h @@ -107,15 +107,14 @@ struct skin_tag_parameter DEFAULT } type; + char type_code; + union { int number; OFFSETTYPE(char*) text; OFFSETTYPE(struct skin_element*) code; - } data; - - char type_code; - + } data; }; /* Defines an element of a SKIN file, @@ -151,7 +150,7 @@ struct skin_element enum skin_cb_returnvalue { - CALLBACK_ERROR = -666, + CALLBACK_ERROR = -128, FEATURE_NOT_AVAILABLE, CALLBACK_OK = 0, /* > 0 reserved for future use */ |