diff options
Diffstat (limited to 'b2g/components/Screenshot.jsm')
-rw-r--r-- | b2g/components/Screenshot.jsm | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/b2g/components/Screenshot.jsm b/b2g/components/Screenshot.jsm new file mode 100644 index 000000000..e6f809375 --- /dev/null +++ b/b2g/components/Screenshot.jsm @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +Cu.import('resource://gre/modules/XPCOMUtils.jsm'); + +XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy", "resource://gre/modules/SystemAppProxy.jsm"); + +this.EXPORTED_SYMBOLS = ['Screenshot']; + +var Screenshot = { + get: function screenshot_get() { + let systemAppFrame = SystemAppProxy.getFrame(); + let window = systemAppFrame.ownerDocument.defaultView; + let document = window.document; + + var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas'); + var docRect = document.body.getBoundingClientRect(); + var width = docRect.width; + var height = docRect.height; + + // Convert width and height from CSS pixels (potentially fractional) + // to device pixels (integer). + var scale = window.devicePixelRatio; + canvas.setAttribute('width', Math.round(width * scale)); + canvas.setAttribute('height', Math.round(height * scale)); + + var context = canvas.getContext('2d'); + var flags = + context.DRAWWINDOW_DRAW_CARET | + context.DRAWWINDOW_DRAW_VIEW | + context.DRAWWINDOW_USE_WIDGET_LAYERS; + context.scale(scale, scale); + context.drawWindow(window, 0, 0, width, height, 'rgb(255,255,255)', flags); + + return canvas.mozGetAsFile('screenshot', 'image/png'); + } +}; +this.Screenshot = Screenshot; |