My favorites
▼
|
Sign in
lindenb
Pierre Lindenbaum's library
Project Home
Downloads
Wiki
Issues
Source
Checkout
Browse
Changes
Source path:
svn
/
trunk
/
src
/
java
/
org
/
lindenb
/
svg
/
SVGIcon.java
‹r349
r508
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package org.lindenb.svg;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.lindenb.awt.Dimension2D;
import org.lindenb.lang.InvalidXMLException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class SVGIcon implements Icon
{
private Node dom;
private SVGRenderer renderer=new SVGRenderer();
private Dimension2D svgSize=null;
public SVGIcon(Node dom,double width,double height)
{
if(dom==null) throw new NullPointerException("dom is null");
this.dom=dom;
this.svgSize= new Dimension2D.Double(width,height);
}
public SVGIcon(Node dom)
{
if(dom==null) throw new NullPointerException("dom is null");
this.dom=dom;
try
{
if(dom.getNodeType()==Node.ELEMENT_NODE)
{
this.svgSize= SVGUtils.getSize(Element.class.cast(dom));
}
else if(dom.getNodeType()==Node.DOCUMENT_NODE)
{
this.svgSize= SVGUtils.getSize(Document.class.cast(dom).getDocumentElement());
}
else
{
throw new IllegalArgumentException("bad node type");
}
}
catch(InvalidXMLException err)
{
throw new IllegalArgumentException(err);
}
}
@Override
public int getIconHeight() {
return (int)this.svgSize.getHeight();
}
@Override
public int getIconWidth() {
return (int)this.svgSize.getWidth();
}
@Override
public void paintIcon(Component c, Graphics g1d, int x, int y) {
Graphics2D g=(Graphics2D)g1d;
g.translate(x,y);
try
{
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
this.renderer.paint(Graphics2D.class.cast(g1d),this.dom,
new Rectangle2D.Double(0,0,
getIconWidth(),
getIconHeight()
));
}
catch(InvalidXMLException err)
{
err.printStackTrace();
}
g.translate(-x,-y);
}
public static void main(String[] args) {
try {
DocumentBuilderFactory domFactory= DocumentBuilderFactory.newInstance();
domFactory.setCoalescing(true);
domFactory.setExpandEntityReferences(true);
domFactory.setIgnoringComments(true);
domFactory.setNamespaceAware(true);
domFactory.setValidating(false);
domFactory.setNamespaceAware(true);
DocumentBuilder domBuilder= domFactory.newDocumentBuilder();
Document dom=domBuilder.parse("http://upload.wikimedia.org/wikipedia/commons/f/fd/Ghostscript_Tiger.svg");
//Document dom=domBuilder.parse(new java.io.File("/home/lindenb/jeter.svg"));
//Document dom=domBuilder.parse("http://www.w3.org/TR/SVG/images/text/text01.svg");
SVGIcon icon= new SVGIcon(dom,256,256);
JDialog.setDefaultLookAndFeelDecorated(true);
JOptionPane.showMessageDialog(null, new JLabel(icon),"SVG Icon",JOptionPane.PLAIN_MESSAGE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Show details
Hide details
Change log
r350
by plindenbaum on Jul 21, 2009
Diff
cont
Go to:
...nb/lang/InvalidXMLException.java
...ava/org/lindenb/svg/SVGIcon.java
...org/lindenb/svg/SVGRenderer.java
Project members,
sign in
to write a code review
Older revisions
r349
by plindenbaum on Jul 21, 2009
Diff
cont
All revisions of this file
File info
Size: 3049 bytes, 118 lines
View raw file
Powered by
Google Project Hosting