Closed Bug 294517 Opened 19 years ago Closed 19 years ago

Implement SVG Patterns

Categories

(Core :: SVG, enhancement)

enhancement
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: scootermorris, Assigned: scootermorris)

References

Details

Attachments

(4 files, 14 obsolete files)

138.54 KB, patch
Details | Diff | Splinter Review
7.00 KB, image/png
Details
109.52 KB, text/html
Details
82.36 KB, image/svg+xml
Details
See http://www.w3.org/TR/SVG11/pservers.html#Patterns for spec. details.
Depends on: 295850
Attachment #190464 - Attachment is obsolete: true
This is still a work in progress.  Patterns now generally work as expected, but
I'm still having problems getting the transformations right in all
circumstances.
Attachment #190465 - Attachment is obsolete: true
Depends on: 302699
No longer depends on: 295850
Depends on: 295850
Attachment #190994 - Attachment is obsolete: true
Flags: blocking1.8b4?
Attached patch GDI+ code for patterns (obsolete) — Splinter Review
Attachment #191534 - Attachment is obsolete: true
Attachment #190992 - Attachment is obsolete: true
Attachment #190993 - Attachment is obsolete: true
Attachment #191255 - Attachment is obsolete: true
Attachment #191535 - Attachment is obsolete: true
Attachment #191847 - Flags: review?(tor)
we'll decide on taking this once this gets through reviews and security reviews
and we can assess the risk.  If it doesn't make it for beta, we're not holding
for it.
Flags: blocking1.8b4? → blocking1.8b4-
Comment on attachment 191847 [details] [diff] [review]
Combined patch -- updated for getRefFrame landing

