[Checkins] SVN: z3c.reference/trunk/ zoom to look at point instead of center

Gerold Böhler gerold at reloc.org
Thu Nov 1 12:42:27 EDT 2007


Log message for revision 81361:
  zoom to look at point instead of center

Changed:
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
  U   z3c.reference/trunk/src/z3c/reference/browser/resources/imagetool.swf

-=-
Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as	2007-11-01 16:29:56 UTC (rev 81360)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as	2007-11-01 16:42:27 UTC (rev 81361)
@@ -66,10 +66,6 @@
         var animFader = new Alpha(fader_mc)
         animFader.addEventListener("onEnd", this);
         animFader.run(alpha, 100, Sine.easeInOut);
-        //if (!visible)
-        //    fader_mc.clear();
-            
-        //fader_mc._visible = visible;
     }
     
     function onEnd(eo)

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as	2007-11-01 16:29:56 UTC (rev 81360)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as	2007-11-01 16:42:27 UTC (rev 81361)
@@ -25,6 +25,7 @@
     private var mousepointer_mc:MovieClip;
     private var controller_mc:MovieClip;
     private var preloader_mc:MovieClip;
+    private var debug_mc:MovieClip;
     
     private var dragStartPoint:Point;
     private var isViewportDragging:Boolean = false;
@@ -42,12 +43,23 @@
     private var viewportMinSize:Point;
     private var viewportMaxSize:Point;
     
+    private var viewportImageRatio:Point;
+    private var imageStartSize:Point;
+    
+    private var currentImageCenterOffset:Point;
+    private var currentViewportCenterOffset:Point;
+    //private var centerOffset:Point;
+    
     private var imageAttitude:EditableImageAttitude;
     private var imageMinMaxDelta:Point;
+    private var viewportInitialMinSize:Point;
+    private var viewportInitialMaxSize:Point;
+    private var viewportMinMaxDelta:Point;
 
     private var animAlphaOut:Alpha;
     private var animAlphaIn:Alpha;
     
+    private var startPercent:Number = 0;
     private var currentPercent:Number = 0;
     private var currentPreset;
     
@@ -105,6 +117,8 @@
 	    animAlphaIn = new Alpha([editable_image_mc, controller_mc, viewport_mc, canvas_mc, _level0.dropdown_mc]);
 	    animAlphaIn.animationStyle(300, Sine.easeInOut);
 	    
+	    createEmptyMovieClip("debug_mc", getNextHighestDepth());
+	    
         Stage.addListener(this);
 	    Key.addListener(this);
 
@@ -192,7 +206,6 @@
         viewportStartPoint = new Point(viewport_mc._x, viewport_mc._y);
         dragCursorStart = new Point(_xmouse, _ymouse);
         dragImageStart = new Point(imageAttitude.x, imageAttitude.y);
-
         onEnterFrame = dragImage;
         
         dragImage();
@@ -210,6 +223,8 @@
             Mouse.show();
         //}
 
+        currentImageCenterOffset = new Point((imageAttitude.x + imageAttitude.w / 2) - (canvas_mc._x + canvas_mc._width / 2), (imageAttitude.y + imageAttitude.h / 2) - (canvas_mc._y + canvas_mc._height / 2));
+        currentViewportCenterOffset = new Point((viewport_mc._x + viewport_mc._width / 2) - (canvas_mc._x + canvas_mc._width / 2), (viewport_mc._y + viewport_mc._height / 2) - (canvas_mc._y + canvas_mc._height / 2));
         saveChanges();
     }
     
