dotnet 讀 WPF 原始碼筆記 為什麼預設的筆跡觸控點的壓感是 0.5 的值
阿新 • • 發佈:2021-01-30
本文是我在讀 WPF 原始碼做的筆記
在 WPF 中,如 WPF 觸控到事件 部落格內容,在 WPF 中將會通過 StylusPointCollection 傳入原始的觸控資料,也就是 int[] rawPacketData
來建立觸控點
在 StylusPointCollection 的建構函式裡面,將會讀取 int[] rawPacketData
的內容,拿到觸控點
internal StylusPointCollection(StylusPointDescription stylusPointDescription, int[] rawPacketData, GeneralTransform tabletToView, Matrix tabletToViewMatrix)
在建立 StylusPoint 時,使用下面程式碼
StylusPoint newPoint = new StylusPoint(p.X, p.Y, StylusPoint.DefaultPressure, _stylusPointDescription, data, false, false);
這裡的 StylusPoint.DefaultPressure 如下程式碼
public struct StylusPoint
{
internal static readonly float DefaultPressure = 0.5f;
}
這就是為什麼觸控的預設壓感是 0.5 的原因
而如果是是通過帶壓感的筆的觸控點,那麼在 StylusPointDescription 描述裡面,將會 ContainsTruePressure 屬性表示當前觸控點是否存在壓感,此時在建立完成觸控點之後,會使用如下邏輯,讀取壓感設定給觸控點
bool containsTruePressure = stylusPointDescription.ContainsTruePressure;
StylusPoint newPoint = new StylusPoint(p.X, p.Y, StylusPoint.DefaultPressure, _stylusPointDescription, data, false, false);
if (containsTruePressure)
{
//use the algoritm to set pressure in StylusPoint
int pressure = rawPacketData[i + 2];
newPoint.SetPropertyValue(StylusPointProperties.NormalPressure, pressure);
}
當前的 WPF 在 https://github.com/dotnet/wpf 完全開源,使用友好的 MIT 協議,意味著允許任何人任何組織和企業任意處置,包括使用,複製,修改,合併,發表,分發,再授權,或者銷售。在倉庫裡面包含了完全的構建邏輯,只需要本地的網路足夠好(因為需要下載一堆構建工具),即可進行本地構建
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含連結:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我聯絡。