1:
31:
32: package ;
33:
34: import ;
35: import ;
36: import ;
37: import ;
38: import ;
39: import ;
40: import ;
41: import ;
42:
43: import ;
44: import ;
45:
46:
51: public class PageBackgroundDrawable implements ExtendedDrawable
52: {
53: private PageDrawable backend;
54: private boolean borderPainted;
55: private float shadowSize;
56: private double zoom;
57:
58: public PageBackgroundDrawable()
59: {
60: this.shadowSize = 6;
61: this.borderPainted = false;
62: this.zoom = 1;
63: }
64:
65: public PageDrawable getBackend()
66: {
67: return backend;
68: }
69:
70: public void setBackend(final PageDrawable backend)
71: {
72: this.backend = backend;
73: }
74:
75: public boolean isBorderPainted()
76: {
77: return borderPainted;
78: }
79:
80: public void setBorderPainted(final boolean borderPainted)
81: {
82: this.borderPainted = borderPainted;
83: }
84:
85: public double getZoom()
86: {
87: return zoom;
88: }
89:
90: public void setZoom(final double zoom)
91: {
92: this.zoom = zoom;
93: }
94:
95: public Dimension getPreferredSize()
96: {
97: if (backend == null)
98: {
99: return new Dimension(0, 0);
100: }
101: final Dimension preferredSize = backend.getPreferredSize();
102:
103: return new Dimension
104: ((int) ((preferredSize.width + shadowSize) * zoom),
105: (int) ((preferredSize.height + shadowSize) * zoom));
106: }
107:
108: public boolean isPreserveAspectRatio()
109: {
110: return true;
111: }
112:
113: public float getShadowSize()
114: {
115: return shadowSize;
116: }
117:
118: public void setShadowSize(final float shadowSize)
119: {
120: this.shadowSize = shadowSize;
121: }
122:
123:
129: public void draw(final Graphics2D g2, final Rectangle2D area)
130: {
131: if (backend == null)
132: {
133: return;
134: }
135:
136: final PageFormat pageFormat = backend.getPageFormat();
137: final float outerW = (float) pageFormat.getWidth();
138: final float outerH = (float) pageFormat.getHeight();
139:
140: final float innerX = (float) pageFormat.getImageableX();
141: final float innerY = (float) pageFormat.getImageableY();
142: final float innerW = (float) pageFormat.getImageableWidth();
143: final float innerH = (float) pageFormat.getImageableHeight();
144:
145:
146:
147:
148: g2.transform(AffineTransform.getScaleInstance(getZoom(), getZoom()));
149: g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
150:
151:
152: final Rectangle2D pageArea =
153: new Rectangle2D.Float(0, 0, outerW, outerH);
154:
155: g2.setPaint(Color.white);
156: g2.fill(pageArea);
157:
158:
159: final Graphics2D g22 = (Graphics2D) g2.create();
160: backend.draw(g22, new Rectangle2D.Double
161: (0, 0, pageFormat.getImageableWidth(), pageFormat.getImageableHeight()));
162: g22.dispose();
163:
164:
168: final Rectangle2D printingArea = new Rectangle2D.Float(innerX, innerY, innerW, innerH);
169:
170:
171: final Rectangle2D southborder = new Rectangle2D.Float
172: (getShadowSize(), outerH,
173: outerW, getShadowSize());
174:
175: g2.setPaint(UIManager.getColor("controlShadow"));
176:
177: g2.fill(southborder);
178:
179: final Rectangle2D eastborder = new Rectangle2D.Float
180: (outerW, getShadowSize(),getShadowSize(), outerH);
181:
182: g2.fill(eastborder);
183: final Rectangle2D transPageArea = new Rectangle2D.Float(0, 0, outerW, outerH);
184:
185: g2.setPaint(Color.black);
186: g2.draw(transPageArea);
187: if (isBorderPainted())
188: {
189: g2.setPaint(Color.gray);
190: g2.draw(printingArea);
191: }
192:
193: }
194: }