mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
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
This commit is contained in:
parent
f1010005b0
commit
68d4fd0e5b
6 changed files with 49 additions and 43 deletions
|
@ -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();
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue