[Checkins] SVN: z3c.reference/trunk/ added viewport zooming, changed save/load behaviour for default parameters, moved parameter initialization to helper class

Gerold Böhler gerold at reloc.org
Mon Sep 24 18:20:03 EDT 2007


Log message for revision 79931:
  added viewport zooming, changed save/load behaviour for default parameters, moved parameter initialization to helper class

Changed:
  U   z3c.reference/trunk/flash/fla/imagetool.as
  U   z3c.reference/trunk/flash/fla/imagetool.fla
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
  A   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/FlashvarSetup.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/MovieclipAttitude.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Viewport.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
  U   z3c.reference/trunk/src/z3c/reference/browser/resources/imagetool.swf

-=-
Modified: z3c.reference/trunk/flash/fla/imagetool.as
===================================================================
--- z3c.reference/trunk/flash/fla/imagetool.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/fla/imagetool.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -29,12 +29,13 @@
     if (!_level0.url) _level0.url="toothbrush.jpg";
     
     //default values
-    if (_level0.crop_x == undefined) _level0.crop_x = 1440;
+    if (_level0.crop_x == undefined) _level0.crop_x = 1240;
     if (_level0.crop_y == undefined) _level0.crop_y = 880;
     if (_level0.crop_w == undefined) _level0.crop_w = 400;
     if (_level0.crop_h == undefined) _level0.crop_h = 400;
     if (_level0.rotation == undefined) _level0.rotation = 0;
-    if (_level0.presets == undefined) _level0.presets = '[{"name": "Freehand"}, {"name": "Ratio", "ratio": "4:3"}]';//, {"name": "Output", "output_w": 123, "output_h": 321}, {"name": "Min", "min_w": 222, "min_h": 111}, {"name": "Max", "max_w": 555, "max_h": 444}, {"name": "MinMax", "output_w": 987, "output_h": 654, "max_w": 543, "max_h": 432, "min_w": 432, "min_h": 321}]';
+    if (_level0.presets == undefined) _level0.presets = "[{'ratio': '4:2', 'name': 'default', 'size': '150x100'}]";//, {"name": "Output", "output_w": 123, "output_h": 321}, {"name": "Min", "min_w": 222, "min_h": 111}, {"name": "Max", "max_w": 555, "max_h": 444}, {"name": "MinMax", "output_w": 987, "output_h": 654, "max_w": 543, "max_h": 432, "min_w": 432, "min_h": 321}]';
+//crop_x=0&crop_y=0&crop_w=-1&crop_h=-1&rotation=0&presets=[{'ratio': '3:2', 'name': 'default', 'size': '450x300'}]
 }
 // Debug Block End
 
@@ -50,4 +51,5 @@
 attachMovie("imagetool_mc", "imagetool_mc", getNextHighestDepth())
 
 // bring dropdown to front
-dropdown_mc.swapDepths(imagetool_mc);
\ No newline at end of file
+dropdown_mc.swapDepths(imagetool_mc);
+_level0.xx.swapDepths(imagetool_mc);
\ No newline at end of file

Modified: z3c.reference/trunk/flash/fla/imagetool.fla
===================================================================
(Binary files differ)

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -62,7 +62,7 @@
 		dropdown_mc.setFocus = function() {}
 	}
 	
-	public function init()
+	public function init(selectedPreset)
 	{
 	    var presets = FlashvarManager.get("presets");
 	    if (!presets)
@@ -88,22 +88,17 @@
 		dropdown_mc.rowCount = 10;
         dropdown_mc.addEventListener("change", this);
         
-        var selectedItem = presets[0];
         for (var i = 0; i < presets.length; i++)
         {
-            var item = presets[i];
-            dropdown_mc.addItem({label: item.name, data: item});
-            if (item.selected)
-            {
+            var preset = presets[i];
+            dropdown_mc.addItem({label: preset.name, data: preset});
+            if (preset == selectedPreset)
                 dropdown_mc.selectedIndex = i;
-                selectedItem = item;
-            }
         }
         
         dropdown_mc._visible = presets.length > 1;
 
-        log("SELECTED: " + selectedItem.name)
-        fireRatioChange(selectedItem);
+        fireRatioChange(selectedPreset);
 	}
 	
 	// event listeners ----------------------------------------------------------------

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/EditableImage.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -10,6 +10,9 @@
 import flash.display.BitmapData;
 import flash.geom.*;
 
+import com.robertpenner.easing.*;
+import de.alex_uhlmann.animationpackage.animation.Alpha;
+
 import flash.display.*;
 import flash.filters.*;
 import flash.events.*;
