[Checkins] SVN: z3c.reference/trunk/ fixed displaying of viewport after loading

Gerold Böhler gerold at reloc.org
Sat Sep 22 14:34:35 EDT 2007


Log message for revision 79835:
  fixed displaying of viewport after loading

Changed:
  U   z3c.reference/trunk/flash/fla/imagetool.as
  U   z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.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/fla/imagetool.as
===================================================================
--- z3c.reference/trunk/flash/fla/imagetool.as	2007-09-22 18:10:37 UTC (rev 79834)
+++ z3c.reference/trunk/flash/fla/imagetool.as	2007-09-22 18:34:35 UTC (rev 79835)
@@ -26,15 +26,15 @@
 // Debug Block Start
 if (System.capabilities.playerType == "External")
 {
-    if (!_level0.url) _level0.url="toothbrush.jpg";
+    if (!_level0.url) _level0.url="testimage1.jpg";
     
     //default values
-    if (_level0.crop_x == undefined) _level0.crop_x = 1190;
-    if (_level0.crop_y == undefined) _level0.crop_y = 830;
-    if (_level0.crop_w == undefined) _level0.crop_w = 400;
-    if (_level0.crop_h == undefined) _level0.crop_h = 300;
+    if (_level0.crop_x == undefined) _level0.crop_x = 100;
+    if (_level0.crop_y == undefined) _level0.crop_y = 100;
+    if (_level0.crop_w == undefined) _level0.crop_w = 200;
+    if (_level0.crop_h == undefined) _level0.crop_h = 100;
     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 = '[{"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}]';
 }
 // Debug Block End
 

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-22 18:10:37 UTC (rev 79834)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/Controller.as	2007-09-22 18:34:35 UTC (rev 79835)
@@ -45,10 +45,10 @@
 	    buttons_mc.setMask(canvas_mc.getMask());
 		
 		rotateLeft_mc = buttons_mc.attachMovie("rotateLeft_mc", "rotateLeft_mc", buttons_mc.getNextHighestDepth());
-		rotateLeft_mc.onRelease = function() { _parent._parent.broadcastEvent(new EventInfo(_parent._parent, "onRotateLeftRelease")); }
+		rotateLeft_mc.onRelease = rotateLeft_mc.onReleaseOutside = function() { _parent._parent.broadcastEvent(new EventInfo(_parent._parent, "onRotateLeftRelease")); }
 
 		rotateRight_mc = buttons_mc.attachMovie("rotateRight_mc", "rotateRight_mc", buttons_mc.getNextHighestDepth());
-		rotateRight_mc.onRelease = function() { _parent._parent.broadcastEvent(new EventInfo(_parent._parent, "onRotateRightRelease")); }
+		rotateRight_mc.onRelease = rotateRight_mc.onReleaseOutside = function() { _parent._parent.broadcastEvent(new EventInfo(_parent._parent, "onRotateRightRelease")); }
 		
 		slider_mc = buttons_mc.attachMovie("slider_mc", "slider_mc", buttons_mc.getNextHighestDepth(), {width: 100});
 		slider_mc.addListener(this);
@@ -85,28 +85,21 @@
 		dropdown_mc.rowCount = 10;
         dropdown_mc.addEventListener("change", this);
         
-        var itemList = new Array();
-        for (var i in presets)
+        var selectedItem = presets[0];
+        for (var i = 0; i < presets.length; i++)
         {
-    		itemList.push(presets[i]);
-        }
-        
-        // revert and select current item
-        var selectedItem = itemList[itemList.length - 1];
-        for (var i = itemList.length - 1; i >= 0; i--)
-        {
-            var item = itemList[i];
-            item.isRatioFixed = !!(item.ratio || (item.output_w && item.output_h) || (item.output_w && item.output_h) || (item.min_w && item.min_h) || (item.max_w && item.max_h));
+            var item = presets[i];
             dropdown_mc.addItem({label: item.name, data: item});
-    		if (item.selected)
-    		{
-    		    dropdown_mc.selectedIndex = itemList.length - 1 - i;
-    		    selectedItem = item;
-    		}
+            if (item.selected)
+            {
+                dropdown_mc.selectedIndex = i;
+                selectedItem = item;
+            }
         }
+        
+        dropdown_mc._visible = presets.length > 1;
 
