Obeying browser text size changes when using noScale
In response to my previous post, Making Flash movies obey browser text size changes, someone asked in the comments whether this method works when Stage.scaleMode is set to “noScale” (like it is automatically in every Flex SWF, for example, and in many Flash applications.) Setting the scaleMode of the Stage to "noScale" lets Flash developers control the layout of a Flash application in response to a change in the size of the Stage. It's how you create liquid layouts in Flash.
The answer to the question is that, yes, this method will work when using noScale and you can decide exactly how to handle the layout of your SWF when the stage size changes.
Here's the example from the previous post, refactored with some custom scaling code: You can view the example online and download the source code.
This is a snippet of just the custom scaling code from the above example:
// The scale mode is set to no scale Stage.scaleMode = "noScale"; Stage.align = "TL"; // Listen for resize events Stage.addListener(this); var margin:Number = 20; // pixels, same on all sides // Calculate aspect ratio of the text items clip // so we don't distress the text while scaling var textItemsAspectRatio = textItems._height/textItems._width; // Ditto for the picture var pictureAspectRatio = picture._height/picture._width; function onLoad() { // Carry out the resize code for the first time. onResize(); } // Custom layout code function onResize() { // Store the stage dimensions as we'll be // using them frequently var sw:Number = Stage.width; var sh:Number = Stage.height; // Scale the background background._x = 0; background._y = 0; background._width = sw; background._height = sh; // Scale the text. This is a quick and dirty way of // doing it and it distresses the text textItems._x = margin; textItems._y = margin; textItems._width = sw - (margin*2); textItems._height = textItems._width * textItemsAspectRatio; // Scale the picture picture._y = textItems._y + textItems._height; picture._x = margin; picture._width = sw - (margin*2); picture._height = picture._width * pictureAspectRatio; // If you think this is a lot of work (and it is), // check out how easy it is to do the same thing // with layout constraints in Flex 2. }
Wow, it had been a long time since I'd written any custom scaling code. Makes you realize how much simpler life is with Flex 2 and its awesome layout constraints.
Comments
by mike lyda on 2006-09-26 12:51:30
by aral on 2006-09-26 13:12:39
by mike lyda on 2006-09-26 13:31:39
by Bob Corporaal on 2006-09-26 23:02:20
by aral on 2006-09-27 23:19:10
by Technikwürze » Technikwürze 51 - Das Comeback von Flash on 2006-12-19 07:48:45