content: /*
   * Copyright (C) 2007 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.graphics;
  
  import android.annotation.NonNull;
  import android.os.Parcel;
  import android.os.Parcelable;
  import android.util.Size;
  import android.util.proto.ProtoOutputStream;
  
  import java.io.PrintWriter;
  
  
  /**
   * Point holds two integer coordinates
   */
  public class Point implements Parcelable {
      public int x;
      public int y;
  
      public Point() {}
  
      public Point(int x, int y) {
          this.x = x;
          this.y = y;
      }
  
      public Point(@NonNull Point src) {
          this.x = src.x;
          this.y = src.y;
      }
  
      /**
       * Set the point's x and y coordinates
       */
      public void set(int x, int y) {
          this.x = x;
          this.y = y;
      }
  
      /**
       * Negate the point's coordinates
       */
      public final void negate() {
          x = -x;
          y = -y;
      }
  
      /**
       * Offset the point's coordinates by dx, dy
       */
      public final void offset(int dx, int dy) {
          x += dx;
          y += dy;
      }
  
      /**
       * Returns true if the point's coordinates equal (x,y)
       */
      public final boolean equals(int x, int y) {
          return this.x == x && this.y == y;
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          Point point = (Point) o;
  
          if (x != point.x) return false;
          if (y != point.y) return false;
  
          return true;
      }
  
      @Override
      public int hashCode() {
          int result = x;
          result = 31 * result + y;
          return result;
      }
  
      @Override
      public String toString() {
          return "Point(" + x + ", " + y + ")";
      }
  
      /** @hide */
      public void printShortString(@NonNull PrintWriter pw) {
          pw.print("["); pw.print(x); pw.print(","); pw.print(y); pw.print("]");
      }
  
      /**
       * Parcelable interface methods
       */
      @Override
      public int describeContents() {
          return 0;
      }
  
      /**
       * Write this point to the specified parcel. To restore a point from
       * a parcel, use readFromParcel()
       * @param out The parcel to write the point's coordinates into
       */
      @Override
      public void writeToParcel(Parcel out, int flags) {
          out.writeInt(x);
          out.writeInt(y);
      }
  
      /**
       * Write to a protocol buffer output stream.
       * Protocol buffer message definition at {@link android.graphics.PointProto}
       *
       * @param protoOutputStream Stream to write the Rect object to.
       * @param fieldId           Field Id of the Rect as defined in the parent message
       * @hide
       */
      public void writeToProto(@NonNull ProtoOutputStream protoOutputStream, long fieldId) {
          final long token = protoOutputStream.start(fieldId);
          protoOutputStream.write(PointProto.X, x);
          protoOutputStream.write(PointProto.Y, y);
          protoOutputStream.end(token);
      }
  
      public static final @android.annotation.NonNull Parcelable.Creator<Point> CREATOR = new Parcelable.Creator<Point>() {
          /**
           * Return a new point from the data in the specified parcel.
           */
          @Override
          public Point createFromParcel(Parcel in) {
              Point r = new Point();
              r.readFromParcel(in);
              return r;
          }
  
          /**
           * Return an array of rectangles of the specified size.
           */
          @Override
          public Point[] newArray(int size) {
              return new Point[size];
          }
      };
  
      /**
       * Set the point's coordinates from the data stored in the specified
       * parcel. To write a point to a parcel, call writeToParcel().
       *
       * @param in The parcel to read the point's coordinates from
       */
      public void readFromParcel(@NonNull Parcel in) {
          x = in.readInt();
          y = in.readInt();
      }
  
      /** {@hide} */
      public static @NonNull Point convert(@NonNull Size size) {
          return new Point(size.getWidth(), size.getHeight());
      }
  
      /** {@hide} */
      public static @NonNull Size convert(@NonNull Point point) {
          return new Size(point.x, point.y);
      }
  }
  