/* <gstate> currentgstate <gstate> */ int zcurrentgstate(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_state *pgs; int_gstate *pistate; int code; gs_memory_t *mem; check_stype(*op, st_igstate_obj); check_write(*op); code = gstate_unshare(i_ctx_p); if (code < 0) return code; pgs = igstate_ptr(op); pistate = gs_int_gstate(pgs); code = gstate_check_space(i_ctx_p, istate, r_space(op)); if (code < 0) return code; #define gsref_save(p) ref_save(op, p, "currentgstate") int_gstate_map_refs(pistate, gsref_save); #undef gsref_save mem = gs_state_swap_memory(pgs, imemory); code = gs_currentgstate(pgs, igs); gs_state_swap_memory(pgs, mem); if (code < 0) return code; int_gstate_map_refs(pistate, ref_mark_new); return 0; }
/* <dict> <crd> .setcolorrendering1 - */ static int zsetcolorrendering1(i_ctx_t *i_ctx_p) { os_ptr op = osp; es_ptr ep = esp; ref_cie_render_procs procs; int code; check_type(op[-1], t_dictionary); check_stype(*op, st_cie_render1); code = zcrd1_proc_params(imemory, op - 1, &procs); if (code < 0) return code; code = gs_setcolorrendering(igs, r_ptr(op, gs_cie_render)); if (code < 0) return code; if (gs_cie_cs_common(igs) != 0 && (code = cie_cache_joint(i_ctx_p, &procs, gs_cie_cs_common(igs), igs)) < 0 ) return code; istate->colorrendering.dict = op[-1]; istate->colorrendering.procs = procs; pop(2); return (esp == ep ? 0 : o_push_estack); }
/* *op is the scanner state. */ static int ztoken_continue(i_ctx_t *i_ctx_p) { os_ptr op = osp; scanner_state *pstate; check_stype(*op, st_scanner_state_dynamic); pstate = r_ptr(op, scanner_state); return token_continue(i_ctx_p, pstate, false); }
/* <gstate> setgstate - */ static int z2setgstate(i_ctx_t *i_ctx_p) { os_ptr op = osp; check_stype(*op, st_igstate_obj); if (!restore_page_device(igs, igstate_ptr(op))) return zsetgstate(i_ctx_p); return push_callout(i_ctx_p, "%setgstatepagedevice"); }
/* <gstate> setgstate - */ int zsetgstate(i_ctx_t *i_ctx_p) { os_ptr op = osp; int code; check_stype(*op, st_igstate_obj); check_read(*op); code = gs_setgstate(igs, igstate_ptr(op)); if (code < 0) return code; pop(1); return 0; }
/* Common code for composite and dissolve. */ static int composite_image(i_ctx_t *i_ctx_p, const gs_composite_alpha_params_t * params) { os_ptr op = osp; alpha_composite_state_t cstate; gs_image2_t image; double src_rect[4]; double dest_pt[2]; gs_matrix save_ctm; int code = xywh_param(op - 4, src_rect); cstate.params = *params; gs_image2_t_init(&image); if (code < 0 || (code = num_params(op - 1, 2, dest_pt)) < 0 ) return code; if (r_has_type(op - 3, t_null)) image.DataSource = igs; else { check_stype(op[-3], st_igstate_obj); check_read(op[-3]); image.DataSource = igstate_ptr(op - 3); } image.XOrigin = src_rect[0]; image.YOrigin = src_rect[1]; image.Width = src_rect[2]; image.Height = src_rect[3]; image.PixelCopy = true; /* Compute appropriate transformations. */ gs_currentmatrix(igs, &save_ctm); gs_translate(igs, dest_pt[0], dest_pt[1]); gs_make_identity(&image.ImageMatrix); if (image.DataSource == igs) { image.XOrigin -= dest_pt[0]; image.YOrigin -= dest_pt[1]; } code = begin_composite(i_ctx_p, &cstate); if (code >= 0) { code = process_non_source_image(i_ctx_p, (const gs_image_common_t *)&image, "composite_image"); end_composite(i_ctx_p, &cstate); if (code >= 0) pop(8); } gs_setmatrix(igs, &save_ctm); return code; }
/* copy for gstates */ int zcopy_gstate(i_ctx_t *i_ctx_p) { os_ptr op = osp; os_ptr op1 = op - 1; gs_state *pgs; gs_state *pgs1; int_gstate *pistate; gs_memory_t *mem; int code; check_stype(*op, st_igstate_obj); check_stype(*op1, st_igstate_obj); check_write(*op); code = gstate_unshare(i_ctx_p); if (code < 0) return code; pgs = igstate_ptr(op); pgs1 = igstate_ptr(op1); pistate = gs_int_gstate(pgs); code = gstate_check_space(i_ctx_p, gs_int_gstate(pgs1), r_space(op)); if (code < 0) return code; #define gsref_save(p) ref_save(op, p, "copygstate") int_gstate_map_refs(pistate, gsref_save); #undef gsref_save mem = gs_state_swap_memory(pgs, imemory); code = gs_copygstate(pgs, pgs1); gs_state_swap_memory(pgs, mem); if (code < 0) return code; int_gstate_map_refs(pistate, ref_mark_new); *op1 = *op; pop(1); return 0; }
/* <dict> <crd> .setdevicecolorrendering1 - */ static int zsetdevicecolorrendering1(i_ctx_t *i_ctx_p) { os_ptr op = osp; int code; ref_cie_render_procs procs; check_type(op[-1], t_dictionary); check_stype(*op, st_cie_render1); code = gs_setcolorrendering(igs, r_ptr(op, gs_cie_render)); if (code < 0) return code; refset_null((ref *)&procs, sizeof(procs) / sizeof(ref)); if (gs_cie_cs_common(igs) != 0 && (code = cie_cache_joint(i_ctx_p, &procs, gs_cie_cs_common(igs), igs)) < 0 ) return code; istate->colorrendering.dict = op[-1]; refset_null((ref *)&istate->colorrendering.procs, sizeof(istate->colorrendering.procs) / sizeof(ref)); pop(2); return 0; }