]> O.S.I.I.S - jp/crow.git/commitdiff
Focus improvments:
authorjpbruyere <jp.bruyere@hotmail.com>
Mon, 7 Sep 2015 07:08:12 +0000 (09:08 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Mon, 7 Sep 2015 07:08:12 +0000 (09:08 +0200)
New function (checkHoverWidget) to check most inner control under the
mouse, than bubble onMouseMove through the parents

MonoDevelop.GOLib/src/GOLibGtkHost.cs
Tests/GOLIBTest_4.cs
Tests/Interfaces/test4.goml
Tests/Interfaces/testWindow.goml
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/Group.cs
src/GraphicObjects/PrivateContainer.cs
src/GraphicObjects/Scroller.cs
src/OpenTKGameWindow.cs

index 03c962205bedda62038844d2a9733fd51cd4106f..c8dcecda72829ac19213fe2e6c3f032c91f3f6af 100644 (file)
@@ -309,13 +309,13 @@ namespace MonoDevelop.GOLib
                {
                        if (_activeWidget != null) {
                                //send move evt even if mouse move outside bounds
-                               _activeWidget.onMouseMove (this, e);
+                               _activeWidget.checkHoverWidget (e);
                                return;
                        }
 
                        if (_hoverWidget != null) {
                                if (_hoverWidget.MouseIsIn (e.Position)) {
-                                       _hoverWidget.onMouseMove (this, e);
+                                       _hoverWidget.checkHoverWidget (e);
                                        return;
                                } else {
                                        _hoverWidget.onMouseLeave (this, e);
@@ -323,7 +323,7 @@ namespace MonoDevelop.GOLib
                                        while (_hoverWidget.Parent as GraphicObject!=null) {
                                                _hoverWidget = _hoverWidget.Parent as GraphicObject;
                                                if (_hoverWidget.MouseIsIn (e.Position)) {
-                                                       _hoverWidget.onMouseMove (this, e);
+                                                       _hoverWidget.checkHoverWidget (e);
                                                        return;
                                                } else
                                                        _hoverWidget.onMouseLeave (this, e);
@@ -335,12 +335,13 @@ namespace MonoDevelop.GOLib
                        for (int i = 0; i < GraphicObjects.Count; i++) {
                                GraphicObject g = GraphicObjects[i];
                                if (g.MouseIsIn (e.Position)) {
-                                       g.onMouseMove (this, e);
+                                       g.checkHoverWidget (e);
                                        PutOnTop (g);
                                        return;
                                }
                        }
                        _hoverWidget = null;
+                       MouseMove.Raise (this, e);
                }
                void Mouse_ButtonUp(object sender, MouseButtonEventArgs e)
                {
index 24cffc98420cb2f722ab1561d7a80aa1f670cb54..8b1c7cd24e91f27970ef4451b1dca031b7163cfb 100644 (file)
@@ -13,6 +13,7 @@ using System.Diagnostics;
 using go;\r
 using System.Threading;\r
 using System.Collections.Generic;\r
+using System.IO;\r
 \r
 \r
 namespace test\r
@@ -82,6 +83,9 @@ namespace test
                {\r
                        base.OnLoad (e);\r
 \r
+                       this.Cursor = XCursor.NE;\r
+\r
+\r
                        LoadInterface("Interfaces/test4.goml", out c);\r
                        //LoadInterface("golibtests/test4.xml", out c2);\r
                        //c2.HorizontalAlignment = HorizontalAlignment.Left;\r
@@ -142,7 +146,7 @@ namespace test
                }\r
                void pFps_mousemove(object sender, MouseMoveEventArgs e)\r
                {\r
-                       if (!e.Mouse.IsButtonDown (MouseButton.Left))\r
+                       if (!e.Mouse.IsButtonDown (MouseButton.Left)||sender!=c)\r
                                return;\r
                        redrawClip.AddRectangle (c.ScreenCoordinates(c.Slot));\r
                        c.Left += e.XDelta;\r
index 0cdc2545896ba6cf066d8f0c27dd6bb88d52fd52..02dadec85ea81481553c9b08f381d4d68389c0d3 100755 (executable)
@@ -1,9 +1,10 @@
 <?xml version="1.0"?>\r
-<Group Name="MainGrp"\r
+<Group Name="MainGrp" Focusable="true"\r
        Width="800" Height="500"\r
        Background="0,5;0,5;0,5;0,5" Foreground="White"\r
        Margin="10" >\r
        <Border Margin="10"\r
+               Name="mainBorder"\r
                BorderWidth="2" BorderColor="Transparent"\r
                Focusable="True"\r
                MouseEnter="{BorderColor = White}"\r
@@ -18,7 +19,7 @@
                                <Label Name="labMouse" Text="MousePos"/>\r
                                <HorizontalStack WidgetSpacing="10">\r
                                        <VerticalStack Width="100">\r
-                                               <Checkbox Name="chk1"/>\r
+                                               <Checkbox Name="chk1" Focusable="true"/>\r
                                                <Checkbox Name="chk2" IsChecked="true"/>\r
                                                <Checkbox Name="chk3" Template="#go.Templates.Checkbox2.goml"/>\r
                                                <Checkbox Name="chk4">\r
index 68759d9eee9a1aef0c03694a521c176f5e6a83ca..32c64401d080381f3da782b9fedbd103392327c4 100755 (executable)
@@ -1,6 +1,7 @@
 <?xml version="1.0"?>\r
 <!--<Group>-->\r
-<Window Name="window1" Left="10" Top="10" Title="Test window" Width="200" Height="200" Background="0,5;0,5;0,5;0,5" >\r
+<Window Name="window1" Left="10" Top="10" Title="Test window" Width="200" Height="200" Background="0,5;0,5;0,5;0,5" \r
+       Focusable="True">\r
        <VerticalStack Height="0" Width="0">\r
                <Label Text="{fps}"  Background="DarkRed"/>\r
                <Label Text="{fpsMin}"  />\r
index e1972669345d166ecb6b5d41a832ad87ce75b21f..d74442d7f3d7532c7e3357641f237bbaa5a3af59 100644 (file)
@@ -661,20 +661,23 @@ namespace go
                {\r
                        return Visible ? ScreenCoordinates(Slot).ContainsOrIsEqual (m) : false; \r
                }\r
-               internal virtual void checkHoverWidget(Point m)\r
+               internal virtual void checkHoverWidget(MouseMoveEventArgs e)\r
                {\r
-                       \r
-               }\r
-               public virtual void onMouseMove(object sender, MouseMoveEventArgs e)\r
-               {\r
-                       //ILayoutable w = sender as ILayoutable;\r
-\r
                        if (TopContainer.hoverWidget != this) {\r
                                TopContainer.hoverWidget = this;\r
-                               onMouseEnter (sender, e);\r
+                               onMouseEnter (this, e);\r
                        }\r
-                               \r
-                       MouseMove.Raise (this, e);\r
+\r
+                       this.onMouseMove (this, e);\r
+               }\r
+               public virtual void onMouseMove(object sender, MouseMoveEventArgs e)\r
+               {\r
+                       //bubble event to the top\r
+                       GraphicObject p = Parent as GraphicObject;\r
+                       if (p != null)\r
+                               p.onMouseMove(sender,e);\r
+                       \r
+                       MouseMove.Raise (sender, e);\r
                }\r
                public virtual void onMouseButtonUp(object sender, MouseButtonEventArgs e){\r
                        if (MouseIsIn (e.Position))\r
index e2d64c89769c92e8352faf291f63f4421274daa4..412942311ddc5d94d4e65cca723748d6bd8509fe 100644 (file)
@@ -215,17 +215,17 @@ namespace go
 \r
        \r
                #region Mouse handling\r
-               public override void onMouseMove (object sender, OpenTK.Input.MouseMoveEventArgs e)\r
+               internal override void checkHoverWidget (OpenTK.Input.MouseMoveEventArgs e)\r
                {\r
                        foreach (GraphicObject g in Children)\r
-            {\r
+                       {\r
                                if (g.MouseIsIn(e.Position))\r
-                {\r
-                                       g.onMouseMove (sender, e);\r
-                    return;\r
-                }\r
-            }\r
-                       base.onMouseMove (sender, e);\r
+                               {\r
+                                       g.checkHoverWidget (e);\r
+                                       return;\r
+                               }\r
+                       }\r
+                       base.checkHoverWidget (e);\r
                }\r
                #endregion\r
                                \r
index f863fae827cea9682bac50623fc54bd98ca1b0a6..01502bd4f984fa53ba9c7a02f126b6b5ad54b36a 100644 (file)
@@ -146,14 +146,12 @@ namespace go
                #endregion
 
                #region Mouse handling
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               internal override void checkHoverWidget (MouseMoveEventArgs e)
                {
-                       base.onMouseMove (sender, e);
-
+                       base.checkHoverWidget (e);
                        if (child != null) 
                        if (child.MouseIsIn (e.Position)) 
-                               child.onMouseMove (sender, e);
-
+                               child.checkHoverWidget (e);
                }
                #endregion
        }
index a413da94ff442d682a2b4be40b2cb52ccf351334..8996c4648380bbcc2cbb53b3f07a7c47d21cedf9 100644 (file)
@@ -118,10 +118,10 @@ namespace go
                {                       \r
                        return Visible ? base.ScreenCoordinates(Slot).ContainsOrIsEqual (m) : false; \r
                }\r
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)\r
+               internal override void checkHoverWidget (MouseMoveEventArgs e)\r
                {\r
                        Point m = e.Position - new Point ((int)ScrollX, (int)ScrollY);\r
-                       base.onMouseMove (sender, new MouseMoveEventArgs(m.X,m.Y,e.XDelta,e.YDelta));\r
+                       base.checkHoverWidget (new MouseMoveEventArgs(m.X,m.Y,e.XDelta,e.YDelta));\r
                }\r
                public override void onMouseWheel (object sender, MouseWheelEventArgs e)\r
                {\r
index d7cecd4ecca3cb4b2bcdc6785c10715ea5e74621..59e02cf1f4226b06876840f43104d5a0c408b48e 100755 (executable)
@@ -385,13 +385,13 @@ namespace go
         {\r
                        if (_activeWidget != null) {\r
                                //send move evt even if mouse move outside bounds\r
-                               _activeWidget.onMouseMove (this, e);\r
+                               _activeWidget.onMouseMove (_activeWidget, e);\r
                                return;\r
                        }\r
 \r
                        if (_hoverWidget != null) {\r
                                if (_hoverWidget.MouseIsIn (e.Position)) {\r
-                                       _hoverWidget.onMouseMove (this, e);\r
+                                       _hoverWidget.checkHoverWidget (e);\r
                                        return;\r
                                } else {\r
                                        _hoverWidget.onMouseLeave (this, e);\r
@@ -399,7 +399,7 @@ namespace go
                                        while (_hoverWidget.Parent as GraphicObject!=null) {\r
                                                _hoverWidget = _hoverWidget.Parent as GraphicObject;\r
                                                if (_hoverWidget.MouseIsIn (e.Position)) {\r
-                                                       _hoverWidget.onMouseMove (this, e);\r
+                                                       _hoverWidget.checkHoverWidget (e);\r
                                                        return;\r
                                                } else\r
                                                        _hoverWidget.onMouseLeave (this, e);\r
@@ -411,7 +411,7 @@ namespace go
                        for (int i = 0; i < GraphicObjects.Count; i++) {\r
                                GraphicObject g = GraphicObjects[i];\r
                                if (g.MouseIsIn (e.Position)) {\r
-                                       g.onMouseMove (this, e);\r
+                                       g.checkHoverWidget (e);\r
                                        PutOnTop (g);\r
                                        return;\r
                                }\r