pdfjs-dist 2.0.550 → 2.3.200

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (168) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +21618 -14369
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +22758 -11399
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/image_decoders/pdf.image_decoders.js +11500 -0
  10. package/image_decoders/pdf.image_decoders.js.map +1 -0
  11. package/image_decoders/pdf.image_decoders.min.js +1 -0
  12. package/lib/core/annotation.js +767 -258
  13. package/lib/core/arithmetic_decoder.js +275 -245
  14. package/lib/core/bidi.js +65 -6
  15. package/lib/core/ccitt.js +173 -18
  16. package/lib/core/ccitt_stream.js +15 -6
  17. package/lib/core/cff_parser.js +433 -61
  18. package/lib/core/charsets.js +5 -4
  19. package/lib/core/chunked_stream.js +428 -157
  20. package/lib/core/cmap.js +326 -87
  21. package/lib/core/colorspace.js +874 -594
  22. package/lib/core/core_utils.js +173 -0
  23. package/lib/core/crypto.js +290 -45
  24. package/lib/core/document.js +575 -272
  25. package/lib/core/encodings.js +19 -10
  26. package/lib/core/evaluator.js +1032 -351
  27. package/lib/core/font_renderer.js +331 -97
  28. package/lib/core/fonts.js +813 -196
  29. package/lib/core/function.js +253 -27
  30. package/lib/core/glyphlist.js +5 -3
  31. package/lib/core/image.js +169 -62
  32. package/lib/core/image_utils.js +111 -0
  33. package/lib/core/jbig2.js +502 -72
  34. package/lib/core/jbig2_stream.js +19 -8
  35. package/lib/core/jpeg_stream.js +38 -13
  36. package/lib/core/jpg.js +293 -52
  37. package/lib/core/jpx.js +419 -12
  38. package/lib/core/jpx_stream.js +18 -6
  39. package/lib/core/metrics.js +15 -15
  40. package/lib/core/murmurhash3.js +56 -34
  41. package/lib/core/obj.js +1368 -500
  42. package/lib/core/operator_list.js +159 -43
  43. package/lib/core/parser.js +544 -199
  44. package/lib/core/pattern.js +170 -21
  45. package/lib/core/pdf_manager.js +324 -134
  46. package/lib/core/primitives.js +169 -61
  47. package/lib/core/ps_parser.js +134 -45
  48. package/lib/core/standard_fonts.js +17 -17
  49. package/lib/core/stream.js +327 -34
  50. package/lib/core/type1_parser.js +148 -8
  51. package/lib/core/unicode.js +32 -5
  52. package/lib/core/worker.js +215 -229
  53. package/lib/core/worker_stream.js +277 -0
  54. package/lib/display/annotation_layer.js +618 -192
  55. package/lib/display/api.js +1798 -882
  56. package/lib/display/api_compatibility.js +5 -10
  57. package/lib/display/canvas.js +366 -45
  58. package/lib/display/content_disposition.js +71 -24
  59. package/lib/display/display_utils.js +777 -0
  60. package/lib/display/fetch_stream.js +205 -87
  61. package/lib/display/font_loader.js +468 -236
  62. package/lib/display/metadata.js +38 -16
  63. package/lib/display/network.js +635 -428
  64. package/lib/display/network_utils.js +38 -19
  65. package/lib/display/node_stream.js +367 -175
  66. package/lib/display/pattern_helper.js +103 -36
  67. package/lib/display/svg.js +1232 -519
  68. package/lib/display/text_layer.js +208 -75
  69. package/lib/display/transport_stream.js +345 -94
  70. package/lib/display/webgl.js +64 -18
  71. package/lib/display/worker_options.js +5 -4
  72. package/lib/display/xml_parser.js +166 -53
  73. package/lib/examples/node/domstubs.js +60 -4
  74. package/lib/pdf.js +35 -14
  75. package/lib/pdf.worker.js +5 -3
  76. package/lib/shared/compatibility.js +170 -572
  77. package/lib/shared/global_scope.js +2 -2
  78. package/lib/shared/is_node.js +4 -4
  79. package/lib/shared/message_handler.js +216 -163
  80. package/lib/shared/streams_polyfill.js +21 -17
  81. package/lib/shared/util.js +495 -385
  82. package/lib/test/unit/annotation_spec.js +1464 -401
  83. package/lib/test/unit/api_spec.js +718 -361
  84. package/lib/test/unit/bidi_spec.js +7 -7
  85. package/lib/test/unit/cff_parser_spec.js +54 -11
  86. package/lib/test/unit/clitests_helper.js +9 -10
  87. package/lib/test/unit/cmap_spec.js +95 -41
  88. package/lib/test/unit/colorspace_spec.js +115 -63
  89. package/lib/test/unit/core_utils_spec.js +191 -0
  90. package/lib/test/unit/crypto_spec.js +17 -5
  91. package/lib/test/unit/custom_spec.js +43 -55
  92. package/lib/test/unit/display_svg_spec.js +34 -18
  93. package/lib/test/unit/display_utils_spec.js +273 -0
  94. package/lib/test/unit/document_spec.js +8 -13
  95. package/lib/test/unit/encodings_spec.js +25 -45
  96. package/lib/test/unit/evaluator_spec.js +59 -20
  97. package/lib/test/unit/fetch_stream_spec.js +111 -0
  98. package/lib/test/unit/function_spec.js +17 -5
  99. package/lib/test/unit/jasmine-boot.js +33 -20
  100. package/lib/test/unit/message_handler_spec.js +30 -13
  101. package/lib/test/unit/metadata_spec.js +71 -11
  102. package/lib/test/unit/murmurhash3_spec.js +3 -3
  103. package/lib/test/unit/network_spec.js +22 -55
  104. package/lib/test/unit/network_utils_spec.js +105 -14
  105. package/lib/test/unit/node_stream_spec.js +58 -34
  106. package/lib/test/unit/parser_spec.js +162 -71
  107. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  108. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  109. package/lib/test/unit/pdf_history_spec.js +21 -9
  110. package/lib/test/unit/primitives_spec.js +55 -22
  111. package/lib/test/unit/stream_spec.js +12 -4
  112. package/lib/test/unit/test_utils.js +273 -56
  113. package/lib/test/unit/testreporter.js +21 -3
  114. package/lib/test/unit/type1_parser_spec.js +9 -7
  115. package/lib/test/unit/ui_utils_spec.js +236 -36
  116. package/lib/test/unit/unicode_spec.js +18 -15
  117. package/lib/test/unit/util_spec.js +87 -128
  118. package/lib/web/annotation_layer_builder.js +39 -22
  119. package/lib/web/app.js +1252 -609
  120. package/lib/web/app_options.js +103 -65
  121. package/lib/web/base_viewer.js +522 -242
  122. package/lib/web/chromecom.js +259 -117
  123. package/lib/web/debugger.js +166 -22
  124. package/lib/web/download_manager.js +31 -12
  125. package/lib/web/firefox_print_service.js +27 -14
  126. package/lib/web/firefoxcom.js +318 -78
  127. package/lib/web/genericcom.js +89 -30
  128. package/lib/web/genericl10n.js +142 -30
  129. package/lib/web/grab_to_pan.js +28 -4
  130. package/lib/web/interfaces.js +174 -47
  131. package/lib/web/overlay_manager.js +235 -85
  132. package/lib/web/password_prompt.js +22 -14
  133. package/lib/web/pdf_attachment_viewer.js +38 -18
  134. package/lib/web/pdf_cursor_tools.js +39 -16
  135. package/lib/web/pdf_document_properties.js +255 -136
  136. package/lib/web/pdf_find_bar.js +84 -40
  137. package/lib/web/pdf_find_controller.js +495 -184
  138. package/lib/web/pdf_find_utils.js +111 -0
  139. package/lib/web/pdf_history.js +190 -53
  140. package/lib/web/pdf_link_service.js +144 -79
  141. package/lib/web/pdf_outline_viewer.js +124 -47
  142. package/lib/web/pdf_page_view.js +194 -74
  143. package/lib/web/pdf_presentation_mode.js +99 -34
  144. package/lib/web/pdf_print_service.js +59 -13
  145. package/lib/web/pdf_rendering_queue.js +28 -9
  146. package/lib/web/pdf_sidebar.js +144 -81
  147. package/lib/web/pdf_sidebar_resizer.js +42 -16
  148. package/lib/web/pdf_single_page_viewer.js +74 -66
  149. package/lib/web/pdf_thumbnail_view.js +104 -33
  150. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  151. package/lib/web/pdf_viewer.component.js +112 -32
  152. package/lib/web/pdf_viewer.js +82 -87
  153. package/lib/web/preferences.js +284 -91
  154. package/lib/web/secondary_toolbar.js +132 -59
  155. package/lib/web/text_layer_builder.js +134 -59
  156. package/lib/web/toolbar.js +80 -43
  157. package/lib/web/ui_utils.js +400 -134
  158. package/lib/web/view_history.js +215 -67
  159. package/lib/web/viewer_compatibility.js +3 -8
  160. package/package.json +3 -2
  161. package/web/pdf_viewer.css +23 -15
  162. package/web/pdf_viewer.js +3429 -1245
  163. package/web/pdf_viewer.js.map +1 -1
  164. package/external/streams/streams-lib.js +0 -3962
  165. package/lib/display/dom_utils.js +0 -429
  166. package/lib/test/unit/dom_utils_spec.js +0 -89
  167. package/lib/test/unit/fonts_spec.js +0 -81
  168. package/lib/web/dom_events.js +0 -137
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2019 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,42 +19,62 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.TilingPattern = exports.getShadingPatternFromIR = undefined;
27
+ exports.getShadingPatternFromIR = getShadingPatternFromIR;
28
+ exports.TilingPattern = void 0;
28
29
 
