You can parent gadgets to a canvas no problem...
(knocked up from the eventhooks tutorial)
' rendering a canvas using an EventHook based Applet Type
Strict
Type TApplet
Field window:TGadget
Field canvas:TGadget
Field timer:TTimer
Field button:TGadget
Method Render()
Local x,y,width,height,t,i
width=GraphicsWidth()
height=GraphicsHeight()
t=MilliSecs()
SetBlend ALPHABLEND
SetViewport 0,0,width,height
SetClsColor 0,0,0
SetOrigin width/2,height/2
Cls
For x=-width/2 To width/2 Step 2
y=Sin(t*0.3+x)*height/2
DrawLine 0,0,x,y
Next
End Method
Method OnEvent(event:TEvent)
Select event.id
Case EVENT_WINDOWCLOSE
End
Case EVENT_TIMERTICK
RedrawGadget canvas
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas)
Render
Flip
End Select
End Method
Function eventhook:Object(id,data:Object,context:Object)
Local event:TEvent
Local app:TApplet
event=TEvent(data)
app=TApplet(context)
app.OnEvent event
End Function
Method Create:TApplet(name$)
Local a:TApplet
Local w,h
window=CreateWindow(name,20,20,512,512)
w=ClientWidth(window)
h=ClientHeight(window)
canvas=CreateCanvas(0,0,w,h,window)
canvas.SetLayout 1,1,1,1
button = CreateButton("test",50,50,100,20,canvas)
timer=CreateTimer(100)
AddHook EmitEventHook,eventhook,Self
Return Self
End Method
End Type
AutoMidHandle True
Local applet:TApplet
applet=New TApplet.Create("Render Applet")
While True
WaitEvent
Wend
But it'd have to be done in a window tho, not fullscreen, but then again you could fake it with a borderless desktop size window :)