ecxtlacitka.png (2658 bytes) Ecx EcxDocs EcxMUI EcxExamples Back to Amiga E home page
/*
    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
ghh don'tpanic