Commit Graph

39 Commits

Author SHA1 Message Date
Florin Malita
7d529881c4 [SVGDom] Clipped clipPath support
ClipPaths can be clipped too, e.g.:

  <clipPath id="clip1" clip-path="url(#clip2)">...</clipPath>

Since we're not really drawing clips but resolving their geometry,
asPath() needs to take composed clipping into account (and intersect as
needed).

R=reed@google.com,robertphillips@google.com,stephana@google.com

Change-Id: I25959e22fe50f72042147cfe6b416b6b9ac20cd4
Reviewed-on: https://skia-review.googlesource.com/5720
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2016-12-09 16:06:25 +00:00
Florin Malita
ce8840e384 [SVGDom] ClipPath support
* clip-path attribute handling
  * clipPath container element
  * asPath() SkSVGNode virtual for capturing subtree geometry

R=robertphillips@google.com,stephana@google.com

Change-Id: I9597534fe3047b631da6309eafac055dff5696e9
Reviewed-on: https://skia-review.googlesource.com/5650
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2016-12-08 15:00:18 +00:00
Florin Malita
e932d4b3a9 [SVGDom] Add fill-rule support
There's a bit of friction with this attribute, because per spec it is
an inherited presentation attribute, but in Skia it is part of the
actual SkPath state.

So we must add some plumbing to SkSVGShape & friends to allow overriding
the fill type at render-time.

R=robertphillips@google.com,stephana@google.com

Change-Id: I9c926d653c6211beb3914bffac50d4349dbdd2c0
Reviewed-on: https://skia-review.googlesource.com/5415
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
2016-12-06 16:05:41 +00:00
fmalita
bef51c23c3 [SVGDom] Opacity optimization
Apply opacity as fill/stroke paint alpha instead of saveLayer, when
possible.

R=robertphillips@google.com,stephana@google.com,reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2353503005

