From f57ef4d91587e9e6bea973f993efc803e85a480c Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sat, 22 Jun 2019 12:55:17 +0200 Subject: [PATCH] Fix decimante points breaking point drawing in freedrawing (#5771) --- src/brushes/pencil_brush.class.js | 5 ++- test/visual/freedraw.js | 54 +++++++++++++++++++++++++++- test/visual/golden/freedrawing5.png | Bin 0 -> 445 bytes test/visual/golden/freedrawing6.png | Bin 0 -> 21325 bytes 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 test/visual/golden/freedrawing5.png create mode 100644 test/visual/golden/freedrawing6.png diff --git a/src/brushes/pencil_brush.class.js b/src/brushes/pencil_brush.class.js index 268dac7ca7c..69bb5a3b451 100644 --- a/src/brushes/pencil_brush.class.js +++ b/src/brushes/pencil_brush.class.js @@ -110,7 +110,7 @@ * @private */ _reset: function() { - this._points.length = 0; + this._points = []; this._setBrushStyles(); this._setShadow(); }, @@ -240,6 +240,9 @@ newPoints.push(lastPoint); } } + if (newPoints.length === 1) { + newPoints.push(new fabric.Point(newPoints[0].x, newPoints[0].y)); + } return newPoints; }, diff --git a/test/visual/freedraw.js b/test/visual/freedraw.js index 2a5a23214c8..3e5c7c44f06 100644 --- a/test/visual/freedraw.js +++ b/test/visual/freedraw.js @@ -77,7 +77,7 @@ function freedrawing(canvas, callback) { // eslint-disable-next-line - var points = [{"x":"14.940","y":"18.084"},{"x":"14.940","y":"20.076"},{"x":"14.940","y":"22.068"},{"x":"14.940","y":"25.056"},{"x":"14.940","y":"27.048"},{"x":"14.940","y":"29.040"},{"x":"14.940","y":"31.032"},{"x":"14.940","y":"33.024"},{"x":"14.940","y":"35.016"},{"x":"15.936","y":"36.012"},{"x":"17.928","y":"35.016"},{"x":"18.924","y":"34.020"},{"x":"19.920","y":"32.028"},{"x":"21.912","y":"31.032"},{"x":"22.908","y":"29.040"},{"x":"23.904","y":"27.048"},{"x":"24.900","y":"25.056"},{"x":"25.896","y":"24.060"},{"x":"26.892","y":"22.068"},{"x":"28.884","y":"23.064"},{"x":"29.880","y":"24.060"},{"x":"30.876","y":"25.056"},{"x":"32.869","y":"25.056"},{"x":"34.861","y":"25.056"},{"x":"36.853","y":"25.056"},{"x":"38.845","y":"25.056"},{"x":"40.837","y":"24.060"},{"x":"41.833","y":"23.064"},{"x":"42.829","y":"22.068"},{"x":"43.825","y":"21.072"},{"x":"44.821","y":"20.076"},{"x":"43.825","y":"24.060"},{"x":"43.825","y":"26.052"},{"x":"43.825","y":"30.036"},{"x":"43.825","y":"33.024"},{"x":"43.825","y":"35.016"},{"x":"43.825","y":"38.004"},{"x":"43.825","y":"40.992"},{"x":"43.825","y":"42.984"},{"x":"43.825","y":"44.976"},{"x":"44.821","y":"45.972"},{"x":"45.817","y":"46.968"},{"x":"47.809","y":"46.968"},{"x":"48.805","y":"45.972"},{"x":"50.797","y":"43.980"},{"x":"51.793","y":"41.988"},{"x":"52.789","y":"38.004"},{"x":"53.785","y":"37.008"},{"x":"53.785","y":"35.016"},{"x":"54.781","y":"33.024"},{"x":"54.781","y":"31.032"},{"x":"54.781","y":"33.024"},{"x":"56.773","y":"33.024"},{"x":"58.765","y":"34.020"},{"x":"60.757","y":"34.020"},{"x":"62.749","y":"34.020"},{"x":"63.745","y":"33.024"}]; + var points = [{"x":14.940,"y":18.084},{"x":14.940,"y":20.076},{"x":14.940,"y":22.068},{"x":14.940,"y":25.056},{"x":14.940,"y":27.048},{"x":14.940,"y":29.040},{"x":14.940,"y":31.032},{"x":14.940,"y":33.024},{"x":14.940,"y":35.016},{"x":15.936,"y":36.012},{"x":17.928,"y":35.016},{"x":18.924,"y":34.020},{"x":19.920,"y":32.028},{"x":21.912,"y":31.032},{"x":22.908,"y":29.040},{"x":23.904,"y":27.048},{"x":24.900,"y":25.056},{"x":25.896,"y":24.060},{"x":26.892,"y":22.068},{"x":28.884,"y":23.064},{"x":29.880,"y":24.060},{"x":30.876,"y":25.056},{"x":32.869,"y":25.056},{"x":34.861,"y":25.056},{"x":36.853,"y":25.056},{"x":38.845,"y":25.056},{"x":40.837,"y":24.060},{"x":41.833,"y":23.064},{"x":42.829,"y":22.068},{"x":43.825,"y":21.072},{"x":44.821,"y":20.076},{"x":43.825,"y":24.060},{"x":43.825,"y":26.052},{"x":43.825,"y":30.036},{"x":43.825,"y":33.024},{"x":43.825,"y":35.016},{"x":43.825,"y":38.004},{"x":43.825,"y":40.992},{"x":43.825,"y":42.984},{"x":43.825,"y":44.976},{"x":44.821,"y":45.972},{"x":45.817,"y":46.968},{"x":47.809,"y":46.968},{"x":48.805,"y":45.972},{"x":50.797,"y":43.980},{"x":51.793,"y":41.988},{"x":52.789,"y":38.004},{"x":53.785,"y":37.008},{"x":53.785,"y":35.016},{"x":54.781,"y":33.024},{"x":54.781,"y":31.032},{"x":54.781,"y":33.024},{"x":56.773,"y":33.024},{"x":58.765,"y":34.020},{"x":60.757,"y":34.020},{"x":62.749,"y":34.020},{"x":63.745,"y":33.024}]; canvas.isDrawingMode = true; var brush = new fabric.PencilBrush(canvas); brush.color = 'red'; @@ -148,5 +148,57 @@ fabricClass: 'Canvas' }); + function freedrawingWithDecimateToPoint(canvas, callback) { + // eslint-disable-next-line + var points = [{"x":14.940,"y":18.084},{"x":14.940,"y":18.084},{"x":14.940,"y":18.084}]; + canvas.isDrawingMode = true; + var brush = new fabric.PencilBrush(canvas); + brush.color = 'red'; + brush.width = 15; + brush.decimate = 1; + canvas.freeDrawingBrush = brush; + pointDrawer(points, brush); + canvas.renderAll(); + callback(canvas.lowerCanvasEl); + } + + tests.push({ + test: 'Simple free drawing to dot', + code: freedrawingWithDecimateToPoint, + golden: 'freedrawing5.png', + percentage: 0.09, + width: 50, + height: 50, + fabricClass: 'Canvas' + }); + + function withDecimation(canvas, callback) { + // eslint-disable-next-line + var points = [{'x':24.9,"y":28.044},{"x":23.904,"y":29.04},{"x":23.904,"y":31.032},{"x":25.896,"y":32.028},{"x":27.888,"y":34.02},{"x":29.88,"y":35.016},{"x":32.869,"y":37.008},{"x":35.857,"y":38.004},{"x":38.845,"y":39.996},{"x":41.833,"y":40.992},{"x":45.817,"y":42.984},{"x":49.801,"y":44.976},{"x":52.789,"y":45.972},{"x":57.769,"y":46.968},{"x":60.757,"y":47.964},{"x":62.749,"y":48.96},{"x":66.733,"y":49.956},{"x":68.725,"y":49.956},{"x":71.713,"y":49.956},{"x":73.705,"y":49.956},{"x":75.697,"y":49.956},{"x":77.689,"y":49.956},{"x":79.681,"y":49.956},{"x":81.673,"y":48.96},{"x":82.669,"y":47.964},{"x":83.665,"y":46.968},{"x":84.661,"y":45.972},{"x":85.657,"y":43.98},{"x":85.657,"y":41.988},{"x":84.661,"y":40.992},{"x":83.665,"y":39.996},{"x":81.673,"y":39.996},{"x":79.681,"y":39.996},{"x":77.689,"y":39.996},{"x":75.697,"y":39.996},{"x":73.705,"y":39.996},{"x":72.709,"y":40.992},{"x":72.709,"y":43.98},{"x":72.709,"y":45.972},{"x":72.709,"y":47.964},{"x":72.709,"y":49.956},{"x":72.709,"y":51.948},{"x":72.709,"y":54.937},{"x":73.705,"y":55.933},{"x":74.701,"y":57.925},{"x":76.693,"y":58.921},{"x":77.689,"y":59.917},{"x":79.681,"y":60.913},{"x":81.673,"y":61.909},{"x":83.665,"y":62.905},{"x":85.657,"y":63.901},{"x":87.649,"y":63.901},{"x":90.637,"y":64.897},{"x":92.629,"y":64.897},{"x":94.622,"y":64.897},{"x":96.614,"y":64.897},{"x":98.606,"y":64.897},{"x":100.598,"y":64.897},{"x":102.59,"y":64.897},{"x":105.578,"y":63.901},{"x":106.574,"y":62.905},{"x":108.566,"y":61.909},{"x":109.562,"y":59.917},{"x":110.558,"y":58.921},{"x":111.554,"y":56.929},{"x":113.546,"y":54.937},{"x":113.546,"y":52.944},{"x":114.542,"y":50.952},{"x":115.538,"y":47.964},{"x":115.538,"y":45.972},{"x":115.538,"y":42.984},{"x":115.538,"y":39.996},{"x":115.538,"y":38.004},{"x":114.542,"y":36.012},{"x":113.546,"y":35.016},{"x":112.55,"y":34.02},{"x":111.554,"y":33.024},{"x":109.562,"y":33.024},{"x":107.57,"y":33.024},{"x":107.57,"y":35.016},{"x":107.57,"y":37.008},{"x":108.566,"y":38.004},{"x":109.562,"y":39},{"x":110.558,"y":39.996},{"x":112.55,"y":40.992},{"x":115.538,"y":41.988},{"x":118.526,"y":42.984},{"x":121.514,"y":42.984},{"x":123.506,"y":42.984},{"x":125.498,"y":42.984},{"x":128.486,"y":42.984},{"x":130.478,"y":42.984},{"x":132.47,"y":41.988},{"x":133.466,"y":40.992},{"x":134.462,"y":39.996},{"x":135.458,"y":38.004},{"x":135.458,"y":36.012},{"x":135.458,"y":34.02},{"x":135.458,"y":32.028},{"x":134.462,"y":31.032},{"x":133.466,"y":30.036},{"x":132.47,"y":29.04},{"x":131.474,"y":30.036},{"x":130.478,"y":31.032},{"x":130.478,"y":34.02},{"x":129.482,"y":38.004},{"x":129.482,"y":39.996},{"x":128.486,"y":42.984},{"x":128.486,"y":45.972},{"x":128.486,"y":48.96},{"x":128.486,"y":50.952},{"x":128.486,"y":53.94},{"x":128.486,"y":56.929},{"x":128.486,"y":58.921},{"x":128.486,"y":60.913},{"x":128.486,"y":62.905},{"x":128.486,"y":65.893},{"x":129.482,"y":66.889},{"x":129.482,"y":68.881},{"x":131.474,"y":70.873},{"x":131.474,"y":72.865},{"x":132.47,"y":74.857},{"x":134.462,"y":76.849},{"x":134.462,"y":78.841},{"x":135.458,"y":80.833},{"x":136.454,"y":82.825},{"x":137.45,"y":84.817},{"x":138.446,"y":86.809},{"x":138.446,"y":88.801},{"x":137.45,"y":90.793},{"x":134.462,"y":90.793},{"x":132.47,"y":90.793},{"x":129.482,"y":91.789},{"x":127.49,"y":91.789},{"x":124.502,"y":91.789},{"x":120.518,"y":91.789},{"x":117.53,"y":92.785},{"x":114.542,"y":92.785},{"x":110.558,"y":92.785},{"x":106.574,"y":92.785},{"x":102.59,"y":92.785},{"x":99.602,"y":92.785},{"x":95.618,"y":92.785},{"x":91.633,"y":92.785},{"x":88.645,"y":92.785},{"x":84.661,"y":92.785},{"x":82.669,"y":92.785},{"x":79.681,"y":91.789},{"x":77.689,"y":90.793},{"x":74.701,"y":89.797},{"x":72.709,"y":88.801},{"x":70.717,"y":88.801},{"x":67.729,"y":87.805},{"x":66.733,"y":86.809},{"x":64.741,"y":85.813},{"x":61.753,"y":84.817},{"x":59.761,"y":83.821},{"x":57.769,"y":82.825},{"x":55.777,"y":82.825},{"x":53.785,"y":82.825},{"x":51.793,"y":82.825},{"x":48.805,"y":82.825},{"x":46.813,"y":82.825},{"x":43.825,"y":82.825},{"x":41.833,"y":82.825},{"x":39.841,"y":82.825},{"x":37.849,"y":82.825},{"x":35.857,"y":82.825},{"x":34.861,"y":83.821},{"x":33.865,"y":84.817},{"x":32.869,"y":86.809},{"x":32.869,"y":88.801},{"x":31.873,"y":89.797},{"x":31.873,"y":91.789},{"x":31.873,"y":93.781},{"x":30.876,"y":97.765},{"x":30.876,"y":99.757},{"x":30.876,"y":101.749},{"x":30.876,"y":103.741},{"x":30.876,"y":105.733},{"x":30.876,"y":107.725},{"x":30.876,"y":109.717},{"x":30.876,"y":111.709},{"x":31.873,"y":114.697},{"x":32.869,"y":116.689},{"x":34.861,"y":118.682},{"x":35.857,"y":120.674},{"x":37.849,"y":122.666},{"x":39.841,"y":124.658},{"x":41.833,"y":127.646},{"x":42.829,"y":128.642},{"x":44.821,"y":130.634},{"x":46.813,"y":131.63},{"x":48.805,"y":132.626},{"x":50.797,"y":133.622},{"x":52.789,"y":134.618},{"x":54.781,"y":134.618},{"x":56.773,"y":134.618},{"x":58.765,"y":134.618},{"x":59.761,"y":133.622},{"x":61.753,"y":132.626},{"x":63.745,"y":130.634},{"x":64.741,"y":129.638},{"x":65.737,"y":128.642},{"x":66.733,"y":126.65},{"x":68.725,"y":125.654},{"x":69.721,"y":123.662},{"x":71.713,"y":121.67},{"x":72.709,"y":120.674},{"x":73.705,"y":118.682},{"x":74.701,"y":117.686},{"x":76.693,"y":115.693},{"x":77.689,"y":114.697},{"x":78.685,"y":113.701},{"x":80.677,"y":112.705},{"x":82.669,"y":111.709},{"x":84.661,"y":111.709},{"x":86.653,"y":110.713},{"x":88.645,"y":110.713},{"x":90.637,"y":110.713},{"x":93.625,"y":110.713},{"x":97.61,"y":110.713},{"x":100.598,"y":110.713},{"x":102.59,"y":110.713},{"x":105.578,"y":110.713},{"x":108.566,"y":110.713},{"x":110.558,"y":110.713},{"x":113.546,"y":110.713},{"x":116.534,"y":109.717},{"x":120.518,"y":109.717},{"x":122.51,"y":109.717},{"x":124.502,"y":109.717},{"x":126.494,"y":109.717},{"x":127.49,"y":112.705},{"x":127.49,"y":115.693},{"x":128.486,"y":116.689},{"x":128.486,"y":119.678},{"x":128.486,"y":122.666},{"x":128.486,"y":125.654},{"x":128.486,"y":127.646},{"x":127.49,"y":130.634},{"x":126.494,"y":134.618},{"x":124.502,"y":137.606},{"x":122.51,"y":140.594},{"x":121.514,"y":144.578},{"x":118.526,"y":146.57},{"x":116.534,"y":150.554},{"x":114.542,"y":151.55},{"x":111.554,"y":155.534},{"x":109.562,"y":157.526},{"x":107.57,"y":159.518},{"x":105.578,"y":161.51},{"x":103.586,"y":164.498},{"x":101.594,"y":167.486},{"x":100.598,"y":169.478},{"x":99.602,"y":171.47},{"x":98.606,"y":173.462},{"x":96.614,"y":177.446},{"x":96.614,"y":181.431},{"x":95.618,"y":182.427},{"x":95.618,"y":184.419},{"x":95.618,"y":187.407},{"x":95.618,"y":189.399},{"x":95.618,"y":192.387},{"x":96.614,"y":193.383},{"x":97.61,"y":195.375},{"x":98.606,"y":196.371},{"x":99.602,"y":198.363},{"x":100.598,"y":199.359},{"x":101.594,"y":201.351},{"x":102.59,"y":203.343},{"x":102.59,"y":205.335},{"x":102.59,"y":207.327},{"x":102.59,"y":209.319},{"x":99.602,"y":210.315},{"x":97.61,"y":210.315},{"x":95.618,"y":210.315},{"x":93.625,"y":208.323},{"x":91.633,"y":207.327},{"x":89.641,"y":205.335},{"x":88.645,"y":203.343},{"x":86.653,"y":202.347},{"x":85.657,"y":200.355},{"x":82.669,"y":198.363},{"x":81.673,"y":196.371},{"x":77.689,"y":193.383},{"x":76.693,"y":192.387},{"x":74.701,"y":190.395},{"x":71.713,"y":187.407},{"x":68.725,"y":185.415},{"x":66.733,"y":184.419},{"x":64.741,"y":183.423},{"x":62.749,"y":182.427},{"x":61.753,"y":181.431},{"x":59.761,"y":180.435},{"x":57.769,"y":180.435},{"x":56.773,"y":179.438},{"x":56.773,"y":177.446},{"x":56.773,"y":175.454},{"x":55.777,"y":174.458},{"x":55.777,"y":172.466},{"x":54.781,"y":170.474},{"x":54.781,"y":168.482},{"x":53.785,"y":167.486},{"x":52.789,"y":166.49},{"x":51.793,"y":165.494},{"x":49.801,"y":165.494},{"x":47.809,"y":165.494},{"x":45.817,"y":165.494},{"x":42.829,"y":165.494},{"x":40.837,"y":165.494},{"x":38.845,"y":166.49},{"x":36.853,"y":166.49},{"x":35.857,"y":167.486},{"x":34.861,"y":168.482},{"x":33.865,"y":169.478},{"x":32.869,"y":170.474},{"x":31.873,"y":171.47},{"x":31.873,"y":173.462},{"x":31.873,"y":176.45},{"x":31.873,"y":178.442},{"x":31.873,"y":181.431},{"x":32.869,"y":183.423},{"x":33.865,"y":186.411},{"x":34.861,"y":188.403},{"x":34.861,"y":191.391},{"x":35.857,"y":193.383},{"x":35.857,"y":195.375},{"x":35.857,"y":198.363},{"x":35.857,"y":201.351},{"x":35.857,"y":204.339},{"x":35.857,"y":206.331},{"x":35.857,"y":208.323},{"x":34.861,"y":209.319},{"x":33.865,"y":211.311},{"x":32.869,"y":212.307},{"x":31.873,"y":213.303},{"x":30.876,"y":214.299},{"x":32.869,"y":214.299},{"x":33.865,"y":215.295},{"x":35.857,"y":215.295},{"x":38.845,"y":215.295},{"x":41.833,"y":216.291},{"x":44.821,"y":217.287},{"x":47.809,"y":218.283},{"x":51.793,"y":219.279},{"x":55.777,"y":220.275},{"x":56.773,"y":221.271},{"x":59.761,"y":222.267},{"x":62.749,"y":224.259},{"x":64.741,"y":224.259},{"x":65.737,"y":225.255},{"x":66.733,"y":226.251},{"x":68.725,"y":227.247},{"x":69.721,"y":228.243},{"x":71.713,"y":229.239},{"x":73.705,"y":229.239},{"x":74.701,"y":230.235},{"x":77.689,"y":231.231},{"x":79.681,"y":232.227},{"x":83.665,"y":232.227},{"x":85.657,"y":233.223},{"x":88.645,"y":233.223},{"x":91.633,"y":234.219},{"x":94.622,"y":234.219},{"x":97.61,"y":234.219},{"x":100.598,"y":234.219},{"x":104.582,"y":234.219},{"x":107.57,"y":234.219},{"x":111.554,"y":234.219},{"x":114.542,"y":234.219},{"x":117.53,"y":234.219},{"x":122.51,"y":234.219},{"x":126.494,"y":234.219},{"x":129.482,"y":234.219},{"x":131.474,"y":233.223},{"x":133.466,"y":233.223},{"x":135.458,"y":232.227},{"x":138.446,"y":230.235},{"x":140.438,"y":228.243},{"x":142.43,"y":227.247},{"x":144.422,"y":225.255},{"x":145.418,"y":222.267},{"x":148.406,"y":220.275},{"x":149.402,"y":217.287},{"x":150.398,"y":215.295},{"x":152.39,"y":213.303},{"x":153.386,"y":211.311},{"x":154.382,"y":208.323},{"x":155.378,"y":206.331},{"x":156.375,"y":205.335},{"x":157.371,"y":204.339},{"x":158.367,"y":202.347},{"x":159.363,"y":201.351},{"x":158.367,"y":199.359},{"x":157.371,"y":198.363},{"x":155.378,"y":197.367},{"x":153.386,"y":196.371},{"x":151.394,"y":195.375},{"x":148.406,"y":193.383},{"x":144.422,"y":192.387},{"x":143.426,"y":191.391},{"x":141.434,"y":190.395},{"x":139.442,"y":189.399},{"x":137.45,"y":188.403},{"x":135.458,"y":187.407},{"x":134.462,"y":186.411},{"x":133.466,"y":185.415},{"x":131.474,"y":184.419},{"x":130.478,"y":183.423},{"x":129.482,"y":182.427},{"x":128.486,"y":181.431},{"x":128.486,"y":179.438},{"x":128.486,"y":177.446},{"x":128.486,"y":175.454},{"x":129.482,"y":172.466},{"x":130.478,"y":170.474},{"x":131.474,"y":168.482},{"x":133.466,"y":165.494},{"x":135.458,"y":163.502},{"x":137.45,"y":160.514},{"x":138.446,"y":159.518},{"x":140.438,"y":157.526},{"x":141.434,"y":155.534},{"x":143.426,"y":153.542},{"x":144.422,"y":151.55},{"x":145.418,"y":149.558},{"x":147.41,"y":147.566},{"x":147.41,"y":145.574},{"x":148.406,"y":144.578},{"x":149.402,"y":142.586},{"x":150.398,"y":139.598},{"x":150.398,"y":136.61},{"x":150.398,"y":134.618},{"x":150.398,"y":131.63},{"x":150.398,"y":128.642},{"x":150.398,"y":125.654},{"x":150.398,"y":123.662},{"x":150.398,"y":121.67},{"x":150.398,"y":119.678},{"x":150.398,"y":116.689},{"x":149.402,"y":115.693},{"x":149.402,"y":113.701},{"x":149.402,"y":111.709},{"x":150.398,"y":109.717},{"x":151.394,"y":108.721},{"x":153.386,"y":106.729},{"x":154.382,"y":103.741},{"x":157.371,"y":100.753},{"x":158.367,"y":99.757},{"x":159.363,"y":97.765},{"x":161.355,"y":94.777},{"x":163.347,"y":92.785},{"x":164.343,"y":91.789},{"x":165.339,"y":89.797},{"x":166.335,"y":86.809},{"x":167.331,"y":84.817},{"x":167.331,"y":82.825},{"x":167.331,"y":80.833},{"x":167.331,"y":78.841},{"x":167.331,"y":76.849},{"x":167.331,"y":74.857},{"x":166.335,"y":72.865},{"x":165.339,"y":71.869},{"x":164.343,"y":70.873},{"x":163.347,"y":68.881},{"x":162.351,"y":67.885},{"x":161.355,"y":66.889},{"x":160.359,"y":65.893},{"x":159.363,"y":64.897},{"x":158.367,"y":63.901},{"x":157.371,"y":62.905},{"x":156.375,"y":61.909},{"x":155.378,"y":60.913},{"x":154.382,"y":59.917},{"x":153.386,"y":58.921},{"x":152.39,"y":57.925},{"x":152.39,"y":55.933},{"x":152.39,"y":53.94},{"x":152.39,"y":51.948},{"x":153.386,"y":49.956},{"x":154.382,"y":48.96},{"x":154.382,"y":46.968},{"x":155.378,"y":45.972},{"x":156.375,"y":44.976},{"x":156.375,"y":42.984},{"x":157.371,"y":41.988},{"x":158.367,"y":39},{"x":159.363,"y":37.008},{"x":159.363,"y":35.016},{"x":160.359,"y":33.024},{"x":161.355,"y":31.032},{"x":161.355,"y":29.04},{"x":162.351,"y":27.048},{"x":162.351,"y":25.056},{"x":163.347,"y":24.06},{"x":164.343,"y":23.064}]; + canvas.isDrawingMode = true; + var brush = new fabric.PencilBrush(canvas); + brush.color = 'red'; + brush.width = 8; + canvas.freeDrawingBrush = brush; + pointDrawer(points, brush); + brush.color = 'blue'; + brush.width = 2; + brush.decimate = 7; + pointDrawer(points, brush); + canvas.renderAll(); + callback(canvas.lowerCanvasEl); + } + + tests.push({ + test: 'Simple free drawing, with high decimation', + code: withDecimation, + golden: 'freedrawing6.png', + percentage: 0.09, + width: 200, + height: 250, + fabricClass: 'Canvas' + }); + + tests.forEach(visualTestLoop(QUnit)); })(); diff --git a/test/visual/golden/freedrawing5.png b/test/visual/golden/freedrawing5.png new file mode 100644 index 0000000000000000000000000000000000000000..480f3b59f00a580fad17aa9e8704c86771da251f GIT binary patch literal 445 zcmV;u0Yd(XP)1zxMgHBh_r%8*K z99+Ow;X=@UB%a? ny_Ql+DW#NBN-3q3QtIG02$QX;;)wiO00000NkvXXu0mjftG37N literal 0 HcmV?d00001 diff --git a/test/visual/golden/freedrawing6.png b/test/visual/golden/freedrawing6.png new file mode 100644 index 0000000000000000000000000000000000000000..e65c45fbf96403425bd3b1865cdb463f026bd7d3 GIT binary patch literal 21325 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 V=?UYyf4u+z002ovPDHLkV1jQvqvHSo literal 0 HcmV?d00001