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

Commit ffe3d223 authored by Prabir Pradhan's avatar Prabir Pradhan Committed by Android (Google) Code Review
Browse files

Merge changes from topic "pc-return-val" into udc-dev

* changes:
  Return values in PointerController's getters
  Get mouse cursor position from PointerController instead of WM
parents abe076c4 b5dadece
Loading
Loading
Loading
Loading
+22 −36
Original line number Original line Diff line number Diff line
@@ -63,24 +63,23 @@ MouseCursorController::~MouseCursorController() {
    mLocked.pointerSprite.clear();
    mLocked.pointerSprite.clear();
}
}


bool MouseCursorController::getBounds(float* outMinX, float* outMinY, float* outMaxX,
std::optional<FloatRect> MouseCursorController::getBounds() const {
                                      float* outMaxY) const {
    std::scoped_lock lock(mLock);
    std::scoped_lock lock(mLock);


    return getBoundsLocked(outMinX, outMinY, outMaxX, outMaxY);
    return getBoundsLocked();
}
}


bool MouseCursorController::getBoundsLocked(float* outMinX, float* outMinY, float* outMaxX,
std::optional<FloatRect> MouseCursorController::getBoundsLocked() const REQUIRES(mLock) {
                                            float* outMaxY) const REQUIRES(mLock) {
    if (!mLocked.viewport.isValid()) {
    if (!mLocked.viewport.isValid()) {
        return false;
        return {};
    }
    }


    *outMinX = mLocked.viewport.logicalLeft;
    return FloatRect{
    *outMinY = mLocked.viewport.logicalTop;
            static_cast<float>(mLocked.viewport.logicalLeft),
    *outMaxX = mLocked.viewport.logicalRight - 1;
            static_cast<float>(mLocked.viewport.logicalTop),
    *outMaxY = mLocked.viewport.logicalBottom - 1;
            static_cast<float>(mLocked.viewport.logicalRight - 1),
    return true;
            static_cast<float>(mLocked.viewport.logicalBottom - 1),
    };
}
}


