// Signature format: 3.0
package androidx.ui.geometry {

  @androidx.compose.Immutable public final class Offset {
    ctor public Offset(internal long packedValue);
    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
    method @androidx.compose.Stable public float getDistance();
    method @androidx.compose.Stable public float getDistanceSquared();
    method public float getX();
    method public float getY();
    method @androidx.compose.Stable public boolean isValid();
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
    property public final float x;
    property public final float y;
    field public static final androidx.ui.geometry.Offset.Companion Companion;
  }

  public static final class Offset.Companion {
    method public androidx.ui.geometry.Offset getInfinite();
    method public androidx.ui.geometry.Offset getZero();
    property public final androidx.ui.geometry.Offset Infinite;
    property public final androidx.ui.geometry.Offset Zero;
  }

  public interface OffsetBase {
    method public float getDx();
    method public float getDy();
    method public default boolean isFinite();
    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
    method public default boolean isInfinite();
    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
    property public abstract float dx;
    property public abstract float dy;
  }

  public final class OffsetKt {
    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
  }

  public final class RRect {
    ctor public RRect(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
    method public float component1();
    method public float component10();
    method public float component11();
    method public float component12();
    method public float component2();
    method public float component3();
    method public float component4();
    method public float component5();
    method public float component6();
    method public float component7();
    method public float component8();
    method public float component9();
    method public boolean contains(androidx.ui.geometry.Offset point);
    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
    method public float getBottom();
    method public float getBottomLeftRadiusX();
    method public float getBottomLeftRadiusY();
    method public float getBottomRightRadiusX();
    method public float getBottomRightRadiusY();
    method public float getHeight();
    method public float getLeft();
    method public float getRight();
    method public float getTop();
    method public float getTopLeftRadiusX();
    method public float getTopLeftRadiusY();
    method public float getTopRightRadiusX();
    method public float getTopRightRadiusY();
    method public float getWidth();
    method public static androidx.ui.geometry.RRect getZero();
    property public final float height;
    property public final float width;
    field public static final androidx.ui.geometry.RRect.Companion Companion;
  }

  public static final class RRect.Companion {
    method public androidx.ui.geometry.RRect getZero();
    property public final androidx.ui.geometry.RRect Zero;
  }

  public final class RRectKt {
    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
    method public static float getLongestSide(androidx.ui.geometry.RRect);
    method public static float getShortestSide(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
    method public static boolean isCircle(androidx.ui.geometry.RRect);
    method public static boolean isEllipse(androidx.ui.geometry.RRect);
    method public static boolean isEmpty(androidx.ui.geometry.RRect);
    method public static boolean isFinite(androidx.ui.geometry.RRect);
    method public static boolean isRect(androidx.ui.geometry.RRect);
    method public static boolean isSimple(androidx.ui.geometry.RRect);
    method public static boolean isStadium(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
    method public static long topLeftRadius(androidx.ui.geometry.RRect);
    method public static long topRightRadius(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
  }

  @androidx.compose.Immutable public final inline class Radius {
    ctor public Radius();
    method public static long constructor-impl(internal long packedValue);
    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
    method public static boolean equals-impl0(long p1, long p2);
    method public static float getX-impl(long $this);
    method public static float getY-impl(long $this);
    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
    method public static String toString-impl(long $this);
    method public static long truncDiv-impl(long $this, float operand);
    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
    field public static final androidx.ui.geometry.Radius.Companion Companion;
  }

  public static final class Radius.Companion {
    method public long getZero();
    property public final long Zero;
  }

  public final class RadiusKt {
    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
  }

  @androidx.compose.Immutable public final class Rect {
    ctor public Rect(float left, float top, float right, float bottom);
    method public float component1();
    method public float component2();
    method public float component3();
    method public float component4();
    method public boolean contains(androidx.ui.geometry.Offset offset);
    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
    method public float getBottom();
    method public androidx.ui.geometry.Offset getBottomCenter();
    method public androidx.ui.geometry.Offset getBottomLeft();
    method public androidx.ui.geometry.Offset getBottomRight();
    method public androidx.ui.geometry.Offset getCenter();
    method public androidx.ui.geometry.Offset getCenterLeft();
    method public androidx.ui.geometry.Offset getCenterRight();
    method public float getHeight();
    method public float getLeft();
    method public float getMaxDimension();
    method public float getMinDimension();
    method public float getRight();
    method public androidx.ui.geometry.Size getSize();
    method public float getTop();
    method public androidx.ui.geometry.Offset getTopCenter();
    method public androidx.ui.geometry.Offset getTopLeft();
    method public androidx.ui.geometry.Offset getTopRight();
    method public float getWidth();
    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
    method @androidx.compose.Stable public boolean isEmpty();
    method @androidx.compose.Stable public boolean isFinite();
    method @androidx.compose.Stable public boolean isInfinite();
    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
    method public boolean overlaps(androidx.ui.geometry.Rect other);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
    property public final float height;
    property public final float maxDimension;
    property public final float minDimension;
    property public final float width;
    field public static final androidx.ui.geometry.Rect.Companion Companion;
  }

  public static final class Rect.Companion {
    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
    method public androidx.ui.geometry.Rect getLargest();
    method public androidx.ui.geometry.Rect getZero();
    method public float get_giantScalar();
    property public final float _giantScalar;
    property public final androidx.ui.geometry.Rect largest;
    property public final androidx.ui.geometry.Rect zero;
  }

  public final class RectKt {
    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
  }

  @androidx.compose.Immutable public final class Size {
    ctor public Size(internal long packedValue);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset bottomCenter(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset bottomLeft(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset bottomRight(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset center(androidx.ui.geometry.Offset origin = Offset.Zero);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset centerLeft(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset centerRight(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public boolean contains(androidx.ui.geometry.Offset offset);
    method @androidx.compose.Immutable public androidx.ui.geometry.Size copy(long packedValue);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Size div(float operand);
    method @androidx.compose.Stable public androidx.ui.geometry.Size getFlipped();
    method public float getHeight();
    method public float getMaxDimension();
    method public float getMinDimension();
    method public float getWidth();
    method @androidx.compose.Stable public boolean isEmpty();
    method @androidx.compose.Stable public operator androidx.ui.geometry.Size minus(androidx.ui.geometry.Offset other);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Size other);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Size plus(androidx.ui.geometry.Offset other);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Size rem(float operand);
    method @androidx.compose.Stable public operator androidx.ui.geometry.Size times(float operand);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset topCenter(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset topLeft(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Offset topRight(androidx.ui.geometry.Offset origin);
    method @androidx.compose.Stable public androidx.ui.geometry.Size truncDiv(float operand);
    property public final float height;
    property public final float maxDimension;
    property public final float minDimension;
    property public final float width;
    field public static final androidx.ui.geometry.Size.Companion Companion;
  }

  public static final class Size.Companion {
    method public androidx.ui.geometry.Size copy(androidx.ui.geometry.Size source);
    method public androidx.ui.geometry.Size fromHeight(float height);
    method public androidx.ui.geometry.Size fromRadius(float radius);
    method public androidx.ui.geometry.Size fromWidth(float width);
    method public androidx.ui.geometry.Size getUnspecifiedSize();
    method public androidx.ui.geometry.Size getZero();
    method public androidx.ui.geometry.Size square(float dimension);
    property public final androidx.ui.geometry.Size UnspecifiedSize;
    property public final androidx.ui.geometry.Size zero;
  }

  public final class SizeKt {
    method @androidx.compose.Stable public static androidx.ui.geometry.Size Size(float width, float height);
    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp(androidx.ui.geometry.Size start, androidx.ui.geometry.Size stop, float fraction);
    method @androidx.compose.Stable public static inline operator androidx.ui.geometry.Size times(int, androidx.ui.geometry.Size size);
    method @androidx.compose.Stable public static inline operator androidx.ui.geometry.Size times(double, androidx.ui.geometry.Size size);
    method @androidx.compose.Stable public static inline operator androidx.ui.geometry.Size times(float, androidx.ui.geometry.Size size);
    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.geometry.Size);
  }

}

