/* Someday we'll find a way to merge them. */ static int common_viewclip(gs_state * pgs, int rule) { gs_fixed_rect bbox; gx_clip_path rpath; int code; gx_clip_path *pcpath = pgs->view_clip; if (pcpath == 0) { pcpath = gx_cpath_alloc(pgs->memory, "gs_[eo]viewclip"); if (pcpath == 0) return_error(gs_error_VMerror); pgs->view_clip = pcpath; } if ((code = gx_path_bbox(pgs->path, &bbox)) < 0) return code; gx_cpath_init_local(&rpath, pgs->memory); code = gx_cpath_from_rectangle(&rpath, &bbox); if (code >= 0) code = gx_cpath_clip(pgs, &rpath, pgs->path, rule); if (code < 0) { gx_cpath_free(&rpath, "gs_[eo]viewclip"); return code; } rpath.rule = rule; gx_cpath_assign_free(pcpath, &rpath); gs_newpath(pgs); return 0; }
/* Used by initclip and by the character and Pattern cache logic. */ int gx_clip_to_rectangle(gs_state * pgs, gs_fixed_rect * pbox) { int code = gx_cpath_from_rectangle(pgs->clip_path, pbox); if (code < 0) return code; pgs->clip_path->rule = gx_rule_winding_number; note_set_clip_path(pgs); return 0; }