1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.figure;
19
20 import org.eclipse.draw2d.Figure;
21 import org.eclipse.draw2d.Graphics;
22 import org.eclipse.draw2d.geometry.Dimension;
23 import org.eclipse.swt.graphics.Image;
24 import org.eclipse.swt.graphics.Rectangle;
25
26 import pl.edu.agh.cast.CoreServiceLocator;
27 import pl.edu.agh.cast.resource.IVisualResource;
28 import pl.edu.agh.cast.resource.ImageSize;
29 import pl.edu.agh.cast.resource.ResourceRegistry;
30
31
32
33
34
35
36
37
38 public class ImageFigure extends Figure {
39
40 private Image image;
41
42
43
44
45 @SuppressWarnings("unused")
46 private ImageFigure() {
47 }
48
49
50
51
52
53
54
55
56
57
58
59 public ImageFigure(String resourceId, ImageSize size) {
60 this(resourceId, size, null);
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74
75 @SuppressWarnings("nls")
76 public ImageFigure(String resourceId, ImageSize size, String defaultResourceId) {
77 IVisualResource resource = null;
78 if (resourceId != null) {
79 resource = CoreServiceLocator.getResourceRegistry().getResource(resourceId);
80 }
81
82 if (resource == null) {
83 if (defaultResourceId != null) {
84 resource = CoreServiceLocator.getResourceRegistry().getResource(defaultResourceId);
85 if (resource == null) {
86 throw new IllegalArgumentException(String.format("Cannot find visual resource with default %s id",
87 defaultResourceId));
88 }
89 } else {
90 throw new IllegalArgumentException(String.format("Cannot find visual resource with %s id", resourceId));
91 }
92 }
93
94 image = resource.getImage(size);
95 if (image == null) {
96 throw new IllegalArgumentException(String.format("Resource %s does not contain image with size %s",
97 resourceId, size.toString()));
98 }
99 }
100
101
102
103
104
105
106 @Override
107 protected void paintFigure(Graphics gc) {
108 gc.drawImage(image, getBounds().getTopLeft());
109
110 }
111
112
113
114
115
116
117 @Override
118 public void setBounds(org.eclipse.draw2d.geometry.Rectangle bounds) {
119 super.setBounds(bounds);
120 }
121
122
123
124
125
126
127 @Override
128 public Dimension getMinimumSize(int arg0, int arg1) {
129 Rectangle bounds = image.getBounds();
130 return new Dimension(bounds.width, bounds.height);
131 }
132
133
134
135
136
137
138 @Override
139 public Dimension getPreferredSize(int x, int y) {
140 return getMinimumSize(x, y);
141 }
142
143 }