/** * Copies the value of the src param into the param. Also sets the param to the type of which the * source param is. * * @param param Pointer to the VisParamEntry to which a parameter is set. * @param src Pointer to the VisParamEntry from which the value is retrieved. * * @return VISUAL_OK on succes, -VISUAL_ERROR_PARAM_NULL, -VISUAL_ERROR_PARAM_INVALID_TYPE on failure. */ int visual_param_entry_set_from_param (VisParamEntry *param, VisParamEntry *src) { visual_log_return_val_if_fail (param != NULL, -VISUAL_ERROR_PARAM_NULL); visual_log_return_val_if_fail (src != NULL, -VISUAL_ERROR_PARAM_NULL); switch (src->type) { case VISUAL_PARAM_ENTRY_TYPE_NULL: break; case VISUAL_PARAM_ENTRY_TYPE_STRING: visual_param_entry_set_string (param, visual_param_entry_get_string (src)); break; case VISUAL_PARAM_ENTRY_TYPE_INTEGER: visual_param_entry_set_integer (param, visual_param_entry_get_integer (src)); break; case VISUAL_PARAM_ENTRY_TYPE_FLOAT: visual_param_entry_set_float (param, visual_param_entry_get_float (src)); break; case VISUAL_PARAM_ENTRY_TYPE_DOUBLE: visual_param_entry_set_double (param, visual_param_entry_get_double (src)); break; case VISUAL_PARAM_ENTRY_TYPE_COLOR: visual_param_entry_set_color_by_color (param, visual_param_entry_get_color (src)); break; case VISUAL_PARAM_ENTRY_TYPE_PALETTE: visual_param_entry_set_palette (param, visual_param_entry_get_palette (src)); break; case VISUAL_PARAM_ENTRY_TYPE_OBJECT: visual_param_entry_set_object (param, visual_param_entry_get_object (src)); break; default: visual_log (VISUAL_LOG_CRITICAL, _("param type is not valid")); return -VISUAL_ERROR_PARAM_INVALID_TYPE; break; } return VISUAL_OK; }
static void set_parameter_lv(void * data, const char * name, const bg_parameter_value_t * val) { int supported; lv_priv_t * priv; int index; int i_tmp; uint8_t r, g, b; char * tmp_string; VisParamEntry * param; VisListEntry * list_entry; VisColor * color; const bg_parameter_info_t * info; if(!name) return; priv = (lv_priv_t*)data; info = bg_parameter_find(priv->parameters, name); if(!info) return; /* This would crash if multi_parameters were supported */ index = info - priv->parameters; tmp_string = gavl_strdup(name); param = visual_param_entry_new(tmp_string); free(tmp_string); /* Menus have to be treated specially */ if(info->type == BG_PARAMETER_STRINGLIST) { if(!priv->widgets[index]) return; /* Get the selected index */ supported = 0; list_entry = NULL; while(visual_list_next(&VISUAL_UI_CHOICE(priv->widgets[index])->choices.choices, &list_entry)) { if(!strcmp(((VisUIChoiceEntry*)(list_entry->data))->name, val->val_str)) { visual_param_entry_set_from_param(param, ((VisUIChoiceEntry*)(list_entry->data))->value); supported = 1; break; } } } else { supported = 1; switch(priv->params[index]->type) { case VISUAL_PARAM_ENTRY_TYPE_NULL: /**< No parameter. */ supported = 0; break; case VISUAL_PARAM_ENTRY_TYPE_STRING: /**< String parameter. */ if(val->val_str) visual_param_entry_set_string(param, val->val_str); else supported = 0; break; case VISUAL_PARAM_ENTRY_TYPE_INTEGER: /**< Integer parameter. */ visual_param_entry_set_integer(param, val->val_i); break; case VISUAL_PARAM_ENTRY_TYPE_FLOAT: /**< Floating point parameter. */ visual_param_entry_set_float(param, val->val_f); break; case VISUAL_PARAM_ENTRY_TYPE_DOUBLE: /**< Double floating point parameter. */ visual_param_entry_set_double(param, val->val_f); break; case VISUAL_PARAM_ENTRY_TYPE_COLOR: /**< VisColor parameter. */ i_tmp = (int)(val->val_color[0] * 255.0 + 0.5); if(i_tmp < 0) i_tmp = 0; if(i_tmp > 255) i_tmp = 255; r = i_tmp; i_tmp = (int)(val->val_color[1] * 255.0 + 0.5); if(i_tmp < 0) i_tmp = 0; if(i_tmp > 255) i_tmp = 255; g = i_tmp; i_tmp = (int)(val->val_color[2] * 255.0 + 0.5); if(i_tmp < 0) i_tmp = 0; if(i_tmp > 255) i_tmp = 255; b = i_tmp; color = visual_color_new(); visual_color_set(color, r, g, b); visual_param_entry_set_color_by_color(param, color); visual_object_unref(VISUAL_OBJECT(color)); break; case VISUAL_PARAM_ENTRY_TYPE_PALETTE: /**< VisPalette parameter. */ case VISUAL_PARAM_ENTRY_TYPE_OBJECT: /**< VisObject parameter. */ case VISUAL_PARAM_ENTRY_TYPE_END: /**< List end, and used as terminator for VisParamEntry lists. */ supported = 0; break; } } if(supported) { visual_event_queue_add_param(visual_plugin_get_eventqueue(visual_actor_get_plugin(priv->actor)), param); } else visual_object_unref(VISUAL_OBJECT(param)); }