diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java
index 197248efd..a1481b2b8 100644
--- a/trunk/src/com/jpexs/decompiler/flash/SWF.java
+++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java
@@ -1548,8 +1548,13 @@ public final class SWF implements TreeItem, Timelined {
}
if (Configuration.packJavaScripts.get()) {
- JPacker.main(new String[]{"-q", "-b", "62", "-o", fmin.getAbsolutePath(), f.getAbsolutePath()});
- f.delete();
+ try{
+ JPacker.main(new String[]{"-q", "-b", "62", "-o", fmin.getAbsolutePath(), f.getAbsolutePath()});
+ f.delete();
+ }catch(Exception|Error e){ //Something wrong in the packer
+ Logger.getLogger(SWF.class.getName()).log(Level.WARNING, "JPacker: Cannot minimize script");
+ f.renameTo(fmin);
+ }
} else {
f.renameTo(fmin);
}
@@ -2306,7 +2311,7 @@ public final class SWF implements TreeItem, Timelined {
if(layer.clipDepth!=-1){
clipDepths.push(layer.clipDepth);
sb.append("\t\t\tclips.push({ctx:ctx,canvas:canvas});\r\n");
- sb.append("\t\t\tvar ccanvas = Filters.createCanvas(canvas.width,canvas.height);\r\n");
+ sb.append("\t\t\tvar ccanvas = createCanvas(canvas.width,canvas.height);\r\n");
sb.append("\t\t\tvar cctx = ccanvas.getContext(\"2d\");\r\n");
sb.append("\t\t\tenhanceContext(cctx);\r\n");
sb.append("\t\t\tcctx.applyTransforms(ctx._matrices);\r\n");
@@ -2316,7 +2321,7 @@ public final class SWF implements TreeItem, Timelined {
if(layer.filters!=null){
sb.append("\t\t\tvar oldctx = ctx;\r\n");
- sb.append("\t\t\tvar fcanvas = Filters.createCanvas(canvas.width,canvas.height);");
+ sb.append("\t\t\tvar fcanvas = createCanvas(canvas.width,canvas.height);");
sb.append("\t\t\tvar fctx = fcanvas.getContext(\"2d\");\r\n");
sb.append("\t\t\tenhanceContext(fctx);\r\n");
sb.append("\t\t\tfctx.applyTransforms(ctx._matrices);\r\n");
@@ -2453,7 +2458,7 @@ public final class SWF implements TreeItem, Timelined {
}
if(layer.clipDepth!=-1){
sb.append("\t\t\tclips[clips.length-1].clipCanvas = canvas;\r\n");
- sb.append("\t\t\tcanvas = Filters.createCanvas(canvas.width,canvas.height);\r\n");
+ sb.append("\t\t\tcanvas = createCanvas(canvas.width,canvas.height);\r\n");
sb.append("\t\t\tvar nctx = canvas.getContext(\"2d\");\r\n");
sb.append("\t\t\tenhanceContext(nctx);\r\n");
sb.append("\t\t\tnctx.applyTransforms(ctx._matrices);\r\n");
diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java
index 81fe05ef8..d49b117c8 100644
--- a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java
+++ b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java
@@ -40,6 +40,11 @@ import java.awt.Color;
*/
public class CanvasShapeExporter extends ShapeExporterBase {
+ protected static final String DRAW_COMMAND_M = "M";
+ protected static final String DRAW_COMMAND_L = "L";
+ protected static final String DRAW_COMMAND_Q = "Q";
+ protected String currentDrawCommand = "";
+
protected String pathData = "";
protected String shapeData = "";
protected String html = "";
@@ -81,9 +86,9 @@ public class CanvasShapeExporter extends ShapeExporterBase {
+ "#height_size {height:10px; position:absolute; bottom:-5px; left:0px; right:0px; cursor:n-resize;"+
"-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;"
+"} "
- + "#both_size {height:10px; width:10px; position:absolute; bottom:-5px; right:-5px; cursor:nw-resize;"+
+ /*+ "#both_size {height:10px; width:10px; position:absolute; bottom:-5px; right:-5px; cursor:nw-resize;"+
"-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;"
- +"} "
+ +"} "*/
+ "#myCanvas {margin:0; padding:0;} "
+ ""
+ ""
@@ -91,7 +96,9 @@ public class CanvasShapeExporter extends ShapeExporterBase {
+ "\r\n"
+ "
\r\n"
+ + "
"
+ //+ "
"
+ + "\r\n"
+ "\r\n";
}
@@ -374,36 +381,45 @@ public class CanvasShapeExporter extends ShapeExporterBase {
@Override
public void moveTo(double x, double y) {
+ currentDrawCommand = DRAW_COMMAND_M;
+ pathData += currentDrawCommand + " ";
x += deltaX;
y += deltaY;
- pathData += "\tctx.moveTo("
- + Helper.doubleStr(x / unitDivisor) + ","
- + Helper.doubleStr(y / unitDivisor) + ");\r\n";
+ pathData += Helper.doubleStr(x / unitDivisor) + " "
+ + Helper.doubleStr(y / unitDivisor) + " ";
}
@Override
public void lineTo(double x, double y) {
+ if (!currentDrawCommand.equals(DRAW_COMMAND_L)) {
+ currentDrawCommand = DRAW_COMMAND_L;
+ pathData += currentDrawCommand + " ";
+ }
x += deltaX;
y += deltaY;
- pathData += "\tctx.lineTo(" + Helper.doubleStr(x / unitDivisor) + ","
- + Helper.doubleStr(y / unitDivisor) + ");\r\n";
+ pathData += Helper.doubleStr(x / unitDivisor) + " "
+ + Helper.doubleStr(y / unitDivisor) + " ";
}
@Override
public void curveTo(double controlX, double controlY, double anchorX, double anchorY) {
+ if (!currentDrawCommand.equals(DRAW_COMMAND_Q)) {
+ currentDrawCommand = DRAW_COMMAND_Q;
+ pathData += currentDrawCommand + " ";
+ }
controlX += deltaX;
anchorX += deltaX;
controlY += deltaY;
anchorY += deltaY;
- pathData += "\tctx.quadraticCurveTo(" + Helper.doubleStr(controlX / unitDivisor) + ","
- + Helper.doubleStr(controlY / unitDivisor) + ","
- + Helper.doubleStr(anchorX / unitDivisor) + ","
- + Helper.doubleStr(anchorY / unitDivisor) + ");\r\n";
+ pathData += Helper.doubleStr(controlX / unitDivisor) + " "
+ + Helper.doubleStr(controlY / unitDivisor) + " "
+ + Helper.doubleStr(anchorX / unitDivisor) + " "
+ + Helper.doubleStr(anchorY / unitDivisor) + " ";
}
protected void finalizePath() {
if (!"".equals(pathData)) {
- pathData = "\tctx.beginPath();\r\n" + pathData + "\tctx.closePath();\r\n";
+ pathData = "\tdrawPath(ctx,\"" + pathData + "\");\r\n";
if (lineFillData != null) {
String preLineFillData = "";
diff --git a/trunk/src/com/jpexs/helpers/resource/canvas.js b/trunk/src/com/jpexs/helpers/resource/canvas.js
index b8134a50a..b3682157d 100644
--- a/trunk/src/com/jpexs/helpers/resource/canvas.js
+++ b/trunk/src/com/jpexs/helpers/resource/canvas.js
@@ -4,7 +4,7 @@
Filters = {};
-Filters.createCanvas = function(width,height){
+var createCanvas = function(width,height){
var c = document.createElement("canvas");
c.width = width;
c.height = height;
@@ -202,19 +202,19 @@ Filters.blur = function(canvas,ctx, hRadius, vRadius, iterations, mask){
var width = canvas.width;
var height = canvas.height;
- var retCanvas = Filters.createCanvas(width,height);
+ var retCanvas = createCanvas(width,height);
var retImg = retCanvas.getContext("2d");
retImg.putImageData(imgData,0,0);
return retCanvas;
}
Filters._moveRGB = function(width, height, rgb, deltaX, deltaY, fill) {
- var img = Filters.createCanvas(width,height);
+ var img = createCanvas(width,height);
var ig=img.getContext("2d");
Filters._setRGB(ig,0,0,width,height,rgb);
- var retImg = Filters.createCanvas(width,height);
+ var retImg = createCanvas(width,height);
retImg.width = width;
retImg.heigth = height;
var g = retImg.getContext("2d");
@@ -241,10 +241,10 @@ Filters._setRGB = function(ctx, x, y, width, height, data){
Filters.gradientGlow = function(srcCanvas,src, blurX, blurY, angle, distance, colors, ratios, type, iterations, strength, knockout) {
var width = canvas.width;
var height = canvas.height;
- var retCanvas = Filters.createCanvas(width,height);
+ var retCanvas = createCanvas(width,height);
var retImg = retCanvas.getContext("2d");
- var gradCanvas = Filters.createCanvas(256,1);
+ var gradCanvas = createCanvas(256,1);
var gradient = gradCanvas.getContext("2d");
var grd=ctx.createLinearGradient(0,0,255,0);
@@ -354,7 +354,7 @@ Filters.dropShadow = function(canvas,src, blurX, blurY, angle, distance, color,i
shadow = Filters._moveRGB(width, height, shadow, moveX, moveY, inner ? colorFirst : colorAlpha);
- var retCanvas = Filters.createCanvas(canvas.width,canvas.height);
+ var retCanvas = createCanvas(canvas.width,canvas.height);
Filters._setRGB(retCanvas.getContext("2d"),0,0,width,height,shadow);
if(blurX>0 || blurY > 0){
retCanvas = Filters.blur(retCanvas,retCanvas.getContext("2d"), blurX, blurY, iterations,null);
@@ -389,7 +389,7 @@ Filters._cut = function(a,min,max){
Filters.gradientBevel = function(canvas, src, colors, ratios, blurX, blurY, strength, type, angle, distance, knockout, iterations) {
var width = canvas.width;
var height = canvas.height;
- var retImg = Filters.createCanvas(width,height);
+ var retImg = createCanvas(width,height);
var srcPixels = src.getImageData(0, 0, width, height).data;
var revPixels = [];
@@ -400,7 +400,7 @@ Filters.gradientBevel = function(canvas, src, colors, ratios, blurX, blurY, stre
revPixels[i+3] = 255-srcPixels[i+3];
}
- var gradient = Filters.createCanvas(512, 1);
+ var gradient = createCanvas(512, 1);
var gg = gradient.getContext("2d");
var grd=ctx.createLinearGradient(0,0,511,0);
@@ -417,8 +417,8 @@ Filters.gradientBevel = function(canvas, src, colors, ratios, blurX, blurY, stre
if(type!=Filters.OUTER){
var hilightIm = Filters.dropShadow(canvas,src,0, 0, angle, distance, [255,0,0,1], true, iterations, strength, true);
var shadowIm = Filters.dropShadow(canvas,src, 0, 0, angle + 180, distance, [0,0,255,1], true, iterations, strength, true);
- var h2 = Filters.createCanvas(width,height);
- var s2 = Filters.createCanvas(width,height);
+ var h2 = createCanvas(width,height);
+ var s2 = createCanvas(width,height);
var hc=h2.getContext("2d");
var sc=s2.getContext("2d");
hc.drawImage(hilightIm,0,0);
@@ -434,8 +434,8 @@ Filters.gradientBevel = function(canvas, src, colors, ratios, blurX, blurY, stre
if(type!=Filters.INNER){
var hilightIm = Filters.dropShadow(canvas,src,0, 0, angle + 180, distance, [255,0,0,1], false, iterations, strength, true);
var shadowIm = Filters.dropShadow(canvas,src, 0, 0, angle, distance, [0,0,255,1], false, iterations, strength, true);
- var h2 = Filters.createCanvas(width,height);
- var s2 = Filters.createCanvas(width,height);
+ var h2 = createCanvas(width,height);
+ var s2 = createCanvas(width,height);
var hc=h2.getContext("2d");
var sc=s2.getContext("2d");
hc.drawImage(hilightIm,0,0);
@@ -532,7 +532,7 @@ Filters.convolution = function(canvas,ctx, weights, opaque) {
// pad output by the convolution matrix
var w = sw;
var h = sh;
- var outCanvas = Filters.createCanvas(w,h);
+ var outCanvas = createCanvas(w,h);
var outCtx = outCanvas.getContext("2d");
var output = outCtx.getImageData(0,0,w,h);
var dst = output.data;
@@ -591,7 +591,7 @@ Filters.colorMatrix = function(canvas,ctx,m){
data[b] = (m[10] * oR) + (m[11] * oG) + (m[12] * oB) + (m[13] * oA) + m[14];
data[a] = (m[15] * oR) + (m[16] * oG) + (m[17] * oB) + (m[18] * oA) + m[19];
}
- var outCanvas = Filters.createCanvas(canvas.width,canvas.height);
+ var outCanvas = createCanvas(canvas.width,canvas.height);
var outCtx = outCanvas.getContext("2d");
outCtx.putImageData(pixels,0,0);
return outCanvas;
@@ -848,7 +848,7 @@ var cxform = function(r_add,g_add,b_add,a_add,r_mult,g_mult,b_mult,a_mult){
if(this.isEmpty()){
return fimg
};
- var icanvas = Filters.createCanvas(fimg.width,fimg.height);
+ var icanvas = createCanvas(fimg.width,fimg.height);
var ictx = icanvas.getContext("2d");
ictx.drawImage(fimg,0,0);
var imdata=ictx.getImageData(0,0,icanvas.width,icanvas.height);
@@ -875,7 +875,7 @@ var place = function(obj,canvas,ctx,matrix,ctrans,blendMode,frame,ratio,time){
ctx.transform(matrix[0],matrix[1],matrix[2],matrix[3],matrix[4],matrix[5]);
if(blendMode>1){
var oldctx = ctx;
- var ncanvas = Filters.createCanvas(canvas.width,canvas.height);
+ var ncanvas = createCanvas(canvas.width,canvas.height);
ctx = ncanvas.getContext("2d");
enhanceContext(ctx);
ctx.applyTransforms(oldctx._matrices);
@@ -899,8 +899,8 @@ window.addEventListener('load',function(){
var wsize = document.getElementById("width_size");
var hsize = document.getElementById("height_size");
- var bsize = document.getElementById("both_size");
- bsize.addEventListener('mousedown', initDragBoth, false);
+ //var bsize = document.getElementById("both_size");
+ //bsize.addEventListener('mousedown', initDragBoth, false);
wsize.addEventListener('mousedown', initDragWidth, false);
hsize.addEventListener('mousedown', initDragHeight, false);
});
@@ -937,12 +937,14 @@ function initDrag(e) {
document.documentElement.addEventListener('mouseup', stopDrag, false);
}
-function doDrag(e) {
+function doDrag(e) {
if(dragWidth){
canvas.width = (startWidth + e.clientX - startX);
+ canvas.height = canvas.width*originalHeight/originalWidth;
}
- if(dragHeight){
+ else if(dragHeight){
canvas.height = (startHeight + e.clientY - startY);
+ canvas.width = canvas.height*originalWidth/originalHeight;
}
drawFrame();
}
@@ -951,3 +953,37 @@ function stopDrag(e) {
document.documentElement.removeEventListener('mousemove', doDrag, false);
document.documentElement.removeEventListener('mouseup', stopDrag, false);
}
+
+
+function drawPath(ctx,p){
+ ctx.beginPath();
+ var parts = p.split(" ");
+ var len = parts.length;
+ var drawCommand = "";
+ for(var i=0;i