void glow_fill_do_action(int x, int y, texture_info * tex, VALUE hash_arg, texplay_sync sync_mode, bool primary, action_struct * payload) { action_struct cur; rgba seed_color; texture_info fill_image; texture_info * fill_image_ptr = NULL; if(!bound_by_rect(x, y, 0, 0, tex->width, tex->height)) return; draw_prologue(&cur, tex, 0, 0, 1024, 1024, &hash_arg, sync_mode, primary, &payload); /* fill hates alpha_blend so let's turn it off */ payload->pen.alpha_blend = false; if(is_a_hash(hash_arg)) { VALUE try_image = get_from_hash(hash_arg, "texture"); if(is_gosu_image(try_image)) { get_texture_info(try_image, &fill_image); fill_image_ptr = &fill_image; } } seed_color = get_pixel_color(tex, x, y); /* last argument is pointer to texture fill data (if it exists) or NULL (if it doesn't) */ glow_floodFill( x, y, &seed_color, &cur, tex, fill_image_ptr ); draw_epilogue(&cur, tex, primary); }
static void prepare_fill_texture(action_struct * payload) { if(is_a_hash(payload->hash_arg)) { VALUE try_image = get_from_hash(payload->hash_arg, "texture"); if(is_gosu_image(try_image)) { get_texture_info(try_image, &payload->pen.source_tex); payload->pen.has_source_texture = true; } } }