1
2 package org.freehep.graphicsio.emf;
3
4 import javax.swing.JComponent;
5 import java.awt.Color;
6 import java.awt.Dimension;
7 import java.awt.Graphics;
8 import java.awt.Graphics2D;
9 import java.awt.geom.AffineTransform;
10
11
12
13
14
15
16
17 public class EMFPanel extends JComponent {
18
19
20
21
22 private static double SCALE_FACTOR = 2;
23
24
25
26
27 private EMFRenderer renderer;
28
29
30
31
32 private double scale = 1;
33
34
35
36
37 public EMFPanel() {
38 setBackground(Color.white);
39 }
40
41
42
43
44
45 public void setRenderer(EMFRenderer renderer) {
46 this.renderer = renderer;
47 scale = 1;
48 setSize(getPreferredSize());
49 }
50
51
52
53
54 public Dimension getPreferredSize() {
55 if (renderer == null) {
56 return new Dimension(0, 0);
57 }
58
59 Dimension bounds = renderer.getSize();
60 return new Dimension(
61 (int)Math.ceil(bounds.width * scale),
62 (int)Math.ceil(bounds.height * scale));
63 }
64
65
66
67
68
69 public void paintComponent(Graphics g) {
70 Graphics2D g2 = ((Graphics2D)g);
71 super.paintComponent(g2);
72
73 if (renderer == null) {
74 return;
75 }
76
77
78 AffineTransform at = g2.getTransform();
79
80
81 g2.scale(scale, scale);
82
83
84 renderer.paint(g2);
85
86
87 g2.setTransform(at);
88 }
89
90
91
92
93 public void zoomIn() {
94 scale = scale * SCALE_FACTOR;
95 setSize(getPreferredSize());
96 repaint();
97 }
98
99
100
101
102 public void zoomOut() {
103 scale = scale / SCALE_FACTOR;
104 setSize(getPreferredSize());
105 repaint();
106 }
107 }