Changeset 594
- Timestamp:
- 07/07/08 15:34:21 (5 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/tom-tweenlite/lib/com/modestmaps/core/TileGrid.as
r586 r594 910 910 return _panX; 911 911 } 912 912 913 public function set panX(n:Number):void 913 914 { 914 var origin:Point = startPan || new Point(_panX,_panY); 915 _panX = n; 916 calculateMatrix(); 917 dispatchEvent(new MapEvent(MapEvent.PANNED, new Point(-(origin.x-_panX)*_scale, -(origin.y-_panY)*_scale))); 918 } 915 if (n != panX) 916 { 917 var origin:Point = startPan || new Point(_panX, _panY); 918 _panX = n; 919 calculateMatrix(); 920 dispatchEvent(new MapEvent(MapEvent.PANNED, new Point(-(origin.x - _panX) * _scale, -(origin.y - _panY) * _scale))); 921 } 922 } 923 919 924 public function get panY():Number 920 925 { … … 923 928 public function set panY(n:Number):void 924 929 { 925 var origin:Point = startPan || new Point(_panX,_panY); 926 _panY = n; 927 calculateMatrix(); 928 dispatchEvent(new MapEvent(MapEvent.PANNED, new Point(-(origin.x-_panX)*_scale, -(origin.y-_panY)*_scale))); 930 if (n != panY) 931 { 932 var origin:Point = startPan || new Point(_panX, _panY); 933 _panY = n; 934 calculateMatrix(); 935 dispatchEvent(new MapEvent(MapEvent.PANNED, new Point(-(origin.x - _panX) * _scale, -(origin.y - _panY) * _scale))); 936 } 929 937 } 930 938 … … 936 944 public function set zoomLevel(n:Number):void 937 945 { 938 _scale = Math.pow(2, n); 939 calculateMatrix(); 940 var zoomEvent:MapEvent = new MapEvent(MapEvent.ZOOMED_BY); 941 zoomEvent.zoomDelta = zoomLevel-startZoom; 942 zoomEvent.zoomLevel = zoomLevel; 943 dispatchEvent(zoomEvent); 946 if (zoomLevel != n) 947 { 948 _scale = Math.pow(2, n); 949 calculateMatrix(); 950 var zoomEvent:MapEvent = new MapEvent(MapEvent.ZOOMED_BY); 951 zoomEvent.zoomDelta = zoomLevel-startZoom; 952 zoomEvent.zoomLevel = zoomLevel; 953 dispatchEvent(zoomEvent); 954 } 944 955 } 945 956 … … 948 959 return _scale; 949 960 } 961 950 962 public function set scale(n:Number):void 951 963 { 952 var old:Number = zoomLevel; 953 _scale = n; 954 calculateMatrix(); 955 prepareForZooming(); 956 var zoomEvent:MapEvent = new MapEvent(MapEvent.ZOOMED_BY); 957 zoomEvent.zoomDelta = zoomLevel-old; 958 zoomEvent.zoomLevel = zoomLevel; 959 dispatchEvent(zoomEvent); 960 doneZooming(); 964 if (scale != n) 965 { 966 var old:Number = zoomLevel; 967 _scale = n; 968 calculateMatrix(); 969 prepareForZooming(); 970 var zoomEvent:MapEvent = new MapEvent(MapEvent.ZOOMED_BY); 971 zoomEvent.zoomDelta = zoomLevel-old; 972 zoomEvent.zoomLevel = zoomLevel; 973 dispatchEvent(zoomEvent); 974 doneZooming(); 975 } 961 976 } 962 977 963 978 public function resizeTo(p:Point):void 964 979 { 965 mapWidth = p.x; 966 mapHeight = p.y; 967 scrollRect = new Rectangle(0,0,mapWidth,mapHeight); 968 calculateMatrix(); 969 // force this but only for onResize 970 onRender(); 980 if (mapWidth != p.x || mapHeight != p.y) 981 { 982 mapWidth = p.x; 983 mapHeight = p.y; 984 scrollRect = new Rectangle(0, 0, mapWidth, mapHeight); 985 calculateMatrix(); 986 // force this but only for onResize 987 onRender(); 988 } 971 989 } 972 990 branches/tom-tweenlite/lib/com/modestmaps/TweenMap.as
r588 r594 131 131 } 132 132 133 public function panAndZoomOut(location:Location, targetPoint:Point=null):void 134 { 135 // remember where we are so we can zoom *from* here 136 var startX:Number = grid.panX; 137 var startY:Number = grid.panY; 138 var startZoom:Number = grid.zoomLevel; 139 140 // zoom first so that the calculation for location is correct 141 grid.prepareForZooming(); 142 grid.zoomLevel = Math.min(grid.maxZoom, Math.ceil(grid.zoomLevel - 1.0)); 143 144 // figure out the pan 145 var p:Point = locationPoint(location,this); 146 if (!targetPoint) targetPoint = new Point(mapWidth/2, mapHeight/2); 147 var pan:Point = targetPoint.subtract(p); 148 149 // now apply the pan 150 grid.prepareForPanning(); 151 grid.panX += (pan.x / grid.scale); 152 grid.panY += (pan.y / grid.scale); 153 154 // now reset and tween here instead 155 TweenLite.from(grid, panAndZoomDuration, { panY: startY, panX: startX, onComplete: grid.donePanning, ease: panEase }); 156 TweenLite.from(grid, panAndZoomDuration, { zoomLevel: startZoom, onComplete: grid.doneZooming, ease: zoomEase, overwrite: false }); 157 } 158 159 public function zoomInAbout(targetPoint:Point, duration:Number=-1):void 160 { 161 zoomByAbout(1, targetPoint, duration); 162 } 163 164 public function zoomOutAbout(targetPoint:Point, duration:Number=-1):void 165 { 166 zoomByAbout(-1, targetPoint, duration); 167 } 168 169 public function zoomByAbout(zoomDelta:int, targetPoint:Point, duration:Number=-1):void 170 { 171 if (duration < 0) duration = panAndZoomDuration; 172 173 var location:Location = pointLocation(targetPoint); 174 175 var startX:Number = grid.panX; 176 var startY:Number = grid.panY; 177 var startZoom:Number = grid.zoomLevel; 178 179 var zoomed:Boolean = false; 180 var targetZoom:int = Math.max(grid.minZoom, Math.min(grid.maxZoom, grid.zoomLevel + zoomDelta)); 181 if (grid.zoomLevel != targetZoom) 182 { 183 grid.zoomLevel = targetZoom; 184 zoomed = true; 185 } 186 187 // now find the current position of the requested location: 188 var p:Point = locationPoint(location); 189 190 // now find the pan offset from the target point to the current center 191 var pan:Point = targetPoint.subtract(p); 192 193 // and move! 194 if (zoomed) grid.prepareForZooming(); 195 grid.prepareForPanning(); 196 197 grid.panX += (pan.x / grid.scale); 198 grid.panY += (pan.y / grid.scale); 199 200 if (duration > 0) 201 { 202 if (zoomed) 203 TweenLite.from(grid, duration, {zoomLevel: startZoom, 204 onComplete: grid.doneZooming, 205 ease: zoomEase}); 206 TweenLite.from(grid, duration, {panX: startX, 207 panY: startY, 208 onComplete: grid.donePanning, 209 ease: panEase, 210 overwrite: false}); 211 } 212 else 213 { 214 if (zoomed) grid.doneZooming(); 215 grid.donePanning(); 216 } 217 } 218 133 219 /** EXPERIMENTAL! */ 134 public function tweenExtent(extent:MapExtent, duration:Number=1.0):void 135 { 220 public function tweenExtent(extent:MapExtent, duration:Number=-1):void 221 { 222 if (duration < 0) duration = panAndZoomDuration; 136 223 var position:MapPosition = extentPosition(extent); 137 224 138 225 var sc:Number = Math.pow(2, position.coord.zoom); 139 226 140 // figure out where in the world we are 227 // figure out where in the world we are 141 228 var tx:Number = -TileGrid.TILE_WIDTH * position.coord.column / sc; 142 229 var ty:Number = -TileGrid.TILE_HEIGHT * position.coord.row / sc; … … 149 236 grid.prepareForPanning(); 150 237 151 TweenLite.to(grid, 1.0, { zoomLevel: position.coord.zoom, ease: linearEaseOut }); 152 TweenLite.to(grid, 1.0, { panY: ty, panX: tx, ease: exponentialEaseOut, overwrite: false, onComplete: onDoneTweeningExtent }); 238 TweenLite.to(grid, duration, {zoomLevel: position.coord.zoom, 239 ease: linearEaseOut}); 240 TweenLite.to(grid, duration, {panY: ty, 241 panX: tx, 242 ease: exponentialEaseOut, 243 overwrite: false, 244 onComplete: onDoneTweeningExtent}); 153 245 } 154 246 … … 172 264 override public function panTo(location:Location, forceAnimate:Boolean=false):void 173 265 { 174 var p:Point = locationPoint(location,grid); 175 if (forceAnimate || (p.x >= 0 && p.x <= mapWidth && p.y >= 0 && p.y <= mapHeight)) { 176 var centerPoint:Point = new Point(mapWidth/2, mapHeight/2); 266 var p:Point = locationPoint(location, grid); 267 268 if (forceAnimate || (p.x >= 0 && p.x <= mapWidth && p.y >= 0 && p.y <= mapHeight)) 269 { 270 var centerPoint:Point = new Point(mapWidth / 2, mapHeight / 2); 177 271 var pan:Point = centerPoint.subtract(p); 178 272 pan.x /= grid.scale; 179 273 pan.y /= grid.scale; 274 180 275 // grid.prepareForPanning(); 181 TweenLite.to(grid, panDuration, { panY: grid.panY+pan.y, panX: grid.panX+pan.x, ease: panEase, onStart: grid.prepareForPanning, onComplete: grid.donePanning }); 182 } 183 else { 276 TweenLite.to(grid, panDuration, {panY: grid.panY + pan.y, 277 panX: grid.panX + pan.x, 278 ease: panEase, 279 onStart: grid.prepareForPanning, 280 onComplete: grid.donePanning}); 281 } 282 else 283 { 184 284 setCenter(location); 185 285 } … … 192 292 * @see com.modestmaps.Map#panTo 193 293 */ 194 public function tweenTo(location:Location, duration:Number, easing:Function ):void294 public function tweenTo(location:Location, duration:Number, easing:Function=null):void 195 295 { 196 296 var pan:Point = new Point(mapWidth/2, mapHeight/2).subtract(locationPoint(location,grid)); … … 198 298 pan.y /= grid.scale; 199 299 // grid.prepareForPanning(); 200 TweenLite.to(grid, duration, { panY: grid.panY+pan.y, panX: grid.panX+pan.x, ease: easing, onStart: grid.prepareForPanning, onComplete: grid.donePanning }); 300 TweenLite.to(grid, duration, {panY: grid.panY + pan.y, 301 panX: grid.panX + pan.x, 302 ease: easing, 303 onStart: grid.prepareForPanning, 304 onComplete: grid.donePanning}); 201 305 } 202 306 … … 205 309 override protected function zoomBy(dir:int):void 206 310 { 207 if (!grid.panning) { 208 var target:Number = dir < 0 ? Math.floor(grid.zoomLevel+dir) : Math.ceil(grid.zoomLevel+dir); 209 target = Math.min(Math.max(grid.minZoom, target), grid.maxZoom); 210 // grid.prepareForZooming(); 211 TweenLite.to(grid, zoomDuration, { zoomLevel: target, onStart: grid.prepareForZooming, onComplete: grid.doneZooming, ease: zoomEase }); 311 if (!grid.panning) 312 { 313 var target:Number = (dir < 0) ? Math.floor(grid.zoomLevel + dir) : Math.ceil(grid.zoomLevel + dir); 314 target = Math.max(grid.minZoom, Math.min(grid.maxZoom, target)); 315 316 TweenLite.to(grid, zoomDuration, {zoomLevel: target, 317 onStart: grid.prepareForZooming, 318 onComplete: grid.doneZooming, 319 ease: zoomEase }); 212 320 } 213 321 }
