瀏覽代碼

Gui: Hover (not done)

Arthur Yefimov 3 年之前
父節點
當前提交
72ba4dbd96
共有 3 個文件被更改,包括 21 次插入14 次删除
  1. 6 0
      Programs/Buttons.Mod
  2. 4 10
      Programs/Gui.Mod
  3. 11 4
      Programs/TestGui.Mod

+ 6 - 0
Programs/Buttons.Mod

@@ -44,6 +44,12 @@ BEGIN
   IF Gui.down IN W.state THEN DrawDownButton(W, x, y)
   ELSE DrawNormalButton(W, x, y)
   END;
+
+  IF Gui.hover IN W.state THEN
+    G.MakeCol(c, 255, 0, 0);
+    G.Rect(x, y, x + W.w - 1, y + W.h - 1, c)
+  END;
+
   f := Gui.GetFont(W);
   G.GetMonoFontSize(f, fw, fh);
   G.MakeCol(c, 0, 0, 0);

+ 4 - 10
Programs/Gui.Mod

@@ -35,14 +35,14 @@ TYPE
     bmp*: G.Bitmap;
     parent*: Widget;
     prev*, next*: Widget;
-    draw*: DrawHandler;
     (* Event Handlers *)
     onMouseMove*: MouseMoveHandler;
     onMouseDown*: MouseDownHandler;
     onMouseUp*: MouseUpHandler;
     onClick*: ClickHandler;
     (* Message Handler *)
-    handle*: Handler
+    handle*: Handler;
+    draw*: DrawHandler
   END;
 
   Window* = POINTER TO WindowDesc;
@@ -57,7 +57,6 @@ VAR
   font: G.Font;
 
   newWindowSettings: SET;
-  ZZZ: INTEGER;
 
   globalWin: Window; (* !FIXME *)
 
@@ -143,11 +142,8 @@ PROCEDURE DrawWindow*(W: Widget; x, y: INTEGER);
 VAR c: G.Color;
   w, h: INTEGER;
 BEGIN
-  G.MakeCol(c, ZZZ * 40 MOD 256, 120, 120);
+  G.MakeCol(c, 212, 208, 200);
   G.ClearToColor(c);
-  G.MakeCol(c, 0, 0, ZZZ * 20 MOD 256);
-  G.GetScreenSize(w, h);
-  G.Rect(5, 5, w - 6, h - 6, c);
 
   DrawBody(W, x, y)
 END DrawWindow;
@@ -307,7 +303,6 @@ BEGIN
     HandleMouseUpEvent(e)
   ELSIF e.type = G.keyDown THEN
     IF e.key = G.kEsc THEN exitRunLoop := TRUE END;
-    INC(ZZZ)
   ELSIF e.type = G.quit THEN
     exitRunLoop := TRUE
   END
@@ -346,6 +341,5 @@ BEGIN
 END Close;
 
 BEGIN
-  Done := TRUE;
-  ZZZ := 0
+  Done := TRUE
 END Gui.

+ 11 - 4
Programs/TestGui.Mod

@@ -1,9 +1,10 @@
 MODULE TestGui;
-IMPORT Gui, B := Buttons, G := Graph, Int, Strings, Out;
+IMPORT Gui, B := Buttons, Panels, G := Graph, Int, Strings, Out;
 
 VAR
   win: Gui.Window;
-  btn, btn2: B.Button;
+  btn, btn2, btn3: B.Button;
+  panel1: Panels.Panel;
   QQQ, WWW: INTEGER;
 
 PROCEDURE BtnOnClick(W: Gui.Widget);
@@ -53,16 +54,22 @@ BEGIN
   Gui.NewWindowSettings({G.fullscreen});
   win := Gui.NewWindow(320, 200);
 
+  panel1 := Panels.NewPanel(220, 140, 'Кнопки');
+  Gui.Place(win, panel1, (win.w - panel1.w) DIV 2, (win.h - panel1.h) DIV 3);
+
   btn := B.NewButton(110, 24, 'Нажми меня');
   Gui.SetOnMouseMove(btn, MyButtonMouseMove);
   Gui.SetOnMouseDown(btn, MyButtonMouseDown);
   Gui.SetOnMouseUp(btn, MyButtonMouseUp);
   Gui.SetOnClick(btn, BtnOnClick);
-  Gui.Place(win, btn, (win.w - btn.w) DIV 2, (win.h - btn.h) DIV 3);
+  Gui.Place(panel1, btn, 8, 20);
 
   btn2 := B.NewButton(110, 24, 'Щёлкни сюда');
   Gui.SetOnClick(btn2, BtnOnClick);
-  Gui.Place(win, btn2, btn.x, btn.y + btn.h + 4)
+  Gui.Place(panel1, btn2, 8, btn.y + btn.h + 8);
+
+  btn3 := B.NewButton(110, 24, 'Ничто');
+  Gui.Place(panel1, btn3, 8, btn2.y + btn2.h + 8);
 
 END InitInterface;