Microsoft Small Basic

Program Listing: XWM877
Initialise()

While 0=0
GraphicsWindow.PenColor = selectedPenColor 'put this in a penColor btn (more btns)

'BUTTON EVENTS w/ MANAGER
If buttonClicked Then
TaskManager()
buttonClicked = "False"
EndIf

'MOUSE TRACKING
UpdateMousePosition()
CheckIfMouseIsOverCanvas()

'TASKS (one at a time) - can include pen and menu tasks as well
If currentTask = "Free" And Mouse.IsLeftButtonDown And mouseIsOverCanvas Then
DrawFreeHand()
EndIf
If currentTask = "Clear" Then
ClearCanvas()
EndIf

Program.Delay(20)
EndWhile

'=============================================================
'TASKS
'=============================================================
Sub DrawFreeHand
If prevX = "" Then
prevX = mseX
prevY = mseY
EndIf
GraphicsWindow.DrawLine(prevX, prevY, mseX, mseY)
prevX = mseX
prevY = mseY
EndSub

Sub ClearCanvas
prevX = ""
DrawCanvas()
currentTask = ""
nextTask = ""
EndSub

'=========================================================
'MANAGER
'=========================================================
Sub TaskManager
nextTask = Controls.GetButtonCaption(Controls.LastClickedButton)
If nextTask <> currentTask Then
currentTask = nextTask
EndIf
EndSub

'=========================================================
'MOUSE TRACKING
'=========================================================
Sub UpdateMousePosition
mseX = GraphicsWindow.MouseX
mseY = GraphicsWindow.MouseY
EndSub

Sub CheckIfMouseIsOverCanvas
mouseIsOverCanvas = "False"
If mseX > canvasLeft And mseX < canvasLeft + canvasWidth Then
If mseY > canvasTop And mseY < canvasTop + canvasHeight Then
mouseIsOverCanvas = "True"
EndIf
EndIf
EndSub

'=========================================================
'SETUP
'=========================================================
Sub Initialise
'GLOBALS
space = 5
margin = 10
defaultPenColor = GraphicsWindow.PenColor
defaultBrushColor = GraphicsWindow.BrushColor

'ADD TOOLS
size = 30
caption = "1=Line;2=Free;3=Rect;4=Squa;5=Elip;6=Circ;7=Tria;8=Clear;

For row = 1 To 4
Y = (row - 1) * (space + size) + margin + margin *10
For column = 1 To 2
X = (column - 1) * (space + size *2) + margin
i = i + 1
btn[i] = Controls.AddButton(caption[i], X, Y)
Controls.SetSize(btn[i], size *2, size)
EndFor
EndFor
GraphicsWindow.FontSize = 20
toolsTitle = Shapes.AddText("Tools")
Shapes.Move(toolsTitle, margin, margin *11 - 25)

'ADD CANVAS
canvasLeft = 2 * (margin + size *2) + space
canvasTop = margin * 11
canvasWidth = GraphicsWindow.Width - canvasLeft - margin
canvasHeight = GraphicsWindow.Height - canvasTop - margin

DrawCanvas()

GraphicsWindow.BrushColor = defaultBrushColor
canvasTitle = Shapes.AddText("Canvas")
Shapes.Move(canvasTitle, canvasLeft, margin *11 - 25)

'SELECT A PEN COLOR
GraphicsWindow.PenColor = "Green"
selectedPenColor = GraphicsWindow.PenColor

'SELECT A PENWIDTH
GraphicsWindow.PenWidth = 5
selectedPenWidth = GraphicsWindow.PenWidth

'REGISTER EVENTS
Controls.ButtonClicked = OnButtonClicked
EndSub

Sub OnButtonClicked
buttonClicked = "True"
EndSub

'========================================================
'2ND ORDER SUBS
'========================================================
Sub DrawCanvas
GraphicsWindow.PenWidth = 3
GraphicsWindow.PenColor = defaultPenColor
GraphicsWindow.DrawRectangle(canvasLeft, canvasTop, canvasWidth, canvasHeight)
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(canvasLeft, canvasTop, canvasWidth, canvasHeight)

GraphicsWindow.PenWidth = selectedPenWidth
EndSub