diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2021-04-09 05:19:01 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2021-04-09 05:19:01 +0200 |
| commit | ae9c383ea4e3caccc768ca8caa7a0f6d8c875172 (patch) | |
| tree | dfce0a8455f9de2be6de45b156e64149cbf1fad7 | |
| parent | cbf53cdeb27b06238e009e8aa2d86ae5bc77b729 (diff) | |
iface.draw: clip only after pop to source
| -rw-r--r-- | Crow/src/Interface.cs | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/Crow/src/Interface.cs b/Crow/src/Interface.cs index f1a3da1a..38a0764f 100644 --- a/Crow/src/Interface.cs +++ b/Crow/src/Interface.cs @@ -972,6 +972,14 @@ namespace Crow ctx.PushGroup (); + for (int i = 0; i < clipping.NumRectangles; i++) + ctx.Rectangle (clipping.GetRectangle (i)); + + ctx.ClipPreserve (); + ctx.Operator = Operator.Clear; + ctx.Fill (); + ctx.Operator = Operator.Over; + for (int i = GraphicTree.Count -1; i >= 0 ; i--){ Widget p = GraphicTree[i]; if (!p.IsVisible) @@ -1010,14 +1018,6 @@ namespace Crow ctx.PopGroupToSource (); - for (int i = 0; i < clipping.NumRectangles; i++) - ctx.Rectangle (clipping.GetRectangle (i)); - - ctx.ClipPreserve (); - ctx.Operator = Operator.Clear; - ctx.Fill (); - ctx.Operator = Operator.Over; - ctx.Paint (); surf.Flush (); @@ -1371,7 +1371,9 @@ namespace Crow /// should be called by the host on mouse move event to forward events to crow interfaces</summary> /// <returns>true if mouse is in the interface</returns> public virtual bool OnMouseMove (int x, int y) - { + { + DbgLogger.StartEvent (DbgEvtType.MouseMove); + int deltaX = x - MousePosition.X; int deltaY = y - MousePosition.Y; @@ -1385,6 +1387,7 @@ namespace Crow stickyMouseDelta = default; } else { Glfw3.SetCursorPosition (hWin, MousePosition.X, MousePosition.Y); + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } } @@ -1397,6 +1400,7 @@ namespace Crow //TODO, ensure object is still in the graphic tree //send move evt even if mouse move outside bounds ActiveWidget.onMouseMove (this, e); + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } @@ -1427,7 +1431,8 @@ namespace Crow } GraphicTree[i].checkHoverWidget (e); HoverWidget.onMouseMove (this, e); - } + } + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } } @@ -1440,6 +1445,7 @@ namespace Crow DragAndDropOperation.DragSource.onDrag (this, e); else HoverWidget.onMouseMove (this, e); + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } else { if (DragAndDropInProgress && dragndropHover == DragAndDropOperation.DropTarget) @@ -1455,6 +1461,7 @@ namespace Crow DragAndDropOperation.DragSource?.onDrag (this, e); else HoverWidget.onMouseMove (this, e); + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } } @@ -1477,11 +1484,13 @@ namespace Crow } HoverWidget.onMouseMove (this, e); } + DbgLogger.EndEvent (DbgEvtType.MouseMove); return true; } } } HoverOrDropTarget = null; + DbgLogger.EndEvent (DbgEvtType.MouseMove); return false; } /// <summary> @@ -1491,17 +1500,21 @@ namespace Crow /// <param name="button">Button index</param> public virtual bool OnMouseButtonDown (MouseButton button) { + DbgLogger.StartEvent (DbgEvtType.MouseDown); doubleClickTriggered = (lastMouseDown.ElapsedMilliseconds < DOUBLECLICK_TRESHOLD); lastMouseDown.Restart (); lastMouseDownEvent = new MouseButtonEventArgs (MousePosition.X, MousePosition.Y, button, InputAction.Press); - if (HoverWidget == null) + if (HoverWidget == null) { + DbgLogger.EndEvent (DbgEvtType.MouseDown); return false; + } HoverWidget.onMouseDown (this, lastMouseDownEvent); ActiveWidget = HoverWidget; + DbgLogger.EndEvent (DbgEvtType.MouseDown); return true; } /// <summary> @@ -1511,6 +1524,7 @@ namespace Crow /// <param name="button">Button index</param> public virtual bool OnMouseButtonUp (MouseButton button) { + DbgLogger.StartEvent (DbgEvtType.MouseUp); mouseRepeatTimer.Reset (); lastMouseDownEvent = null; @@ -1524,16 +1538,20 @@ namespace Crow ActiveWidget.onMouseUp (_activeWidget, new MouseButtonEventArgs (MousePosition.X, MousePosition.Y, button, InputAction.Release)); ActiveWidget = null; } + DbgLogger.EndEvent (DbgEvtType.MouseUp); return true; } - if (_activeWidget == null) + if (_activeWidget == null) { + DbgLogger.EndEvent (DbgEvtType.MouseUp); return false; + } _activeWidget.onMouseUp (_activeWidget, new MouseButtonEventArgs (MousePosition.X, MousePosition.Y, button, InputAction.Release)); if (_activeWidget == null) { Debug.WriteLine ("[BUG]Mystery reset of _activeWidget"); + DbgLogger.EndEvent (DbgEvtType.MouseUp | DbgEvtType.Error); return true; } @@ -1546,6 +1564,7 @@ namespace Crow // if (!lastActive.MouseIsIn (Mouse.Position)) { // ProcessMouseMove (Mouse.X, Mouse.Y); // } + DbgLogger.EndEvent (DbgEvtType.MouseUp); return true; } /// <summary> |