This is going to take a bit of merging with the trunk.	Do we also need loop
detection for this, to prevent a pattern having geometry that uses the same
pattern?
(In reply to comment #11)
> (From update of attachment 191847 [details] [diff] [review] [edit])
> This is going to take a bit of merging with the trunk.	Do we also need loop
> detection for this, to prevent a pattern having geometry that uses the same
> pattern?
> 
Yes, now that filters have landed, I'll get a new patch out that has merged to
the trunk and will include the loop detection stuff that I've done for gradients.
Attachment #191847 - Attachment is obsolete: true
Attachment #195284 - Flags: review?(tor)
Attached patch fixes for gdi+ (obsolete) — Splinter Review
Addition patch that needs to be applied atop attachment 195284 [details] [diff] [review] to get GDI+
compiling.

The pattern tests in the w3c test suite work fine, but the example from the SVG
1.1 specification doesn't.
(In reply to comment #14)
> Created an attachment (id=195705) [edit]
> fixes for gdi+
> 
> Addition patch that needs to be applied atop attachment 195284 [details] [diff] [review] [edit] to get GDI+
> compiling.
> 
> The pattern tests in the w3c test suite work fine, but the example from the SVG
> 1.1 specification doesn't.
> 

Yes, I now see that.  The transformation matrix calculations are wrong when a
viewBox is defined.
Attachment #195284 - Flags: review?(tor)
Attachment #191847 - Flags: review?(tor)
Attached patch Fix problem with pattern viewBox (obsolete) — Splinter Review
This patch includes the GDI+ fixes and the fix for the viewBox problem.  I also
removed some extraneous diffs that were in my tree.
Attachment #195284 - Attachment is obsolete: true
Attachment #195705 - Attachment is obsolete: true
Attachment #195911 - Flags: review?(tor)
Attachment #195911 - Attachment is obsolete: true
Attachment #195914 - Flags: review?(tor)
Attachment #195911 - Flags: review?(tor)
Attachment #195914 - Flags: review?(tor)
Comment on attachment 195923 [details] [diff] [review]
How embarrasing -- remove nsSVGGradientFrame diffs (should be in a different patch)

Looks good.  A few minors nits about license blocks - nsISVGPattern.idl should
have your information; nsSVGCairoPattern.{h,cpp} say they include code from
themselves.

Fix those on checkin.  r=tor
Attachment #195923 - Attachment is obsolete: true
Checked in:
Checking in content/svg/content/src/Makefile.in;
/cvsroot/mozilla/content/svg/content/src/Makefile.in,v  <--  Makefile.in
new revision: 1.40; previous revision: 1.39
done
Checking in content/svg/content/src/nsSVGAtomList.h;
/cvsroot/mozilla/content/svg/content/src/nsSVGAtomList.h,v  <--  nsSVGAtomList.h
new revision: 1.26; previous revision: 1.25
done
Checking in content/svg/content/src/nsSVGElementFactory.cpp;
/cvsroot/mozilla/content/svg/content/src/nsSVGElementFactory.cpp,v  <-- 
nsSVGElementFactory.cpp
new revision: 1.29; previous revision: 1.28
done
Checking in content/svg/content/src/nsSVGFeaturesList.h;
/cvsroot/mozilla/content/svg/content/src/nsSVGFeaturesList.h,v  <-- 
nsSVGFeaturesList.h
new revision: 1.4; previous revision: 1.3
done
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGPatternElement.cpp,v
done
Checking in content/svg/content/src/nsSVGPatternElement.cpp;
/cvsroot/mozilla/content/svg/content/src/nsSVGPatternElement.cpp,v  <-- 
nsSVGPatternElement.cpp
initial revision: 1.1
done
Checking in dom/public/nsIDOMClassInfo.h;
/cvsroot/mozilla/dom/public/nsIDOMClassInfo.h,v  <--  nsIDOMClassInfo.h
new revision: 1.72; previous revision: 1.71
done
Checking in dom/public/idl/svg/Makefile.in;
/cvsroot/mozilla/dom/public/idl/svg/Makefile.in,v  <--  Makefile.in
new revision: 1.22; previous revision: 1.21
done
RCS file: /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGPatternElement.idl,v
done
Checking in dom/public/idl/svg/nsIDOMSVGPatternElement.idl;
/cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGPatternElement.idl,v  <-- 
nsIDOMSVGPatternElement.idl
initial revision: 1.1
done
Checking in dom/src/base/nsDOMClassInfo.cpp;
/cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp,v  <--  nsDOMClassInfo.cpp
new revision: 1.313; previous revision: 1.312
done
Checking in layout/base/nsCSSFrameConstructor.cpp;
/cvsroot/mozilla/layout/base/nsCSSFrameConstructor.cpp,v  <-- 
nsCSSFrameConstructor.cpp
new revision: 1.1126; previous revision: 1.1125
done
Checking in layout/svg/base/src/Makefile.in;
/cvsroot/mozilla/layout/svg/base/src/Makefile.in,v  <--  Makefile.in
new revision: 1.50; previous revision: 1.49
done
Checking in layout/svg/base/src/nsSVGGlyphFrame.cpp;
/cvsroot/mozilla/layout/svg/base/src/nsSVGGlyphFrame.cpp,v  <--  nsSVGGlyphFrame.cpp
new revision: 1.35; previous revision: 1.34
done
Checking in layout/svg/base/src/nsSVGPathGeometryFrame.cpp;
/cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.cpp,v  <-- 
nsSVGPathGeometryFrame.cpp
new revision: 1.30; previous revision: 1.29
done
Checking in layout/svg/base/src/nsSVGPathGeometryFrame.h;
/cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.h,v  <-- 
nsSVGPathGeometryFrame.h
new revision: 1.16; previous revision: 1.15
done
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPattern.h,v
done
Checking in layout/svg/base/src/nsSVGPattern.h;
/cvsroot/mozilla/layout/svg/base/src/nsSVGPattern.h,v  <--  nsSVGPattern.h
initial revision: 1.1
done
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPatternFrame.cpp,v
done
Checking in layout/svg/base/src/nsSVGPatternFrame.cpp;
/cvsroot/mozilla/layout/svg/base/src/nsSVGPatternFrame.cpp,v  <-- 
nsSVGPatternFrame.cpp
initial revision: 1.1
done
Checking in layout/svg/renderer/public/Makefile.in;
/cvsroot/mozilla/layout/svg/renderer/public/Makefile.in,v  <--  Makefile.in
new revision: 1.5; previous revision: 1.4
done
Checking in layout/svg/renderer/public/nsISVGGeometrySource.idl;
/cvsroot/mozilla/layout/svg/renderer/public/nsISVGGeometrySource.idl,v  <-- 
nsISVGGeometrySource.idl
new revision: 1.10; previous revision: 1.9
done
RCS file: /cvsroot/mozilla/layout/svg/renderer/public/nsISVGPattern.idl,v
done
Checking in layout/svg/renderer/public/nsISVGPattern.idl;
/cvsroot/mozilla/layout/svg/renderer/public/nsISVGPattern.idl,v  <-- 
nsISVGPattern.idl
initial revision: 1.1
done
Checking in layout/svg/renderer/src/cairo/Makefile.in;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/Makefile.in,v  <--  Makefile.in
new revision: 1.20; previous revision: 1.19
done
Checking in layout/svg/renderer/src/cairo/nsSVGCairoCanvas.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoCanvas.cpp,v  <-- 
nsSVGCairoCanvas.cpp
new revision: 1.24; previous revision: 1.23
done
Checking in layout/svg/renderer/src/cairo/nsSVGCairoGlyphGeometry.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoGlyphGeometry.cpp,v 
<--  nsSVGCairoGlyphGeometry.cpp
new revision: 1.22; previous revision: 1.21
done
Checking in layout/svg/renderer/src/cairo/nsSVGCairoPathGeometry.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoPathGeometry.cpp,v  <--
 nsSVGCairoPathGeometry.cpp
new revision: 1.26; previous revision: 1.25
done
RCS file: /cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoPattern.cpp,v
done
Checking in layout/svg/renderer/src/cairo/nsSVGCairoPattern.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoPattern.cpp,v  <-- 
nsSVGCairoPattern.cpp
initial revision: 1.1
done
RCS file: /cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoPattern.h,v
done
Checking in layout/svg/renderer/src/cairo/nsSVGCairoPattern.h;
/cvsroot/mozilla/layout/svg/renderer/src/cairo/nsSVGCairoPattern.h,v  <-- 
nsSVGCairoPattern.h
initial revision: 1.1
done
Checking in layout/svg/renderer/src/gdiplus/Makefile.in;
/cvsroot/mozilla/layout/svg/renderer/src/gdiplus/Makefile.in,v  <--  Makefile.in
new revision: 1.10; previous revision: 1.9
done
Checking in layout/svg/renderer/src/gdiplus/nsSVGGDIPlusGlyphGeometry.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusGlyphGeometry.cpp,v
 <--  nsSVGGDIPlusGlyphGeometry.cpp
new revision: 1.13; previous revision: 1.12
done
Checking in layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPathGeometry.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPathGeometry.cpp,v
 <--  nsSVGGDIPlusPathGeometry.cpp
new revision: 1.14; previous revision: 1.13
done
RCS file: /cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.cpp,v
done
Checking in layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.cpp;
/cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.cpp,v  <--
 nsSVGGDIPlusPattern.cpp
initial revision: 1.1
done
RCS file: /cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.h,v
done
Checking in layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.h;
/cvsroot/mozilla/layout/svg/renderer/src/gdiplus/nsSVGGDIPlusPattern.h,v  <-- 
nsSVGGDIPlusPattern.h
initial revision: 1.1
done


dom/public/idl/svg/nsIDOMSVGPatternElement.idl

Could you put the /** */ comment for an interface directly in front of it,
instead of in front of the interface forward-declarations? reason: doxygen
assumes such comments refer to the thing they are directly in front of, so
automated documentation generation would not show this comment where it should.
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
Flags: blocking1.8.1?
Not going to block 1.8.1 for this bug.
Flags: blocking1.8.1? → blocking1.8.1-
Please re-open this bug.
Firefox 2.0.0.6 still can't display SVG patterns.
Tested with:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)
Refernce SVG: http://www.w3.org/TR/SVG11/images/pservers/pattern01.svg
It should display as: http://www.w3.org/TR/SVG11/images/pservers/pattern01.png
(In reply to comment #24)
> Created an attachment (id=279105) [details]
> Does'nt display pattern as seen in this screen capture
> 
> Please re-open this bug.
> Firefox 2.0.0.6 still can't display SVG patterns.
> Tested with:
> Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201
> Firefox/2.0.0.6 (Ubuntu-feisty)
> Refernce SVG: http://www.w3.org/TR/SVG11/images/pservers/pattern01.svg
> It should display as: http://www.w3.org/TR/SVG11/images/pservers/pattern01.png
> 

This was not implemented until after Firefox 2 was released.  If you want pattern support, feel free to download one of the latest alpha releases, or a nightly from the trunk.
Please reopen this bug. This bug is still not resolved in Firefox 2.0.0.11 on mac or windows. The simple pattern links in the previous post still don't work.

Tried on : Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
The reference SVG pattern test render fine in firefox 3b2:

Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9b2) Gecko/2007121016 Firefox/3.0b2
It looks like early on this patch was mismerged or something and as a result it turned off the generic "svg" 1.1 feature strings.  See bug 426447.
Depends on: 426447
Pattern support is broken if the SVG is embedded in an <iframe> or <object> using an RFC 2397 data:URI. All patterns appear solid black.
I think this bug should be reopened. Patterns don't work when the SVG is embedded in a data:URI, as demonstrated in the attachments I posted. All patterns appear as solid black. Firefox renders the original SVG, not in a data:URI with the patterns intact. In addition to <iframe> and <object>, pasting the data:URI into the address bar of the browser produces the same result. 
That's bug 308590. Leave this one alone.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: