That solved it. Now I want to get the length of the string inside a
TSpan-object, but neither getComputedTextLength() or
getEndPositionOfChar(currLineText.length()-1).getX() works. I get a
NullPointerException on both dispite the TSpan obviously having a
textnode:
String currTextLine = "Retrieve my width";
Text tn =
SvgEditor.getCanvas().getSVGDocument().createTextNode(currTextLine);
currTSpan.appendChild((Node)tn);
float length = currTSpan.getComputedTextLength(); //
getEndPositionOfChar(currTextLine.length()-1).getX(); also fails
The exception:
java.lang.NullPointerException
at
org.apache.batik.dom.svg.SVGTextContentSupport.getNumberOfChars(Unknown
Source)
at
org.apache.batik.dom.svg.SVGTextContentSupport.getEndPositionOfChar(Unkn
own Source)
at
org.apache.batik.dom.svg.SVGOMTextContentElement.getEndPositionOfChar(Un
known Source)
at
printit.template.controls.MultilineTextTemplateControl.setSVGTextElement
Text(MultilineTextTemplateControl.java:141)
at
printit.template.controls.MultilineTextTemplateControl.setText(Multiline
TextTemplateControl.java:56)
at
printit.template.controlpanels.MultilineTextControlPanel$1.run(Multiline
TextControlPanel.java:94)
at org.apache.batik.util.RunnableQueue.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
The TSpan isn't "attached" to the canvas yet. Can that be the cause of
the error?
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: den 6 mars 2007 12:36
To: [email protected]
Cc: [email protected]
Subject: Re: Getting the maximum height of a character
Hi Henric,
"Henric Rosvall" <[EMAIL PROTECTED]> wrote on 03/06/2007 06:18:47 AM:
> I'm trying to implement multiline text just using a text-element and
> some tspans. But in order to do this, I need to know the maximum
> height that the characters of a line can occupy (so I know at what
> position to insert the next line).
> Basically I thought I'd set the value of the Text-element to "Og"
> and then measure the combined height of these characters:
The code below doesn't set the value of the TextElement.
You need to create/fetch a DOM TextNode with the desired string.
> // Get the maximum rowHeight
> SVGTextElement svgTxt = (SVGTextElement)TextElement;
TextNode tn = doc.createTextNode("Og");
svgTxt.appendChild(tn);
> float minY = Integer.MAX_VALUE;
> float maxY = Integer.MIN_VALUE;
> for (int x = 0; x < strToMeasure.length(); x++)
> {
> SVGRect r = svgTxt.getExtentOfChar(x);
>
> if (r.getY() < minY)
> minY = r.getY();
> if (r.getY() + r.getHeight() > maxY)
> maxY = r.getY() + r.getHeight();
> }
> svgTxt.setNodeValue("");
>
> float rowOffset = maxY - minY;
>
> But the getExtentOfChar-method throws an exception:
> org.w3c.dom.DOMException:
> at org.apache.batik.dom.AbstractNode.createDOMException(Unknown
Source)
> at org.apache.batik.dom.svg.SVGTextContentSupport.
> getExtentOfChar(Unknown Source)
> at org.apache.batik.dom.svg.SVGOMTextContentElement.
> getExtentOfChar(Unknown Source)
> at printit.template.controls.MultilineTextTemplateControl.
> setSVGTextElementText(MultilineTextTemplateControl.java:86)
> at printit.template.controls.MultilineTextTemplateControl.
> setText(MultilineTextTemplateControl.java:54)
> at printit.template.controlpanels.MultilineTextControlPanel$1.
> run(MultilineTextControlPanel.java:94)
> at org.apache.batik.util.RunnableQueue.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
>
> So, if there is a better way, please tell me. Even a simple unit-
> converter might be bettereven though the distance between the lines
> might not be that accurate. Otherwise, if there really isn't a better
> way, do you have any idea what might be wrong? Is it some
> rendering-issue, like, the string hasn't been rendered, and can
> therefore not be measured?
>
> Regards
> Ehhh.... Definately not Henric Rosvall. He's too leet to write code
> like this :P
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]