@@ -24,6 +27,8 @@
     private var image_mc:MovieClip;
     private var fader_mc:MovieClip;
     
+    private var isFaderVisible:Boolean = true;
+    
     private var mcLoader:MovieClipLoader;
     private var bitmapData:BitmapData;
     
@@ -56,11 +61,27 @@
     
     public function setFaderVisible(visible:Boolean)
     {
-        fader_mc._visible = visible;
+        isFaderVisible = visible;
+        var alpha = isFaderVisible ? 100 : 0;
+        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)
+    {
+        eo.target.removeEventListener("onEnd", this);
+    }
+    
     public function setVisibleArea(area:Rectangle)
     {
+        if (!isFaderVisible)
+            return;
+            
         fader_mc.clear();
 
         fader_mc.beginFill(0x000000, 50);

Added: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/FlashvarSetup.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/FlashvarSetup.as	                        (rev 0)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/FlashvarSetup.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -0,0 +1,244 @@
+/*
+ *  FlashvarSetup.as
+ *
+ *  Manages the different default settings possible
+ *  Also creates a viewport_reset flashvar that contains the reset dimensions
+ *
+ *  @author <gerold.boehler at lovelysystems.com>
+ *
+ */
+
+import z3c.reference.imagetool.core.*;
+import z3c.reference.imagetool.baseskin.*;
+
+import flash.geom.*;
+
+class z3c.reference.imagetool.baseskin.FlashvarSetup
+{
+    private var MODE_FIRST_TIME_NO_RATIO:Number = 0;
+    private var MODE_FIRST_TIME_WITH_RATIO:Number = 1;
+    private var MODE_NORMAL:Number = 2;
+
+    private var imageAttitude:EditableImageAttitude;
+    private var finalScale:Number = 0;
+    private var viewportRatio:Number = 0;
+    private var selectedPreset;
+    
+	function FlashvarSetup(attitude:EditableImageAttitude)
+	{
+	    imageAttitude = attitude;
+	    finalScale = imageAttitude.originalWidth / imageAttitude.w;
+	    viewportRatio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
+	    
+	    selectedPreset = setupPresetList();
+	    
+	    if (isMode(MODE_FIRST_TIME_NO_RATIO))
+	        initFirstTimeNoRatio();
+	    
+	    else if (isMode(MODE_FIRST_TIME_WITH_RATIO))
+	        initFirstTimeWithRatio();
+	    
+	    else if (isMode(MODE_NORMAL))
+	        initNormal();
+        
+        // scale down the crop - values
+        FlashvarManager.set("crop_x", FlashvarManager.get("crop_x") / finalScale);
+        FlashvarManager.set("crop_y", FlashvarManager.get("crop_y") / finalScale);
+        FlashvarManager.set("crop_w", FlashvarManager.get("crop_w") / finalScale);
+        FlashvarManager.set("crop_h", FlashvarManager.get("crop_h") / finalScale);
+	}
+	
+	public function getSelectedPreset()
+	{
+	    return selectedPreset;
+	}
+	
+	// preset setup helpers ---------------------------------------------------------
+	
+	private function setupPresetList()
+	{
+        var presetList = createPresetList();
+        for (var i = 0; i < presetList.length; i++)
+        {
+            var preset = presetList[i];
+            setupPreset(preset);
+        }
+        
+        var selectedPreset = getPresetByRatio(viewportRatio);
+        if (!selectedPreset)
+            return presetList[0];
+            
+        return selectedPreset;
+	}
+	
+	private function createPresetList()
+	{
+        var presets = FlashvarManager.get("presets");
+        var presetList = new Array();
+
+        for (var i in presets)
+        {
+            var preset = presets[i];
+            presetList.unshift(preset);
+        }
+        
+        if (presetList.length > 0)
+            FlashvarManager.set("presets", presetList);
+            
+        return FlashvarManager.get("presets");
+	}
+	
+	private function setupPreset(preset)
+	{
+	    preset.ratio = parseInt(preset.ratio.split(":")[0]) / parseInt(preset.ratio.split(":")[1]);
+        preset.resetCoords = getViewportFitExtents(preset.ratio);
+        preset.resetCoords.x /= finalScale;
+        preset.resetCoords.y /= finalScale;
+        preset.min_w /= finalScale;
+        preset.min_h /= finalScale;
+        preset.max_w /= finalScale
+        preset.max_h /= finalScale;            
+	}
+    
+    private function getPresetByRatioOrDefault(ratio:Number)
+    {
+        var preset = getPresetByRatio(ratio);
+        if (preset)
+            return preset;
+        
+        return FlashvarManager.get("presets")[0];
+    }
+	
+    // dangerous...
+    private function getPresetByRatio(ratio:Number)
+    {
+        if (isNaN(ratio))
+            return null;
+            
+        var presetList = FlashvarManager.get("presets");
+        for (var i = 0; i < presetList.length; i++)
+        {
+            var preset = presetList[i];
+            if (Math.abs(preset.ratio - ratio) < 0.01)
+                return preset;
+        }
+        return null;
+    }
+    
+	// init mode helpers ---------------------------------------------------------
+	
+    private function isMode(mode:Number)
+    {
+        switch(mode)
+        {
+            case MODE_FIRST_TIME_NO_RATIO:
+                return FlashvarManager.get("crop_x") < 0 && FlashvarManager.get("crop_y") < 0 && FlashvarManager.get("crop_w") == 0 && FlashvarManager.get("crop_h") == 0;
+                break;
+                
+            case MODE_FIRST_TIME_WITH_RATIO:
+                return FlashvarManager.get("crop_x") < 0 && FlashvarManager.get("crop_y") < 0 && FlashvarManager.get("crop_w") > 0 && FlashvarManager.get("crop_h") > 0;
+                break;
+                
+            case MODE_NORMAL:
+                return FlashvarManager.get("crop_x") >= 0 && FlashvarManager.get("crop_y") >= 0 && FlashvarManager.get("crop_w") > 0 && FlashvarManager.get("crop_h") > 0;
+                break;
+        }
+        
+        return false;
+    }
+    
+    // initFirstTimeNoRatio selects the first preset available and if it has a ratio, applies it
+    private function initFirstTimeNoRatio()
+    {
+        trace("initFirstTimeNoRatio " )
+
+        var defaultPreset = getPresetByRatioOrDefault();
+    
+        if (!defaultPreset.ratio)
+        {
+            FlashvarManager.set("crop_w", imageAttitude.minOriginalSide * 0.8);
+            FlashvarManager.set("crop_h", imageAttitude.minOriginalSide * 0.8);
+        }
+        else
+        {
+            if (defaultPreset.ratio >= 1)
+            {
+                FlashvarManager.set("crop_w", imageAttitude.minOriginalSide * 0.8);
+                FlashvarManager.set("crop_h", imageAttitude.minOriginalSide / defaultPreset.ratio * 0.8);
+            }
+            else
+            {
+                fitViewportIntoImage(defaultPreset.ratio);
+            }
+        }
+
+        centerViewport();
+    }
+    
+    private function initFirstTimeWithRatio()
+    {
+        trace("initFirstTimeWithRatio")
+
+        var ratio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
+        var currentPreset = getPresetByRatioOrDefault();
+
+        if (currentPreset.ratio >= 1)
+        {
+            FlashvarManager.set("crop_w", imageAttitude.minOriginalSide * 0.8);
+            FlashvarManager.set("crop_h", imageAttitude.minOriginalSide / currentPreset.ratio * 0.8);
+        }
+        else
+        {
+            fitViewportIntoImage(currentPreset.ratio)
+        }        
+
+        centerViewport();
+    }
+    
+    private function initNormal()
+    {
+        trace("initNormal")
+        var ratio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
+        var currentPreset = getPresetByRatio(ratio);
+        
+        // if there is no preset with this name, change to the default preset but leave the crop area as is
+        if (!currentPreset)
+        {
+            currentPreset = getPresetByRatioOrDefault();
+            //fitViewportIntoImage(currentPreset.ratio);
+            //centerViewport();
+        }
+    }
+    
+    // viewport helpers ---------------------------------------------------------
+    
+    private function fitViewportIntoImage(viewportRatio:Number)
+    {
+        var resetExtents = getViewportFitExtents(viewportRatio);
+        
+        FlashvarManager.set("crop_w", resetExtents.x);
+        FlashvarManager.set("crop_h", resetExtents.y);
+    }
+    
+    private function getViewportFitExtents(viewportRatio:Number)
+    {
+        if (isNaN(viewportRatio))
+            return new Point(imageAttitude.minOriginalSide * 0.8, imageAttitude.minOriginalSide * 0.8);
+            
+        var minLen = imageAttitude.minOriginalSide;
+        var viewportW = imageAttitude.originalWidth * 0.8;
+        var viewportH = imageAttitude.originalHeight * 0.8;
+        var minLen = (viewportW > viewportH) ? viewportH : viewportW;
+        
+        if (viewportRatio >= 1)
+            return new Point(minLen, minLen / viewportRatio);
+            
+        return new Point(minLen * viewportRatio, minLen);
+    }
+    
+    private function centerViewport()
+    {
+        FlashvarManager.set("crop_x", (imageAttitude.originalWidth - FlashvarManager.get("crop_w")) / 2)
+        FlashvarManager.set("crop_y", (imageAttitude.originalHeight - FlashvarManager.get("crop_h")) / 2)
+    }    
+}
\ No newline at end of file

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -48,6 +48,9 @@
     private var animAlphaOut:Alpha;
     private var animAlphaIn:Alpha;
     
+    private var currentPercent:Number = 0;
+    private var currentPreset;
+    
     private var changesLoaded:Boolean = false;
     
 	function ImageTool()
@@ -159,130 +162,16 @@
     {
         // here the image is loaded, scaled and rotated properly, now transform the passed dimensions to match the image 
 
-        // first get the original size of the image and swap w/h if the image is rotated
-        //var originalRatio = imageAttitude.originalRatio;
-        var finalScale = imageAttitude.originalWidth / imageAttitude.w;
-
-        // first transform the presets
-        // use the supplied crop_w and crop_h parameters to determine the current preset
-        var inputRatio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
-        var presets = FlashvarManager.get("presets");
-        var presetList = new Array();
-        var presetWasSelected = false;
-
-        for (var i in presets)
-        {
-            var preset = presets[i];
-            var ratio = preset.ratio.split(":");
-            preset.ratio = parseInt(ratio[0]) / parseInt(ratio[1]);
-            
-            if (!presetWasSelected)
-            {
-                // this is dangerous - should change that
-                preset.selected = Math.abs(preset.output_w / preset.output_h - inputRatio) < 0.01 || Math.abs(preset.ratio - inputRatio) < 0.01;
-                if (preset.selected)
-                    presetWasSelected = true;
-            }
-
-            preset.isRatioFixed = !!(preset.ratio || (preset.output_w && preset.output_h) || (preset.output_w && preset.output_h) || (preset.min_w && preset.min_h) || (preset.max_w && preset.max_h));
-
-            preset.min_w /= finalScale;
-            preset.min_h /= finalScale;
-            preset.max_w /= finalScale
-            preset.max_h /= finalScale;
-            
-            presetList.unshift(preset);
-        }
-        
-        if (presetList.length)
-            FlashvarManager.set("presets", presetList);
-/*        
-        // check if the preset ratio exists, if no set the default values
-        if (FlashvarManager.get("crop_w") && FlashvarManager.get("crop_h"))
-        {
-            var presetExists = false;
-            var ratio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
-            for (var i = 0; i < presetList.length; i++)
-            {
-                var preset = presetList[i];
-                if (preset.ratio == ratio)
-                {
-                    presetExists = true;
-                    break;
-                }
-            }
-            
-            if (!presetExists)
-            {
-                FlashvarManager.set("crop_x", -1);
-                FlashvarManager.set("crop_y", -1);
-                FlashvarManager.set("crop_w", 0);
-                FlashvarManager.set("crop_h", 0);
-            }
-        }
-*/
-        // this is the case when we load the image for the very first time, no ratio given
-        if (FlashvarManager.get("crop_x") < 0 && FlashvarManager.get("crop_y") < 0 && FlashvarManager.get("crop_w") == 0 && FlashvarManager.get("crop_h") == 0)
-        {
-            var firstPreset = FlashvarManager.get("presets")[0];
-            
-            // if the preset has no ratio, just set the sizes
-            if (!firstPreset.ratio)
-            {
-                FlashvarManager.set("crop_w", imageAttitude.originalWidth * 0.8);
-                FlashvarManager.set("crop_h", imageAttitude.originalHeight * 0.8);
-            }
-            else
-            {
-                fitViewportIntoImage();
-            }
-
-            var viewportX = (imageAttitude.originalWidth - FlashvarManager.get("crop_w")) / 2;
-            var viewportY = (imageAttitude.originalHeight - FlashvarManager.get("crop_h")) / 2;
-            FlashvarManager.set("crop_x", viewportX);
-            FlashvarManager.set("crop_y", viewportY);
-
-        }
-        // this is the case when we load the image for the very first time, with ratio given
-        else if (FlashvarManager.get("crop_x") < 0 && FlashvarManager.get("crop_y") < 0 && FlashvarManager.get("crop_w") > 0 && FlashvarManager.get("crop_h") > 0)
-        {
-            fitViewportIntoImage();
-            
-            var viewportX = (imageAttitude.originalWidth - FlashvarManager.get("crop_w")) / 2;
-            var viewportY = (imageAttitude.originalHeight - FlashvarManager.get("crop_h")) / 2;
-            FlashvarManager.set("crop_x", viewportX);
-            FlashvarManager.set("crop_y", viewportY);
-        }
-        
-        // TODO - sanity check
-        /*
-        if (FlashvarManager.get("crop_x") < 0)
-            FlashvarManager.set("crop_x", 0);
-        if (FlashvarManager.get("crop_y") < 0)
-            FlashvarManager.set("crop_y", 0);
-        if (FlashvarManager.get("crop_x") + FlashvarManager.get("crop_w") > imageAttitude.originalWidth)
-            FlashvarManager.set("crop_w", imageAttitude.originalWidth - FlashvarManager.get("crop_x"));
-        if (FlashvarManager.get("crop_y") + FlashvarManager.get("crop_h") > imageAttitude.originalHeight)
-            FlashvarManager.set("crop_h", imageAttitude.originalHeight - FlashvarManager.get("crop_y"));
-        */
-        
-        FlashvarManager.set("crop_x", FlashvarManager.get("crop_x") / finalScale);
-        FlashvarManager.set("crop_y", FlashvarManager.get("crop_y") / finalScale);
-        FlashvarManager.set("crop_w", FlashvarManager.get("crop_w") / finalScale);
-        FlashvarManager.set("crop_h", FlashvarManager.get("crop_h") / finalScale);
-
-        var viewportX = FlashvarManager.get("crop_x");
-        var viewportY = FlashvarManager.get("crop_y");
-        var viewportW = FlashvarManager.get("crop_w");
-        var viewportH = FlashvarManager.get("crop_h");
-
-        
         centerImage();
 
-        viewport_mc._x = imageAttitude.x + viewportX;
-        viewport_mc._y = imageAttitude.y + viewportY;
-        viewport_mc.setSize(viewportW, viewportH);
+        // use a FlashvarSetup Object to validate and init the default values of the flashvars
+        var flashvarSetup = new FlashvarSetup(imageAttitude);
+        currentPreset = flashvarSetup.getSelectedPreset();
 
+        viewport_mc._x = imageAttitude.x + FlashvarManager.get("crop_x");
+        viewport_mc._y = imageAttitude.y + FlashvarManager.get("crop_y");
+        viewport_mc.setSize(FlashvarManager.get("crop_w"), FlashvarManager.get("crop_h"));
+
         updateFader();
 
         _level0.dropdown_mc._visible = true;
@@ -291,7 +180,7 @@
         animAlphaOut.run(0);
         animAlphaIn.run(100);        
 
-        controller_mc.init();
+        controller_mc.init(currentPreset);
         
         changesLoaded = true;
     }
@@ -381,9 +270,9 @@
         imageAttitude.x = canvas_mc._x + (canvas_mc._width - imageAttitude.w) / 2;
         imageAttitude.y = canvas_mc._y + (canvas_mc._height - imageAttitude.h) / 2;
 
-        viewport_mc._x = imageAttitude.x + deltaX;
-        viewport_mc._y = imageAttitude.y + deltaY;
-        updateFader();
+        //viewport_mc._x = imageAttitude.x + deltaX;
+        //viewport_mc._y = imageAttitude.y + deltaY;
+        //updateFader();
     }
     
     private function resetImage()
