void PaintPropertyTreeBuilder::updateSvgLocalToBorderBoxTransform(
    const LayoutObject& object,
    PaintPropertyTreeBuilderContext& context) {
  if (!object.isSVGRoot())
    return;

  AffineTransform transformToBorderBox =
      SVGRootPainter(toLayoutSVGRoot(object))
          .transformToPixelSnappedBorderBox(context.current.paintOffset);

  // The paint offset is included in |transformToBorderBox| so SVG does not need
  // to handle paint offset internally.
  context.current.paintOffset = LayoutPoint();

  if (transformToBorderBox.isIdentity()) {
    if (auto* properties = object.getMutableForPainting().paintProperties())
      properties->clearSvgLocalToBorderBoxTransform();
    return;
  }

  context.current.transform =
      object.getMutableForPainting()
          .ensurePaintProperties()
          .updateSvgLocalToBorderBoxTransform(
              context.current.transform, transformToBorderBox, FloatPoint3D());
  context.current.shouldFlattenInheritedTransform = false;
  context.current.renderingContextID = 0;
}
Beispiel #2
0
void LayoutSVGRoot::paintReplaced(const PaintInfo& paintInfo, const LayoutPoint& paintOffset) const
{
    SVGRootPainter(*this).paint(paintInfo, paintOffset);
}