summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2024-12-03 01:09:24 -0500
committerWilliam Wilgus <me.theuser@yahoo.com>2024-12-03 01:21:28 -0500
commit68d4fd0e5bb357fbe5d06fc5faa4db6d000aefcc (patch)
tree9b5d63153f446a9bdfc70f90c5b6b5db152ddc83
parentf1010005b051cdaeaeee0b23ad85b14e9c05be12 (diff)
downloadrockbox-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.c35
-rw-r--r--apps/gui/skin_engine/skin_parser.c4
-rw-r--r--apps/gui/skin_engine/wps_internals.h21
-rw-r--r--apps/gui/statusbar-skinned.c20
-rw-r--r--apps/gui/statusbar-skinned.h3
-rw-r--r--lib/skin_parser/skin_parser.h9
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 */