29
- var _util = require('../shared/util');
30
+ var _util = require("../shared/util");
30
31
 
31
32
  var ShadingIRs = {};
33
+
34
+ function applyBoundingBox(ctx, bbox) {
35
+ if (!bbox || typeof Path2D === 'undefined') {
36
+ return;
37
+ }
38
+
39
+ var width = bbox[2] - bbox[0];
40
+ var height = bbox[3] - bbox[1];
41
+ var region = new Path2D();
42
+ region.rect(bbox[0], bbox[1], width, height);
43
+ ctx.clip(region);
44
+ }
45
+
32
46
  ShadingIRs.RadialAxial = {
33
47
  fromIR: function RadialAxial_fromIR(raw) {
34
48
  var type = raw[1];
35
- var colorStops = raw[2];
36
- var p0 = raw[3];
37
- var p1 = raw[4];
38
- var r0 = raw[5];
39
- var r1 = raw[6];
49
+ var bbox = raw[2];
50
+ var colorStops = raw[3];
51
+ var p0 = raw[4];
52
+ var p1 = raw[5];
53
+ var r0 = raw[6];
54
+ var r1 = raw[7];
40
55
  return {
41
56
  type: 'Pattern',
42
57
  getPattern: function RadialAxial_getPattern(ctx) {
58
+ applyBoundingBox(ctx, bbox);
43
59
  var grad;
60
+
44
61
  if (type === 'axial') {
45
62
  grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
46
63
  } else if (type === 'radial') {
47
64
  grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
48
65
  }
66
+
49
67
  for (var i = 0, ii = colorStops.length; i < ii; ++i) {
50
68
  var c = colorStops[i];
51
69
  grad.addColorStop(c[0], c[1]);
52
70
  }
71
+
53
72
  return grad;
54
73
  }
55
74
  };
56
75
  }
57
76
  };
