1 26 27 package org.nightlabs.editor2d.viewer; 28 29 import java.awt.Rectangle ; 30 import java.util.ArrayList ; 31 import java.util.Collection ; 32 import java.util.Iterator ; 33 34 import org.apache.log4j.Logger; 35 36 public class ZoomSupport 37 implements IZoomSupport 38 { 39 public static final Logger LOGGER = Logger.getLogger(ZoomSupport.class); 40 41 public ZoomSupport(IViewport viewport) { 42 super(); 43 this.viewport = viewport; 44 } 45 46 protected IViewport viewport = null; 47 public IViewport getViewport() { 48 return viewport; 49 } 50 public void setViewport(IViewport viewport) { 51 this.viewport = viewport; 52 } 53 54 protected Collection zoomListener; 55 public Collection getZoomListener() 56 { 57 if (zoomListener == null) 58 zoomListener = new ArrayList (); 59 60 return zoomListener; 61 } 62 63 67 public void addZoomListener(IZoomListener zoomListener) { 68 getZoomListener().add(zoomListener); 69 } 70 71 75 public void removeZoomListener(IZoomListener zoomListener) { 76 getZoomListener().remove(zoomListener); 77 } 78 79 protected void fireZoomChanged() 80 { 81 for (Iterator it = getZoomListener().iterator(); it.hasNext(); ) { 82 IZoomListener listener = (IZoomListener) it.next(); 83 listener.zoomChanged(zoom); 84 } 85 } 86 87 protected double zoom = 1.0; 88 89 93 public double getZoom() { 94 return zoom; 95 } 96 97 101 public void setZoom(double zoomFactor) 102 { 103 double oldZoom = zoom; 104 zoom = zoomFactor; 105 106 if (zoomFactor > getMaxZoom()) 107 zoom = getMaxZoom(); 108 109 if (zoomFactor < getMinZoom()) 110 zoom = getMinZoom(); 111 112 if (oldZoom != zoom) 113 fireZoomChanged(); 114 } 115 116 protected double maxZoom = 10.0d; 117 118 122 public double getMaxZoom() { 123 return maxZoom; 124 } 125 126 protected double minZoom = 0.01d; 127 128 132 public double getMinZoom() { 133 return 0; 134 } 135 136 protected double zoomStep = 0.25d; 137 138 142 public double getZoomStep() { 143 return zoomStep; 144 } 145 146 150 public void setMaxZoom(double maxZoom) { 151 this.maxZoom = maxZoom; 152 } 153 154 158 public void setMinZoom(double minZoom) { 159 this.minZoom = minZoom; 160 } 161 162 166 public void setZoomStep(double zoomStep) { 167 this.zoomStep = zoomStep; 168 } 169 170 174 public boolean canZoomIn() 175 { 176 return (zoom + zoomStep < maxZoom) ? true : false; 177 } 178 179 183 public boolean canZoomOut() 184 { 185 return (zoom - zoomStep > minZoom) ? true : false; 186 } 187 188 192 public void zoomIn() 193 { 194 if (canZoomIn()) { 195 setZoom(zoom + zoomStep); 196 } 197 } 198 199 203 public void zoomOut() 204 { 205 if (canZoomOut()) { 206 setZoom(zoom - zoomStep); 207 } 208 } 209 210 214 public String getZoomAsString() 215 { 216 double z = Math.rint(zoom * 100); 217 return ""+z+" %"; 218 } 219 220 228 public void zoomTo(Rectangle r) 229 { 230 Rectangle absoluteRect = new Rectangle (r); 231 Rectangle absoluteView = getViewport().getViewBounds(); 232 233 double oldZoom = getZoom(); 234 double zoomX = oldZoom; 235 double zoomY = oldZoom; 236 237 if (absoluteView.width != 0 && absoluteRect.width != 0) 238 zoomX = (double)absoluteView.width / (double)absoluteRect.width; 239 if (absoluteView.height != 0 && absoluteRect.height != 0) 240 zoomY = (double)absoluteView.height / (double)absoluteRect.height; 241 242 double newZoom = Math.min(zoomX, zoomY); 243 setZoom(newZoom); 244 double zoom = getZoom(); 246 247 double newX = (double) ((absoluteRect.x) * zoom); 248 double newY = (double) ((absoluteRect.y) * zoom); 249 250 277 getViewport().setViewLocation((int)newX, (int)newY); 278 279 LOGGER.debug("absoluteRect = "+absoluteRect); 280 LOGGER.debug("absoluteView = "+absoluteView); 281 LOGGER.debug("newZoom = "+newZoom); 282 LOGGER.debug("newX = "+newX); 283 LOGGER.debug("newY = "+newY); 284 LOGGER.debug(""); 285 } 286 } 287 | Popular Tags |