Browse Source

backport of PR 11096 - MacOS timestamp overflow.

backport-11096
Dan Walmsley 3 years ago
parent
commit
a9893f69e7
  1. 4
      native/Avalonia.Native/src/OSX/AvnView.mm
  2. 2
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  3. 12
      src/Avalonia.Native/WindowImplBase.cs
  4. 7
      src/Avalonia.Native/avn.idl

4
native/Avalonia.Native/src/OSX/AvnView.mm

@ -255,7 +255,7 @@
} }
} }
uint32 timestamp = static_cast<uint32>([event timestamp] * 1000); auto timestamp = static_cast<uint64>([event timestamp] * 1000);
auto modifiers = [self getModifiers:[event modifierFlags]]; auto modifiers = [self getModifiers:[event modifierFlags]];
if(type != Move || if(type != Move ||
@ -406,7 +406,7 @@
auto key = s_KeyMap[[event keyCode]]; auto key = s_KeyMap[[event keyCode]];
uint32_t timestamp = static_cast<uint32_t>([event timestamp] * 1000); auto timestamp = static_cast<uint64_t>([event timestamp] * 1000);
auto modifiers = [self getModifiers:[event modifierFlags]]; auto modifiers = [self getModifiers:[event modifierFlags]];
if(_parent != nullptr) if(_parent != nullptr)

2
native/Avalonia.Native/src/OSX/AvnWindow.mm

@ -459,7 +459,7 @@
auto point = [self translateLocalPoint:avnPoint]; auto point = [self translateLocalPoint:avnPoint];
AvnVector delta = { 0, 0 }; AvnVector delta = { 0, 0 };
_parent->BaseEvents->RawMouseEvent(NonClientLeftButtonDown, static_cast<uint32>([event timestamp] * 1000), AvnInputModifiersNone, point, delta); _parent->BaseEvents->RawMouseEvent(NonClientLeftButtonDown, static_cast<uint64>([event timestamp] * 1000), AvnInputModifiersNone, point, delta);
} }
if(!_isTransitioningToFullScreen) if(!_isTransitioningToFullScreen)

12
src/Avalonia.Native/WindowImplBase.cs

@ -211,17 +211,17 @@ namespace Avalonia.Native
_parent.PositionChanged?.Invoke(position.ToAvaloniaPixelPoint()); _parent.PositionChanged?.Invoke(position.ToAvaloniaPixelPoint());
} }
void IAvnWindowBaseEvents.RawMouseEvent(AvnRawMouseEventType type, uint timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) void IAvnWindowBaseEvents.RawMouseEvent(AvnRawMouseEventType type, ulong timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta)
{ {
_parent.RawMouseEvent(type, timeStamp, modifiers, point, delta); _parent.RawMouseEvent(type, timeStamp, modifiers, point, delta);
} }
int IAvnWindowBaseEvents.RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) int IAvnWindowBaseEvents.RawKeyEvent(AvnRawKeyEventType type, ulong timeStamp, AvnInputModifiers modifiers, uint key)
{ {
return _parent.RawKeyEvent(type, timeStamp, modifiers, key).AsComBool(); return _parent.RawKeyEvent(type, timeStamp, modifiers, key).AsComBool();
} }
int IAvnWindowBaseEvents.RawTextInputEvent(uint timeStamp, string text) int IAvnWindowBaseEvents.RawTextInputEvent(ulong timeStamp, string text)
{ {
return _parent.RawTextInputEvent(timeStamp, text).AsComBool(); return _parent.RawTextInputEvent(timeStamp, text).AsComBool();
} }
@ -279,7 +279,7 @@ namespace Avalonia.Native
} }
public bool RawTextInputEvent(uint timeStamp, string text) public bool RawTextInputEvent(ulong timeStamp, string text)
{ {
if (_inputRoot is null) if (_inputRoot is null)
return false; return false;
@ -293,7 +293,7 @@ namespace Avalonia.Native
return args.Handled; return args.Handled;
} }
public bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key) public bool RawKeyEvent(AvnRawKeyEventType type, ulong timeStamp, AvnInputModifiers modifiers, uint key)
{ {
if (_inputRoot is null) if (_inputRoot is null)
return false; return false;
@ -312,7 +312,7 @@ namespace Avalonia.Native
return false; return false;
} }
public void RawMouseEvent(AvnRawMouseEventType type, uint timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) public void RawMouseEvent(AvnRawMouseEventType type, ulong timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta)
{ {
if (_inputRoot is null) if (_inputRoot is null)
return; return;

7
src/Avalonia.Native/avn.idl

@ -1,6 +1,7 @@
@clr-namespace Avalonia.Native.Interop @clr-namespace Avalonia.Native.Interop
@clr-access internal @clr-access internal
@clr-map bool int @clr-map bool int
@clr-map u_int64_t ulong
@cpp-preamble @@ @cpp-preamble @@
#pragma once #pragma once
#include "com.h" #include "com.h"
@ -515,12 +516,12 @@ interface IAvnWindowBaseEvents : IUnknown
void Resized([const] AvnSize& size, AvnPlatformResizeReason reason); void Resized([const] AvnSize& size, AvnPlatformResizeReason reason);
void PositionChanged(AvnPoint position); void PositionChanged(AvnPoint position);
void RawMouseEvent(AvnRawMouseEventType type, void RawMouseEvent(AvnRawMouseEventType type,
uint timeStamp, u_int64_t timeStamp,
AvnInputModifiers modifiers, AvnInputModifiers modifiers,
AvnPoint point, AvnPoint point,
AvnVector delta); AvnVector delta);
bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key); bool RawKeyEvent(AvnRawKeyEventType type, u_int64_t timeStamp, AvnInputModifiers modifiers, uint key);
bool RawTextInputEvent(uint timeStamp, [const] char* text); bool RawTextInputEvent(u_int64_t timeStamp, [const] char* text);
void ScalingChanged(double scaling); void ScalingChanged(double scaling);
void RunRenderPriorityJobs(); void RunRenderPriorityJobs();
void LostFocus(); void LostFocus();

Loading…
Cancel
Save