77
+
58
78
  var createMeshCanvas = function createMeshCanvasClosure() {
59
79
  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
60
80
  var coords = context.coords,
@@ -62,6 +82,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
62
82
  var bytes = data.data,
63
83
  rowSize = data.width * 4;
64
84
  var tmp;
85
+
65
86
  if (coords[p1 + 1] > coords[p2 + 1]) {
66
87
  tmp = p1;
67
88
  p1 = p2;
@@ -70,6 +91,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
70
91
  c1 = c2;
71
92
  c2 = tmp;
72
93
  }
94
+
73
95
  if (coords[p2 + 1] > coords[p3 + 1]) {
74
96
  tmp = p2;
75
97
  p2 = p3;
@@ -78,6 +100,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
78
100
  c2 = c3;
79
101
  c3 = tmp;
80
102
  }
103
+
81
104
  if (coords[p1 + 1] > coords[p2 + 1]) {
82
105
  tmp = p1;
83
106
  p1 = p2;
@@ -86,15 +109,18 @@ var createMeshCanvas = function createMeshCanvasClosure() {
86
109
  c1 = c2;
87
110
  c2 = tmp;
88
111
  }
112
+
89
113
  var x1 = (coords[p1] + context.offsetX) * context.scaleX;
90
114
  var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
91
115
  var x2 = (coords[p2] + context.offsetX) * context.scaleX;
92
116
  var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
93
117
  var x3 = (coords[p3] + context.offsetX) * context.scaleX;
94
118
  var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
119
+
95
120
  if (y1 >= y3) {
96
121
  return;
97
122
  }
123
+
98
124
  var c1r = colors[c1],
99
125
  c1g = colors[c1 + 1],
100
126
  c1b = colors[c1 + 2];
@@ -109,6 +135,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
109
135
  var xa, car, cag, cab;
110
136
  var xb, cbr, cbg, cbb;
111
137
  var k;
138
+
112
139
  for (var y = minY; y <= maxY; y++) {
113
140
  if (y < y2) {
114
141
  k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2);
@@ -123,6 +150,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
123
150
  cag = c2g - (c2g - c3g) * k;
124
151
  cab = c2b - (c2b - c3b) * k;
125
152
  }
153
+
126
154
  k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3);
127
155
  xb = x1 - (x1 - x3) * k;
128
156
  cbr = c1r - (c1r - c3r) * k;
@@ -131,6 +159,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
131
159
  var x1_ = Math.round(Math.min(xa, xb));
132
160
  var x2_ = Math.round(Math.max(xa, xb));
133
161
  var j = rowSize * y + x1_ * 4;
162
+
134
163
  for (var x = x1_; x <= x2_; x++) {
135
164
  k = (xa - x) / (xa - xb);
136
165
  k = k < 0 ? 0 : k > 1 ? 1 : k;
@@ -141,32 +170,41 @@ var createMeshCanvas = function createMeshCanvasClosure() {
141
170
  }
142
171
  }
143
172
  }
