feat: Support ContactRect in X11 and Windows platform (#16498)
* feat: Support ContactRect in X11 platform
* Provide compat value for ContactRect property
* Using touch position to get the screen.
* Try get the correct screen
* Remove the code of log.
* Improve performance avoid the GC stress.
* Add a second overload in PointerPointProperties to avoid break API change
* Support touch size in WM_Touch
* Support get ContactRect in WM_POINTER
* Fix the coordinate of touch contact area
* Fix the calcuate of WM_Touch contact area
* Fix the X11 area contact
* Fix the touch major and minor default value is not null.
The XIValuatorClassInfo is struct, so the FirstOrDefault will return the default struct when not found.
// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-touchinput
// > The width of the touch contact area in hundredths of a pixel in physical screen coordinates. This value is only valid if the dwMask member has the TOUCHEVENTFMASK_CONTACTAREA flag set.
constintTOUCHEVENTFMASK_CONTACTAREA=0x0004;// Known as TOUCHINPUTMASKF_CONTACTAREA in the docs.
// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-pointer_touch_info
// > The predicted screen coordinates of the contact area, in pixels. By default, if the device does not report a contact area, this field defaults to a 0-by-0 rectangle centered around the pointer location.