Hi,
for me a [del 1] was enough to make sure the black keys appear. But it doesn't solve the problem that when the window is minimized and then maximized, white keys are again on top (at least on Pd-Ext), for that it works to draw first the black, then the white keys, then vis 0,vis 1. It's not logical, but it seems to work.
Btw, if you declare the dimensions of the filledpolygon as variables, you can make this using only one struct template.
Don't know if you plan on use the keyboard to click on it, but it won't work to click on black keys, as it will also trigger a white key - except you do some hacking of the message, or you don't overlap keys by using a more complex shape for the white keys that goes around the black key. This would also solve the problem that when redrawing, the white keys overlap the black ones.