I made a variant that lets you have text with a drop shadow, like in the following screenshot

Here's the copypaste dealio
%%WGT0{"w":[{"name":"shadowtext1","type":"contraption","size":[89,26],"pos":[350,98],"show":"transparent","def":"shadowtext","widgets":{"canvas1":{"size":[89,26],"pattern":37},"field1":{"pos":[-186,115],"value":{"text":["","Here's a test"],"font":["","menu"],"arg":["",""]}},"slider1":{"size":[95,25],"pos":[-52,110],"value":37},"slider2":{"size":[96,25],"pos":[58,110],"value":36}}}],"d":{"shadowtext":{"name":"shadowtext","size":[100,100],"resizable":1,"margin":[0,0,0,0],"description":"Colour text, with a drop shadow! Exposes a redraw[] function if you need to refresh it manually for whatever reason.","version":1,"script":"on get_colour do\n slider1.value\nend\n\non set_colour x do\n slider1.value:x\n redraw[]\nend\n\non get_shadow do\n slider2.value\nend\n\non set_shadow x do\n slider2.value:x\n redraw[]\nend\n\non get_value do\n field1.value\nend\n\non set_value x do\n field1.value:x\n redraw[]\nend\n\non redraw do\n canvas1.clear[]\n \n size:canvas1.textsize[field1.value canvas1.size[0]-4]\n canvas1.pattern:slider2.value\n canvas1.text[field1.value 3,3,size]\n canvas1.pattern:slider1.value\n canvas1.text[field1.value 2,2,size]\nend\n\non view do\n redraw[]\nend\n\non get_redraw do\n redraw\nend","attributes":{"name":["value","colour","shadow"],"label":["Text","Colour (palette index)","Shadow (palette index)"],"type":["rich","number","number"]},"widgets":{"canvas1":{"type":"canvas","size":[100,100],"pos":[0,0],"locked":1,"volatile":1,"show":"transparent","border":0,"scale":1},"field1":{"type":"field","size":[100,20],"pos":[-186,189]},"slider1":{"type":"slider","size":[100,25],"pos":[-52,184],"interval":[0,47],"value":1,"style":"compact"},"slider2":{"type":"slider","size":[100,25],"pos":[65,184],"interval":[0,47],"value":1,"style":"compact"}}}}}
And a slightly modified version of the refresh code to pick these up too
on refreshcolourtext do
each c in deck.cards
each w in c.widgets
if (w.def.name="colourtext") | (w.def.name="shadowtext")
w.redraw[]
end
end
end
end