Scaling Groups?
Scott Morrow
scott at elementarysoftware.com
Fri Dec 11 02:09:20 EST 2009
Hello Scott,
Thanks for posting your script. I just tried it on a small collection of controls and images and it worked well. Much appreciated.
Scott Morrow
Elementary Software
(Now with 20% less chalk dust!)
web http://elementarysoftware.com/
email scott at elementarysoftware.com
------------------------------------------------------
On Dec 10, 2009, at 9:00 PM, Scott Rossi wrote:
> Thanks to all who replied about my scaling groups question.
> As it turns out, I was able to come up with a solution in about a tenth of
> the time
> I thought it would take (and I was dreading it).
>
> The biggest issue for me is Rev’s reliance on integers for object
> positioning --
> this is a serious limitation when it comes to scaling because object
> dimensions can get heavily distorted when the objects are repeatedly scaled.
> I needed a way to keep object dimensions from getting too messed up if the
> user wants
> to size a group up and down repeatedly. The only way I know how to do this
> is to store the original dimensions and refer to those whenever an object is
> scaled.
> The following code does this, called from a scrollbar whose start/end values
> are 50 and 200 (equates to 50% and 200%). Objects are initialized with
> their
> “starting” specs, and since those specs are always used in the code, scaling
> is as
> distortion-free as possible:
>
> on scrollbarDrag pValue
> scaleGroup long id of grp “my great group”,pValue
> end scrollbarDrag
>
> on scaleGroup pGroup,pValue
> initObjSpecs pGroup
> put pValue/100 into tPercent
> put loc of pGroup into masterLoc
> lock screen
> set width of pGroup to the uDefaultWidth of pGroup * tPercent
> set height of pGroup to the uDefaultHeight of pGroup * tPercent
> set loc of pGroup to masterLoc
> repeat with N = 1 to number of controls of pGroup
> put long id of control N of pGroup into tObj
> set width of tObj to (item 1 of the uOrigDimensions of tObj *
> tPercent)
> set height of tObj to (item 2 of the uOrigDimensions of tObj *
> tPercent)
> put item 1 of masterLoc - (item 1 of the uOrigOffset of tObj *
> tPercent) into X
> put item 2 of masterLoc - (item 2 of the uOrigOffset of tObj *
> tPercent) into Y
> set loc of tObj to X,Y
> end repeat
> set loc of pGroup to masterLoc
> unlock screen
> end scaleGroup
>
> on initObjSpecs pGroup
> put loc of pGroup into masterLoc
> if the uDefaultWidth of pGroup = "" then set the uDefaultWidth of pGroup
> to width of pGroup
> if the uDefaultHeight of pGroup = "" then set the uDefaultHeight of
> pGroup to height of pGroup
> put the number of controls of pGroup into objCount
> repeat with N = 1 to objCount
> put long id of control N of pGroup into tObj
> if the uOrigOffset of tObj <> "" and the uOrigDimensions of tObj <> ""
> then next repeat
> put loc of tObj into objLoc
> set the uOrigOffset of tObj to item 1 of masterLoc - item 1 of
> objLoc,item 2 of masterLoc - item 2 of objLoc
> set the uOrigDimensions of tObj to width of tObj,height of tObj
> end repeat
> end initObjSpecs
>
>
> Maybe other folks will find this useful.
>
> Regards,
>
> Scott Rossi
> Creative Director
> Tactile Media, Multimedia & Design
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list