@@ -413,6 +302,8 @@
         }
 
         // TODO - why dH < 0 ????
+        var minLen = 0;
+        var maxLen = 0;
         if (dH < 0)
         {
             minLen = (-(dW / dH) <= -canvasRatio) ? (canvas_mc._width) : (canvas_mc._height * imageRatio);
@@ -420,8 +311,8 @@
         }
         else
         {
-            var minLen = ((dW / dH) <= canvasRatio) ? (canvas_mc._width) : (canvas_mc._height * imageRatio);
-            var maxLen = ((dW / dH) >= canvasRatio) ? (canvas_mc._height) : (canvas_mc._width / imageRatio);
+            minLen = ((dW / dH) <= canvasRatio) ? (canvas_mc._width) : (canvas_mc._height * imageRatio);
+            maxLen = ((dW / dH) >= canvasRatio) ? (canvas_mc._height) : (canvas_mc._width / imageRatio);
         }
 
         if (FlashvarManager.get("rotation") == 90 || FlashvarManager.get("rotation") == 270)
@@ -430,26 +321,8 @@
             editable_image_mc.setSize(minLen, maxLen);
     }
     
-    private function fitViewportIntoImage()
-    {
-        var ratio = FlashvarManager.get("crop_w") / FlashvarManager.get("crop_h");
-        var viewportW = imageAttitude.originalWidth * 0.8;
-        var viewportH = imageAttitude.originalHeight * 0.8;
-        var minLen = (viewportW > viewportH) ? viewportH : viewportW;
 
-        if (viewportW <= viewportH)
-        {
-            FlashvarManager.set("crop_w", minLen);
-            FlashvarManager.set("crop_h", minLen / ratio);
-        }
-        else
-        {
-            FlashvarManager.set("crop_w", minLen * ratio);
-            FlashvarManager.set("crop_h", minLen);
-        }
-    }
 