@@ -264,11 +279,14 @@
 	
     private function centerImage()
     {
-        var deltaX = viewport_mc._x - imageAttitude.x;
-        var deltaY = viewport_mc._y - imageAttitude.y;
+        //var deltaX = viewport_mc._x - imageAttitude.x;
+        //var deltaY = viewport_mc._y - imageAttitude.y;
         
         imageAttitude.x = canvas_mc._x + (canvas_mc._width - imageAttitude.w) / 2;
         imageAttitude.y = canvas_mc._y + (canvas_mc._height - imageAttitude.h) / 2;
+        
+        currentImageCenterOffset = new Point();
+        currentViewportCenterOffset = new Point();
 
         //viewport_mc._x = imageAttitude.x + deltaX;
         //viewport_mc._y = imageAttitude.y + deltaY;
@@ -597,6 +615,8 @@
         
         updateFader();
         saveChanges();
+
+        currentViewportCenterOffset = new Point((viewport_mc._x + viewport_mc._width / 2) - (canvas_mc._x + canvas_mc._width / 2), (viewport_mc._y + viewport_mc._height / 2) - (canvas_mc._y + canvas_mc._height / 2));
     }
     
     private function resetViewport()
@@ -608,7 +628,7 @@
         viewport_mc.setSize(viewport_reset.x, viewport_reset.y);
         viewport_mc._x = imageAttitude.x + (imageAttitude.w - viewport_mc._width) / 2;
         viewport_mc._y = imageAttitude.y + (imageAttitude.h - viewport_mc._height) / 2;
-        log("RESETTING: " + currentPreset.name + " " + viewport_mc._width + " " + viewport_mc._height)
+        //log("RESETTING: " + currentPreset.name + " " + viewport_mc._width + " " + viewport_mc._height)
     }
 
     // menu event listeners --------------------------------------------------------------
@@ -629,67 +649,61 @@
         imageAttitude.rotateRight();
     }
 