-        dropdown_mc._visible = itemList.length > 1;
-
+        log("SELECTED: " + selectedItem.name)
         fireRatioChange(selectedItem);
 	}
 	

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-22 18:10:37 UTC (rev 79834)
+++ z3c.reference/trunk/flash/src/z3c/reference/imagetool/baseskin/ImageTool.as	2007-09-22 18:34:35 UTC (rev 79835)
@@ -161,27 +161,110 @@
         // 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]);
             
-            // 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 (!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);
@@ -192,6 +275,7 @@
         var viewportW = FlashvarManager.get("crop_w");
         var viewportH = FlashvarManager.get("crop_h");
 
+        
         centerImage();
 
         viewport_mc._x = imageAttitude.x + viewportX;
@@ -326,8 +410,27 @@
                 editable_image_mc.setSize(canvas_mc._height, canvas_mc._height * originalRatio);
         }
     }
+    
+    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()
@@ -608,7 +711,12 @@
     {
         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);
@@ -619,6 +727,7 @@
         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);
+        */
     }
 
     // menu event listeners --------------------------------------------------------------
@@ -640,15 +749,23 @@
     }
 
     var viewportImageRatio;
-    var imageStartPoint;
     var imageStartSize;
+    var viewportDirection;
+    var canvasCenter;
+    var viewportStartCenter;
+    var viewportStartDelta;
+    
     function onSliderPress(ei:EventInfo)
     {
-        viewportImageRatio = viewport_mc._width / imageAttitude.w;
-        imageStartPoint = new Point(imageAttitude.x, imageAttitude.y);
+        centerImage();
+        viewportImageRatio = new Point(viewport_mc._width / imageAttitude.w, viewport_mc._height / imageAttitude.h);
+        viewportStartCenter = new Point(viewport_mc._x + viewport_mc._width / 2, viewport_mc._y + viewport_mc._height / 2);
+        canvasCenter = new Point(canvas_mc._x + canvas_mc._width / 2, canvas_mc._y + canvas_mc._height / 2);
+        //viewportDirection = new Point((viewportStartCenter.x - canvasCenter.x) >= 0 ? 1 : -1, (viewportStartCenter.y - canvasCenter.y) >= 0 ? 1 : -1);
         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);
+        viewportStartDelta = new Point(viewport_mc._x - imageAttitude.x, viewport_mc._y - imageAttitude.y);
+        //log(viewportStartSize.x + " " + viewportStartSize.y)
     }
     
     function onSliderChange(ei:EventInfo)
@@ -665,18 +782,12 @@
         
         centerImage();
 /*
-        var viewportW = viewportStartSize.x + (imageAttitude.w - imageStartSize.x) * viewportImageRatio;
-        var viewportH = viewportStartSize.y + (imageAttitude.h - imageStartSize.y) * viewportImageRatio;
+        var viewportW = viewportStartSize.x + (imageAttitude.w - imageStartSize.x) * viewportImageRatio.x;
+        var viewportH = viewportStartSize.y + (imageAttitude.h - imageStartSize.y) * viewportImageRatio.y;
         viewport_mc.setSize(viewportW, viewportH);
 
-        var canvasCenterX = canvas_mc._x + canvas_mc._width / 2;
-        var canvasCenterY = canvas_mc._y + canvas_mc._height / 2;
-        var viewportStartOffsetX = viewportStartPoint.x - canvasCenterX;
-        var viewportStartOffsetY = viewportStartPoint.y - canvasCenterY;
-        var dx = imageStartPoint.x + imageStartSize.x/2 + imageAttitude.w;
-        var dy = imageStartPoint.y + imageStartSize.y/2 + imageAttitude.h;
-        viewport_mc._x = canvasCenterX + viewportStartOffsetX + dx * viewportImageRatio;
-        viewport_mc._y = canvasCenterY + viewportStartOffsetY + dy * viewportImageRatio;
+        viewport_mc._x = viewportStartCenter.x - viewportStartSize.x/2 - (imageDeltaX/2) * viewportImageRatio.x;
+        viewport_mc._y = viewportStartCenter.y - viewportStartSize.y/2 - (imageDeltaY/2) * viewportImageRatio.y;
 */
         // TODO - remove this and scale viewport when zooming
 

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



More information about the Checkins mailing list