-
     // viewport handling -----------------------------------------------------------------    	
     
     function onEnterFrameUpdateViewport()
@@ -492,7 +365,7 @@
                 var startY = viewportStartPoint.y + viewportStartSize.y;
                 var offsetX = startX - cursorX;
                 var offsetY = startY - cursorY;
-                var offset = Math.max(offsetX, offsetY);
+                var offset = (viewportFixedRatio >= 1) ? Math.max(offsetX, offsetY) : Math.min(offsetX, offsetY);
                 resultX = startX - offset;
                 resultY = startY - offset / viewportFixedRatio;
                 
@@ -530,7 +403,7 @@
                 var startY = viewportStartPoint.y + viewportStartSize.y;
                 var offsetX = cursorX - startX;
                 var offsetY = startY - cursorY;
-                var offset = Math.max(offsetX, offsetY)
+                var offset = (viewportFixedRatio >= 1) ? Math.max(offsetX, offsetY) : Math.min(offsetX, offsetY);
                 resultX = startX + offset;
                 resultY = startY - offset / viewportFixedRatio;
                 
@@ -568,7 +441,7 @@
                 var startY = viewportStartPoint.y;
                 var offsetX = startX - cursorX;
                 var offsetY = cursorY - startY;
-                var offset = Math.max(offsetX, offsetY)
+                var offset = (viewportFixedRatio >= 1) ? Math.max(offsetX, offsetY) : Math.min(offsetX, offsetY);
                 resultX = startX - offset;
                 resultY = startY + offset / viewportFixedRatio;
 
