Update on what happened in WebKit in the week from October 12 to October 19.
Another busy week for the team! This week we had a variety of fixes, including the regular batch on the Layer-Based SVG Engine, a new pair of properties for WPE WebKit, and a new ApplicationManifest API which improves support for progressive web applications.
Cross-Port 🐱
Add new ApplicationManifest API. This allows looking up the webmanifest for Progressive Web Applications.
Graphics 🖼️
Fixed the repaint rects of SVG text using vector-effect: non-scaling-stroke, first by taking the scale into account in the Layer-Based SVG Engine (LBSE), which used to repaint a larger area than it paints for scaled-up text. A follow-up made the decision per text run, since vector-effect is not inherited and a <tspan> inside a non-scaling <text> paints a regular scaling stroke, and unified the computation so that the legacy SVG engine and LBSE now report identical repaint rects.
Fixed the composited bounds of layers below pixel-moving CSS filter effects such as blur() and drop-shadow(), whose backing store previously missed the pixels the filter samples outside the clip. The clips above a layer are now expanded by the filter outsets of the layer and its ancestors, and a change to those outsets updates the composited bounds of all descendants. This change fixes the cross-platform part, and the CoreAnimation based ports, as well as GTK/WPE.
Fixed repaints when an SVG element switches to a wider clip-path, mask or filter in the Layer-Based SVG Engine (LBSE), which previously only repainted the area it covered before the change and left the newly revealed area stale. Style changes that alter the visual overflow now trigger a repaint of the new bounds as well.
Fixed the repaint region of elements clipped by a <clipPath> with a transform attribute in the Layer-Based SVG Engine (LBSE), where changing that transform repainted the wrong area.
Fixed mix-blend-mode on a document-root <svg> element in the Layer-Based SVG Engine (LBSE), which wrongly blended the page background along with the SVG contents. The blend mode is now applied to the SVG contents only, matching the legacy SVG engine.
Fixed elements staying clipped on screen after their <clipPath> was removed in the Layer-Based SVG Engine (LBSE), because the clipped elements were never repainted. Destroying an SVG resource now notifies its clients, which repaint the area the resource used to cover.
Fixed hit testing of children inside transformed layered SVG groups in the Layer-Based SVG Engine (LBSE), where points outside a shape could hit it and transformed children could be missed entirely.
Stopped recomputing the transform twice on nearly every layout of an SVG container without a layer in the Layer-Based SVG Engine (LBSE). The transform reference box is now remembered for such renderers when transform-box is view-box (the default), so the post-layout update only runs when the box actually moved.
Fixed repaints of SVG groups and their content in the Layer-Based SVG Engine (LBSE), which previously left stale content on screen when something inside a <g> moved or when the <g> itself changed (a new transform / changed clip-path etc.). Images, text and shapes now compute their final position during their own layout, and groups with a layer remember their transform so they repaint both the old and new area on change, which brings text repaints in transformed groups in line with the legacy SVG engine.
Fixed painting of descendants with visibility: visible inside hidden <text> and <foreignObject> elements in the Layer-Based SVG Engine (LBSE), which skipped the whole subtree, unlike the legacy SVG engine. Hidden <g> and <text> containers now also run the mask and clipping mask phases, so such descendants are masked and clipped as well.
WPE WebKit 📟
On WPE expose WindowProperties:geometry and WindowProperties:has-custom-geometry like GTK.
That’s all for this week!