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

Commit 02b0545d authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Revert "Change PointerController to display space"

Revert "Change PointerController to display space"

Revert submission 16194643-pointer-controller-in-display-space

Reason for revert: b/206817973
Reverted Changes:
I764c070ad:Change PointerController to display space
I5e9e19c36:Change PointerController to display space

Change-Id: I615d343968b818f498e905bab7963106b4e62651
parent 3f6626e2
Loading
Loading
Loading
Loading
+15 −71
Original line number Diff line number Diff line
@@ -17,29 +17,24 @@
#define LOG_TAG "PointerController"
//#define LOG_NDEBUG 0

// Log debug messages about pointer updates
#define DEBUG_POINTER_UPDATES 0

#include "PointerController.h"
#include "MouseCursorController.h"
#include "PointerControllerContext.h"
#include "TouchSpotController.h"

#include <log/log.h>

#include <SkBitmap.h>
#include <SkBlendMode.h>
#include <SkCanvas.h>
#include <SkColor.h>
#include <SkPaint.h>

namespace android {

namespace {

const ui::Transform kIdentityTransform;

} // namespace

// --- PointerController::DisplayInfoListener ---

void PointerController::DisplayInfoListener::onWindowInfosChanged(
        const std::vector<android::gui::WindowInfo>&,
        const std::vector<android::gui::DisplayInfo>& displayInfo) {
    mPointerController.onDisplayInfosChanged(displayInfo);
}

// --- PointerController ---

std::shared_ptr<PointerController> PointerController::create(
@@ -68,12 +63,9 @@ std::shared_ptr<PointerController> PointerController::create(
PointerController::PointerController(const sp<PointerControllerPolicyInterface>& policy,
                                     const sp<Looper>& looper,
                                     const sp<SpriteController>& spriteController)
      : mContext(policy, looper, spriteController, *this),
        mCursorController(mContext),
        mDisplayInfoListener(new DisplayInfoListener(*this)) {
      : mContext(policy, looper, spriteController, *this), mCursorController(mContext) {
    std::scoped_lock lock(mLock);
    mLocked.presentation = Presentation::SPOT;
    SurfaceComposerClient::getDefault()->addWindowInfosListener(mDisplayInfoListener);
}

bool PointerController::getBounds(float* outMinX, float* outMinY, float* outMaxX,
@@ -82,14 +74,7 @@ bool PointerController::getBounds(float* outMinX, float* outMinY, float* outMaxX
}

void PointerController::move(float deltaX, float deltaY) {
    const int32_t displayId = mCursorController.getDisplayId();
    vec2 transformed;
    {
        std::scoped_lock lock(mLock);
        const auto& transform = getTransformForDisplayLocked(displayId);
        transformed = transformWithoutTranslation(transform, {deltaX, deltaY});
    }
    mCursorController.move(transformed.x, transformed.y);
    mCursorController.move(deltaX, deltaY);
}

void PointerController::setButtonState(int32_t buttonState) {
@@ -101,26 +86,12 @@ int32_t PointerController::getButtonState() const {
}

void PointerController::setPosition(float x, float y) {
    const int32_t displayId = mCursorController.getDisplayId();
    vec2 transformed;
    {
    std::scoped_lock lock(mLock);
        const auto& transform = getTransformForDisplayLocked(displayId);
        transformed = transform.transform(x, y);
    }
    mCursorController.setPosition(transformed.x, transformed.y);
    mCursorController.setPosition(x, y);
}

void PointerController::getPosition(float* outX, float* outY) const {
    const int32_t displayId = mCursorController.getDisplayId();
    mCursorController.getPosition(outX, outY);
    {
        std::scoped_lock lock(mLock);
        const auto& transform = getTransformForDisplayLocked(displayId);
        const auto xy = transform.inverse().transform(*outX, *outY);
        *outX = xy.x;
        *outY = xy.y;
    }
}

int32_t PointerController::getDisplayId() const {
@@ -159,25 +130,11 @@ void PointerController::setPresentation(Presentation presentation) {
void PointerController::setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
                                 BitSet32 spotIdBits, int32_t displayId) {
    std::scoped_lock lock(mLock);
    std::array<PointerCoords, MAX_POINTERS> outSpotCoords{};
    const ui::Transform& transform = getTransformForDisplayLocked(displayId);

    for (BitSet32 idBits(spotIdBits); !idBits.isEmpty();) {
        const uint32_t index = spotIdToIndex[idBits.clearFirstMarkedBit()];

        const vec2 xy = transform.transform(spotCoords[index].getXYValue());
        outSpotCoords[index].setAxisValue(AMOTION_EVENT_AXIS_X, xy.x);
        outSpotCoords[index].setAxisValue(AMOTION_EVENT_AXIS_Y, xy.y);

        float pressure = spotCoords[index].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE);
        outSpotCoords[index].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pressure);
    }

    auto it = mLocked.spotControllers.find(displayId);
    if (it == mLocked.spotControllers.end()) {
        mLocked.spotControllers.try_emplace(displayId, displayId, mContext);
    }
    mLocked.spotControllers.at(displayId).setSpots(outSpotCoords.data(), spotIdToIndex, spotIdBits);
    mLocked.spotControllers.at(displayId).setSpots(spotCoords, spotIdToIndex, spotIdBits);
}

void PointerController::clearSpots() {
@@ -237,7 +194,7 @@ void PointerController::doInactivityTimeout() {

void PointerController::onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports) {
    std::unordered_set<int32_t> displayIdSet;
    for (const DisplayViewport& viewport : viewports) {
    for (DisplayViewport viewport : viewports) {
        displayIdSet.insert(viewport.displayId);
    }

@@ -257,17 +214,4 @@ void PointerController::onDisplayViewportsUpdated(std::vector<DisplayViewport>&
    }
}

void PointerController::onDisplayInfosChanged(const std::vector<gui::DisplayInfo>& displayInfo) {
    std::scoped_lock lock(mLock);
    mLocked.mDisplayInfos = displayInfo;
}

const ui::Transform& PointerController::getTransformForDisplayLocked(int displayId) const {
    const auto& di = mLocked.mDisplayInfos;
    auto it = std::find_if(di.begin(), di.end(), [displayId](const gui::DisplayInfo& info) {
        return info.displayId == displayId;
    });
    return it != di.end() ? it->transform : kIdentityTransform;
}

} // namespace android
+0 −16
Original line number Diff line number Diff line
@@ -72,8 +72,6 @@ public:
    void reloadPointerResources();
    void onDisplayViewportsUpdated(std::vector<DisplayViewport>& viewports);

    void onDisplayInfosChanged(const std::vector<gui::DisplayInfo>& displayInfos);

private:
    friend PointerControllerContext::LooperCallback;
    friend PointerControllerContext::MessageHandler;
@@ -87,23 +85,9 @@ private:
    struct Locked {
        Presentation presentation;

        std::vector<gui::DisplayInfo> mDisplayInfos;
        std::unordered_map<int32_t /* displayId */, TouchSpotController> spotControllers;
    } mLocked GUARDED_BY(mLock);

    class DisplayInfoListener : public gui::WindowInfosListener {
    public:
        explicit DisplayInfoListener(PointerController& pc) : mPointerController(pc){};
        void onWindowInfosChanged(const std::vector<android::gui::WindowInfo>&,
                                  const std::vector<android::gui::DisplayInfo>&) override;

    private:
        PointerController& mPointerController;
    };
    sp<DisplayInfoListener> mDisplayInfoListener;

    const ui::Transform& getTransformForDisplayLocked(int displayId) const REQUIRES(mLock);

    PointerController(const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
                      const sp<SpriteController>& spriteController);
    void clearSpotsLocked();