Html2canvas: рдЪрд┐рддреНрд░ рднрд░рд╛ рд╣реБрдЖ div рднреА рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ рдкрд░ рд╕реЗрдЯ рд╣реИ: рдХрд╡рд░;

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдлрд╝рд░ре░ 2017  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: niklasvh/html2canvas

http://imgur.com/3Zl6oRA | рддрд╕реНрд╡реАрд░ 1
http://imgur.com/Wr006qF | рддрд╕реНрд╡реАрд░ 2

Pic 1 рд╡рд╣ div рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЫрд╡рд┐ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ * Pic 2ред

рдХреЛрдИ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣реИрд▓реЛ, рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ред рдореИрдВ рд╡рд╣ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдиреАрдЪреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ:

```
рдХреБрдВрдЬреА: 'рдбреНрд░рд╛рдЗрдореЗрдЬ',
рдорд╛рди: рдлрд╝рдВрдХреНрд╢рди рдбреНрд░рд╛рдЗрдореЗрдЬ (рдЫрд╡рд┐, рд╕реНрд░реЛрдд, рдЧрдВрддрд╡реНрдп) {
/ рдХрд╕реНрдЯрдо рдХреЛрдб рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ /

        var newWidth = 30;
        var newHeight = 30;
        var newX = destination.left;
        var newY = destination.top;

        // console.log(image, source, destination);
        if (source.width/destination.width > source.height/destination.height) {
            newWidth = destination.width;
            newHeight = source.height * (destination.width / source.width);
            newY = destination.top + (destination.height - newHeight) / 2;
        } else {
            newWidth = source.width * (destination.height / source.height);
            newHeight = destination.height;
            newX = destination.left + (destination.width - newWidth) / 2;
        }
      // console.log(newWidth, newHeight);

        this.ctx.drawImage(image, source.left, source.top, source.width, source.height,
          newX, newY,
          newWidth, newHeight);
        // destination.width,
        // destination.height * (source.height / source.width)
        //   destination.width, destination.height);

      /**END CUSTOM CODE**/
    }

```

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реИрд▓реЛ, рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ред рдореИрдВ рд╡рд╣ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдиреАрдЪреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ:

```
рдХреБрдВрдЬреА: 'рдбреНрд░рд╛рдЗрдореЗрдЬ',
рдорд╛рди: рдлрд╝рдВрдХреНрд╢рди рдбреНрд░рд╛рдЗрдореЗрдЬ (рдЫрд╡рд┐, рд╕реНрд░реЛрдд, рдЧрдВрддрд╡реНрдп) {
/ рдХрд╕реНрдЯрдо рдХреЛрдб рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ /

        var newWidth = 30;
        var newHeight = 30;
        var newX = destination.left;
        var newY = destination.top;

        // console.log(image, source, destination);
        if (source.width/destination.width > source.height/destination.height) {
            newWidth = destination.width;
            newHeight = source.height * (destination.width / source.width);
            newY = destination.top + (destination.height - newHeight) / 2;
        } else {
            newWidth = source.width * (destination.height / source.height);
            newHeight = destination.height;
            newX = destination.left + (destination.width - newWidth) / 2;
        }
      // console.log(newWidth, newHeight);

        this.ctx.drawImage(image, source.left, source.top, source.width, source.height,
          newX, newY,
          newWidth, newHeight);
        // destination.width,
        // destination.height * (source.height / source.width)
        //   destination.width, destination.height);

      /**END CUSTOM CODE**/
    }

```

LanderBeeuwsaert рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓реЗрдВ (html2canvas.js рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛) рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

