跳至主要內容

AnnotatedRegionLayers 回傳相對於裁剪區域的本地位置

摘要

#

在註解搜尋中,AnnotatedRegionLayers 回傳的本地位置已變更為相對於裁剪區域,而非圖層。這使得本地位置更有意義且可靠,但會破壞直接執行註解搜尋並使用本地位置的程式碼。

背景

#

註解是在渲染階段指定給螢幕上區域的中繼資料。使用位置搜尋註解會提供包含該位置的上下文資訊。它們用於偵測滑鼠事件和應用程式列的主題。

localPosition 首次加入搜尋結果時,它被定義為相對於擁有註解的圖層,結果證明這是一個設計上的錯誤。來自圖層的偏移量沒有意義且不可靠。例如,如果轉換矩陣是簡單的平移,Transform 小工具會在同一圖層上繪製偏移量,或者如果矩陣是非平凡的,則會推送專用的 TransformLayer。前一種情況會保留先前的座標原點(例如,應用程式的左上角),而後一種情況會移動位置原點,因為它位於新圖層上。這兩種情況可能不會產生明顯的視覺差異,因為額外的圖層可能只是 99% 的縮放比例,儘管註解搜尋會回傳不同的結果。為了使此本地位置可靠,我們必須選擇一個結果來堅持使用。

變更描述

#

AnnotatedRegionLayer 回傳的 localPosition 現在是它收到的本地位置減去 offset,其中 offset 是裁剪區域相對於圖層的位置。

dart
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.offsetsize 的定義方式。它們以前表示「限制註解搜尋的裁剪矩形」,而現在它們共同代表「註解物件的區域」。

遷移指南

#

積極使用此本地位置的程式碼可能直接與圖層互動,因為使用渲染物件或小工具已經使此結果不可靠。為了保留先前的行為,您可以重新實作 AnnotatedRegionLayer 以回傳不減去偏移量的本地位置。

時間軸

#

已於版本中發布:1.15.2
在穩定版本中:1.17

參考資料

#

API 文件

相關問題

相關 PR