/*
draw.c original code by Thomas Rapp
draw.e by ghh 2022
*/
MODULE 'exec/ports'
MODULE 'dos/dos'
MODULE 'graphics/rastport'
MODULE 'intuition/intuition'
MODULE 'utility/tagitem'
PROC main()
DEF win:PTR TO window
DEF mess:PTR TO intuimessage
DEF cont
DEF lbutton
DEF rbutton
DEF old_x
DEF old_y
DEF x
DEF y
win:= OpenWindowTagList(NIL,
[WA_Title,'Draw',
WA_Left,112,
WA_Top,84,
WA_Width,800,
WA_Height,600,
WA_Flags,WFLG_CLOSEGADGET OR WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR
WFLG_SIZEGADGET OR WFLG_RMBTRAP OR WFLG_REPORTMOUSE OR
WFLG_ACTIVATE OR WFLG_GIMMEZEROZERO OR WFLG_NOCAREREFRESH,
WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_VANILLAKEY OR IDCMP_MOUSEBUTTONS OR IDCMP_MOUSEMOVE,
WA_MinWidth,80,WA_MinHeight,40,
WA_MaxWidth,-1,WA_MaxHeight,-1,
TAG_END])
IF (win) = NIL
WriteF('cannot open window\n')
RETURN RETURN_FAIL
ENDIF
rbutton:= FALSE
lbutton:= FALSE
x:= win.mousex
y:= win.mousey
old_x:= x
old_y:= y
cont:= TRUE
REPEAT
IF (Wait((1 << win.userport.sigbit) OR SIGBREAKF_CTRL_C) AND SIGBREAKF_CTRL_C) THEN
cont:= FALSE
WHILE (mess:= GetMsg(win.userport))
SELECT (mess.class)
CASE IDCMP_MOUSEMOVE
x:= mess.mousex - win.borderleft
y:= mess.mousey - win.bordertop
CASE IDCMP_MOUSEBUTTONS
SELECT (mess.code)
CASE SELECTDOWN
lbutton:= TRUE
CASE SELECTUP
lbutton:= FALSE
CASE MENUDOWN
rbutton:= TRUE
CASE MENUUP
rbutton:= FALSE
ENDSELECT
CASE IDCMP_VANILLAKEY
IF (mess.code = $1b)
cont:= FALSE
ENDIF
CASE IDCMP_CLOSEWINDOW
cont:= FALSE
ENDSELECT
ReplyMsg(mess)
ENDWHILE
IF ((x <> old_x) OR (y <> old_y))
IF (rbutton AND lbutton)
SetAPen(win.rport,3)
Move(win.rport,old_x,old_y)
Draw(win.rport,x,y)
ELSEIF (rbutton)
SetAPen(win.rport,2)
Move(win.rport,old_x,old_y)
Draw(win.rport,x,y)
ELSEIF (lbutton)
SetAPen(win.rport,1)
Move(win.rport,old_x,old_y)
Draw(win.rport,x,y)
ENDIF
old_x:= x
old_y:= y
ENDIF
UNTIL (cont = FALSE)
CloseWindow(win)
RETURN (RETURN_OK)
ENDPROC
|