W3C home > Mailing lists > Public > www-svg@w3.org > August 2012

Re: Clarification on getBBox() with shapes of zero width

From: Philip Rogers <pdr@google.com>
Date: Tue, 7 Aug 2012 15:46:09 -0700
Message-ID: <CAJgFLLuZK6RxBfuvygK4i09-iyaJZT5-DKM3T2Dj_Tug4zEEwA@mail.gmail.com>
To: Dirk Schulze <dschulze@adobe.com>
Cc: Rick <graham.rick@gmail.com>, Robert Longson <longsonr@gmail.com>, "www-svg@w3.org" <www-svg@w3.org>, "jackalmage@gmail.com" <jackalmage@gmail.com>
On the topic of how this is implemented at the moment...

getBBox() on a one-dimensional rect:
<rect height="100" width="0"/>
Chrome: (0,0)
Firefox: (0,0)
IE: (0,100)
Opera: (0,100)

getBBox() on a display:none rect:
<rect height="100" width="100" style="display:none"/>
Chrome: (0,0)
Firefox: Throws NS_ERROR_FAILURE (see
https://bugzilla.mozilla.org/show_bug.cgi?id=612118)
IE: (100,200) (the lacuna value?)
Opera: (100,100)

getBBox() on a "one-dimensional" line:
<line x1="100" y1="100" x2="100" y2="200" />
Chrome: (0,100)
Firefox: (0,100)
IE: (0,100)
Opera: (0,100)

I think everyone is getting something wrong, except maybe Opera.

As an implementer, returning the correct values for width=0 in WebKit will
not be too hard and will be easiest to understand for users.

The display:none case will require working around a well-known optimization
in SVG in IE/Firefox/Chrome where a render tree is not created for
display:none nodes, so I would like to argue we should return a rect of
size (0,0) in that case. This attribute is already not animatable so I do
not think it will be surprising.

Philip


On Tue, Aug 7, 2012 at 1:58 PM, Dirk Schulze <dschulze@adobe.com> wrote:

>
> On Aug 7, 2012, at 1:55 PM, Philip Rogers <pdr@google.com> wrote:
>
> > Dirk,
> >
> > You've said this a few times but it is not true: " A shape with one
> dimension does not get rendered and is in error."
> > The spec says it does not get rendered, but it is not in error.
> Yes, just noticed it. Thanks for the clarification.
>
> Dirk
>
> >
> > For getBBox() you can calculate the size of rects, ellipses, and circles
> analytically from just the width/height/radii without creating any
> renderers. This is simple because getBBox() is exclusive of "complicated'
> things like strokes, markers, etc, so you can rely on the attributes alone.
> >
> > Philip
> >
> >
> > On Tue, Aug 7, 2012 at 1:47 PM, Dirk Schulze <dschulze@adobe.com> wrote:
> >
> > On Aug 7, 2012, at 12:23 PM, Rick <graham.rick@gmail.com> wrote:
> >
> > >
> > > On Tue, Aug 7, 2012 at 2:51 PM, Robert Longson <longsonr@gmail.com>
> wrote:
> > > In most cases nobody wants this so why clutter up UA code with it. In
> the extremely rare cases you need it I don't see why the svg file shouldn't
> have an "ugly hack" rather than having dozens of lines of mostly unused
> ugly hack UA code handle it.
> > >
> > >
> > > As a content developer, I expect the geometry of SVG elements to be
> correct.
> > >
> > > Let me suggest this another way then.
> > >
> > > I don't think introducing illogical hacks into the SVG spec to solve
> coding problems for specific UA's sets a good precedent.
> > >
> > > As a former UA implementer, I ask, what impact does this have on other
> UA's?  Should they adopt your hack because you don't want to check for a
> zero in your rendering pipeline?
> >
> > It is not necessarily a hack. It is an inconsistency in the spec. A lot
> of engines create renderers for rendering content. A shape with one
> dimension does not get rendered and is in error. That is the spec text. So
> if it is in error, why do you expect reasonable results from it? It is not
> just Firefox that behaves like that, but also WebKit and all WebKit based
> browsers/applications.
> >
> > Greetings,
> > Dirk
> >
> > >
> > >
> > > Robert
> > >
> > >
> > > On 7 August 2012 19:47, Rick <graham.rick@gmail.com> wrote:
> > >
> > >
> > > On Tue, Aug 7, 2012 at 2:03 PM, Robert Longson <longsonr@gmail.com>
> wrote:
> > > >> If you want the shape included then give it a small non-zero
> width/height hidden visibility.
> > >
> > > Making a rectangle of zero width not render is logical, but it is
> still a legal rectangle object and can be interacted with, so it should
> have geometry semantics.
> > >
> > > Giving zero widths/heights a small value is an ugly hack.  There must
> be a better way.
> > >
> > > Is there no bottleneck in Cairo where you could discard ineligible
> shapes?
> > >
> > > --
> > > "A child is a person who can't understand why someone would give away
> a perfectly good kitten."
> > > -- Doug Larson
> > >
> > >
> > >
> > >
> > > --
> > > "A child is a person who can't understand why someone would give away
> a perfectly good kitten."
> > > -- Doug Larson
> >
> >
>
>
Received on Tuesday, 7 August 2012 22:46:57 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:52 GMT