// Copyright status: this file is in the public domain. #include "lx.h" #include "internal.h" void lx_CopySGCtoGC(LX_CONN *xc, LX_SGC fsgc, LX_XID tgc, unsigned int mask) { SGC *f; LX_GC_ATTRIBUTES attr; unsigned int m; if (xc->flags & XCF_FAIL) { lx__bad_call(xc,"lx_CopySGCtoGC"); return; } f = lx__lookup_sgc(xc,fsgc); if (! f) { lx__bad_call(xc,"lx_CopySGCtoGC"); return; } if ((mask & LX_GCM_Font) && (f->pushv.font == LX_XID_Error)) { lx__bad_call(xc,"lx_CopySGCtoGC"); return; } #define SIMPLE(name,type,sub,bit,field)\ if (m & LX_GCM_##name) \ { attr.field = f->SGCFIELD.field; \ } #define MAPPED(name,converter,bit,field) SIMPLE(name,,,,field) #define GRAPHICSEXPOSURES(name,type,suf,bit,field) SIMPLE(name,,,,field) #define CLIPMASK(name,type,suf,bit,field) SIMPLE(name,,,,field) m = mask & ~f->set; #define SGCFIELD pushv GCFIELDS #undef SGCFIELD m = mask & f->set; #define SGCFIELD setv GCFIELDS #undef SGCFIELD #undef SIMPLE #undef MAPPED #undef GRAPHICSEXPOSURES #undef CLIPMASK lx_ChangeGC_attr(xc,tgc,mask,&attr); }