int effect_random_col_update(struct razer_fx_render_node *render) { int length_ms = daemon_get_parameter_int(daemon_effect_get_parameter_by_index(render->effect,0)); int par_index = daemon_get_parameter_int(daemon_effect_get_parameter_by_index(render->effect,1)); if(par_index == -1) return(0); int randomize_now = daemon_get_parameter_int(daemon_effect_get_parameter_by_index(render->effect,2)); struct razer_rgb *dst_color = daemon_get_parameter_rgb(daemon_effect_get_parameter_by_index(render->effect,3)); struct razer_rgb *src_color = daemon_get_parameter_rgb(daemon_effect_get_parameter_by_index(render->effect,4)); if(randomize_now) { struct razer_rgb *org_color = NULL; if(render->parent) { org_color = daemon_get_parameter_rgb(daemon_effect_get_parameter_by_index(render->parent->effect,par_index)); } if(org_color) { src_color->r = org_color->r; src_color->g = org_color->g; src_color->b = org_color->b; } dst_color->r = random() % 256; dst_color->g = random() % 256; dst_color->b = random() % 256; daemon_set_parameter_rgb(daemon_effect_get_parameter_by_index(render->effect,3),dst_color); daemon_set_parameter_rgb(daemon_effect_get_parameter_by_index(render->effect,4),src_color); randomize_now = 0; } unsigned long start = render->start_ticks; unsigned long end = start + length_ms; unsigned long ticks_left = end - render->daemon->chroma->update_ms; float trans = 0.0f; trans = (float)ticks_left / (float)length_ms; if(end<render->daemon->chroma->update_ms) { //#ifdef USE_DEBUGGING // printf("\n(Compute::RandomCol.%d ## finished)\n",render->id); //#endif daemon_set_parameter_rgb(daemon_effect_get_parameter_by_index(render->parent->effect,par_index),dst_color); randomize_now = 1; daemon_set_parameter_int(daemon_effect_get_parameter_by_index(render->effect,2),randomize_now); return(0); } else { #ifdef USE_DEBUGGING printf(" (Compute::RandomCol.%d ## length_ms:%d,trans_color:%d,%d,%d,trans:%f)",render->id,length_ms,dst_color->r,dst_color->g,dst_color->b,trans); #endif if(render->parent) { struct razer_rgb trans_color; //trans_color.r=dst_color->r*trans; rgb_mix_into(&trans_color,dst_color,src_color,trans); daemon_set_parameter_rgb(daemon_effect_get_parameter_by_index(render->parent->effect,par_index),&trans_color); } } daemon_set_parameter_int(daemon_effect_get_parameter_by_index(render->effect,2),randomize_now); return(1); }
struct razer_parameter *daemon_copy_parameter(struct razer_parameter *parameter) { struct razer_parameter *copy = daemon_create_parameter(); copy->id = parameter->id; copy->key = str_Copy(parameter->key); copy->description = str_Copy(parameter->description); copy->type = parameter->type; switch(parameter->type) { case RAZER_PARAMETER_TYPE_STRING: daemon_set_parameter_string(copy,str_Copy(daemon_get_parameter_string(parameter))); break; case RAZER_PARAMETER_TYPE_INT: daemon_set_parameter_int(copy,daemon_get_parameter_int(parameter)); break; case RAZER_PARAMETER_TYPE_FLOAT: daemon_set_parameter_float(copy,daemon_get_parameter_float(parameter)); break; case RAZER_PARAMETER_TYPE_RGB: { struct razer_rgb *color = rgb_copy(daemon_get_parameter_rgb(parameter)); daemon_set_parameter_rgb(copy,color); } break; case RAZER_PARAMETER_TYPE_POS: { struct razer_pos *pos = razer_pos_copy(daemon_get_parameter_pos(parameter)); daemon_set_parameter_pos(copy,pos); } break; case RAZER_PARAMETER_TYPE_RENDER_NODE: daemon_set_parameter_render_node(copy,daemon_get_parameter_render_node(parameter)); break; case RAZER_PARAMETER_TYPE_FLOAT_RANGE: { struct razer_float_range *range = razer_float_range_copy(daemon_get_parameter_float_range(parameter)); daemon_set_parameter_float_range(copy,range); } break; case RAZER_PARAMETER_TYPE_INT_RANGE: { struct razer_int_range *range = razer_int_range_copy(daemon_get_parameter_int_range(parameter)); daemon_set_parameter_int_range(copy,range); } break; case RAZER_PARAMETER_TYPE_UINT_RANGE: { struct razer_uint_range *range = razer_uint_range_copy(daemon_get_parameter_uint_range(parameter)); daemon_set_parameter_uint_range(copy,range); } break; case RAZER_PARAMETER_TYPE_RGB_RANGE: { struct razer_rgb_range *range = razer_rgb_range_copy(daemon_get_parameter_rgb_range(parameter)); daemon_set_parameter_rgb_range(copy,range); } break; case RAZER_PARAMETER_TYPE_POS_RANGE: { struct razer_pos_range *range = razer_pos_range_copy(daemon_get_parameter_pos_range(parameter)); daemon_set_parameter_pos_range(copy,range); } break; case RAZER_PARAMETER_TYPE_FLOAT_ARRAY: { struct razer_float_array *array = razer_float_array_copy(daemon_get_parameter_float_array(parameter)); daemon_set_parameter_float_array(copy,array); } break; case RAZER_PARAMETER_TYPE_INT_ARRAY: { struct razer_int_array *array = razer_int_array_copy(daemon_get_parameter_int_array(parameter)); daemon_set_parameter_int_array(copy,array); } break; case RAZER_PARAMETER_TYPE_UINT_ARRAY: { struct razer_uint_array *array = razer_uint_array_copy(daemon_get_parameter_uint_array(parameter)); daemon_set_parameter_uint_array(copy,array); } break; case RAZER_PARAMETER_TYPE_RGB_ARRAY: { struct razer_rgb_array *array = razer_rgb_array_copy(daemon_get_parameter_rgb_array(parameter)); daemon_set_parameter_rgb_array(copy,array); } break; case RAZER_PARAMETER_TYPE_POS_ARRAY: { struct razer_pos_array *array = razer_pos_array_copy(daemon_get_parameter_pos_array(parameter)); daemon_set_parameter_pos_array(copy,array); } break; } return(copy); }