AnnotatedRegionLayers 返回相對於裁剪區域的區域性座標
概述
#在註解搜尋中,AnnotatedRegionLayers 返回的區域性座標已更改為相對於裁剪區域,而不是圖層。這使得區域性座標更有意義和更可靠,但會破壞直接執行註解搜尋並使用區域性座標的程式碼。
背景
#註解是在渲染階段分配給螢幕區域的元資料。透過位置搜尋註解可以獲得包含該位置的上下文資訊。它們用於檢測滑鼠事件和應用程式欄的主題。
當 localPosition 最初新增到搜尋結果時,它被定義為相對於擁有註解的圖層,結果證明這是一個設計錯誤。與圖層的偏移量沒有意義且不可靠。例如,如果變換矩陣只是一個簡單的平移,Transform widget 會在同一個圖層上繪製並帶有偏移量;如果矩陣不是平凡的,它會推送一個專用的 TransformLayer。前一種情況保留了先前的座標原點(例如,應用程式的左上角),而後一種情況移動了位置原點,因為它在一個新圖層上。這兩種情況可能不會產生明顯的視覺差異,因為額外的圖層可能只是縮小了 99%,儘管註解搜尋會返回不同的結果。為了使此區域性座標可靠,我們必須選擇其中一個結果來堅持。
變更說明
#AnnotatedRegionLayer 返回的 localPosition 現在是它收到的區域性位置減去 offset,其中 offset 是裁剪區域相對於圖層的位置。
class AnnotatedRegionLayer<T> extends ContainerLayer {
@override
bool findAnnotations<S>(AnnotationResult<S> result, Offset localPosition, { required bool onlyFirst }) {
...
if (/* shouldAddAnnotation */) {
result.add(AnnotationEntry<S>(
annotation: typedValue,
// Used to be:
// localPosition: localPosition,
localPosition: localPosition - offset,
));
}
...
}
}概念上,這改變了 AnnotatedRegionLayer.offset 和 size 的定義方式。它們以前的意思是“限制註解搜尋的裁剪矩形”,而現在它們共同表示“註解物件所處的區域”。
遷移指南
#積極使用此區域性座標的程式碼很可能直接與圖層互動,因為使用渲染物件或 widget 已經使此結果不可靠。為了保留之前的行為,您可以重新實現 AnnotatedRegionLayer 以返回不減去偏移量的區域性座標。
時間線
#登陸版本:1.15.2
穩定版本: 1.17
參考資料
#API 文件
相關問題
相關 PR