Fix cubicCurveTo in Flash embed
This commit is contained in:
@@ -322,6 +322,8 @@ class FlashHelper {
|
|||||||
var shapeRecords = new Array <ShapeRecord> ();
|
var shapeRecords = new Array <ShapeRecord> ();
|
||||||
var i:Int = 0;
|
var i:Int = 0;
|
||||||
var styleChanged:Bool = false;
|
var styleChanged:Bool = false;
|
||||||
|
var dx = 0;
|
||||||
|
var dy = 0;
|
||||||
|
|
||||||
while (i < native_glyph.points.length) {
|
while (i < native_glyph.points.length) {
|
||||||
|
|
||||||
@@ -331,8 +333,8 @@ class FlashHelper {
|
|||||||
|
|
||||||
case 1: // Move
|
case 1: // Move
|
||||||
|
|
||||||
var dx = native_glyph.points[i++];
|
dx = native_glyph.points[i++];
|
||||||
var dy = native_glyph.points[i++];
|
dy = native_glyph.points[i++];
|
||||||
shapeRecords.push( SHRChange({
|
shapeRecords.push( SHRChange({
|
||||||
moveTo: {dx: dx, dy: -dy},
|
moveTo: {dx: dx, dy: -dy},
|
||||||
// Set fill style to 1 in first style change record
|
// Set fill style to 1 in first style change record
|
||||||
@@ -346,16 +348,47 @@ class FlashHelper {
|
|||||||
|
|
||||||
case 2: // LineTo
|
case 2: // LineTo
|
||||||
|
|
||||||
var dx = native_glyph.points[i++];
|
dx = native_glyph.points[i++];
|
||||||
var dy = native_glyph.points[i++];
|
dy = native_glyph.points[i++];
|
||||||
shapeRecords.push (SHREdge(dx, -dy));
|
shapeRecords.push (SHREdge(dx, -dy));
|
||||||
|
|
||||||
case 3: // CurveTo
|
case 3: // CurveTo
|
||||||
var cdx = native_glyph.points[i++];
|
var cdx = native_glyph.points[i++];
|
||||||
var cdy = native_glyph.points[i++];
|
var cdy = native_glyph.points[i++];
|
||||||
var adx = native_glyph.points[i++];
|
dx = native_glyph.points[i++];
|
||||||
var ady = native_glyph.points[i++];
|
dy = native_glyph.points[i++];
|
||||||
shapeRecords.push (SHRCurvedEdge(cdx, -cdy, adx, -ady));
|
shapeRecords.push (SHRCurvedEdge(cdx, -cdy, dx, -dy));
|
||||||
|
|
||||||
|
case 4: // CubicCurveTo
|
||||||
|
var p1x = native_glyph.points[i++];
|
||||||
|
var p1y = native_glyph.points[i++];
|
||||||
|
var p2x = native_glyph.points[i++];
|
||||||
|
var p2y = native_glyph.points[i++];
|
||||||
|
var p3x = native_glyph.points[i++];
|
||||||
|
var p3y = native_glyph.points[i++];
|
||||||
|
|
||||||
|
// Get original points
|
||||||
|
|
||||||
|
var cp1x = p1x + dx;
|
||||||
|
var cp1y = p1y + dy;
|
||||||
|
var cp2x = p2x + cp1x;
|
||||||
|
var cp2y = p2y + cp1y;
|
||||||
|
var endx = p3x + cp2x;
|
||||||
|
var endy = p3y + cp2y;
|
||||||
|
|
||||||
|
// Convert to quadratic
|
||||||
|
|
||||||
|
var cpx = Std.int ((-0.25 * dx) + (0.75 * cp1x) + (0.75 * cp2x) + ( -0.25 * endx));
|
||||||
|
var cpy = Std.int (( -0.25 * dy) + (0.75 * cp1y) + (0.75 * cp2y) + ( -0.25 * endy));
|
||||||
|
|
||||||
|
// Offset again
|
||||||
|
|
||||||
|
var cdx = cpx - dx;
|
||||||
|
var cdy = cpy - dy;
|
||||||
|
dx = endx - cpx;
|
||||||
|
dy = endy - cpy;
|
||||||
|
|
||||||
|
shapeRecords.push (SHRCurvedEdge(cdx, -cdy, dx, -dy));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw "Invalid control point type encountered! (" + type + ")";
|
throw "Invalid control point type encountered! (" + type + ")";
|
||||||
|
|||||||
Reference in New Issue
Block a user