resizing proportionally to the page size

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • Stan Hamers
    Indigo Rose Customer
    • Jul 2004
    • 19

    resizing proportionally to the page size

    Hello,
    I have a question about the new feature resizing in AMS7.
    I have made a simple page with the resize tool from ADAM in AMS6 this is working fine for me.
    (http://www.indigorose.com/forums/sho...ghlight=RESIZE)
    The total page with buttons etc. is resizing proportionally to the page size.
    I thought that this is one of the new feature from AMS7, resizing without extra code.
    I have tried a few times with different choices in the attributes auto resize and in settings appearance but it is not working.
    I thought first it was because of the trail version but now also in the official version it is not working.
    Do I miss some thing?!!
  • holtgrewe
    Indigo Rose Customer
    • Jul 2002
    • 779

    #2
    Stan
    I've been playing around with the Trial Version and I understand what you're saying. Objects to the right of the page get skewed to a point where they actually disappear, when resizing to a smaller page. Objects to the left side of the page seem okay, as you can somewhat set an anchor point.

    It definately does not handle objects proportionally - or maybe we need a tutorial on the auto resizing. I've tried different combinations (top, bottom, left, right) - I don't get it.

    Comment

    • Brett
      Indigo Rose Staff Member
      • Jan 2000
      • 2001

      #3
      The resizing does not work the same way in AMS70 as Adam's code did. The resizing in AMS70 allows you to have one or more sides of an object size the SAME amount as the page size changes. It is not a proportional or "scaling" resize as Adam's code showed.

      The problem with scaling is that it really only truly works properly and achieves good results in a vectorized renderer. AMS70 does not use vectorized drawing techniques. For example, it would be nearly impossible to make an edit field scale down properly in terms of its dimensions and text.

      Comment

      • holtgrewe
        Indigo Rose Customer
        • Jul 2002
        • 779

        #4
        I think I understand...

        if we still want proportional resizing - use Adam's code.

        if we want objects to resize/shift exactly with the page bounderies (AMS70 feature) - use the built-in feature.

        Not what I was expecting, but understanding how this feature works is important.

        Comment

        • Canter
          Indigo Rose Customer
          • Nov 2007
          • 56

          #5
          Adam's code appears not to work in AMS7 however with Rich Text object - I tried inserting code for the OBJECT_RICHTEXT but it still generates errors on any page having that kind of object. Is there something different about the RichText that prevents the resizing?

          Comment

          • Canter
            Indigo Rose Customer
            • Nov 2007
            • 56

            #6
            Looks like I'm wrong - what isn't working is the WinButton plugin which the code is apparently erroneously identifying as a Button object. Anyone else run into that problem?

            Comment

            • pjborg
              Forum Member
              • Feb 2001
              • 120

              #7
              Because I am still figuring out how to use the new built in resize in version 7, I took the resize code from the version 6 example and added the new objects in version 7. It seems to work properly. You put this in the Global functions, just like in version 6.

              Code:
              ---------------------------------------------------------------------------
              --Function Resize_OnSize;
              --This function is in place to reduce the amount of code that must go on
              --each pages "On Size" event
              ---------------------------------------------------------------------------
              function Resize_OnSize (PageWidth,PageHeight)
              	if bFirstRun then
              		setOriginalPageSize(PageWidth,PageHeight);
              		bFirstRun = false;
              	end
              	SetSize(PageWidth,PageHeight);
              end
              
              ---------------------------------------------------------------------------
              --Function Resize_OnPreLoad();
              --This function is in place to reduce the amount of code that must go on
              --each pages "On Preload" event
              ---------------------------------------------------------------------------
              function Resize_OnPreLoad()
              	getOriginalPositions();
              	Size = Page.GetSize();
              	if not bFirstRun then
              		SetSize(Size.Width,Size.Height);
              	end
              end
              
              
              -- This is a global variable that is used to determine the first time that 
              -- This page has been Accessed
              bFirstRun = true;
              
              ---------------------------------------------------------------------------
              --Function setOriginalPageSize
              --This function is used to set a global table with the original page
              --size of your project
              ---------------------------------------------------------------------------
              function setOriginalPageSize(WidthO,HeightO)
              	-- Store these values in a global table. This action is only
              	-- performed once.
              	tblOriginalSize = {Width=WidthO,Height=HeightO};
              end
              
              ---------------------------------------------------------------------------
              --Function RevertSize
              --This function puts all objects back to their original position and size
              --This makes the page look proper if the project is resized on a different
              --page.
              ---------------------------------------------------------------------------
              function Resize_OnClose ()
              	
              	-- Stop the page from redrawing temporarily. If this was not in place
              	-- you would see a flash of the original objects before it is resized
              	-- when you jump pages.
              	Application.SetRedraw(false);
              	
              	-- The loop will go through all of the entries in the global table tblOriginalPos
              	-- and set all of the objects back to their original state.
              	for i = 1, Table.Count(tblOriginalPos) do
              		-- Get the table that is stored in the global table on every itteration of
              		-- the loop
              		tblPos = tblOriginalPos[i];
              		
              		-- The next if -> elseif block determines which type of object
              		-- is currently in the table tblPos
              		if tblPos.ObType == OBJECT_BUTTON then
              			-- If it is a Button then set it back to its original size
              			Button.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			-- If it is a Button then set it back to its original Position
              			Button.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_LABEL then
              			Label.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Label.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_PARAGRAPH then
              			Paragraph.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Paragraph.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_IMAGE then
              			Image.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Image.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_FLASH then
              			Flash.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Flash.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_VIDEO then
              			Video.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Video.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_WEB then
              			Web.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Web.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_INPUT then
              			Input.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Input.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_HOTSPOT then
              			Hotspot.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Hotspot.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_LISTBOX then
              			ListBox.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			ListBox.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_COMBOBOX then
              			ComboBox.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			ComboBox.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_PROGRESS then
              			Progress.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Progress.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_TREE then
              			Tree.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Tree.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_PLUGIN then
              			Plugin.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			Plugin.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_RICHTEXT then
              			RichText.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			RichText.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_SLIDESHOW then
              			SlideShow.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			SlideShow.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_CHECKBOX then
              			CheckBox.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			CheckBox.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		elseif tblPos.ObType == OBJECT_RADIOBUTTON then
              			RadioButton.SetSize(tblPos.ObName,tblPos.W,tblPos.H);
              			RadioButton.SetPos(tblPos.ObName, tblPos.X, tblPos.Y);
              		end		
              	end
              end
              
              ---------------------------------------------------------------------------
              --Function getOriginalPositions
              --This function enumerates all objects on the current page. It then stores
              --information about the objects in a global table to be used for a 
              --reference point to perform the position and size adjustments
              --The following information is stored about each object:
              -- Object Name
              -- Object Type
              -- Width
              -- Height
              -- Position X
              -- Position Y
              ---------------------------------------------------------------------------
              function getOriginalPositions ()
              	-- The master table that contains information about each object on the page
              	tblOriginalPos = {};
              	-- The table that will be stored in the above master table. Each objects 
              	-- information will be stored in the below table
              	Pos = {};
              	-- Get all of the objects on a page
              	Objects = Page.EnumerateObjects();
              	-- Loop through each object on the page
              	for i = 1, Table.Count(Objects) do
              		-- Find out what TYPE of object it is.
              		Type = Page.GetObjectType(Objects[i]);
              		-- If it is a Button then
              		if Type == OBJECT_BUTTON then
              			-- Get the size
              			Size = Button.GetSize(Objects[i]);
              			-- Get the Position
              			Position = Button.GetPos(Objects[i]);
              			-- Set the table up to store this information
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_BUTTON};
              			-- Store the 'Pos' table in the master table tblOriginalPos
              			tblOriginalPos[i] = Pos;	
              		elseif Type == OBJECT_LABEL then
              			Size = Label.GetSize(Objects[i]);
              			Position = Label.GetPos(Objects[i]);	
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_LABEL};
              			tblOriginalPos[i] = Pos; 
              		elseif Type == OBJECT_PARAGRAPH then
              			Size = Paragraph.GetSize(Objects[i]);
              			Position = Paragraph.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_PARAGRAPH};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_IMAGE then
              			Size = Image.GetSize(Objects[i]);
              			Position = Image.GetPos(Objects[i]);	
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_IMAGE};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_FLASH then
              			Size = Flash.GetSize(Objects[i]);
              			Position = Flash.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_FLASH};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_VIDEO then
              			Size = Video.GetSize(Objects[i]);
              			Position = Video.GetPos(Objects[i]);	
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_VIDEO};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_WEB then
              			Size = Web.GetSize(Objects[i]);
              			Position = Web.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_WEB};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_INPUT then
              			Size = Input.GetSize(Objects[i]);
              			Position = Input.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_INPUT};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_HOTSPOT then
              			Size = Hotspot.GetSize(Objects[i]);
              			Position = Hotspot.GetPos(Objects[i]);	
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_HOTSPOT};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_LISTBOX then
              			Size = ListBox.GetSize(Objects[i]);
              			Position = ListBox.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_LISTBOX};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_COMBOBOX then
              			Size = ComboBox.GetSize(Objects[i]);
              			Position = ComboBox.GetPos(Objects[i]);	
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_COMBOBOX};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_PROGRESS then
              			Size = Progress.GetSize(Objects[i]);
              			Position = Progress.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_PROGRESS};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_TREE then
              			Size = Tree.GetSize(Objects[i]);			
              			Position = Tree.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_TREE};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_PLUGIN then
              			Size = Plugin.GetSize(Objects[i]);			
              			Position = Plugin.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_PLUGIN};
              			tblOriginalPos[i] = Pos;	
              		elseif Type == OBJECT_RICHTEXT then
              			Size = RichText.GetSize(Objects[i]);			
              			Position = RichText.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_RICHTEXT};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_SLIDESHOW then
              			Size = SlideShow.GetSize(Objects[i]);			
              			Position = SlideShow.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_SLIDESHOW};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_CHECKBOX then
              			Size = CheckBox.GetSize(Objects[i]);			
              			Position = CheckBox.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_CHECKBOX};
              			tblOriginalPos[i] = Pos;
              		elseif Type == OBJECT_RADIOBUTTON then
              			Size = RadioButton.GetSize(Objects[i]);			
              			Position = RadioButton.GetPos(Objects[i]);
              			Pos = {W=Size.Width,H=Size.Height,X=Position.X,Y=Position.Y,ObName=Objects[i],ObType=OBJECT_RADIOBUTTON};
              			tblOriginalPos[i] = Pos;
              		end	
              	end
              end
              
              ---------------------------------------------------------------------------
              --Function SetSize
              --This function is where the calculations for resizing and repositioning
              --takes place. It accepts a page Width and Height as parameters. It then
              --finds the ration between the original paage size and the current page size.
              --Every object on the page is then repositioned and resized by the ration
              --of the difference in size.
              ---------------------------------------------------------------------------
              function SetSize (Width,Height)
              	-- Get the original size of the page/project
              	OriginalWidth = tblOriginalSize.Width;
              	OriginalHeight = tblOriginalSize.Height;
              
              	-- Calculate the difference between the original page size and the current
              	RatioW = Width / OriginalWidth;
              	RatioH = Height  / OriginalHeight;
              	
              	-- Turn off the redraw
              	Application.SetRedraw(false);
              	
              	-- Now loop through the table that stores information about each object
              	--and reposition and resize them according to the above ratio
              	for i=1, Table.Count(tblOriginalPos) do
              		-- Each item in tblOriginalPos is a table that holds specific informtion about 
              		-- that object
              		tblProps = tblOriginalPos[i];
              		-- If the item is a Button
              		if tblProps.ObType == OBJECT_BUTTON then
              			-- Set the position of the object
              			Button.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			-- Set the size of the object
              			Button.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_LABEL then
              			Label.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Label.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_PARAGRAPH then
              			Paragraph.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Paragraph.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_IMAGE then
              			Image.SetPos(tblProps.ObName, tblProps.X * RatioW, tblProps.Y * RatioH);
              			Image.SetSize(tblProps.ObName, tblProps.W * RatioW, tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_FLASH then
              			Flash.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Flash.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_VIDEO then
              			Video.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Video.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_WEB then
              			Web.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Web.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_INPUT then
              			Input.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Input.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_HOTSPOT then
              			Hotspot.SetPos(tblProps.ObName, tblProps.X * RatioW, tblProps.Y * RatioH);
              			Hotspot.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_LISTBOX then
              			ListBox.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			ListBox.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_COMBOBOX then
              			ComboBox.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			ComboBox.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_PROGRESS then
              			Progress.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Progress.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_TREE then
              			Tree.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Tree.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_PLUGIN then
              			Plugin.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			Plugin.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_RICHTEXT then
              			RichText.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			RichText.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_SLIDESHOW then
              			SlideShow.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			SlideShow.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_CHECKBOX then
              			CheckBox.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			CheckBox.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		elseif tblProps.ObType == OBJECT_RADIOBUTTON then
              			RadioButton.SetPos(tblProps.ObName,tblProps.X * RatioW, tblProps.Y * RatioH);
              			RadioButton.SetSize(tblProps.ObName,tblProps.W * RatioW,tblProps.H * RatioH);
              		end
              	end
              
              	-- Allow the page to redraw once all objects have been adjusted
              	Application.SetRedraw(true);
              
              end
              Last edited by pjborg; 11-22-2007, 01:13 PM. Reason: addition...

              Comment

              • Canter
                Indigo Rose Customer
                • Nov 2007
                • 56

                #8
                For me, it works on some pages, but not others - appears to have something to do with objects that change dynamically - such as labels that display text based on some user action. On pages like that, the resizing generates errors complaining about nil values.

                Comment

                Working...
                X