Buttons.Mod 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. MODULE Buttons;
  2. IMPORT Gui, G := Graph, Out;
  3. TYPE
  4. Button* = POINTER TO ButtonDesc;
  5. ButtonDesc* = RECORD(Gui.WidgetDesc)
  6. END;
  7. PROCEDURE DrawButton*(W: Gui.Widget; x, y: INTEGER);
  8. VAR c: G.Color;
  9. f: G.Font;
  10. fw, fh: INTEGER;
  11. BEGIN
  12. G.MakeCol(c, 210, 205, 200);
  13. G.FillRect(x, y, x + W.w - 1, y + W.h - 1, c);
  14. G.MakeCol(c, 255, 255, 255);
  15. G.Rect(x, y, x + W.w - 1, y + W.h - 1, c);
  16. G.MakeCol(c, 0, 0, 0);
  17. G.HLine(x, y + W.h - 1, x + W.w - 1, c);
  18. G.VLine(x + W.w - 1, y, y + W.h - 1, c);
  19. G.MakeCol(c, 80, 80, 80);
  20. G.HLine(x + 1, y + W.h - 2, x + W.w - 2, c);
  21. G.VLine(x + W.w - 2, y + 1, y + W.h - 2, c);
  22. f := Gui.GetFont(W);
  23. G.GetMonoFontSize(f, fw, fh);
  24. G.MakeCol(c, 0, 0, 0);
  25. G.DrawString(W.text.s(*!FIXME*), x + 4,
  26. y + (W.h - fh) DIV 2, f, c)
  27. END DrawButton;
  28. PROCEDURE InitButton*(b: Button; w, h: INTEGER; text: ARRAY OF CHAR);
  29. BEGIN
  30. Gui.InitWidget(b);
  31. b.w := w; b.h := h;
  32. Gui.SetText(b, text);
  33. b.draw := DrawButton
  34. END InitButton;
  35. PROCEDURE NewButton*(w, h: INTEGER; text: ARRAY OF CHAR): Button;
  36. VAR b: Button;
  37. BEGIN NEW(b); InitButton(b, w, h, text)
  38. RETURN b END NewButton;
  39. END Buttons.