[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