void open_menu_renderer(struct menu_renderer *self, struct menu *menu) { static const struct menu_observer_ops menu_observer_ops = { .on_focus_in = menu_renderer_on_focus_in, .on_focus_out = menu_renderer_on_focus_out, }; struct menu_iterator iter; self->menu = menu; setup_menu_iterator(&iter, menu); while (menu_iterator_has_next(&iter)) { struct menu_entry *entry = menu_iterator_next(&iter); entry->cookie = b6_allocate(&b6_std_allocator, sizeof(struct menu_entry_renderer)); } initialize_menu_renderer_entries(self); setup_menu_observer(&self->menu_observer, &menu_observer_ops); add_menu_observer(self->menu, &self->menu_observer); menu_renderer_on_focus_in(&self->menu_observer); }
int initialize_menu_mixer(struct menu_mixer *self, struct menu *menu, const char *skin, struct mixer *mixer) { static struct menu_observer_ops ops = {}; struct istream *is; struct data_entry *data; self->menu = menu; self->mixer = mixer; self->music = 0; if ((data = lookup_data(skin, audio_data_type, "menu.music")) && (is = get_data(data))) { int retval = mixer->ops->load_music_from_stream(mixer, is); if (!retval) { play_music(mixer); self->music = 1; } else log_w(_s("could not load background music")); put_data(data, is); } else log_w(_s("cannot find background music")); add_menu_observer(self->menu, setup_menu_observer(&self->menu_observer, &ops)); return 0; }