Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 585c67f7 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

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, ...).
parents 976e363f b5c17a64
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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);
        }