/* setcolorspace */ int gs_setcolorspace(gs_state * pgs, const gs_color_space * pcs) { int code = 0; gs_color_space cs_old = *pgs->color_space; gs_client_color cc_old = *pgs->ccolor; if (pgs->in_cachedevice) return_error(gs_error_undefined); if (pcs->id != pgs->color_space->id) { pcs->type->adjust_cspace_count(pcs, 1); *pgs->color_space = *pcs; if ( (code = pcs->type->install_cspace(pcs, pgs)) < 0 || (pgs->overprint && (code = gs_do_set_overprint(pgs)) < 0) ) { *pgs->color_space = cs_old; pcs->type->adjust_cspace_count(pcs, -1); } else cs_old.type->adjust_cspace_count(&cs_old, -1); } if (code >= 0) { cs_full_init_color(pgs->ccolor, pcs); cs_old.type->adjust_color_count(&cc_old, &cs_old, -1); gx_unset_dev_color(pgs); } return code; }
/* setcolorspace */ int gs_setcolorspace(gs_state * pgs, gs_color_space * pcs) { int code = 0; code = gs_setcolorspace_only(pgs, pcs); if (code >= 0) { pgs->color[0].color_space->pclient_color_space_data = pcs->pclient_color_space_data; cs_full_init_color(pgs->color[0].ccolor, pcs); gx_unset_dev_color(pgs); } return code; }
/* This does all the work of setpattern except for the final setcolor. */ int gs_setpatternspace(gs_state * pgs) { int code = 0; if (pgs->in_cachedevice) return_error(gs_error_undefined); if (pgs->color_space->type->index != gs_color_space_index_Pattern) { gs_color_space *pcs; pcs = gs_cspace_alloc(pgs->memory, &gs_color_space_type_Pattern); if (pcs == NULL) return_error(gs_error_VMerror); /* reference to base space shifts from pgs to pcs with no net change */ pcs->base_space = pgs->color_space; pcs->params.pattern.has_base_space = true; pgs->color_space = pcs; cs_full_init_color(pgs->ccolor, pcs); gx_unset_dev_color(pgs); } return code; }