WMScribble.Mod 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. MODULE WMScribble; (** AUTHOR "TF"; PURPOSE "Example program"; *)
  2. IMPORT WMWindowManager, Strings, WMGraphics, WMRectangles, Modules, WMDialogs;
  3. TYPE
  4. ScribbleWindow = OBJECT (WMWindowManager.BufferWindow);
  5. VAR lx, ly : LONGINT;
  6. PROCEDURE &New*;
  7. BEGIN
  8. Init(400, 400, FALSE);
  9. WMWindowManager.AddWindow(SELF, 200, 200);
  10. SetTitle(Strings.NewString("Scribble Example"));
  11. SetIcon(WMGraphics.LoadImage("WMIcons.tar://WMScribble.png", TRUE));
  12. canvas.Fill(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()), WMGraphics.White, WMGraphics.ModeCopy);
  13. Invalidate(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()));
  14. SetPointerInfo(manager.pointerCrosshair)
  15. END New;
  16. PROCEDURE PointerMove*(x, y : LONGINT; keys : SET);
  17. BEGIN
  18. IF 0 IN keys THEN canvas.Line(lx, ly, x, y, WMGraphics.Blue, WMGraphics.ModeSrcOverDst);
  19. Invalidate(
  20. WMRectangles.MakeRect(MIN(lx, x), MIN(ly, y), MAX(lx, x) + 1, MAX(ly, y) + 1)
  21. )
  22. END;
  23. lx := x; ly := y
  24. END PointerMove;
  25. PROCEDURE PointerDown*(x, y : LONGINT; keys : SET);
  26. BEGIN
  27. lx := x; ly := y;
  28. IF 2 IN keys THEN
  29. canvas.Fill(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()), WMGraphics.White, WMGraphics.ModeCopy);
  30. Invalidate(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()))
  31. END
  32. END PointerDown;
  33. PROCEDURE KeyEvent*(ucs : LONGINT; flags : SET; keySym : LONGINT);
  34. VAR res: WORD; filename : ARRAY 128 OF CHAR;
  35. BEGIN
  36. IF ucs = ORD("s") THEN
  37. filename := "scribble.bmp";
  38. IF WMDialogs.QueryString("Save as :", filename) = WMDialogs.ResOk THEN
  39. WMGraphics.StoreImage(img, filename, res);
  40. IF res # 0 THEN
  41. WMDialogs.Error("Sorry", "The image could not be stored. Try another file name.");
  42. END
  43. END
  44. END
  45. END KeyEvent;
  46. END ScribbleWindow;
  47. VAR s : ScribbleWindow;
  48. PROCEDURE Open*;
  49. BEGIN {EXCLUSIVE}
  50. IF s # NIL THEN s.Close END; NEW(s);
  51. END Open;
  52. PROCEDURE Cleanup;
  53. BEGIN
  54. IF s # NIL THEN s.Close END
  55. END Cleanup;
  56. BEGIN
  57. Modules.InstallTermHandler(Cleanup)
  58. END WMScribble.
  59. System.Free WMScribble ~
  60. WMScribble.Open ~
  61. WMPicView.Open scribble.bmp ~