void babl_palette_reset (const Babl *babl) { BablPalette **palptr = babl_get_user_data (babl); if (*palptr != default_palette ()) { babl_palette_free (*palptr); } *palptr = default_palette (); }
void title_screen(context *parent) { struct config_info *conf = get_config(); struct game_context *title; struct context_spec spec; if(edit_world) { conf->standalone_mode = false; } if(conf->standalone_mode && conf->no_titlescreen) { struct game_context dummy; dummy.ctx.world = parent->world; if(load_world_gameplay(&dummy, curr_file)) { play_game(parent, NULL); return; } conf->standalone_mode = false; } title = cmalloc(sizeof(struct game_context)); title->fade_in = true; title->need_reload = true; title->load_dialog_on_failed_load = true; title->is_title = true; memset(&spec, 0, sizeof(struct context_spec)); spec.resume = title_resume; spec.draw = game_draw; spec.idle = game_idle; spec.key = title_key; spec.joystick = title_joystick; spec.destroy = game_destroy; create_context((context *)title, parent, &spec, CTX_TITLE_SCREEN); default_palette(); if(edit_world && conf->startup_editor) { title->load_dialog_on_failed_load = false; edit_world((context *)title, true); } clear_screen(); }
const Babl * babl_new_palette_with_space (const char *name, const Babl *space, const Babl **format_u8, const Babl **format_u8_with_alpha) { const Babl *model; const Babl *model_no_alpha; Babl *f_pal_u8; Babl *f_pal_a_u8; const Babl *component; const Babl *alpha; BablPalette **palptr; char cname[64]; if (!space) space = babl_space ("sRGB"); if (!name) { static int cnt = 0; snprintf (cname, sizeof (cname), "_babl-int-%i", cnt++); name = cname; } else { snprintf (cname, sizeof (cname), "%s-%p", name, space); name = cname; if ((model = babl_db_exist_by_name (babl_model_db (), name))) { cname[0] = ')'; if (format_u8) *format_u8 = babl_db_exist_by_name (babl_format_db (), name); cname[0] = '\\'; if (format_u8_with_alpha) *format_u8_with_alpha = babl_db_exist_by_name (babl_format_db (), name); return model; } } /* re-registering is a no-op */ component = babl_component_new ( "I", "luma", "chroma", NULL); alpha = babl_component ("A"); model = babl_model_new ("name", name, component, alpha, NULL); palptr = malloc (sizeof (void*)); *palptr = default_palette ();; cname[0] = 'v'; model_no_alpha = babl_model_new ("name", name, component, NULL); cname[0] = '\\'; f_pal_a_u8 = (void*) babl_format_new ("name", name, model, space, babl_type ("u8"), component, alpha, NULL); cname[0] = ')'; f_pal_u8 = (void*) babl_format_new ("name", name, model_no_alpha, space, babl_type ("u8"), component, NULL); f_pal_a_u8->format.palette = 1; f_pal_u8->format.palette = 1; babl_conversion_new ( model, babl_model ("RGBA"), "linear", pala_to_rgba, "data", palptr, NULL ); babl_conversion_new ( babl_model ("RGBA"), model, "linear", rgba_to_pala, "data", palptr, NULL ); babl_conversion_new ( model_no_alpha, babl_model ("RGBA"), "linear", pal_to_rgba, "data", palptr, NULL ); babl_conversion_new ( babl_model ("RGBA"), model_no_alpha, "linear", rgba_to_pal, "data", palptr, NULL ); babl_conversion_new ( f_pal_u8, f_pal_a_u8, "linear", conv_pal8_pala8, NULL ); babl_conversion_new ( f_pal_a_u8, f_pal_u8, "linear", conv_pala8_pal8, NULL ); babl_conversion_new ( f_pal_u8, babl_format ("R'G'B'A u8"), "linear", pal_u8_to_rgba_u8, "data", palptr, NULL); babl_conversion_new ( f_pal_a_u8, babl_format ("R'G'B'A u8"), "linear", pala_u8_to_rgba_u8, "data", palptr, NULL); babl_conversion_new ( babl_format ("R'G'B'A u8"), f_pal_a_u8, "linear", rgba_u8_to_pal_a, "data", palptr, NULL); babl_conversion_new ( babl_format ("R'G'B'A u8"), f_pal_u8, "linear", rgba_u8_to_pal, "data", palptr, NULL); babl_conversion_new ( babl_format ("RGBA float"), f_pal_a_u8, "linear", rgba_float_to_pal_a, "data", palptr, NULL); babl_conversion_new ( babl_format ("RGBA float"), f_pal_u8, "linear", rgba_float_to_pal, "data", palptr, NULL); babl_set_user_data (model, palptr); babl_set_user_data (model_no_alpha, palptr); if (format_u8) *format_u8 = f_pal_u8; if (format_u8_with_alpha) *format_u8_with_alpha = f_pal_a_u8; babl_sanity (); return model; }