if (source.width/destination.width > source.height/destination.height) {

рд╕рд╛рде

if (source.width/destination.width < source.height/destination.height) {

рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдХрдо рд╕реЗ рдХрдоред

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

@LanderBeeuwsaert рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдиреЗ рд╕рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛, рдЖрдкрдХреЛ рдЗрд╕реЗ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдпреЛрдЧрджрд╛рди рд╣реИ

@niklasvh рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@LanderBeeuwsaert рдореИрдВ рдЖрдкрдХреЗ рдЗрд╕ рд╣реИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рдХрд╣рд╛рдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

@рд╕рдореБрд░рд╛рдИрдкреЗрдЯреНрд░рд╕
рдЕрд░реЗ, рд╣рд╛рдБ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ 0.5 рд╕реЗ 1.0.0 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рд╕рдордп рдкрд╣рд▓реЗ рдЦреЛрдЬрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ 1.0.0 рдореЗрдВ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдВрднрд╡рддрдГ рдПрдХ рдкреАрдЖрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рддреЛ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рд╣реИрдХ рдХреЗ рд╕рд╛рде 0.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрд╕реНрдХрд░рдг 1.0.0-alpha.9 рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ patch-package рдХреЛ @LanderBeeuwsaert рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝реЗрдВ html2canvas+1.0.0-alpha.9.patch :

diff --git a/node_modules/html2canvas/dist/html2canvas.js b/node_modules/html2canvas/dist/html2canvas.js
index 5f34081..66d1909 100644
--- a/node_modules/html2canvas/dist/html2canvas.js
+++ b/node_modules/html2canvas/dist/html2canvas.js
@@ -2443,7 +2443,22 @@ var CanvasRenderer = function () {
     }, {
         key: 'drawImage',
         value: function drawImage(image, source, destination) {
-            this.ctx.drawImage(image, source.left, source.top, source.width, source.height, destination.left, destination.top, destination.width, destination.height);
+            var newWidth = 30;
+            var newHeight = 30;
+            var newX = destination.left;
+            var newY = destination.top;
+
+            if (source.width/destination.width < source.height/destination.height) {
+                newWidth = destination.width;
+                newHeight = source.height * (destination.width / source.width);
+                newY = destination.top + (destination.height - newHeight) / 2;
+            } else {
+                newWidth = source.width * (destination.height / source.height);
+                newHeight = destination.height;
+                newX = destination.left + (destination.width - newWidth) / 2;
+            }
+
+            this.ctx.drawImage(image, source.left, source.top, source.width, source.height, newX, newY, newWidth, newHeight);
         }
     }, {
         key: 'drawShape',

рдкреВрд░реНрдг рдкрде рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдЬрд┐рд╕реЗ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

const html2canvas = require('html2canvas/dist/html2canvas.js');

рдореИрдВ рдЕрд▓реНрдлрд╛ рдмрд┐рд▓реНрдб рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдкреИрдЪ-рдкреИрдХреЗрдЬ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рд╣реИрд▓реЛ, рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ред рдореИрдВ рд╡рд╣ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдиреАрдЪреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ:

    key: 'drawImage',
      value: function drawImage(image, source, destination) {
        /**START CUSTOM CODE**/

          var newWidth = 30;
          var newHeight = 30;
          var newX = destination.left;
          var newY = destination.top;

          // console.log(image, source, destination);
          if (source.width/destination.width > source.height/destination.height) {
              newWidth = destination.width;
              newHeight = source.height * (destination.width / source.width);
              newY = destination.top + (destination.height - newHeight) / 2;
          } else {
              newWidth = source.width * (destination.height / source.height);
              newHeight = destination.height;
              newX = destination.left + (destination.width - newWidth) / 2;
          }
        // console.log(newWidth, newHeight);

          this.ctx.drawImage(image, source.left, source.top, source.width, source.height,
            newX, newY,
            newWidth, newHeight);
          // destination.width,
          // destination.height * (source.height / source.width)
          //   destination.width, destination.height);

        /**END CUSTOM CODE**/
      }

рдореБрдЭреЗ рдпрд╣ рдХреЛрдб рдХрд╣рд╛рдВ рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдереЛрдбрд╝реА рд╕реА рдлрд┐рдЬреВрд▓рдЦрд░реНрдЪреА рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

        CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {
        if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {
            var box = contentBox(container);
            /*CUSTOM CODE*/
            var newWidth = 30;
            var newHeight = 30;
            var newX = box.left;
            var newY = box.top;

            if (container.intrinsicWidth / box.width < container.intrinsicHeight / box.height) {
                    newWidth = box.width;
                    newHeight = container.intrinsicHeight * (box.width / container.intrinsicWidth);
                    newY = box.top + (box.height - newHeight) / 2;
            }
            else {
                newWidth = container.intrinsicWidth * (box.height / container.intrinsicHeight);
                newHeight = box.height;
                newX = box.left + (box.width - newWidth) / 2;
            }
            var path = calculatePaddingBoxPath(curves);
            this.path(path);
            this.ctx.save();
            this.ctx.clip();
            this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, newX, newY, newWidth, newHeight);
            this.ctx.restore();
        }
    };

рдЧреИрд░-рдорд┐рдиреАрдлрд╛рдЗрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЦреЛрдЬреЗрдВред рдмреЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП @LanderBeeuwsaert рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

@canoncarlson рдореЗрд░реА рдЦреБрд╢реА, рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рднреА рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ, CanvasRenderer.prototype.renderReplacedElement рдХреЛ node_modules/html2canvas/dist/html2canvas.js рдореЗрдВ рд▓рд╛рдЗрди 6274 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрджрд▓реЗрдВ, рдореИрдВ RC 5 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ @canoncarlson рдЬреИрд╕рд╛ рд╣реА рдХреЛрдб рд╣реИ, рдмрд╕ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ рдХрд╡рд░ рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {
  if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {
      var box = contentBox(container);
      var path = calculatePaddingBoxPath(curves);

      this.path(path);
      this.ctx.save();
      this.ctx.clip();

      let newWidth;
      let newHeight;
      let newX = box.left;
      let newY = box.top;

      if(container.intrinsicWidth / box.width < container.intrinsicHeight / box.height) {
        newWidth = box.width;
        newHeight = container.intrinsicHeight * (box.width / container.intrinsicWidth);
        newY = box.top + (box.height - newHeight) / 2;
      } else {
        newWidth = container.intrinsicWidth * (box.height / container.intrinsicHeight);
        newHeight = box.height;
        newX = box.left + (box.width - newWidth) / 2;
      }

      this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, newX, newY, newWidth, newHeight);
      this.ctx.restore();
  }
};

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП @LanderBeeuwsaert рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдХреНрд╕ рдЬрд▓реНрдж рд╣реА рдореБрдЦреНрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

tibewww picture tibewww  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Loki180 picture Loki180  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arzyu picture arzyu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Josh10101010 picture Josh10101010  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

deepender87 picture deepender87  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