173
+
144
174
  function drawFigure(data, figure, context) {
145
175
  var ps = figure.coords;
146
176
  var cs = figure.colors;
147
177
  var i, ii;
178
+
148
179
  switch (figure.type) {
149
180
  case 'lattice':
150
181
  var verticesPerRow = figure.verticesPerRow;
151
182
  var rows = Math.floor(ps.length / verticesPerRow) - 1;
152
183
  var cols = verticesPerRow - 1;
184
+
153
185
  for (i = 0; i < rows; i++) {
154
186
  var q = i * verticesPerRow;
187
+
155
188
  for (var j = 0; j < cols; j++, q++) {
156
189
  drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
157
190
  drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
158
191
  }
159
192
  }
193
+
160
194
  break;
195
+
161
196
  case 'triangles':
162
197
  for (i = 0, ii = ps.length; i < ii; i += 3) {
163
198
  drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
164
199
  }
200
+
165
201
  break;
202
+
166
203
  default:
167
204
  throw new Error('illegal figure');
168
205
  }
169
206
  }
207
+
170
208
  function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
171
209
  var EXPECTED_SCALE = 1.1;
172
210
  var MAX_PATTERN_SIZE = 3000;
@@ -190,6 +228,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
190
228
  var paddedWidth = width + BORDER_SIZE * 2;
191
229
  var paddedHeight = height + BORDER_SIZE * 2;
192
230
  var canvas, tmpCanvas, i, ii;
