static void color_rotate (GeglProperties *o, gfloat *input, gfloat *output) { gfloat h, s, v; gboolean skip = FALSE; rgb_to_hsv (input[0], input[1], input[2], &h, &s, &v); if (is_gray (s, o->threshold)) { if (o->gray_mode == GEGL_COLOR_ROTATE_GRAY_TREAT_AS) { if (angle_inside_slice (o->hue, o->src_from, o->src_to, o->src_clockwise) <= 1) { h = DEG_TO_RAD (o->hue) / TWO_PI; s = o->saturation; } else { skip = TRUE; } } else { skip = TRUE; h = DEG_TO_RAD (o->hue) / TWO_PI; s = o->saturation; } } if (! skip) { h = linear (left_end (o->src_from, o->src_to, o->src_clockwise), right_end (o->src_from, o->src_to, o->src_clockwise), left_end (o->dest_from, o->dest_to, o->dest_clockwise), right_end (o->dest_from, o->dest_to, o->dest_clockwise), h * TWO_PI); h = angle_mod_2PI (h) / TWO_PI; } hsv_to_rgb (h, s, v, output, output + 1, output + 2); }
const_iterator right_begin(info_type const& n) { const_iterator i=right_end(n); const_iterator b=right_begin_full(n); for (;;) { --i; if (*i == null) return i+1; if (i==b) return b; } }
t_var valid(t_var var, char *tmp, int i) { var.n = 0; var.dot = 0; var.d = 0; var.link = 0; var.valid = 1; while (tmp[i] != '\0') { if (tmp[i] == '#') var = right_position(var, tmp, i); else if (tmp[i] == '\n') var = right_end(var, i); else if (tmp[i] == '.') var.dot++; else var.valid = 0; i++; } if (var.dot + var.d + var.n != 21 || var.d != 4 || var.n != 5 || var.link < 6) var.valid = 0; return (var); }
void set_null(info_type& n)// we can use this for foreign word edges, to be nice { for (iterator i=left_begin(n),e=right_end(n);i!=e;++i) *i = null; }