Как предотвратить рисование RenderBox поверх других виджетов? - PullRequest
0 голосов
/ 11 марта 2019

Если у меня есть RenderBox (в виде LeafRenderObjectWidget) в любом месте экрана, он всегда будет вызываться с PaintingContext, который начинается с Offset(0.0, 0.0). Это можно исправить, переведя Canvas или используя RenderShiftedBox для удобства.

Теперь RenderBox будет рисовать из фактического положения . Это прекрасно работает для меня, однако я хочу ограничить мой RenderBox от рисования поверх других виджетов, даже если операция canvas происходит за пределами этих границ.

Как мне подойти к этому? Я думал об отсечении LeafRenderObjectWidget, но понятия не имею, где начнется область моего RenderBox.

Если раньше было непонятно, у меня есть все, что нужно, чтобы определить, где начинается и заканчивается RenderBox. Я получаю верхнюю позицию из Offset, который предоставляется как параметр в paint, и у меня есть размер, потому что я установил его в performResize, но я не знаю, как обрезать, используя это, потому что эта информация находится внутри RenderBox.

1 Ответ

1 голос
/ 11 марта 2019

Есть несколько возможностей:

  • Оберните RenderBox в ClipRect.Легко, но немного обмануть

  • использовать PaintingContext.pushClipRect внутри функции paint вашего RenderBox

Следующий клип представляет собой картинуне переполнен RenderBox

@override
void paint(PaintingContext context, Offset offset) {
  context.pushClipRect(
      needsCompositing, offset, Rect.fromLTWH(0, 0, size.width, size.height),
      (context, offset) {
    // TODO: do some painting
  });
}
...