* [web] Fix ParagraphRuler.hitTest
* [web] Add a test-case for paragraph.getPositionForOffset and nested TextSpans
* [web] Add a test-case for paragraph.getPositionForOffset and nested TextSpans
* [web] remove trailing spaces
* [web] avoid differences of overflow-wrap between chrome and firefox
* Launch safari browser
* Adding safari tests to supported browsers
* changing the directrory for redirect file. This works without opening a permision pop-up. Note: there is no headless mode in safari
* addressing reviewer comments
Constructing colors using `fromRGBO` should return the same values as the CSS
`rgba()` notation. rgba(0, 0, 255, 0.5) is the same as `#0000ff80`
However `fromRGBO` sometimes creates a color with an off-by-one alpha value:
expect(Color.fromRGBO(0, 0, 255, 0.5), Color(0x800000ff));
Expected: Color:<Color(0x800000ff)>
Actual: Color:<Color(0x7f0000ff)>
If we use `withOpacity` to create the same color, it returns the correct color:
expect(Color.fromRGBO(0, 0, 255, 1).withOpacity(0.5), Color(0x800000ff));
This should also be changed in lib/web_ui/lib/src/ui/painting.dart in a
followup change.
* Introduce `SkiaObject` an object that's backed by Skia C++ objects that need to be explicitly deleted.
* Automatically delete `SkiaObject`s at the end of frame.
* Make `SkPaint` a `SkiaObject`.
Because `SkiaObject`s are deleted at the end of the frame, the object can be reused as many times as necessary within the frame. `SkPaint` in particular is a fairly expensive object. Reusing this object, for example, on `drawRRect` drops the canvas paint time by 30%.