-    var viewportImageRatio;
-    var imageStartSize;
-    var imageStartCenter;
-    var imageStartPoint;
-    var viewportStartCenter;
-
+    //var viewportCenterDelta;
     function onSliderPress(ei:EventInfo)
     {
         var viewportDeltaX = viewport_mc._x - imageAttitude.x;
         var viewportDeltaY = viewport_mc._y - imageAttitude.y;
-        centerImage();
-        viewport_mc._x = imageAttitude.x + viewportDeltaX;
-        viewport_mc._y = imageAttitude.y + viewportDeltaY;
-
-        imageMinMaxDelta = new Point(imageAttitude.originalWidth - imageAttitude.initialWidth, imageAttitude.originalHeight - imageAttitude.initialHeight);
-
+        
+        startPercent = currentPercent;
+        
         viewportImageRatio = new Point(viewport_mc._width / imageAttitude.w, viewport_mc._height / imageAttitude.h);
-        imageStartPoint = new Point(imageAttitude.x, imageAttitude.y);
         imageStartSize = new Point(imageAttitude.w, imageAttitude.h);
-        viewportStartPoint = new Point(viewport_mc._x, viewport_mc._y);
+        var o = new Point(viewport_mc._x, viewport_mc._y);
+        editable_image_mc.globalToLocal(o);//new Point(viewport_mc._x - imageAttitude.x, viewport_mc._y - imageAttitude.y);
+        viewportStartPoint = o;
         viewportStartSize = new Point(viewport_mc._width, viewport_mc._height);
 
-        // these are in image coordinates
-        imageStartCenter = new Point(imageAttitude.w / 2, imageAttitude.h / 2);
-        viewportStartCenter = new Point(viewport_mc._x - imageAttitude.x + viewport_mc._width / 2, viewport_mc._y - imageAttitude.y + viewport_mc._height / 2);
+        // this is done here so we get the correct values in case the image is rotated
+        imageMinMaxDelta = new Point(imageAttitude.originalWidth - imageAttitude.initialWidth, imageAttitude.originalHeight - imageAttitude.initialHeight);
 
-        mapViewportToImage();
+        viewportInitialMaxSize = new Point(viewport_mc._width + imageMinMaxDelta.x * viewportImageRatio.x * (1 - currentPercent), viewport_mc._height + imageMinMaxDelta.y * viewportImageRatio.y * (1 - currentPercent));
+        viewportInitialMinSize = new Point(viewport_mc._width - imageMinMaxDelta.x * viewportImageRatio.x * (0 + currentPercent), viewport_mc._height - imageMinMaxDelta.y * viewportImageRatio.y * (0 + currentPercent));
+        viewportMinMaxDelta = new Point(viewportInitialMaxSize.x - viewportInitialMinSize.x, viewportInitialMaxSize.y - viewportInitialMinSize.y);
     }
     
     function onSliderChange(ei:EventInfo)
     {
         currentPercent = ei.getInfo("percent");
         
-        var imageDeltaX = imageMinMaxDelta.x * currentPercent;
-        var imageDeltaY = imageMinMaxDelta.y * currentPercent;
+        var nextPercent = !startPercent ? 0 : currentPercent / startPercent;
+
+        var imageW = imageAttitude.initialWidth + imageMinMaxDelta.x * currentPercent;
+        var imageH = imageAttitude.initialHeight + imageMinMaxDelta.y * currentPercent;
+        imageAttitude.w = imageW; imageAttitude.h = imageH;
         
-        imageAttitude.w = imageAttitude.initialWidth + imageDeltaX;
-        imageAttitude.h = imageAttitude.initialHeight + imageDeltaY;
+        var imageCenterOffset = new Point(nextPercent * currentImageCenterOffset.x, nextPercent * currentImageCenterOffset.y);
+        var imageX = canvas_mc._x + canvas_mc._width / 2 - imageAttitude.w / 2 + imageCenterOffset.x;
+        var imageY = canvas_mc._y + canvas_mc._height / 2 - imageAttitude.h / 2 + imageCenterOffset.y;
+        imageAttitude.x = imageX; imageAttitude.y = imageY;
         
-        centerImage();
+        var viewportW = viewportInitialMinSize.x + viewportMinMaxDelta.x * currentPercent;
+        var viewportH = viewportInitialMinSize.y + viewportMinMaxDelta.y * currentPercent;
+        viewport_mc.setSize(viewportW, viewportH);
 
-        mapViewportToImage();
-        
-        editable_image_mc.setFaderVisible(currentPercent == 0);
-        if (currentPercent == 0)
-            updateFader();
+        var o = viewportStartPoint.clone();
+        editable_image_mc.localToGlobal(o)
+        viewport_mc._x = o.x;
+        viewport_mc._y = o.y;
 
-        // TODO - remove this and scale viewport when zooming
-/*
-        viewport_mc._visible = percent == 0;
-        editable_image_mc.setFaderVisible(percent == 0);
-        if (percent == 0)
-        {
-            resetViewport();
-            updateFader();
-            saveChanges();
-        }
-*/
-        // !TODO
+        updateFader();
     }
     
+    function onSliderRelease(ei:EventInfo)
+    {
+        //log(currentImageCenterOffset.x + " " + currentImageCenterOffset.y)
+    }
+    
     function onViewportRatioChange(ei:EventInfo)
     {
         currentPreset = ei.getInfo("preset");
@@ -800,6 +814,8 @@
         updateFader();
         isViewportDragging = false;
         saveChanges();
+
+        currentViewportCenterOffset = new Point((viewport_mc._x + viewport_mc._width / 2) - (canvas_mc._x + canvas_mc._width / 2), (viewport_mc._y + viewport_mc._height / 2) - (canvas_mc._y + canvas_mc._height / 2));
     }
 
     function onDragElementPress(ei:EventInfo)