231
+
193
232
  if (webGLContext.isEnabled) {
194
233
  canvas = webGLContext.drawFigures({
195
234
  width: width,
@@ -205,8 +244,10 @@ var createMeshCanvas = function createMeshCanvasClosure() {
205
244
  tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false);
206
245
  var tmpCtx = tmpCanvas.context;
207
246
  var data = tmpCtx.createImageData(width, height);
247
+
208
248
  if (backgroundColor) {
209
249
  var bytes = data.data;
250
+
210
251
  for (i = 0, ii = bytes.length; i < ii; i += 4) {
211
252
  bytes[i] = backgroundColor[0];
212
253
  bytes[i + 1] = backgroundColor[1];
@@ -214,12 +255,15 @@ var createMeshCanvas = function createMeshCanvasClosure() {
214
255
  bytes[i + 3] = 255;
215
256
  }
216
257
  }
258
+
217
259
  for (i = 0; i < figures.length; i++) {
218
260
  drawFigure(data, figures[i], context);
219
261
  }
262
+
220
263
  tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
221
264
  canvas = tmpCanvas.canvas;
222
265
  }
266
+
223
267
  return {
224
268
  canvas: canvas,
225
269
  offsetX: offsetX - BORDER_SIZE * scaleX,
@@ -228,8 +272,10 @@ var createMeshCanvas = function createMeshCanvasClosure() {
228
272
  scaleY: scaleY
229
273
  };
230
274
  }
275
+
231
276
  return createMeshCanvas;
232
277
  }();
278
+
233
279
  ShadingIRs.Mesh = {
234
280
  fromIR: function Mesh_fromIR(raw) {
235
281
  var coords = raw[2];
@@ -237,27 +283,36 @@ ShadingIRs.Mesh = {
237
283
  var figures = raw[4];
238
284
  var bounds = raw[5];
239
285
  var matrix = raw[6];
286
+ var bbox = raw[7];
240
287
  var background = raw[8];
241
288
  return {
242
289
  type: 'Pattern',
243
290
  getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
291
+ applyBoundingBox(ctx, bbox);
244
292
  var scale;
293
+
245
294
  if (shadingFill) {
246
295
  scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
247
296
  } else {
248
297
  scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
298
+
249
299
  if (matrix) {
250
300
  var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
301
+
251
302
  scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
252
303
  }
253
304
  }
305
+
254
306
  var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);
307
+
255
308
  if (!shadingFill) {
256
309
  ctx.setTransform.apply(ctx, owner.baseTransform);
310
+
257
311
  if (matrix) {
258
312
  ctx.transform.apply(ctx, matrix);
259
313
  }
260
314
  }
315
+
261
316
  ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
262
317
  ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
263
318
  return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat');
@@ -275,19 +330,24 @@ ShadingIRs.Dummy = {
275
330
  };
276
331
  }
277
332
  };
333
+
278
334
  function getShadingPatternFromIR(raw) {
279
335
  var shadingIR = ShadingIRs[raw[0]];
336
+
280
337
  if (!shadingIR) {
281
- throw new Error('Unknown IR type: ' + raw[0]);
338
+ throw new Error("Unknown IR type: ".concat(raw[0]));
282
339
  }
340
+
283
341
  return shadingIR.fromIR(raw);
284
342
  }
343
+
285
344
  var TilingPattern = function TilingPatternClosure() {
286
345
  var PaintType = {
287
346
  COLORED: 1,
288
347
  UNCOLORED: 2
289
348
  };
290
349
  var MAX_PATTERN_SIZE = 3000;
350
+
291
351
  function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
292
352
  this.operatorList = IR[2];
293
353
  this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
@@ -302,6 +362,7 @@ var TilingPattern = function TilingPatternClosure() {
302
362
  this.type = 'Pattern';
303
363
  this.ctx = ctx;
304
364
  }
365
+
305
366
  TilingPattern.prototype = {
306
367
  createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
307
368
  var operatorList = this.operatorList;
@@ -317,39 +378,42 @@ var TilingPattern = function TilingPatternClosure() {
317
378
  y0 = bbox[1],
318
379
  x1 = bbox[2],
319
380
  y1 = bbox[3];
320
- var topLeft = [x0, y0];
321
- var botRight = [x0 + xstep, y0 + ystep];
322
- var width = botRight[0] - topLeft[0];
323
- var height = botRight[1] - topLeft[1];
381
+
324
382
  var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
383
+
325
384
  var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
385
+
326
386
  var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
327
- width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE);
328
- height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE);
329
- var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true);
387
+ var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
388
+ var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
389
+ var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', dimx.size, dimy.size, true);
330
390
  var tmpCtx = tmpCanvas.context;
331
391
  var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
332
392
  graphics.groupLevel = owner.groupLevel;
333
393
  this.setFillAndStrokeStyleToContext(graphics, paintType, color);
334
- this.setScale(width, height, xstep, ystep);
335
- this.transformToScale(graphics);
336
- var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
337
- graphics.transform.apply(graphics, tmpTranslate);
394
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
395
+ graphics.transform(1, 0, 0, 1, -x0, -y0);
338
396
  this.clipBbox(graphics, bbox, x0, y0, x1, y1);
339
397
  graphics.executeOperatorList(operatorList);
398
+ this.ctx.transform(1, 0, 0, 1, x0, y0);
399
+ this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);
340
400
  return tmpCanvas.canvas;
341
401
  },
342
- setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
343
- this.scale = [width / xstep, height / ystep];
344
- },
345
- transformToScale: function TilingPattern_transformToScale(graphics) {
346
- var scale = this.scale;
347
- var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
348
- graphics.transform.apply(graphics, tmpScale);
349
- },
350
- scaleToContext: function TilingPattern_scaleToContext() {
351
- var scale = this.scale;
352
- this.ctx.scale(1 / scale[0], 1 / scale[1]);
402
+ getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
403
+ step = Math.abs(step);
404
+ var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
405
+ var size = Math.ceil(step * scale);
406
+
407
+ if (size >= maxSize) {
408
+ size = maxSize;
409
+ } else {
410
+ scale = size / step;
411
+ }
412
+
413
+ return {
414
+ scale: scale,
415
+ size: size
416
+ };
353
417
  },
