| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 // This function takes an object |imageSpec| with the key |path| - |  | 
| 6 // corresponding to the internet URL to be translated - and optionally |  | 
| 7 // |width| and |height| which are the maximum dimensions to be used when |  | 
| 8 // converting the image. |  | 
| 9 function loadImageData(imageSpec, callbacks) { |  | 
| 10   var path = imageSpec.path; |  | 
| 11   var img = new Image(); |  | 
| 12   if (typeof callbacks.onerror === 'function') { |  | 
| 13     img.onerror = function() { |  | 
| 14       callbacks.onerror({ problem: 'could_not_load', path: path }); |  | 
| 15     }; |  | 
| 16   } |  | 
| 17   img.onload = function() { |  | 
| 18     var canvas = document.createElement('canvas'); |  | 
| 19 |  | 
| 20     if (img.width <= 0 || img.height <= 0) { |  | 
| 21       callbacks.onerror({ problem: 'image_size_invalid', path: path}); |  | 
| 22       return; |  | 
| 23     } |  | 
| 24 |  | 
| 25     var scaleFactor = 1; |  | 
| 26     if (imageSpec.width && imageSpec.width < img.width) |  | 
| 27       scaleFactor = imageSpec.width / img.width; |  | 
| 28 |  | 
| 29     if (imageSpec.height && imageSpec.height < img.height) { |  | 
| 30       var heightScale = imageSpec.height / img.height; |  | 
| 31       if (heightScale < scaleFactor) |  | 
| 32         scaleFactor = heightScale; |  | 
| 33     } |  | 
| 34 |  | 
| 35     canvas.width = img.width * scaleFactor; |  | 
| 36     canvas.height = img.height * scaleFactor; |  | 
| 37 |  | 
| 38     var canvas_context = canvas.getContext('2d'); |  | 
| 39     canvas_context.clearRect(0, 0, canvas.width, canvas.height); |  | 
| 40     canvas_context.drawImage(img, 0, 0, canvas.width, canvas.height); |  | 
| 41     try { |  | 
| 42       var imageData = canvas_context.getImageData( |  | 
| 43           0, 0, canvas.width, canvas.height); |  | 
| 44       if (typeof callbacks.oncomplete === 'function') { |  | 
| 45         callbacks.oncomplete( |  | 
| 46             imageData.width, imageData.height, imageData.data.buffer); |  | 
| 47       } |  | 
| 48     } catch (e) { |  | 
| 49       if (typeof callbacks.onerror === 'function') { |  | 
| 50         callbacks.onerror({ problem: 'data_url_unavailable', path: path }); |  | 
| 51       } |  | 
| 52     } |  | 
| 53   } |  | 
| 54   img.src = path; |  | 
| 55 } |  | 
| 56 |  | 
| 57 function on_complete_index(index, err, loading, finished, callbacks) { |  | 
| 58   return function(width, height, imageData) { |  | 
| 59     delete loading[index]; |  | 
| 60     finished[index] = { width: width, height: height, data: imageData }; |  | 
| 61     if (err) |  | 
| 62       callbacks.onerror(index); |  | 
| 63     if ($Object.keys(loading).length == 0) |  | 
| 64       callbacks.oncomplete(finished); |  | 
| 65   } |  | 
| 66 } |  | 
| 67 |  | 
| 68 function loadAllImages(imageSpecs, callbacks) { |  | 
| 69   var loading = {}, finished = [], |  | 
| 70       index, pathname; |  | 
| 71 |  | 
| 72   for (var index = 0; index < imageSpecs.length; index++) { |  | 
| 73     loading[index] = imageSpecs[index]; |  | 
| 74     loadImageData(imageSpecs[index], { |  | 
| 75       oncomplete: on_complete_index(index, false, loading, finished, callbacks), |  | 
| 76       onerror: on_complete_index(index, true, loading, finished, callbacks) |  | 
| 77     }); |  | 
| 78   } |  | 
| 79 } |  | 
| 80 |  | 
| 81 exports.loadImageData = loadImageData; |  | 
| 82 exports.loadAllImages = loadAllImages; |  | 
| OLD | NEW | 
|---|