Committed: https://skia.googlesource.com/skia/+/3dbb7b9f196d793fbd16243157ee67638891f5dc
Review-Url: https://codereview.chromium.org/2353503005
2016-09-20 15:45:57 -07:00
borenet
a5344ee50a Revert of [SVGDom] Opacity optimization (patchset #4 id:60001 of https://codereview.chromium.org/2353503005/ )
Reason for revert:
Failing assertion

Original issue's description:
> [SVGDom] Opacity optimization
>
> Apply opacity as fill/stroke paint alpha instead of saveLayer, when
> possible.
>
> R=robertphillips@google.com,stephana@google.com,reed@google.com
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2353503005
>
> Committed: https://skia.googlesource.com/skia/+/3dbb7b9f196d793fbd16243157ee67638891f5dc

TBR=reed@google.com,robertphillips@google.com,stephana@google.com,fmalita@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Review-Url: https://codereview.chromium.org/2359603002
2016-09-20 13:39:46 -07:00
fmalita
3dbb7b9f19 [SVGDom] Opacity optimization
Apply opacity as fill/stroke paint alpha instead of saveLayer, when
possible.

R=robertphillips@google.com,stephana@google.com,reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2353503005

Review-Url: https://codereview.chromium.org/2353503005
2016-09-20 12:44:31 -07:00
fmalita
7cf4ae7122 [SVGDom] Only apply opacity when needed
Opacity: 1 is a no-op, but it shows up quite a bit in existing documents.

R=robertphillips@google.com,stephana@google.com,reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2349143002

Review-Url: https://codereview.chromium.org/2349143002
2016-09-19 06:42:39 -07:00
fmalita
e1baa7c105 [SVGDom] Expose intrinsic size info
* expose intrinsic size info on <svg> nodes.

  * tweak the SkSVGDOM constructor to no longer take an container size
    param, but instead default to intrinsic size
  * update clients to call SkSVGDOM::setContainerSize() explicitly, when
    needed

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2345533002

Review-Url: https://codereview.chromium.org/2345533002
2016-09-14 12:04:30 -07:00
fmalita
ceb93abddc [SVGDom] Linear gradient 'gradientTransform' support
R=stephana@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2339533002

Review-Url: https://codereview.chromium.org/2339533002
2016-09-13 13:59:05 -07:00
fmalita
cecd617a42 [SVGDom] Linear gradient 'spreadMethod' support
R=stephana@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2337203002

Review-Url: https://codereview.chromium.org/2337203002
2016-09-13 12:56:11 -07:00
fmalita
28d5b72d86 [SVGDom] Initial linear gradient support
Kind of a big change, to connect several new bits into something useful:

  * ID tracking & lookup
  * new asPaint() node virtual to support shader (and in the future filter) based paint servers
  * <defs>, <linearGradient> and <stop> element support
  * 'href', 'offset', 'stop-color', 'stop-opacity' attribute support
  * IRI/FuncIRI and rgb(...) parsing

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2327233003

Review-Url: https://codereview.chromium.org/2327233003
2016-09-12 17:06:47 -07:00
fmalita
a26cab0c53 [SVGDom] Don't truncate opacity scalars
Round instead, for more accurate values.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2284123003

Review-Url: https://codereview.chromium.org/2284123003
2016-08-29 05:54:42 -07:00
fmalita
6cf896d7ce Reland: Experimental parsing expression grammar (PEG) template library
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2271743002

Committed: https://skia.googlesource.com/skia/+/9d08cbc8c6131ff61a1e71cc5c8cf27841d62b42
Review-Url: https://codereview.chromium.org/2271743002
2016-08-25 08:44:35 -07:00
fmalita
0172e77ad6 Revert of Experimental parsing expression grammar (PEG) template library (patchset #8 id:140001 of https://codereview.chromium.org/2271743002/ )
Reason for revert:
G3 roll & Msan woes.

Original issue's description:
> Experimental parsing expression grammar (PEG) template library
>
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2271743002
>
> Committed: https://skia.googlesource.com/skia/+/9d08cbc8c6131ff61a1e71cc5c8cf27841d62b42

TBR=mtklein@google.com,bungeman@google.com,reed@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review-Url: https://codereview.chromium.org/2275943004
2016-08-25 05:50:26 -07:00
fmalita
9d08cbc8c6 Experimental parsing expression grammar (PEG) template library
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2271743002

Review-Url: https://codereview.chromium.org/2271743002
2016-08-24 18:23:25 -07:00
fmalita
be49378e92 [SVGDom] Fix <ellipse> positioning
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2253283002

Review-Url: https://codereview.chromium.org/2253283002
2016-08-17 15:08:48 -07:00
fmalita
280e282d2a [SVGDom] Add support for assorted absolute units
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2259473002

Review-Url: https://codereview.chromium.org/2259473002
2016-08-17 14:51:03 -07:00
fmalita
d24ee1419f [SVGDom] Add <line> support
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2244223005

Review-Url: https://codereview.chromium.org/2244223005
2016-08-17 08:38:15 -07:00
fmalita
dc4c2a9fb7 [SVGDom] Add <circle>, <ellipse> support
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2249033003

Review-Url: https://codereview.chromium.org/2249033003
2016-08-16 15:38:51 -07:00
fmalita
6fb0648c35 [SVGDom] Add opacity support
Group opacity support.  Unlike the other presentation attributes we
support thus far, group opacity is not inherited.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2246943002

Review-Url: https://codereview.chromium.org/2246943002
2016-08-15 12:45:11 -07:00
fmalita
ca39d716f1 [SVGDom] SVGPong sample app
Shows off SVG dom-based animations.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2243853003

Review-Url: https://codereview.chromium.org/2243853003
2016-08-12 13:17:11 -07:00
fmalita
5b31f321fc [SVGDom] <polygon> & <polyline> support
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2235273003

Review-Url: https://codereview.chromium.org/2235273003
2016-08-12 12:15:33 -07:00
fmalita
2d961e086b [SVGDom] Add more presentation attributes.
Implement proper presentation attribute inheritance, and add
support for

* fill-opacity
* stroke-linecap
* stroke-linejoin
* stroke-opacity
* stroke-width

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2234153002

Review-Url: https://codereview.chromium.org/2234153002
2016-08-11 09:16:29 -07:00
fmalita
286a8657da [SVGDom] Add rx/ry support for <rect>
R=stephana@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2234863002

Review-Url: https://codereview.chromium.org/2234863002
2016-08-10 17:11:29 -07:00
fmalita
fea704e115 [SVGDom] Disable verbose parsing messages be default
Guard with SK_VERBOSE_SVG_PARSING

R=robertphillips@google.com,rmistry@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2235963003

Review-Url: https://codereview.chromium.org/2235963003
2016-08-10 16:25:33 -07:00
fmalita
61f36b3708 [SVGDom] Improve whitespace handling in style parsing
Handle whitespace-padded style names/values.

R=stephana@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2225623002

Review-Url: https://codereview.chromium.org/2225623002
2016-08-08 13:58:50 -07:00
fmalita
c97796b47b [SVGDom] Improved transform parsing
Update 'transform' attribute parsing to a more robust, SkSVGAttributeParser-based implementation.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2220933003

Review-Url: https://codereview.chromium.org/2220933003
2016-08-08 12:58:57 -07:00
fmalita
397a517d1a [SVGDom] Add viewBox support
The main feature is <svg> viewBox and proper viewport support, but the CL
touches a few other things:

* refactor SkSVGRenderContext to auto-restore canvas state, and split the
  presentation bits into a separate CoW SkSVGPresentationContext

* introduce SkSVGNode::onPrepareToRender(), as a way for nodes to push their
  custom state before the actual onRender() call (instead of relying on
  non-virtual SkSVGNode to know about all possible state bits)

* add a "Type" suffix to SVG types, to disambiguate (e.g. SkSVGRectType vs.
  SkSVGRect)

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2222793002

Review-Url: https://codereview.chromium.org/2222793002
2016-08-08 11:38:55 -07:00
fmalita
bffc256687 [SVGDom] Initial SVGLength support
Mostly plumb new length types, but also introduce a stateful parser,
rect shape and named color support.

R=reed@google.com,robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2202053002

Review-Url: https://codereview.chromium.org/2202053002
2016-08-03 10:21:11 -07:00
fmalita
58649ccc75 [SVGDom] Parse style attributes
Dispatch style-encoded (style="foo: bar; ...") attributes via normal
attribute setters.

R=reed@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2193663002

Review-Url: https://codereview.chromium.org/2193663002
2016-07-29 08:52:03 -07:00
fmalita
6ceef3dd67 Initial SVG model
A minimal subset needed to render tiger.svg: <svg>, <g>, <path>, 'd', 'fill'/'stroke' (color-only), 'transform'.

R=reed@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2164193002

Review-Url: https://codereview.chromium.org/2164193002
2016-07-26 18:46:34 -07:00
fmalita
2aafe6f427 Add SkSVGCanvas
Add a public SVG canvas factory + move the SVG files from
experimental -> src/svg/.

Update current clients to the new API.

R=reed@google.com, mtklein@google.com, halcanary@google.com

Review URL: https://codereview.chromium.org/902583006
2015-02-06 12:51:10 -08:00
reed
e73da40c35 add length parameter to addText, to match attr values
BUG=skia:3392

Review URL: https://codereview.chromium.org/896363002
2015-02-04 18:29:27 -08:00
fmalita
a9d9de45c1 [SkSVGDevice] drawTextOnPath() support
R=reed@google.com,mtklein@google.com

Review URL: https://codereview.chromium.org/874853003
2015-02-04 17:54:46 -08:00
fmalita
12753ccc9a [SkSVGDevice] Add support for more stroke params
stroke-linecap, stroke-linejoin, stroke-miterlimit, non-scaling-stroke.

R=mtklein@google.com

Review URL: https://codereview.chromium.org/897953004
2015-02-04 14:56:35 -08:00
fmalita
1a481fe4bf [SkSVGDevice] Initial clipping support
Implement SVG clips based on clip stack flattening -
which is now exposed in SkClipStack::asPath() and shared
with SkCanvas's simplify-clip code.

R=reed@google.com,mtklein@google.com

Review URL: https://codereview.chromium.org/876923003
2015-02-04 07:39:34 -08:00
fmalita
fe3f260ff9 [SkSVGDevice] Initial text support
R=reed@google.com,mtklein@google.com

Review URL: https://codereview.chromium.org/899683002
2015-02-03 17:47:12 -08:00
fmalita
532faa9021 [SkSVGDevice] Initial shader/gradient support
* linear gradient support (based on shawcroft@google.com's CL)
* generic paint resources reorg
* opacity support

R=reed@google.com,mtklein@google.com,halcanary@google.com

Review URL: https://codereview.chromium.org/892973002
2015-02-03 05:44:40 -08:00
fmalita
93957f4e80 Initial SVG backend stubbing
This adds SkSVGDevice and a small utility for converting SKP files to SVG (skp2svg).

R=reed@google.com,jcgregorio@google.com
BUG=skia:3368

Review URL: https://codereview.chromium.org/892533002
2015-01-30 09:03:29 -08:00