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