354
418
  clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
355
419
  if (Array.isArray(bbox) && bbox.length === 4) {
@@ -363,6 +427,7 @@ var TilingPattern = function TilingPatternClosure() {
363
427
  setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
364
428
  var context = graphics.ctx,
365
429
  current = graphics.current;
430
+
366
431
  switch (paintType) {
367
432
  case PaintType.COLORED:
368
433
  var ctx = this.ctx;
@@ -371,27 +436,29 @@ var TilingPattern = function TilingPatternClosure() {
371
436
  current.fillColor = ctx.fillStyle;
372
437
  current.strokeColor = ctx.strokeStyle;
373
438
  break;
439
+
374
440
  case PaintType.UNCOLORED:
375
441
  var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);
442
+
376
443
  context.fillStyle = cssColor;
377
444
  context.strokeStyle = cssColor;
378
445
  current.fillColor = cssColor;
379
446
  current.strokeColor = cssColor;
380
447
  break;
448
+
381
449
  default:
382
- throw new _util.FormatError('Unsupported paint type: ' + paintType);
450
+ throw new _util.FormatError("Unsupported paint type: ".concat(paintType));
383
451
  }
384
452
  },
385
453
  getPattern: function TilingPattern_getPattern(ctx, owner) {
386
- var temporaryPatternCanvas = this.createPatternCanvas(owner);
387
454
  ctx = this.ctx;
388
455
  ctx.setTransform.apply(ctx, this.baseTransform);
389
456
  ctx.transform.apply(ctx, this.matrix);
390
- this.scaleToContext();
457
+ var temporaryPatternCanvas = this.createPatternCanvas(owner);
391
458
  return ctx.createPattern(temporaryPatternCanvas, 'repeat');
392
459
  }
393
460
  };
394
461
  return TilingPattern;
395
462
  }();
396
- exports.getShadingPatternFromIR = getShadingPatternFromIR;
463
+
397
464
  exports.TilingPattern = TilingPattern;