@@ -606,7 +479,7 @@
                 var startY = viewportStartPoint.y;
                 var offsetX = cursorX - startX;
                 var offsetY = cursorY - startY;
-                var offset = Math.max(offsetX, offsetY);
+                var offset = (viewportFixedRatio >= 1) ? Math.max(offsetX, offsetY) : Math.min(offsetX, offsetY);
                 resultX = viewportStartPoint.x + offset;
                 resultY = viewportStartPoint.y + offset / viewportFixedRatio;
 
@@ -728,25 +601,14 @@
     
     private function resetViewport()
     {
-        if (!changesLoaded)
-            return;
+        //if (!changesLoaded)
+        //    return;
         
-        viewport_mc.setSize(FlashvarManager.get("crop_w"), FlashvarManager.get("crop_h"));
-        viewport_mc._x = imageAttitude.x + (imageAttitude.w - FlashvarManager.get("crop_w")) / 2;
-        viewport_mc._y = imageAttitude.y + (imageAttitude.h - FlashvarManager.get("crop_h")) / 2;
-        
-        /*
-        var minWidth = imageAttitude.w > imageAttitude.h ? imageAttitude.h : imageAttitude.w;
-        var minHeight = imageAttitude.w > imageAttitude.h ? imageAttitude.w : imageAttitude.h;
-        var minLen = Math.min(minWidth, minHeight);
-        
-        var viewportWidth = 50;
-        var viewportHeight = 50 / viewportFixedRatio;
-        
-        viewport_mc._x = imageAttitude.x + imageAttitude.w/2 - viewportWidth/2;
-        viewport_mc._y = imageAttitude.y + imageAttitude.h/2 - viewportHeight/2;
-        viewport_mc.setSize(viewportWidth, viewportHeight);
-        */
+        var viewport_reset = currentPreset.resetCoords;
+        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)
     }
 
     // menu event listeners --------------------------------------------------------------