@@ -921,67 +937,49 @@
     
     private function updateFader()
     {
-        var x = 0;
-        var y = 0;
-        var w = 0;
-        var h = 0;
+        var xy1 = {x: viewport_mc._x, y: viewport_mc._y};
+        var xy2 = {x: viewport_mc._x + viewport_mc._width, y: viewport_mc._y + viewport_mc._height};
+        editable_image_mc.globalToLocal(xy1);
+        editable_image_mc.globalToLocal(xy2);
+        var x = xy1.x;
+        var y = xy1.y;
+        var w = xy2.x - xy1.x;
+        var h = xy2.y - xy1.y;
         
         switch(imageAttitude.r)
         {
             case 0:
-                x = viewport_mc._x - imageAttitude.x;
-                y = viewport_mc._y - imageAttitude.y;
-                w = Math.min(imageAttitude.w, Math.round(viewport_mc._width))
-                h = Math.min(imageAttitude.h, Math.round(viewport_mc._height));
+                w = xy2.x - xy1.x;
+                h = xy2.y - xy1.y;
+                x = xy1.x;
+                y = xy1.y;
                 break;
                 
             case 90:
-                x = imageAttitude.y + imageAttitude.h - (viewport_mc._y + viewport_mc._height);
-                y = viewport_mc._x - imageAttitude.x;
-                w = Math.min(imageAttitude.h, Math.round(viewport_mc._height))
-                h = Math.min(imageAttitude.w, Math.round(viewport_mc._width));
+                w = xy1.x - xy2.x;
+                h = xy2.y - xy1.y;
+                x = xy1.x - w;
+                y = xy1.y;
                 break;
-
+                
             case 180:
-                x = imageAttitude.w - viewport_mc._x + imageAttitude.x - viewport_mc._width;
-                y = imageAttitude.h - viewport_mc._y + imageAttitude.y - viewport_mc._height;
-                w = Math.min(imageAttitude.w, Math.round(viewport_mc._width))
-                h = Math.min(imageAttitude.h, Math.round(viewport_mc._height));
+                w = xy1.x - xy2.x;
+                h = xy1.y - xy2.y;
+                x = xy1.x - w;
+                y = xy1.y - h;
                 break;
-
+            
             case 270:
-                x = viewport_mc._y - imageAttitude.y;
-                y = imageAttitude.w - viewport_mc._x + imageAttitude.x - viewport_mc._width;
-                w = Math.min(imageAttitude.h, Math.round(viewport_mc._height))
-                h = Math.min(imageAttitude.w, Math.round(viewport_mc._width));
+                w = xy2.x - xy1.x;
+                h = xy1.y - xy2.y;
+                x = xy1.x;
+                y = xy1.y - h;
                 break;
         }
 
-        x = Math.max(0, Math.round(x));
-        y = Math.max(0, Math.round(y));
-        
         editable_image_mc.setVisibleArea(new Rectangle(x, y, w, h));
     }
     
-    private function mapViewportToImage()
-    {
-        var imageDW = imageAttitude.w - imageStartSize.x;
-        var imageDH = imageAttitude.h - imageStartSize.y;
-        
-        var viewportW = viewportStartSize.x + imageDW * viewportImageRatio.x;
-        var viewportH = viewportStartSize.y + imageDH * viewportImageRatio.y;
-        viewport_mc.setSize(viewportW, viewportH);
-        
-        var viewportDW = (viewportStartSize.x - viewportW) / 2;
-        var viewportDH = (viewportStartSize.y - viewportH) / 2;
-        
-        var facX = ((viewportStartCenter.x - imageStartCenter.x) / imageStartCenter.x);
-        viewport_mc._x = viewportStartPoint.x + viewportDW + facX * imageDW / 2;
-
-        var facY = ((viewportStartCenter.y - imageStartCenter.y) / imageStartCenter.y);
-        viewport_mc._y = viewportStartPoint.y + viewportDH + facY * imageDH / 2;
-    }
-    
     // helpers -------------------------------------------------------------------------
     
     public function isWithinCanvas(x:Number, y:Number, w:Number, h:Number)

Modified: z3c.reference/trunk/src/z3c/reference/browser/resources/imagetool.swf
===================================================================
(Binary files differ)



More information about the Checkins mailing list