paintIntoSharedTexture method

  1. @override
void paintIntoSharedTexture(
  1. RenderTexture texture
)
override

Implementation

@override
void paintIntoSharedTexture(RenderTexture texture) {
  // TODO (Gordon): could move out this logic to calculate the position only under certain conditions.
  final panelKeyContext = shared.panelKey.currentContext;
  if (panelKeyContext == null) {
    return;
  }
  RenderBox renderBox = panelKeyContext.findRenderObject() as RenderBox;
  Offset panelPosition = renderBox.localToGlobal(Offset.zero);
  Offset globalPosition = localToGlobal(Offset.zero) - panelPosition;

  final renderer = texture.renderer;

  renderer.save();

  // Create a single matrix that does: scale(devicePixelRatio) -> translate(position) -> scale(transform)
  final scaledTranslateX = globalPosition.dx * devicePixelRatio;
  final scaledTranslateY = globalPosition.dy * devicePixelRatio;
  renderer.transform(Mat2D.fromScaleAndTranslation(
      scaleWidth, scaleHeight, scaledTranslateX, scaledTranslateY));
  _shouldAdvance = rivePainter?.paint(
        texture,
        devicePixelRatio,
        size,
        elapsedSeconds,
      ) ??
      false;
  if (_shouldAdvance) {
    restartTickerIfStopped();
  } else {
    stopTicker();
  }

  renderer.restore();
}