@@ -754,7 +616,7 @@
     function onRotateLeftRelease(ei:EventInfo)
     {
         viewport_mc._visible = false;
-        editable_image_mc.setVisibleArea(new Rectangle());
+        editable_image_mc.setFaderVisible(false);
         resetImage();
         imageAttitude.rotateLeft();
     }
@@ -762,46 +624,60 @@
     function onRotateRightRelease(ei:EventInfo)
     {
         viewport_mc._visible = false;
-        editable_image_mc.setVisibleArea(new Rectangle());
+        editable_image_mc.setFaderVisible(false);
         resetImage();
         imageAttitude.rotateRight();
     }
 
     var viewportImageRatio;
     var imageStartSize;
-    var canvasCenter;
+    var imageStartCenter;
     var imageStartPoint;
+    var viewportStartCenter;
 
     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);
+
         viewportImageRatio = new Point(viewport_mc._width / imageAttitude.w, viewport_mc._height / imageAttitude.h);
-        canvasCenter = new Point(canvas_mc._x + canvas_mc._width / 2, canvas_mc._y + canvas_mc._height / 2);
         imageStartPoint = new Point(imageAttitude.x, imageAttitude.y);
         imageStartSize = new Point(imageAttitude.w, imageAttitude.h);
         viewportStartPoint = new Point(viewport_mc._x, viewport_mc._y);
         viewportStartSize = new Point(viewport_mc._width, viewport_mc._height);
