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

Commit 8669ab2b authored by Marvin W.'s avatar Marvin W. 🐿️
Browse files

Maps: Add support for circle borders

parent c82192bf
Loading
Loading
Loading
Loading
+21 −8
Original line number Original line Diff line number Diff line
@@ -208,9 +208,11 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {
            private int matrixPosition;
            private int matrixPosition;
            private int phase;
            private int phase;
            private int scale;
            private int scale;
            private int direction;
            private int color;
            private int color;


            private int borderColor;
            private int borderWidth;

            @Override
            @Override
            public void update(GLViewport viewport) {
            public void update(GLViewport viewport) {
                if (!isEnabled()) {
                if (!isEnabled()) {
@@ -254,6 +256,7 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {


                float radius = (float) (drawRadius * viewport.pos.scale);
                float radius = (float) (drawRadius * viewport.pos.scale);
                GL.uniform1f(scale, radius);
                GL.uniform1f(scale, radius);
                GL.uniform1f(borderWidth, (float) (options.getStrokeWidth() / (viewport.pos.scale * 10)));


                double x = indicatorPosition.x - viewport.pos.x;
                double x = indicatorPosition.x - viewport.pos.x;
                double y = indicatorPosition.y - viewport.pos.y;
                double y = indicatorPosition.y - viewport.pos.y;
@@ -263,7 +266,6 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {
                viewport.mvp.multiplyMM(viewport.viewproj, viewport.mvp);
                viewport.mvp.multiplyMM(viewport.viewproj, viewport.mvp);
                viewport.mvp.setAsUniform(matrixPosition);
                viewport.mvp.setAsUniform(matrixPosition);
                GL.uniform1f(phase, 1);
                GL.uniform1f(phase, 1);
                GL.uniform2f(direction, 0, 0);
                float alpha = Color.aToFloat(options.getFillColor());
                float alpha = Color.aToFloat(options.getFillColor());
                GL.uniform4f(color,
                GL.uniform4f(color,
                        Color.rToFloat(options.getFillColor()) * alpha,
                        Color.rToFloat(options.getFillColor()) * alpha,
@@ -271,6 +273,13 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {
                        Color.bToFloat(options.getFillColor()) * alpha,
                        Color.bToFloat(options.getFillColor()) * alpha,
                        alpha);
                        alpha);


                alpha = Color.aToFloat(options.getStrokeColor());
                GL.uniform4f(borderColor,
                        Color.rToFloat(options.getStrokeColor()) * alpha,
                        Color.gToFloat(options.getStrokeColor()) * alpha,
                        Color.bToFloat(options.getStrokeColor()) * alpha,
                        alpha);

                GL.drawArrays(GL20.GL_TRIANGLE_STRIP, 0, 4);
                GL.drawArrays(GL20.GL_TRIANGLE_STRIP, 0, 4);
            }
            }


@@ -283,14 +292,15 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {
                matrixPosition = GL.getUniformLocation(shader, "u_mvp");
                matrixPosition = GL.getUniformLocation(shader, "u_mvp");
                phase = GL.getUniformLocation(shader, "u_phase");
                phase = GL.getUniformLocation(shader, "u_phase");
                scale = GL.getUniformLocation(shader, "u_scale");
                scale = GL.getUniformLocation(shader, "u_scale");
                direction = GL.getUniformLocation(shader, "u_dir");
                color = GL.getUniformLocation(shader, "u_color");
                color = GL.getUniformLocation(shader, "u_color");

                borderColor = GL.getUniformLocation(shader, "u_border_color");
                borderWidth = GL.getUniformLocation(shader, "u_border_width");
                return true;
                return true;
            }
            }
        }
        }
    }
    }



    private final static String vShaderStr = ""
    private final static String vShaderStr = ""
            + "precision mediump float;"
            + "precision mediump float;"
            + "uniform mat4 u_mvp;"
            + "uniform mat4 u_mvp;"
@@ -307,13 +317,16 @@ public class CircleImpl extends ICircleDelegate.Stub implements Markup {
            + "precision mediump float;"
            + "precision mediump float;"
            + "varying vec2 v_tex;"
            + "varying vec2 v_tex;"
            + "uniform float u_scale;"
            + "uniform float u_scale;"
            + "uniform float u_phase;"
            + "uniform vec2 u_dir;"
            + "uniform vec4 u_color;"
            + "uniform vec4 u_color;"

            + "uniform float u_border_width;"
            + "uniform vec4 u_border_color;"
            + "void main() {"
            + "void main() {"
            + "  float len = 1.0 - length(v_tex);"
            + "  float len = 1.0 - length(v_tex);"
            + "  float a = smoothstep(0.0, 2.0 / u_scale, len);"
            + "  float a = smoothstep(0.0, 2.0 / u_scale, len);"
            + "  gl_FragColor = u_color * a;"
            + "  if ( len > u_border_width )"
            + "    gl_FragColor = u_color;"
            + "  else "
            + "    gl_FragColor = u_border_color;"
            + "  gl_FragColor = gl_FragColor * a;"
            + "}";
            + "}";
}
}