How about changing AthensCairoSurface >> asForm into the following definition?:
asForm
"create a form and copy an image data there"
| form |
self checkSession.
self flush.
form := Form extent: (self width@self height) depth: 32.
form unhibernate.
LibC memCopy: self getDataPtr to: form bits size: self width*self height*4.
^ form
This involves a whole copy, but it removes completely the dependency on the surface plugin.
If we want to keep using the surface plugin with Cairo, the old definition of asForm still has a bug, which can be reproduced with the following snippet:
Smalltalk compiler evaluate: '
| surface |
surface := AthensCairoSurface extent: 640@480.
surface drawDuring: [ :canvas |
surface clear: Color blue.
].
surface asForm asMorph openInWindow
'