Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Notes on document

...

The ScreenSnippet API is used to capture a snippet of their desktop (unconstrained by the host application window) and highlight portions of this snippet so it can then be consumed by the host application.  This functionality is similar to the Windows Screen Snippet tool that when used in rectangle capture mode.  This lets a user captures portions of the Windows Desktop, highlight aspects of the image and then save this image for sharing.

...

The exact visual style and full functionality of a markup tool is container dependent and hence out-of-scope of this specification.

Constructor

Code Block
languagejs
ScreenSnippet()

Creates a new instance of the ScreenSnippet object.

Syntax

Code Block
languagejs
let mySnippet = new ScreenSnippet();

Note: the API should be exposed as a global namespace - working name "ssf" so:

Code Block
languagejs
let mySnippet = new ssf.ScreenSnippet();

ScreenSnippet()

Creates a new instance of the ScreenSnippet object.

Parameters

None.

Methods

Code Block
languagejs
capture()

Creates a new instance of the ScreenSnippet object.

Syntax

Code Block
languagejs
mySnippet.capture().then(function(bitmap) { ... });

Parameters

none

Returns

A Promise that resolves to an ImageBitmap object with contains the captured image and type.

...

A possible idea that has been floated is to make the ScreenSnippet tool a reusable Node Module that calls to an external executable using "child_process" that could be invoked from the container.  This external executable could then use StdOut to communicate with the container to provide the result of the snippet.

Code Block
languagejs
class ScreenSnippet {
	capture() {
		return new Promise((resolve, reject) => {
			const childProcess = require('child_process');
			const snippetToolInterop = childProcess.fork('...', [], {
				silent: true
			});

			let response = false;

			snippetToolInterop.on('exit', (code, signal) => {
				if (!response) {
					reject(...);
				}
			});

			snippetToolInterop.on('message', message => {
				if (!response) {
					response = true;
					snippetToolInterop.kill();
class ScreenSnippet 
					if (message.error) {
						reject(...);
					} else {
						resolve(message.bitmap);
					}
				}
			});
		});
	}
}


module.exports = ScreenSnippet;


Discussion points:

  • (From Gareth) I've assumed we have a preference for promises vs callbacks.  This seems inline with modern HTML5 standards which are deprecating callbacks. 

  • (From Gareth) We should discuss the return object for the capture method.  I've currently followed the Minuet approach.