Resize aspect

Brian Yennie briany at qldlearning.com
Sun Jun 13 03:52:00 EDT 2004


Simon,

How about something like this:

1) When you create a new stack, set a couple of properties of the stack 
to remember what size it wants to be:

set the actualHeight of this stack to (11*72)   ## 11 inches at 72DPI
set the actualWidth of this stack to (17*72)    ## 17 inches at 72DPI
set the zoomPercent of this stack to 100       ## start viewing at 100%

2) Ditto for objects- you want to remember what size they _want_ to be 
as accurately as possible (if you just translate each time, 
cumulatively, you'll probably notice them start to drift)

ex:

on newButton
    set the actualHeight of the target to (the height of the target * 
100 / the zoomPercent of this stack)
    set the actualWidth of the target to (the width of the target * 100 
/ the zoomPercent of this stack)
    set the actualLeft of the target to (the left of the target * 100 / 
the zoomPercent of this stack)
    set the actualTop of the target to (the top of the target * 100 / 
the zoomPercent of this stack)
end newButton

3) Create a simple handler which resizes the stack itself and you can 
call when needed:

on zoomLayout toPercent
    set the zoomPercent of this stack to toPercent
    get the rect of this stack
    put (item 2 of it +  round(the actualHeight of this stack * 
toPercent / 100)) into item 4 of it
    put (item 1 of it +  round(the actualWidth of this stack * toPercent 
/ 100)) into item 3 of it
    set the rect of this stack to it
end zoomLayout

4) Catch the resizeStack handler to fix your objects:

on resizeStack newWidth, newHeight, oldWidth, oldHeight
    repeat with i=1 to (number of cd parts)
       put the actualLeft of cd part i * (the zoomPercent of this stack 
/ 100) into newLeft
       put the actualTop of cd part i * (the zoomPercent of this stack / 
100) into newTop
       put the actualHeight of cd part i * (the zoomPercent of this 
stack / 100) into newHeight
       put the actualWidth of cd part i * (the zoomPercent of this stack 
/ 100) into newWidth
       set the rect of cd part i to 
(round(newLeft)&comma&round(newTop)&comma&round(newLeft + 
newWidth)&comma&round(newTop + newHeight))
    end repeat
end resizeStack


All of this (with some work I'm sure, this is off the top of my head) 
should buy you fairly reasonable resizing, although you probably won't 
achieve ultra-accurate layout by nature of the beast- Rev isn't vector 
graphics nor able to store higher zoomable resolutions for you to 
maintain in the background when someone is zoomed out. When the user is 
working at 800x600 pixels, newly created objects are going to be 
limited by the available pixels and when you zoom way back out, you 
might get nudged slightly by rounding inconsistencies.

If you need finer alignment, you might consider other tactics, such as 
allowing objects to be aligned horizontally / vertically and carefully 
honoring that when zooming, etc. But the above approach should give 
reasonable results.

You might also investigate the Rev geometry manager for inspiration...

HTH



> Hi all, I want to throw out the following question to see if anyone 
> has a stack already done that can do the following...
>
> My stack allows users to create a layout using template objects that 
> fit the printed page.  However, some users don't have monitor that can 
> display the full resolution, and 11 x 17 layouts are near impossible 
> for most.
>
> So I'm looking to make a stack that can resize all objects on a card 
> *proportionally* to fit the new stack size (for example, a user wants 
> to scale the stack down to 77% because that's all that fits on his 
> viewable screen space).  But it will always be an aspect ratio 
> proportionate to the layout they are working on.  That way when it 
> comes time to print (or preview a print) I can scale everything to 
> 100%.
>
> Or is there another way?
>
> Sincerely,
> Simon
>
> _______________________________________________
> metacard mailing list
> metacard at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/metacard
>
>



More information about the metacard mailing list