[cairo] SVG output without "pt" in the coordinates - how?

Behdad Esfahbod behdad at behdad.org
Fri Oct 24 12:51:34 PDT 2008

Emmanuel Pacaud wrote:
> Hi,
> Le vendredi 24 octobre 2008 à 08:10 -0400, Behdad Esfahbod a écrit :
>>> Can this be done in any other way than cutting the "pt" simply off in  
>>> the output filter function?   That seems rather harsh.
>>> Is there a reason behind only supporting one mode (SVG allows "em, ex,  
>>> px, pt, pc, cm, mm, in, and percentages")
> As cairo doesn't have any notion of units, I don't see the point in
> allowing the use of different units in the SVG output.
>> , or is it simply how it is  
>>> for now?
>> I'm pretty SVG-illiterate, so bear with me.  What's the unit the viewBox and
>> the body content coordinates are expressed in?  If that's always points, then
>> I think cairo is doing the right thing.
>> For most of the physical units SVG allows (pc, cm, mm, in), it's a matter of a
>> fixed ratio to pt.  I don't know what the percentage refers to.  I also don't
>> know what the font-specific units em and ex refer to.  For px, again, it's
>> probably assuming a 72dpi device?  In which case it's the same as pt.
>>From the SVG specification:
> "the em and ex unit identifiers are relative to the current font's
> font-size and x-height, respectively."
> "The other absolute unit identifiers from CSS (i.e., pt, pc, cm, mm, in)
> are all defined as an appropriate multiple of one px unit (which,
> according to the previous item, is defined to be equal to one user
> unit), based on what the SVG user agent determines is the size of a px
> unit (possibly passed from the parent processor or environment at
> initialization time). For example, suppose that the user agent can
> determine from its environment that "1px" corresponds to
> "0.2822222mm" (i.e., 90dpi). Then, for all processing of SVG content:
>       * "1pt" equals "1.25px" (and therefore 1.25 user units)
>       * "1pc" equals "15px" (and therefore 15 user units)
>       * "1mm" would be "3.543307px" (3.543307 user units)
>       * "1cm" equals "35.43307px" (and therefore 35.43307 user units)
>       * "1in" equals "90px" (and therefore 90 user units)
> "
> In the SVG files produced by cairo, the use of the viewbox attribute
> makes "pt" the default unit, instead of "px".

I don't understand.  Is it that the viewbox is scaled to fit specified width
and height?

I think letting user choose between px or pt makes sense.


> If you want to render these files with 1 px = 1 pt, just set the ppi of
> your renderer to 72.
> 	Emmanuel.

More information about the cairo mailing list