void MouseCursorController::move(float deltaX, float deltaY) {
void MouseCursorController::move(float deltaX, float deltaY) {
@@ -121,31 +120,19 @@ void MouseCursorController::setPosition(float x, float y) {
}
}


void MouseCursorController::setPositionLocked(float x, float y) REQUIRES(mLock) {
void MouseCursorController::setPositionLocked(float x, float y) REQUIRES(mLock) {
    float minX, minY, maxX, maxY;
    const auto bounds = getBoundsLocked();
    if (getBoundsLocked(&minX, &minY, &maxX, &maxY)) {
    if (!bounds) return;
        if (x <= minX) {

            mLocked.pointerX = minX;
    mLocked.pointerX = std::max(bounds->left, std::min(bounds->right, x));
        } else if (x >= maxX) {
    mLocked.pointerY = std::max(bounds->top, std::min(bounds->bottom, y));
            mLocked.pointerX = maxX;

        } else {
            mLocked.pointerX = x;
        }
        if (y <= minY) {
            mLocked.pointerY = minY;
        } else if (y >= maxY) {
            mLocked.pointerY = maxY;
        } else {
            mLocked.pointerY = y;
        }
    updatePointerLocked();
    updatePointerLocked();
}
}
}


void MouseCursorController::getPosition(float* outX, float* outY) const {
FloatPoint MouseCursorController::getPosition() const {
    std::scoped_lock lock(mLock);
    std::scoped_lock lock(mLock);


    *outX = mLocked.pointerX;
    return {mLocked.pointerX, mLocked.pointerY};
    *outY = mLocked.pointerY;
}
}


int32_t MouseCursorController::getDisplayId() const {
int32_t MouseCursorController::getDisplayId() const {
@@ -235,10 +222,9 @@ void MouseCursorController::setDisplayViewport(const DisplayViewport& viewport,
    // Reset cursor position to center if size or display changed.
    // Reset cursor position to center if size or display changed.
    if (oldViewport.displayId != viewport.displayId || oldDisplayWidth != newDisplayWidth ||
    if (oldViewport.displayId != viewport.displayId || oldDisplayWidth != newDisplayWidth ||
        oldDisplayHeight != newDisplayHeight) {
        oldDisplayHeight != newDisplayHeight) {
        float minX, minY, maxX, maxY;
        if (const auto bounds = getBoundsLocked(); bounds) {
        if (getBoundsLocked(&minX, &minY, &maxX, &maxY)) {
            mLocked.pointerX = (bounds->left + bounds->right) * 0.5f;
            mLocked.pointerX = (minX + maxX) * 0.5f;
            mLocked.pointerY = (bounds->top + bounds->bottom) * 0.5f;
            mLocked.pointerY = (minY + maxY) * 0.5f;
            // Reload icon resources for density may be changed.
            // Reload icon resources for density may be changed.
            loadResourcesLocked(getAdditionalMouseResources);
            loadResourcesLocked(getAdditionalMouseResources);
        } else {
        } else {
+3 −3
Original line number Original line Diff line number Diff line
@@ -43,12 +43,12 @@ public:
    MouseCursorController(PointerControllerContext& context);
    MouseCursorController(PointerControllerContext& context);
    ~MouseCursorController();
    ~MouseCursorController();


    bool getBounds(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const;
    std::optional<FloatRect> getBounds() const;
    void move(float deltaX, float deltaY);
    void move(float deltaX, float deltaY);
    void setButtonState(int32_t buttonState);
    void setButtonState(int32_t buttonState);
    int32_t getButtonState() const;
    int32_t getButtonState() const;
    void setPosition(float x, float y);
    void setPosition(float x, float y);
    void getPosition(float* outX, float* outY) const;
    FloatPoint getPosition() const;
    int32_t getDisplayId() const;
    int32_t getDisplayId() const;
    void fade(PointerControllerInterface::Transition transition);
    void fade(PointerControllerInterface::Transition transition);
    void unfade(PointerControllerInterface::Transition transition);
    void unfade(PointerControllerInterface::Transition transition);
@@ -102,7 +102,7 @@ private:


    } mLocked GUARDED_BY(mLock);
    } mLocked GUARDED_BY(mLock);


    bool getBoundsLocked(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const;
    std::optional<FloatRect> getBoundsLocked() const;
    void setPositionLocked(float x, float y);
    void setPositionLocked(float x, float y);


    void updatePointerLocked();
    void updatePointerLocked();
+30 −21
Original line number Original line Diff line number Diff line
@@ -114,16 +114,15 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>&
PointerController::~PointerController() {
PointerController::~PointerController() {
    mDisplayInfoListener->onPointerControllerDestroyed();
    mDisplayInfoListener->onPointerControllerDestroyed();
    mUnregisterWindowInfosListener(mDisplayInfoListener);
    mUnregisterWindowInfosListener(mDisplayInfoListener);
    mContext.getPolicy()->onPointerDisplayIdChanged(ADISPLAY_ID_NONE, 0, 0);
    mContext.getPolicy()->onPointerDisplayIdChanged(ADISPLAY_ID_NONE, FloatPoint{0, 0});
}
}


std::mutex& PointerController::getLock() const {
std::mutex& PointerController::getLock() const {
    return mDisplayInfoListener->mLock;
    return mDisplayInfoListener->mLock;
}
}


bool PointerController::getBounds(float* outMinX, float* outMinY, float* outMaxX,
std::optional<FloatRect> PointerController::getBounds() const {
                                  float* outMaxY) const {
    return mCursorController.getBounds();
    return mCursorController.getBounds(outMinX, outMinY, outMaxX, outMaxY);
}
}


void PointerController::move(float deltaX, float deltaY) {
void PointerController::move(float deltaX, float deltaY) {
@@ -156,15 +155,13 @@ void PointerController::setPosition(float x, float y) {
    mCursorController.setPosition(transformed.x, transformed.y);
    mCursorController.setPosition(transformed.x, transformed.y);
}
}


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


@@ -262,6 +259,13 @@ void PointerController::reloadPointerResources() {
}
}


void PointerController::setDisplayViewport(const DisplayViewport& viewport) {
void PointerController::setDisplayViewport(const DisplayViewport& viewport) {
    struct PointerDisplayChangeArgs {
        int32_t displayId;
        FloatPoint cursorPosition;
    };
    std::optional<PointerDisplayChangeArgs> pointerDisplayChanged;

    { // acquire lock
        std::scoped_lock lock(getLock());
        std::scoped_lock lock(getLock());


        bool getAdditionalMouseResources = false;
        bool getAdditionalMouseResources = false;
@@ -271,10 +275,15 @@ void PointerController::setDisplayViewport(const DisplayViewport& viewport) {
        }
        }
        mCursorController.setDisplayViewport(viewport, getAdditionalMouseResources);
        mCursorController.setDisplayViewport(viewport, getAdditionalMouseResources);
        if (viewport.displayId != mLocked.pointerDisplayId) {
        if (viewport.displayId != mLocked.pointerDisplayId) {
        float xPos, yPos;
        mCursorController.getPosition(&xPos, &yPos);
        mContext.getPolicy()->onPointerDisplayIdChanged(viewport.displayId, xPos, yPos);
            mLocked.pointerDisplayId = viewport.displayId;
            mLocked.pointerDisplayId = viewport.displayId;
            pointerDisplayChanged = {viewport.displayId, mCursorController.getPosition()};
        }
    } // release lock

    if (pointerDisplayChanged) {
        // Notify the policy without holding the pointer controller lock.
        mContext.getPolicy()->onPointerDisplayIdChanged(pointerDisplayChanged->displayId,
                                                        pointerDisplayChanged->cursorPosition);
    }
    }
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -50,12 +50,12 @@ public:


    ~PointerController() override;
    ~PointerController() override;


    virtual bool getBounds(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const;
    virtual std::optional<FloatRect> getBounds() const;
    virtual void move(float deltaX, float deltaY);
    virtual void move(float deltaX, float deltaY);
    virtual void setButtonState(int32_t buttonState);
    virtual void setButtonState(int32_t buttonState);
    virtual int32_t getButtonState() const;
    virtual int32_t getButtonState() const;
    virtual void setPosition(float x, float y);
    virtual void setPosition(float x, float y);
    virtual void getPosition(float* outX, float* outY) const;
    virtual FloatPoint getPosition() const;
    virtual int32_t getDisplayId() const;
    virtual int32_t getDisplayId() const;
    virtual void fade(Transition transition);
    virtual void fade(Transition transition);
    virtual void unfade(Transition transition);
    virtual void unfade(Transition transition);
+1 −1
Original line number Original line Diff line number Diff line
@@ -81,7 +81,7 @@ public:
    virtual PointerIconStyle getDefaultPointerIconId() = 0;
    virtual PointerIconStyle getDefaultPointerIconId() = 0;
    virtual PointerIconStyle getDefaultStylusIconId() = 0;
    virtual PointerIconStyle getDefaultStylusIconId() = 0;
    virtual PointerIconStyle getCustomPointerIconId() = 0;
    virtual PointerIconStyle getCustomPointerIconId() = 0;
    virtual void onPointerDisplayIdChanged(int32_t displayId, float xPos, float yPos) = 0;
    virtual void onPointerDisplayIdChanged(int32_t displayId, const FloatPoint& position) = 0;
};
};


/*
/*
Loading