-        imageMinMaxDelta = new Point(imageAttitude.originalWidth - imageAttitude.w, imageAttitude.originalHeight - imageAttitude.h);
+
+        // 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);
+
+        mapViewportToImage();
     }
     
     function onSliderChange(ei:EventInfo)
     {
-        var percent = ei.getInfo("percent");
-
-        var imageDeltaX = imageMinMaxDelta.x * percent;
-        var imageDeltaY = imageMinMaxDelta.y * percent;
+        currentPercent = ei.getInfo("percent");
         
+        var imageDeltaX = imageMinMaxDelta.x * currentPercent;
+        var imageDeltaY = imageMinMaxDelta.y * currentPercent;
+        
         imageAttitude.w = imageAttitude.initialWidth + imageDeltaX;
         imageAttitude.h = imageAttitude.initialHeight + imageDeltaY;
         
         centerImage();
 
-        //mapViewportToImage(percent);
-        //updateFader();
+        mapViewportToImage();
+        
+        editable_image_mc.setFaderVisible(currentPercent == 0);
+        if (currentPercent == 0)
+            updateFader();
 
         // TODO - remove this and scale viewport when zooming
-
+/*
         viewport_mc._visible = percent == 0;
         editable_image_mc.setFaderVisible(percent == 0);
         if (percent == 0)
@@ -810,15 +686,15 @@
             updateFader();
             saveChanges();
         }
-
+*/
         // !TODO
     }
     
     function onViewportRatioChange(ei:EventInfo)
     {
-        var preset = ei.getInfo("preset");
-        var isLocked = preset.isRatioFixed;
-        
+        currentPreset = ei.getInfo("preset");
+        var isLocked = !!currentPreset.ratio;
+
         viewport_mc.setLocked(isLocked);
         viewportOutputSize = null;
         viewportMinSize = null;
@@ -829,37 +705,39 @@
         {
             viewportFixedRatio = 1;
         }
-        else if (preset.ratio)
+        else if (currentPreset.ratio)
         {
-            viewportFixedRatio = preset.ratio;
+            viewportFixedRatio = currentPreset.ratio;
         }
         else 
         {
-            if (preset.output_w && preset.output_h)
+            if (currentPreset.output_w && currentPreset.output_h)
             {
-                viewportFixedRatio = parseInt(preset.output_w) / parseInt(preset.output_h);
-                viewportOutputSize = new Point(parseInt(preset.output_w), parseInt(preset.output_h));
+                viewportFixedRatio = parseInt(currentPreset.output_w) / parseInt(currentPreset.output_h);
+                viewportOutputSize = new Point(parseInt(currentPreset.output_w), parseInt(currentPreset.output_h));
             }
             
-            if (preset.min_w && preset.min_h)
+            if (currentPreset.min_w && currentPreset.min_h)
             {
                 if (!viewportFixedRatio)
-                    viewportFixedRatio = parseInt(preset.min_w) / parseInt(preset.min_h);
-                viewportMinSize = new Point(parseInt(preset.min_w), parseInt(preset.min_h));
+                    viewportFixedRatio = parseInt(currentPreset.min_w) / parseInt(currentPreset.min_h);
+                viewportMinSize = new Point(parseInt(currentPreset.min_w), parseInt(currentPreset.min_h));
             }
             
-            if (preset.max_w && preset.max_h)
+            if (currentPreset.max_w && currentPreset.max_h)
             {
                 if (!viewportFixedRatio)
-                    viewportFixedRatio = parseInt(preset.max_w) / parseInt(preset.max_h);
-                viewportMaxSize = new Point(parseInt(preset.max_w), parseInt(preset.max_h));
+                    viewportFixedRatio = parseInt(currentPreset.max_w) / parseInt(currentPreset.max_h);
+                viewportMaxSize = new Point(parseInt(currentPreset.max_w), parseInt(currentPreset.max_h));
             }
             
             if (!viewportFixedRatio)
                 viewportFixedRatio = 1;
-        }        
-        
-        resetViewport();
+        }
+
+        if (changesLoaded)
+            resetViewport();
+
         updateFader();
         saveChanges();
     }
