static void getvisual(void) { if (!(scr = LockPubScreen(0))) { cleanup("Can't lock pub screen!"); } if (!(dri = GetScreenDrawInfo(scr))) { cleanup("Can't get screen drawinfo!"); } vp = &scr->ViewPort; cm = vp->ColorMap; pen1 = ObtainPen(cm, -1, 0, 0, 0, PENF_EXCLUSIVE); pen2 = ObtainPen(cm, -1, 0, 0, 0, PENF_EXCLUSIVE); pens[0] = pen1; pens[1] = pen2; if ((pen1 == -1) || (pen2 == -1)) cleanup("Can't obtain 2 pens!"); if (GetBitMapAttr(scr->RastPort.BitMap, BMA_DEPTH) >= 15) truecolor = TRUE; }
IPTR Colorfield__MUIM_Setup(struct IClass *cl, Object *obj, struct MUIP_Setup *msg) { struct Colorfield_DATA *data = INST_DATA(cl,obj); if (!(DoSuperMethodA(cl, obj, (Msg)msg))) return 0; if (data->flags & FLAG_FIXED_PEN) { SetRGB32(&_screen(obj)->ViewPort, data->pen, data->rgb[0], data->rgb[1], data->rgb[2]); } else { LONG pen; pen = ObtainPen(_screen(obj)->ViewPort.ColorMap, (ULONG)-1, data->rgb[0], data->rgb[1], data->rgb[2], PENF_EXCLUSIVE); if (pen == -1) { data->flags |= FLAG_NO_PEN; data->pen = 0; } else { data->pen = (UBYTE)pen; data->flags |= FLAG_PEN_ALLOCATED; } } return 1; }