aUCBLogo Demos and Tests / mousepaint


be mousepaint
   
setPenSize [3 3]
   
disableLineSmooth   ;because of flood fill!!
   
PenUp
   
running=true
   
::rubber=false
   
OnMouseLeftDown
   
[   setPos butLast MousePos
      
PenDown
   
]
   
OnMouseLeftUp
   
[   PenUp
   
]
   
OnMouseRightDown
   
[   ::rubber=true
   
]
   
OnMouseRightUp
   
[   ::rubber=false
   
]
   
OnMouseMotion
   
[   if PenDown? 
      
[   setPos butLast MousePos
      
]
      
if ::rubber
      
[   local [c]
         
c=PenColor
         
setFloodColor "white
         
fillCircle 10
         
setPenColor c
      
]
      
updateGraph
   
]

   
f=Frame [][PaintTools]
      
wxframe_tool_window+wxcaption+wxclose_box
      
+wxsystem_menu+wxresize_border+wxtab_traversal+wxstay_on_top
      
[400 500][--1] 
   
FrameSetBackgroundColor [.9 .9 .85]
   
FrameSetClientSize 100 30*7

   
bcs=Button [&clearScreen]
   
[   clearScreen
      
updateGraph
   
]
   
bpc=Button [&PenColor]
   
[   setPenColor getColorFromUser PenColor
      
updateGraph
   
]   
   
bfc=Button [F&loodColor]
   
[   setFloodColor getColorFromUser FloodColor
      
updateGraph
   
]   
   
bfill=Button [&fill]
   
[   fill
      
updateGraph
   
]
   
bps=IntControl [&PenSizefirst PenSize 100 
      
[   s=IntControlValue
         
setPenSize list s s
      
]

   
bclose=(Button " 
   
[   destroyAll
   
[--1][--1wxid_close)

   
bs=BoxSizer wxvertical
   
BoxSizerAdd bs bcs wxexpand 0
   
BoxSizerAdd bs bpc wxexpand 0
   
BoxSizerAdd bs bfc wxexpand 0
   
BoxSizerAdd bs bfill wxexpand 0
   
BoxSizerAdd bs bps wxexpand 0
   
BoxSizerAdd bs bclose wxexpand 0
   
FrameSetSizer f bs
   
while [running]
   
[   waitMS 20
      
dispatchMessages
   
]

   
be destroyAll
      
er [[][f bcs bpc bfc bfill bps bclose bs]] 
      
OnChar [] 
      
OnMouseMotion []
      
GC
      
running=false
   
end
end