So classically canvas is a feature that is offered within the GUI API. I think this conceptual frame work is fundamentally flawed. I think the first thing we need need to do is to distinguish between applications and text based documents.
In a document the text is the centre of the content, functionally but often literally. The classic web page, where you start at the top and scroll down, works rather well. There maybe numerous pictures, videos, links and controls, but they are all there to support the text. It seems to me that the basic idea of Javascript and PHP as supportive tools to text centred documents was correct, however dated and dysfunctional the implementations. This is very different from a GUI application.
In a GUI application the text supports the windows / scenes / stages /sub- applications of the GUI App. It is for these GUI applications that I think the canvas / gui split is mistaken. I want to move to a situation where the canvas is the GUI and the GUI is the canvas. I believe in Scala we can do a much better job. So the abstract canvas is not intended merely as away to write cross platform canvas code, but to replace the whole GUI API.
Suggest modifying the GraphicElem trait so it has a precedence value. Ie which objects lie in foreground and background. Suggest restricting value range to (-4 to +4). This will obviate the need for the Disp2 trait.
Not sure if GraphicSubject trait is useful. Not sure if it is necessary in addition to GraphicActive trait.
Active / pointable display objects return an AnyRef, when the use clicks within the polygon / shape of the object. The application GUI receives a list of these reference objects within which the user has clicked ordered from front to back of the display. So consider using an integer or a long and a lookup table, to enable pure value types. Suspect this is unnecessary and that performance problems are due to too many calls on the plaform's canvas graphics engine (particularly for JavaScript), rather than the preprocessing of a frame.