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

Commit 1b6531cc authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Rounded corners

Test: visual
Test: /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test
Fixes: 111514493
Change-Id: Ie8f400bbcea3e9653295ea7b75c7eef568fd76c4
parent 49109214
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ message SurfaceChange {
        OpaqueFlagChange            opaque_flag             = 13;
        OpaqueFlagChange            opaque_flag             = 13;
        SecureFlagChange            secure_flag             = 14;
        SecureFlagChange            secure_flag             = 14;
        DeferredTransactionChange   deferred_transaction    = 15;
        DeferredTransactionChange   deferred_transaction    = 15;
        CornerRadiusChange          corner_radius           = 16;
    }
    }
}
}


@@ -62,6 +63,10 @@ message AlphaChange {
    required float alpha = 1;
    required float alpha = 1;
}
}


message CornerRadiusChange {
    required float corner_radius = 1;
}

message LayerChange {
message LayerChange {
    required uint32 layer = 1;
    required uint32 layer = 1;
}
}
+10 −0
Original line number Original line Diff line number Diff line
@@ -385,6 +385,9 @@ status_t Replayer::doSurfaceTransaction(
            case SurfaceChange::SurfaceChangeCase::kCrop:
            case SurfaceChange::SurfaceChangeCase::kCrop:
                setCrop(transaction, change.id(), change.crop());
                setCrop(transaction, change.id(), change.crop());
                break;
                break;
            case SurfaceChange::SurfaceChangeCase::kCornerRadius:
                setCornerRadius(transaction, change.id(), change.corner_radius());
                break;
            case SurfaceChange::SurfaceChangeCase::kMatrix:
            case SurfaceChange::SurfaceChangeCase::kMatrix:
                setMatrix(transaction, change.id(), change.matrix());
                setMatrix(transaction, change.id(), change.matrix());
                break;
                break;
@@ -489,6 +492,13 @@ void Replayer::setCrop(SurfaceComposerClient::Transaction& t,
    t.setCrop_legacy(mLayers[id], r);
    t.setCrop_legacy(mLayers[id], r);
}
}


void Replayer::setCornerRadius(SurfaceComposerClient::Transaction& t,
        layer_id id, const CornerRadiusChange& cc) {
    ALOGV("Layer %d: Setting Corner Radius -- cornerRadius=%d", id, cc.corner_radius());

    t.setCornerRadius(mLayers[id], cc.corner_radius());
}

void Replayer::setMatrix(SurfaceComposerClient::Transaction& t,
void Replayer::setMatrix(SurfaceComposerClient::Transaction& t,
        layer_id id, const MatrixChange& mc) {
        layer_id id, const MatrixChange& mc) {
    ALOGV("Layer %d: Setting Matrix -- dsdx=%f, dtdx=%f, dsdy=%f, dtdy=%f", id, mc.dsdx(),
    ALOGV("Layer %d: Setting Matrix -- dsdx=%f, dtdx=%f, dsdy=%f, dtdy=%f", id, mc.dsdx(),
+2 −0
Original line number Original line Diff line number Diff line
@@ -92,6 +92,8 @@ class Replayer {
            layer_id id, const LayerChange& lc);
            layer_id id, const LayerChange& lc);
    void setCrop(SurfaceComposerClient::Transaction& t,
    void setCrop(SurfaceComposerClient::Transaction& t,
            layer_id id, const CropChange& cc);
            layer_id id, const CropChange& cc);
    void setCornerRadius(SurfaceComposerClient::Transaction& t,
            layer_id id, const CornerRadiusChange& cc);
    void setMatrix(SurfaceComposerClient::Transaction& t,
    void setMatrix(SurfaceComposerClient::Transaction& t,
            layer_id id, const MatrixChange& mc);
            layer_id id, const MatrixChange& mc);
    void setOverrideScalingMode(SurfaceComposerClient::Transaction& t,
    void setOverrideScalingMode(SurfaceComposerClient::Transaction& t,
+6 −0
Original line number Original line Diff line number Diff line
@@ -82,6 +82,7 @@ status_t layer_state_t::write(Parcel& output) const


    memcpy(output.writeInplace(16 * sizeof(float)),
    memcpy(output.writeInplace(16 * sizeof(float)),
           colorTransform.asArray(), 16 * sizeof(float));
           colorTransform.asArray(), 16 * sizeof(float));
    output.writeFloat(cornerRadius);


    if (output.writeVectorSize(listenerCallbacks) == NO_ERROR) {
    if (output.writeVectorSize(listenerCallbacks) == NO_ERROR) {
        for (const auto& [listener, callbackIds] : listenerCallbacks) {
        for (const auto& [listener, callbackIds] : listenerCallbacks) {
@@ -149,6 +150,7 @@ status_t layer_state_t::read(const Parcel& input)
    }
    }


    colorTransform = mat4(static_cast<const float*>(input.readInplace(16 * sizeof(float))));
    colorTransform = mat4(static_cast<const float*>(input.readInplace(16 * sizeof(float))));
    cornerRadius = input.readFloat();


    int32_t listenersSize = input.readInt32();
    int32_t listenersSize = input.readInt32();
    for (int32_t i = 0; i < listenersSize; i++) {
    for (int32_t i = 0; i < listenersSize; i++) {
@@ -270,6 +272,10 @@ void layer_state_t::merge(const layer_state_t& other) {
        what |= eCropChanged_legacy;
        what |= eCropChanged_legacy;
        crop_legacy = other.crop_legacy;
        crop_legacy = other.crop_legacy;
    }
    }
    if (other.what & eCornerRadiusChanged) {
        what |= eCornerRadiusChanged;
        cornerRadius = other.cornerRadius;
    }
    if (other.what & eDeferTransaction_legacy) {
    if (other.what & eDeferTransaction_legacy) {
        what |= eDeferTransaction_legacy;
        what |= eDeferTransaction_legacy;
        barrierHandle_legacy = other.barrierHandle_legacy;
        barrierHandle_legacy = other.barrierHandle_legacy;
+12 −0
Original line number Original line Diff line number Diff line
@@ -475,6 +475,18 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setCrop_
    return *this;
    return *this;
}
}


SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setCornerRadius(
        const sp<SurfaceControl>& sc, float cornerRadius) {
    layer_state_t* s = getLayerState(sc);
    if (!s) {
        mStatus = BAD_INDEX;
        return *this;
    }
    s->what |= layer_state_t::eCornerRadiusChanged;
    s->cornerRadius = cornerRadius;
    return *this;
}

SurfaceComposerClient::Transaction&
SurfaceComposerClient::Transaction&
SurfaceComposerClient::Transaction::deferTransactionUntil_legacy(const sp<SurfaceControl>& sc,
SurfaceComposerClient::Transaction::deferTransactionUntil_legacy(const sp<SurfaceControl>& sc,
                                                                 const sp<IBinder>& handle,
                                                                 const sp<IBinder>& handle,
Loading