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

Commit 3cd310f1 authored by Jason Sams's avatar Jason Sams Committed by Android (Google) Code Review
Browse files

Merge "Update fountain with multitouch support."

parents 37f44733 60b0c1da
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@
#include "../../../../scriptc/rs_graphics.rsh"

static int newPart = 0;
static float4 partColor;
rs_mesh partMesh;

typedef struct __attribute__((packed, aligned(4))) Point {
@@ -40,16 +39,17 @@ int root() {
    return 1;
}

void addParticles(int rate, float x, float y, bool newColor)
static float4 partColor[10];
void addParticles(int rate, float x, float y, int index, bool newColor)
{
    if (newColor) {
        partColor.x = rsRand(0.5f, 1.0f);
        partColor.y = rsRand(1.0f);
        partColor.z = rsRand(1.0f);
        partColor[index].x = rsRand(0.5f, 1.0f);
        partColor[index].y = rsRand(1.0f);
        partColor[index].z = rsRand(1.0f);
    }
    float rMax = ((float)rate) * 0.005f;
    float rMax = ((float)rate) * 0.02f;
    int size = rsAllocationGetDimX(rsGetAllocation(point));
    uchar4 c = rsPackColorTo8888(partColor);
    uchar4 c = rsPackColorTo8888(partColor[index]);

    Point_t * np = &point[newPart];
    float2 p = {x, y};
+12 −5
Original line number Diff line number Diff line
@@ -48,13 +48,20 @@ public class FountainRS {
        mRS.contextBindRootScript(mScript);
    }

    boolean holdingColor = false;
    public void newTouchPosition(int x, int y, int rate) {
    boolean holdingColor[] = new boolean[10];
    public void newTouchPosition(float x, float y, float pressure, int id) {
        if (id > holdingColor.length) {
            return;
        }
        int rate = (int)(pressure * pressure * 500.f);
        if(rate > 500) {
            rate = 500;
        }
        if (rate > 0) {
            mScript.invoke_addParticles(rate, x, y, !holdingColor);
            holdingColor = true;
            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
            holdingColor[id] = true;
        } else {
            holdingColor = false;
            holdingColor[id] = false;
        }

    }
+18 −6
Original line number Diff line number Diff line
@@ -73,15 +73,27 @@ public class FountainView extends RSSurfaceView {
    {
        int act = ev.getAction();
        if (act == ev.ACTION_UP) {
            mRender.newTouchPosition(0, 0, 0);
            mRender.newTouchPosition(0, 0, 0, 0);
            return false;
        }
        float rate = (ev.getPressure() * 50.f);
        rate *= rate;
        if(rate > 2000.f) {
            rate = 2000.f;

        int count = ev.getHistorySize();
        int pcount = ev.getPointerCount();

        for (int p=0; p < pcount; p++) {
            int id = ev.getPointerId(p);
            mRender.newTouchPosition(ev.getX(p),
                                     ev.getY(p),
                                     ev.getPressure(p),
                                     id);

            for (int i=0; i < count; i++) {
                mRender.newTouchPosition(ev.getHistoricalX(p, i),
                                         ev.getHistoricalY(p, i),
                                         ev.getHistoricalPressure(p, i),
                                         id);
            }
        }
        mRender.newTouchPosition((int)ev.getX(), (int)ev.getY(), (int)rate);
        return true;
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -50,11 +50,12 @@ public class ScriptC_Fountain extends ScriptC {
    }

    private final static int mExportFuncIdx_addParticles = 0;
    public void invoke_addParticles(int rate, float x, float y, boolean newColor) {
        FieldPacker addParticles_fp = new FieldPacker(16);
    public void invoke_addParticles(int rate, float x, float y, int index, boolean newColor) {
        FieldPacker addParticles_fp = new FieldPacker(20);
        addParticles_fp.addI32(rate);
        addParticles_fp.addF32(x);
        addParticles_fp.addF32(y);
        addParticles_fp.addI32(index);
        addParticles_fp.addBoolean(newColor);
        addParticles_fp.skip(3);
        invoke(mExportFuncIdx_addParticles, addParticles_fp);