private Point InternalGetPosition(IHTMLElement relativeTo) { var a = GetPositionData.Of(relativeTo); var b = GetPositionData.Of(Internal_Element); // top elements might be the same so we remove them var loop = true; while (loop) { loop = false; if (a.Count > 0) { if (b.Count > 0) { if (a[a.Count - 1].Element == b[b.Count - 1].Element) { a.RemoveAt(a.Count - 1); b.RemoveAt(b.Count - 1); loop = true; } } } } var x = 0; var y = 0; if (a.Count > 0) { var a_ = a[a.Count - 1]; x += a_.X; y += a_.Y; } if (b.Count > 0) { var b_ = b[b.Count - 1]; x += b_.X; y += b_.Y; } return(new Point { X = Internal_OffsetX + x, Y = Internal_OffsetY + y }); }
public TouchPoint GetTouchPoint(IInputElement relativeTo) { __IInputElement _relativeTo = (__IInputElement)(object)relativeTo; #region magic, yet works var pp = new Point(0, 0); if (this.InternalValue != null) { pp.X = this.InternalValue.pageX; pp.Y = this.InternalValue.pageY; } ; var a = GetPositionData.Of(_relativeTo.InternalGetDisplayObjectDirect()); var b = GetPositionData.Of(this.InternalElement); if (b.Count > 0) { var item = b.Last(); pp.X -= item.X; pp.Y -= item.Y; } // top elements might be the same so we remove them var loop = true; while (loop) { loop = false; if (a.Count > 0) { if (b.Count > 0) { if (a[a.Count - 1].Element == b[b.Count - 1].Element) { a.RemoveAt(a.Count - 1); b.RemoveAt(b.Count - 1); loop = true; } } } } if (a.Count > 0) { var itembb = a.Last(); pp.X -= itembb.X; pp.Y -= itembb.Y; } if (b.Count > 0) { var item = b.Last(); pp.X += item.X; pp.Y += item.Y; } #endregion return(new __TouchPoint { TouchDevice = TouchDevice, Position = pp }); }