Merge change 26300 into eclair

* changes:
  experimental fix for compatibility mode. When we scale up by 1.5 (240 dpi), we put stretched ninepatches on exact pixel boundaries when we walk the inverse matrix (e.g. 2/3, 1+1/3, 2, 2+2/3, 3+1/3, 4, ...).
This commit is contained in:
Android (Google) Code Review
2009-09-22 07:55:58 -04:00

View File

@@ -274,6 +274,25 @@ public class CompatibilityInfo {
* Apply translation to the canvas that is necessary to draw the content.
*/
public void translateCanvas(Canvas canvas) {
if (applicationScale == 1.5f) {
/* When we scale for compatibility, we can put our stretched
bitmaps and ninepatches on exacty 1/2 pixel boundaries,
which can give us inconsistent drawing due to imperfect
float precision in the graphics engine's inverse matrix.
As a work-around, we translate by a tiny amount to avoid
landing on exact pixel centers and boundaries, giving us
the slop we need to draw consistently.
This constant is meant to resolve to 1/255 after it is
scaled by 1.5 (applicationScale). Note, this is just a guess
as to what is small enough not to create its own artifacts,
and big enough to avoid the precision problems. Feel free
to experiment with smaller values as you choose.
*/
final float tinyOffset = 2.0f / (3 * 255);
canvas.translate(tinyOffset, tinyOffset);
}
canvas.scale(applicationScale, applicationScale);
}