I don't have solid knowledge about this, but here is my guess.
When you are calling functions via "dyn Trait", what are you doing is calling function via v-table. However generic function is not an actual function, it is the "famili of functions". The problem is, that the actual functions are generated by compiler only if they are called. It is like "template for generating the function" (very similar concept to C++ templates).
The result of this is, that there is impossible to create a v-table for the trait containing generic functions. The reason is, that the generic function is actually infinite number of functions (it would be needed to create v-table entry for any possible type, which sometimes could be actually infinite number of types - in case of recursive types). The solutions are: not allow to create trait objects from trait with generics functions, or not allow to call generic functions on trait objects. It seems, like Rust went the first way (I would pick it too).
Solution - just change your &mut impl Drawing<W>
to &mut dyn Drawing<W>
so there is actually one function - taking fat pointer to some trait, and this would work. Downside: you would have more dynamic dispatch, which costs. However my opinion here is, that this is not a problem - you are considering some drawing stuff, probably the v-call has ommitable cost.