static void p_delta_MaterialSettings(t_MaterialSettings *val, t_MaterialSettings *val_from, t_MaterialSettings *val_to, gint32 total_steps, gdouble current_step) { p_delta_gdouble(&val->ambient_int, val_from->ambient_int, val_to->ambient_int, total_steps, current_step); p_delta_gdouble(&val->diffuse_int, val_from->diffuse_int, val_to->diffuse_int, total_steps, current_step); p_delta_gdouble(&val->diffuse_ref, val_from->diffuse_ref, val_to->diffuse_ref, total_steps, current_step); p_delta_gdouble(&val->specular_ref, val_from->specular_ref, val_to->specular_ref, total_steps, current_step); p_delta_gdouble(&val->highlight, val_from->highlight, val_to->highlight, total_steps, current_step); p_delta_GckRGB(&val->color, &val_from->color, &val_to->color, total_steps, current_step); }
static void p_delta_LightSettings(t_LightSettings *val, t_LightSettings *val_from, t_LightSettings *val_to, gint32 total_steps, gdouble current_step) { /* no delta is done for LightType */ p_delta_GckVector3(&val->position, &val_from->position, &val_to->position, total_steps, current_step); p_delta_GckVector3(&val->direction, &val_from->direction, &val_to->direction, total_steps, current_step); p_delta_GckRGB(&val->color, &val_from->color, &val_to->color, total_steps, current_step); p_delta_gdouble(&val->intensity, val_from->intensity, val_to->intensity, total_steps, current_step); }
static void run(const gchar *name , gint nparams , const GimpParam *param , gint *nreturn_vals , GimpParam **return_vals) { wr_huesat_val_t l_cuvals; WrDialog *wcd = NULL; gint32 l_image_id = -1; gint32 l_drawable_id = -1; gint32 l_handled_drawable_id = -1; /* Get the runmode from the in-parameters */ GimpRunMode run_mode = param[0].data.d_int32; /* status variable, use it to check for errors in invocation usualy only during non-interactive calling */ GimpPDBStatusType status = GIMP_PDB_SUCCESS; /*always return at least the status to the caller. */ static GimpParam values[2]; INIT_I18N(); /* initialize the return of the status */ values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; values[1].type = GIMP_PDB_DRAWABLE; values[1].data.d_int32 = -1; *nreturn_vals = 2; *return_vals = values; /* the Iterator Stuff */ if (strcmp (name, PLUG_IN_ITER_NAME) == 0) { gint32 len_struct; gint32 total_steps; gdouble current_step; wr_huesat_val_t cval; /* current values while iterating */ wr_huesat_val_t cval_from, cval_to; /* start and end values */ /* Iterator procedure for animated calls is usually called from * "plug_in_gap_layers_run_animfilter" * (always run noninteractive) */ if ((run_mode == GIMP_RUN_NONINTERACTIVE) && (nparams == 4)) { total_steps = param[1].data.d_int32; current_step = param[2].data.d_float; len_struct = param[3].data.d_int32; if(len_struct == sizeof(cval)) { /* get _FROM and _TO data, * This data was stored by plug_in_gap_layers_run_animfilter */ gimp_get_data(PLUG_IN_DATA_ITER_FROM, &cval_from); gimp_get_data(PLUG_IN_DATA_ITER_TO, &cval_to); memcpy(&cval, &cval_from, sizeof(cval)); p_delta_gint32 (&cval.hue_range, cval_from.hue_range, cval_to.hue_range, total_steps, current_step); p_delta_gdouble(&cval.hue_offset, cval_from.hue_offset, cval_to.hue_offset, total_steps, current_step); p_delta_gdouble(&cval.lightness, cval_from.lightness, cval_to.lightness, total_steps, current_step); p_delta_gdouble(&cval.saturation, cval_from.saturation, cval_to.saturation, total_steps, current_step); gimp_set_data(PLUG_IN_NAME, &cval, sizeof(cval)); } else status = GIMP_PDB_CALLING_ERROR; } else status = GIMP_PDB_CALLING_ERROR; values[0].data.d_status = status; return; } /* get image and drawable */ l_image_id = param[1].data.d_int32; l_drawable_id = param[2].data.d_drawable; if(status == GIMP_PDB_SUCCESS) { /* how are we running today? */ switch (run_mode) { case GIMP_RUN_INTERACTIVE: /* Initial values */ l_cuvals.hue_range = 0; l_cuvals.hue_offset = 0; l_cuvals.lightness = 0; l_cuvals.saturation = 0; /* Get information from the dialog */ wcd = do_dialog(&l_cuvals); wcd->show_progress = TRUE; break; case GIMP_RUN_NONINTERACTIVE: /* check to see if invoked with the correct number of parameters */ if (nparams >= 7) { wcd = g_malloc (sizeof (WrDialog)); wcd->run = TRUE; wcd->show_progress = FALSE; l_cuvals.hue_range = param[3].data.d_int32; l_cuvals.hue_offset = param[4].data.d_float; l_cuvals.lightness = param[5].data.d_float; l_cuvals.saturation = param[6].data.d_float; } else { status = GIMP_PDB_CALLING_ERROR; } break; case GIMP_RUN_WITH_LAST_VALS: wcd = g_malloc (sizeof (WrDialog)); wcd->run = TRUE; wcd->show_progress = TRUE; /* Possibly retrieve data from a previous run */ gimp_get_data (PLUG_IN_NAME, &l_cuvals); break; default: break; } } if (wcd == NULL) { status = GIMP_PDB_EXECUTION_ERROR; } if (status == GIMP_PDB_SUCCESS) { /* Run the main function */ if(wcd->run) { gimp_image_undo_group_start (l_image_id); p_run_huesat_tool(l_drawable_id, &l_cuvals); l_handled_drawable_id = l_drawable_id; gimp_image_undo_group_end (l_image_id); /* Store variable states for next run */ if (run_mode == GIMP_RUN_INTERACTIVE) { gimp_set_data(PLUG_IN_NAME, &l_cuvals, sizeof(l_cuvals)); } } else { status = GIMP_PDB_EXECUTION_ERROR; /* dialog ended with cancel button */ } /* If run mode is interactive, flush displays, else (script) don't do it, as the screen updates would make the scripts slow */ if (run_mode != GIMP_RUN_NONINTERACTIVE) { gimp_displays_flush (); } } values[0].data.d_status = status; values[1].data.d_int32 = l_handled_drawable_id; /* return the id of handled layer */ } /* end run */