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

Commit ed5f49d9 authored by Alex Stetson's avatar Alex Stetson Committed by Android (Google) Code Review
Browse files

Merge "Scale light z value relative to screen size" into tm-qpr-dev

parents c761b5c5 670bce21
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -25,11 +25,11 @@ import android.graphics.BLASTBufferQueue;
import android.graphics.FrameInfo;
import android.graphics.HardwareRenderer;
import android.graphics.Picture;
import android.graphics.Point;
import android.graphics.RecordingCanvas;
import android.graphics.Rect;
import android.graphics.RenderNode;
import android.os.Trace;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Surface.OutOfResourcesException;
import android.view.View.AttachInfo;
@@ -596,11 +596,18 @@ public final class ThreadedRenderer extends HardwareRenderer {
     */
    void setLightCenter(AttachInfo attachInfo) {
        // Adjust light position for window offsets.
        final Point displaySize = attachInfo.mPoint;
        attachInfo.mDisplay.getRealSize(displaySize);
        final float lightX = displaySize.x / 2f - attachInfo.mWindowLeft;
        DisplayMetrics displayMetrics = new DisplayMetrics();
        attachInfo.mDisplay.getRealMetrics(displayMetrics);
        final float lightX = displayMetrics.widthPixels / 2f - attachInfo.mWindowLeft;
        final float lightY = mLightY - attachInfo.mWindowTop;
        setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius);
        // To prevent shadow distortion on larger screens, scale the z position of the light source
        // relative to the smallest screen dimension.
        final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels)
                / (450f * displayMetrics.density);
        final float zWeightedAdjustment = (zRatio + 2) / 3f;
        final float lightZ = mLightZ * zWeightedAdjustment;

        setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius);
    }

    /**
@@ -849,12 +856,18 @@ public final class ThreadedRenderer extends HardwareRenderer {
        public void setLightCenter(final Display display,
                final int windowLeft, final int windowTop) {
            // Adjust light position for window offsets.
            final Point displaySize = new Point();
            display.getRealSize(displaySize);
            final float lightX = displaySize.x / 2f - windowLeft;
            DisplayMetrics displayMetrics = new DisplayMetrics();
            display.getRealMetrics(displayMetrics);
            final float lightX = displayMetrics.widthPixels / 2f - windowLeft;
            final float lightY = mLightY - windowTop;

            setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius);
            // To prevent shadow distortion on larger screens, scale the z position of the light
            // source relative to the smallest screen dimension.
            final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels)
                    / (450f * displayMetrics.density);
            final float zWeightedAdjustment = (zRatio + 2) / 3f;
            final float lightZ = mLightZ * zWeightedAdjustment;

            setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius);
        }

        public RenderNode getRootNode() {
+1 −1
Original line number Diff line number Diff line
@@ -684,7 +684,7 @@

    <!-- Lighting and shadow properties -->
    <dimen name="light_y">0dp</dimen>
    <dimen name="light_z">600dp</dimen>
    <dimen name="light_z">500dp</dimen>
    <dimen name="light_radius">800dp</dimen>
    <item type="dimen" format="float" name="ambient_shadow_alpha">0.039</item>
    <item type="dimen" format="float" name="spot_shadow_alpha">0.19</item>