Export & LC8 & Browser widget

Mark Waddingham mark at livecode.com
Wed Mar 2 03:30:52 EST 2016


On 2016-03-01 22:57, Terence Heaford wrote:
>> On 1 Mar 2016, at 21:32, J. Landman Gay <jacque at hyperactivesw.com> 
>> wrote:
>> 
>> "To export a snapshot for a portion of a stack you use the form:
>> export snapshot from rect[angle] of window windowID to ...
>> Where windowId is the windowId property of the required stack."
> 
> This does not work correctly on a Mac for the reason given previously.
> 
> The top and bottom of the image exported has shifted down by the depth
> of the menubar.
> put the rect widget "Chart" into tRect
> 
> export snapshot from rectangle tRect of window (the windowId of window
> "Test") to tVar as PNG
> 
> 
> The corrected version would be:
> 
> put the rect widget "Chart" into tRect
> 
> subtract 22 from item 2 of tRect
> 
> subtract 22 from item 4 of tRect
> 
> export snapshot from rectangle tRect of window (the windowId of window
>  “Test") to tVar as PNG

There are three types of export/import snapshot.

The first uses the screen buffer - the co-ordinates have to be in screen 
co-ordinate space:

   export snapshot from rectangle tRect

The second uses the window buffer (if the OS has such things, otherwise 
it is equivalent to using the screen buffer after a translation of 
co-ordinates) - the co-ordinates have to be in window co-ordinate space 
(NOT card co-ordinate space):

   export snapshot from rectangle tRect of window tWindowId

The third uses no buffer at all, it asks the target object (and 
children) to render the specified rect of itself into an offscreen 
buffer (the same mechanism which the engine uses to update a window when 
the OS requests it, or a portion gets changed) - the co-ordinates have 
to be in card co-ordinate space:

   export snapshot from rectangle tRect of <object>

Now, the final form here will work for any object which is drawn by the 
LiveCode engine - it will not necessarily work for objects which use 
'native' layers to display things (such as the browser). Whether or not 
one can get a native layer to render itself entirely depends on the 
native layer. For example, we've not had any success at all in 
persuading the CEF browser to give us a snapshot as it uses various 
'native' things which do not want to give up their backing store of 
pixels.

Therefore, if you want to take a snapshot of a stack containing native 
layers your best bet to make this work generally is to use the screen or 
window form. When you do this you do have to take into account the fact 
that cards might have a vertical scroll due to menus (that mysterious 22 
px) - you can get the current scroll amount by using 'the vscroll of 
stack ...'.

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list