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

Commit aafc7005 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Better compat mode part one: start scaling windows." into honeycomb-mr2

parents dab20721 16fe3c2c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -203,6 +203,8 @@ struct PointerCoords {
    status_t setAxisValue(int32_t axis, float value);
    status_t setAxisValue(int32_t axis, float value);
    float* editAxisValue(int32_t axis);
    float* editAxisValue(int32_t axis);


    void scale(float scale);

#ifdef HAVE_ANDROID_OS
#ifdef HAVE_ANDROID_OS
    status_t readFromParcel(Parcel* parcel);
    status_t readFromParcel(Parcel* parcel);
    status_t writeToParcel(Parcel* parcel) const;
    status_t writeToParcel(Parcel* parcel) const;
+23 −24
Original line number Original line Diff line number Diff line
@@ -298,6 +298,24 @@ float* PointerCoords::editAxisValue(int32_t axis) {
    return &values[index];
    return &values[index];
}
}


static inline void scaleAxisValue(PointerCoords& c, int axis, float scaleFactor) {
    float* value = c.editAxisValue(axis);
    if (value) {
        *value *= scaleFactor;
    }
}

void PointerCoords::scale(float scaleFactor) {
    // No need to scale pressure or size since they are normalized.
    // No need to scale orientation since it is meaningless to do so.
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_X, scaleFactor);
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_Y, scaleFactor);
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_TOUCH_MAJOR, scaleFactor);
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_TOUCH_MINOR, scaleFactor);
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_TOOL_MAJOR, scaleFactor);
    scaleAxisValue(*this, AMOTION_EVENT_AXIS_TOOL_MINOR, scaleFactor);
}

#ifdef HAVE_ANDROID_OS
#ifdef HAVE_ANDROID_OS
status_t PointerCoords::readFromParcel(Parcel* parcel) {
status_t PointerCoords::readFromParcel(Parcel* parcel) {
    bits = parcel->readInt64();
    bits = parcel->readInt64();
@@ -411,11 +429,9 @@ float MotionEvent::getAxisValue(int32_t axis, size_t pointerIndex) const {
    float value = getRawPointerCoords(pointerIndex)->getAxisValue(axis);
    float value = getRawPointerCoords(pointerIndex)->getAxisValue(axis);
    switch (axis) {
    switch (axis) {
    case AMOTION_EVENT_AXIS_X:
    case AMOTION_EVENT_AXIS_X:
        value += mXOffset;
        return value + mXOffset;
        break;
    case AMOTION_EVENT_AXIS_Y:
    case AMOTION_EVENT_AXIS_Y:
        value += mYOffset;
        return value + mYOffset;
        break;
    }
    }
    return value;
    return value;
}
}
@@ -435,11 +451,9 @@ float MotionEvent::getHistoricalAxisValue(int32_t axis, size_t pointerIndex,
    float value = getHistoricalRawPointerCoords(pointerIndex, historicalIndex)->getAxisValue(axis);
    float value = getHistoricalRawPointerCoords(pointerIndex, historicalIndex)->getAxisValue(axis);
    switch (axis) {
    switch (axis) {
    case AMOTION_EVENT_AXIS_X:
    case AMOTION_EVENT_AXIS_X:
        value += mXOffset;
        return value + mXOffset;
        break;
    case AMOTION_EVENT_AXIS_Y:
    case AMOTION_EVENT_AXIS_Y:
        value += mYOffset;
        return value + mYOffset;
        break;
    }
    }
    return value;
    return value;
}
}
@@ -449,13 +463,6 @@ void MotionEvent::offsetLocation(float xOffset, float yOffset) {
    mYOffset += yOffset;
    mYOffset += yOffset;
}
}


static inline void scaleAxisValue(PointerCoords& c, int axis, float scaleFactor) {
    float* value = c.editAxisValue(axis);
    if (value) {
        *value *= scaleFactor;
    }
}

void MotionEvent::scale(float scaleFactor) {
void MotionEvent::scale(float scaleFactor) {
    mXOffset *= scaleFactor;
    mXOffset *= scaleFactor;
    mYOffset *= scaleFactor;
    mYOffset *= scaleFactor;
@@ -464,15 +471,7 @@ void MotionEvent::scale(float scaleFactor) {


    size_t numSamples = mSamplePointerCoords.size();
    size_t numSamples = mSamplePointerCoords.size();
    for (size_t i = 0; i < numSamples; i++) {
    for (size_t i = 0; i < numSamples; i++) {
        PointerCoords& c = mSamplePointerCoords.editItemAt(i);
        mSamplePointerCoords.editItemAt(i).scale(scaleFactor);
        // No need to scale pressure or size since they are normalized.
        // No need to scale orientation since it is meaningless to do so.
        scaleAxisValue(c, AMOTION_EVENT_AXIS_X, scaleFactor);
        scaleAxisValue(c, AMOTION_EVENT_AXIS_Y, scaleFactor);
        scaleAxisValue(c, AMOTION_EVENT_AXIS_TOUCH_MAJOR, scaleFactor);
        scaleAxisValue(c, AMOTION_EVENT_AXIS_TOUCH_MINOR, scaleFactor);
        scaleAxisValue(c, AMOTION_EVENT_AXIS_TOOL_MAJOR, scaleFactor);
        scaleAxisValue(c, AMOTION_EVENT_AXIS_TOOL_MINOR, scaleFactor);
    }
    }
}
}