flags.mod 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. MODULE flags;
  2. (* Compilation :
  3. gm2 -fiso -I../.. ../../tigr.o ../../helper.o flags.mod -o flags -s -lGLU -lGL -lX11
  4. *)
  5. FROM tigr IMPORT TigrPtr,tigrWindow,tigrFree,tigrClosed, tigrClear, tigrUpdate, TPixelType,
  6. tigrLine, TK_ESCAPE, tigrKeyDown, tigrReadChar, tfont, tigrPrint,tigrFill,
  7. tigrCircle, tigrRect, tigrFillCircle, tigrTime, tigrError, tigrClip,
  8. tigrFillRect, tigrTextWidth, tigrTextHeight, tigrLoadImage, tigrReadFile,
  9. tigrBitmap, TIGR_2X, tigrSetPostFX, tigrMouse,tigrBlit, tigrBlitAlpha,
  10. tigrEncodeUTF8, TK_RIGHT,tigrKeyHeld, TK_SPACE, TK_LEFT, TIGR_AUTO,
  11. TIGR_RETINA, TIGR_FULLSCREEN, TIGR_3X, TIGR_4X, TIGR_NOCURSOR;
  12. FROM helper IMPORT tigrRGB, tigrRGBA;
  13. FROM InOut IMPORT Write, WriteLn, WriteCard,WriteString;
  14. FROM NumberIO IMPORT CardToStr;
  15. FROM Strings IMPORT Concat;
  16. FROM SYSTEM IMPORT ADR, CAST;
  17. TYPE
  18. ToggleType = RECORD
  19. text : ARRAY[0..100] OF CHAR;
  20. checked : CARDINAL;
  21. value : CARDINAL;
  22. key : CARDINAL;
  23. color : TPixelType;
  24. END;
  25. TogglePtr = POINTER TO ToggleType;
  26. VAR
  27. Toggle : ToggleType;
  28. lineColor : TPixelType;
  29. flags : CARDINAL;
  30. initialW : CARDINAL;
  31. initialH : CARDINAL;
  32. win : TigrPtr;
  33. white,yellow,black : TPixelType;
  34. toggles : ARRAY[0..6] OF ToggleType;
  35. PROCEDURE makeDemoWindow(w,h : CARDINAL; flags: CARDINAL): TigrPtr;
  36. BEGIN
  37. RETURN tigrWindow(w, h, "Flag tester", flags);
  38. END makeDemoWindow;
  39. PROCEDURE drawDemoWindow(win : TigrPtr);
  40. VAR
  41. winw, winh : ARRAY[0..5] OF CHAR;
  42. resultStr : ARRAY[0..11] OF CHAR;
  43. BEGIN
  44. lineColor := tigrRGB(100, 100, 100);
  45. tigrLine(win, 0, 0, win^.w - 1, win^.h - 1, lineColor);
  46. tigrLine(win, 0, win^.h - 1, win^.w - 1, 0, lineColor);
  47. tigrRect(win, 0, 0, win^.w, win^.h, tigrRGB(200, 10, 10));
  48. CardToStr(win^.w, 5, winw);
  49. CardToStr(win^.h, 5,winh);
  50. Concat(winw, winh, resultStr);
  51. tigrPrint(win, tfont, 5, 5, tigrRGB(20, 200, 0), resultStr);
  52. END drawDemoWindow;
  53. PROCEDURE drawToggle(bmp: TigrPtr; toggle: TogglePtr; x, y: CARDINAL; stride: CARDINAL);
  54. VAR
  55. height, width : CARDINAL;
  56. yOffset, xOffset : CARDINAL;
  57. lineColor : TPixelType;
  58. BEGIN
  59. height := tigrTextHeight(tfont, toggle^.text);
  60. width := tigrTextWidth(tfont, toggle^.text);
  61. yOffset := stride / 2;
  62. xOffset := width / 2;
  63. tigrPrint(bmp, tfont, x + xOffset, y + yOffset, toggle^.color, toggle^.text);
  64. IF toggle^.checked > 0 THEN
  65. yOffset := yOffset + height
  66. ELSE
  67. yOffset := yOffset / 3
  68. END;
  69. lineColor := toggle^.color;
  70. lineColor.a := 240;
  71. tigrLine(bmp, x + xOffset, y + yOffset, x + xOffset + width, y + yOffset, lineColor);
  72. END drawToggle;
  73. VAR
  74. numToggles,
  75. stepY,
  76. toggleY,
  77. toggleX : CARDINAL;
  78. newFlags : CARDINAL;
  79. i : CARDINAL;
  80. toggle : TogglePtr;
  81. w,h : CARDINAL;
  82. modeFlags, modeChange : CARDINAL;
  83. BEGIN
  84. flags := 0;
  85. initialW := 400;
  86. initialH := 400;
  87. win := makeDemoWindow(initialW, initialH, flags);
  88. white := tigrRGB(255, 255, 255);
  89. yellow := tigrRGB(255, 255, 0);
  90. black := tigrRGB(0, 0, 0);
  91. WITH toggles[0] DO
  92. text := "(A)UTO";
  93. checked := 1;
  94. value := TIGR_AUTO;
  95. key := ORD('A');
  96. color := white;
  97. END;
  98. (* { "(R)ETINA", 0, TIGR_RETINA, 'R', white }, *)
  99. WITH toggles[1] DO
  100. text := "(R)ETINA";
  101. checked := 0;
  102. value := TIGR_RETINA;
  103. key := ORD('R');
  104. color := white;
  105. END;
  106. (* { "(F)ULLSCREEN", 0, TIGR_FULLSCREEN, 'F', white }, *)
  107. WITH toggles[2] DO
  108. text := "(F)ULLSCREEN";
  109. checked := 0;
  110. value := TIGR_FULLSCREEN;
  111. key := ORD('F');
  112. color := white;
  113. END;
  114. (* { "(2)X", 0, TIGR_2X, '2', yellow }, *)
  115. WITH toggles[3] DO
  116. text := "(2)X";
  117. checked := 0;
  118. value := TIGR_2X;
  119. key := ORD('2');
  120. color := yellow;
  121. END;
  122. (* { "(3)X", 0, TIGR_3X, '3', yellow }, *)
  123. WITH toggles[4] DO
  124. text := "(3)X";
  125. checked := 0;
  126. value := TIGR_3X;
  127. key := ORD('3');
  128. color := yellow;
  129. END;
  130. (* { "(4)X", 0, TIGR_4X, '4', yellow }, *)
  131. WITH toggles[5] DO
  132. text := "(4)X";
  133. checked := 0;
  134. value := TIGR_4X;
  135. key := ORD('4');
  136. color := yellow;
  137. END;
  138. (* { "(N)OCURSOR", 0, TIGR_NOCURSOR, 'N', white } *)
  139. WITH toggles[6] DO
  140. text := "(N)OCURSOR";
  141. checked := 0;
  142. value := TIGR_NOCURSOR;
  143. key := ORD('N');
  144. color := white;
  145. END;
  146. WHILE (NOT (tigrClosed(win) > 0)) AND (NOT (tigrKeyDown(win, TK_ESCAPE) > 0)) DO
  147. tigrClear(win, black);
  148. drawDemoWindow(win);
  149. numToggles := 7;
  150. stepY := win^.h / numToggles;
  151. toggleY := 0;
  152. toggleX := win^.w / 2;
  153. newFlags := 0;
  154. FOR i := 0 TO numToggles - 1 DO
  155. toggleY := toggleY + stepY;
  156. toggle := CAST(TogglePtr, ADR(toggles[i]));
  157. IF (tigrKeyDown(win, toggle^.key) > 0) THEN
  158. toggle^.checked := 1 - toggle^.checked;
  159. END;
  160. newFlags := newFlags + toggle^.checked * toggle^.value;
  161. drawToggle(win, toggle, toggleX, toggleY, stepY);
  162. END;
  163. IF (flags # newFlags) THEN
  164. modeFlags := TIGR_AUTO + TIGR_RETINA;
  165. IF (VAL(CARDINAL, CAST(BITSET, flags) * CAST(BITSET, modeFlags))
  166. # VAL(CARDINAL, CAST(BITSET, newFlags) * CAST(BITSET, modeFlags))) THEN
  167. modeChange := 1;
  168. ELSE
  169. modeChange := 0;
  170. END;
  171. flags := newFlags;
  172. IF modeChange > 0 THEN
  173. w := initialW;
  174. h := initialH
  175. ELSE
  176. w := win^.w;
  177. h := win^.h
  178. END;
  179. tigrFree(win);
  180. win := makeDemoWindow(w, h, flags);
  181. END;
  182. tigrUpdate(win);
  183. END;
  184. tigrFree(win);
  185. END flags.