You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Lee Burrows (JIRA)" <ji...@apache.org> on 2014/12/04 18:29:12 UTC

[jira] [Comment Edited] (FLEX-34653) Setting applicationDPI (autoscaling) on desktop works incorrectly.

    [ https://issues.apache.org/jira/browse/FLEX-34653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14234373#comment-14234373 ] 

Lee Burrows edited comment on FLEX-34653 at 12/4/14 5:28 PM:
-------------------------------------------------------------

Sorry, i thought 72 was returned by default on desktop; returning to my code i see i was mistaken ;)

You're getting 120 because that's the lowest value that RuntimeDPIProvider,getRuntimeDPI returns (see RuntimeDPIProvider.classifyDPI which is called by getRuntimeDPI).

You'll need to override getRuntimeDPI if you want it to return 72 when on desktop. Here's the code i use:

override public function get runtimeDPI():Number
{
	var dpi:Number = Capabilities.screenDPI;
	if (dpi == 72)
		return 72;
	if (dpi <= 140)
		return DPIClassification.DPI_120;
	if (dpi <= 200)
		return DPIClassification.DPI_160;
	if (dpi <= 280)
		return DPIClassification.DPI_240;
	if (dpi <= 400)
		return DPIClassification.DPI_320;
	if (dpi <= 560)
		return DPIClassification.DPI_480;
	return DPIClassification.DPI_640;
}

Note: this doesnt include the 120 vs 160 ipad checking that the original code includes.


was (Author: leeburrows):
Sorry, i thought 72 was returned by default on desktop; returning to my code i see i was mistaken ;)

You're getting 120 because that's the lowest value that RuntimeDPIProvider,getRuntimeDPI returns (see RuntimeDPIProvider.classifyDPI which is called by getRuntimeDPI).

You'll need to override getRuntimeDPI if you want it to return 72 when on desktop. Here's the code i use:

override public function get runtimeDPI():Number
{
	var dpi:Number = Capabilities.screenDPI;
	if (dpi == 72)
		return 72;
	if (dpi <= 140)
		return DPIClassification.DPI_120;
	if (dpi <= 200)
		return DPIClassification.DPI_160;
	if (dpi <= 280)
		return DPIClassification.DPI_240;
	if (dpi <= 400)
		return DPIClassification.DPI_320;
	if (dpi <= 560)
		return DPIClassification.DPI_480;
	return DPIClassification.DPI_640;
}

> Setting applicationDPI (autoscaling) on desktop works incorrectly.
> ------------------------------------------------------------------
>
>                 Key: FLEX-34653
>                 URL: https://issues.apache.org/jira/browse/FLEX-34653
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Layout - General, Skinning
>    Affects Versions: Apache Flex 4.13.0
>         Environment: Windows ( Possible Mac - Not checked ).
>            Reporter: Jason Moore
>              Labels: DPI, Scaling, automatic
>         Attachments: screenshot.png, screenshot2.png
>
>
> The issue occurs when using automatic scaling and setting the application DPI and overriding the runtimeDPIProvider to set the runtimeDPI where it is incorrectly returned from the OS ( On desktop devices for instance ).
> If the two values match ie 1:1 scaling, there is no issue. But if they differ then the application content is scalled correctly , but the stage size is also scaled, incorrect. This leads to the application being clipped when scaling up and excess space when scaling down.. See code excepts to recreate...
> {code:title=ScaleIssue.mxml|borderStyle=solid}
> <?xml version="1.0" encoding="utf-8"?>
> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
> 					   xmlns:s="library://ns.adobe.com/flex/spark" 
> 					   xmlns:mx="library://ns.adobe.com/flex/mx"
> 					   applicationDPI="160"
> 					   runtimeDPIProvider="myRuntimeDPIProvider">
> 	
> 		<s:Label id="LeftMarker" left="0" verticalCenter="0" text="&lt;--- LEFT" fontSize="24"/>
> 		<s:Label id="MiddleMarker" horizontalCenter="0" verticalCenter="0" text="&gt; &gt; &gt; MIDDLE &lt; &lt; &lt;" fontSize="24"/>
> 		<s:Label id="RightMarker" right="0" verticalCenter="0" text="RIGHT ---&gt;" fontSize="24"/>
> 							 
> </s:WindowedApplication>
> {code}
> {code:title=myRuntimeDPIProvider.as|borderStyle=solid}
> package 
> {
> 	
> 	import mx.core.DPIClassification;
> 	import mx.core.RuntimeDPIProvider;
> 	
> 	public class myRuntimeDPIProvider extends RuntimeDPIProvider
> 	{
> 				
> 		/**
> 		 * Overrride getter function so we can set the dpi manually when running on desktop device
> 		 * This would normally be a bit more sophisticated... 
> 		 * 
> 		 * @return 
> 		 * 
> 		 */		
> 		override public function get runtimeDPI():Number
> 		{			
> 			return DPIClassification.DPI_240;
> 		}
> 		
> 	}
> }
> {code}
> You should see the text labels pointing to the left and right screen edges.. but instead the right hand label is off screen.
> Hope that makes sense.
> J :)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)