@@ -898,6 +776,7 @@
             return;
         }
         
+        editable_image_mc.setFaderVisible(true)
         viewport_mc._visible = true;
         resetViewport();
         updateFader();
@@ -1080,37 +959,27 @@
 
         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(percent)
+    private function mapViewportToImage()
     {
-        var imageDeltaX = imageMinMaxDelta.x * percent;
-        var imageDeltaY = imageMinMaxDelta.y * percent;
+        var imageDW = imageAttitude.w - imageStartSize.x;
+        var imageDH = imageAttitude.h - imageStartSize.y;
         
-        var viewportW = viewportStartSize.x + (imageAttitude.w - imageStartSize.x) * viewportImageRatio.x;
-        var viewportH = viewportStartSize.y + (imageAttitude.h - imageStartSize.y) * viewportImageRatio.y;
+        var viewportW = viewportStartSize.x + imageDW * viewportImageRatio.x;
+        var viewportH = viewportStartSize.y + imageDH * viewportImageRatio.y;
         viewport_mc.setSize(viewportW, viewportH);
-
-        var startX = imageStartPoint.x + viewportStartSize.x / 2;
-        var endX = imageStartPoint.x + imageStartSize.x - viewportStartSize.x / 2;
-        var lenX = endX - startX;
         
-        var startX = imageAttitude.x + viewportStartSize.x / 2;
-        var endX = imageAttitude.x + imageAttitude.w - viewportStartSize.x / 2;
-        var lenX = endX - startX;
-        var curX = viewportStartPoint.x - imageStartPoint.x;
-        var facX = (viewportStartPoint.x - imageStartPoint.x) / (lenX / 2) - 1;
-        log(curX / lenX)
-        var dX = imageDeltaX / 2 * facX;
-        viewport_mc._x = viewportStartPoint.x + dX;
+        var viewportDW = (viewportStartSize.x - viewportW) / 2;
+        var viewportDH = (viewportStartSize.y - viewportH) / 2;
         
-        var facY = viewportStartPoint.y / canvasCenter.y - 1;
-        var dY = imageDeltaY / 2 * facY;
-        viewport_mc._y = viewportStartPoint.y + dY;
-        
-        
+        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 -------------------------------------------------------------------------

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/MovieclipAttitude.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/MovieclipAttitude.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/MovieclipAttitude.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -191,6 +191,14 @@
             return mOw;
     }
     
+    public function get minOriginalSide():Number
+    {
+        if (originalWidth >= originalHeight)
+            return originalHeight;
+
+        return originalWidth;
+    }
+    
     public function get originalRatio():Number
     {
         return originalWidth / originalHeight;

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Viewport.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Viewport.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Viewport.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -91,6 +91,7 @@
     
     public function setSize(w:Number, h:Number)
     {
+        log("setSize: " + w + " " + h)
         setWidth(w);
         setHeight(h);
     }

Modified: z3c.reference/trunk/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
===================================================================
--- z3c.reference/trunk/flash/src/z3c/reference/imagetool/core/FlashvarManager.as	2007-09-24 22:11:21 UTC (rev 79930)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/core/FlashvarManager.as	2007-09-24 22:20:02 UTC (rev 79931)
@@ -61,7 +61,6 @@
 	private function setVar(name:String, value:String):Void
 	{
 	    flashVars[name] = value;
-	    trace("SETTING: " + name + " " + value)
 	}
 
 	public static function set(name:String, value)

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



More information about the Checkins mailing list