/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.input; import android.os.Parcel; import android.os.Parcelable; /** * Encapsulates calibration data for input devices. * * @hide */ public class TouchCalibration implements Parcelable { public static final TouchCalibration IDENTITY = new TouchCalibration(); public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public TouchCalibration createFromParcel(Parcel in) { return new TouchCalibration(in); } public TouchCalibration[] newArray(int size) { return new TouchCalibration[size]; } }; private final float mXScale, mXYMix, mXOffset; private final float mYXMix, mYScale, mYOffset; /** * Create a new TouchCalibration initialized to the identity transformation. */ public TouchCalibration() { this(1,0,0,0,1,0); } /** * Create a new TouchCalibration from affine transformation paramters. * @param xScale Influence of input x-axis value on output x-axis value. * @param xyMix Influence of input y-axis value on output x-axis value. * @param xOffset Constant offset to be applied to output x-axis value. * @param yXMix Influence of input x-axis value on output y-axis value. * @param yScale Influence of input y-axis value on output y-axis value. * @param yOffset Constant offset to be applied to output y-axis value. */ public TouchCalibration(float xScale, float xyMix, float xOffset, float yxMix, float yScale, float yOffset) { mXScale = xScale; mXYMix = xyMix; mXOffset = xOffset; mYXMix = yxMix; mYScale = yScale; mYOffset = yOffset; } public TouchCalibration(Parcel in) { mXScale = in.readFloat(); mXYMix = in.readFloat(); mXOffset = in.readFloat(); mYXMix = in.readFloat(); mYScale = in.readFloat(); mYOffset = in.readFloat(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeFloat(mXScale); dest.writeFloat(mXYMix); dest.writeFloat(mXOffset); dest.writeFloat(mYXMix); dest.writeFloat(mYScale); dest.writeFloat(mYOffset); } @Override public int describeContents() { return 0; } public float[] getAffineTransform() { return new float[] { mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset }; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof TouchCalibration) { TouchCalibration cal = (TouchCalibration)obj; return (cal.mXScale == mXScale) && (cal.mXYMix == mXYMix) && (cal.mXOffset == mXOffset) && (cal.mYXMix == mYXMix) && (cal.mYScale == mYScale) && (cal.mYOffset == mYOffset); } else { return false; } } @Override public int hashCode() { return Float.floatToIntBits(mXScale) ^ Float.floatToIntBits(mXYMix) ^ Float.floatToIntBits(mXOffset) ^ Float.floatToIntBits(mYXMix) ^ Float.floatToIntBits(mYScale) ^ Float.floatToIntBits(mYOffset); } @Override public String toString() { return String.format("[%f, %f, %f, %f, %f, %f]", mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset); } }