# Class RoundRectBorder

java.lang.Object
com.codename1.ui.plaf.Border
com.codename1.ui.plaf.RoundRectBorder

public final class RoundRectBorder extends Border

Customizable rounded rectangle border that breaks down the border into customizable pieces.

The background is inherited from the parent UIID but stroke and shadow can be customized via user settings.

IMPORTANT: `RoundRectBorder` instances can't be reused you would need to create a separate instance for each style object! See this issue for further details.

    Form hi = new Form("RoundRect", new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER));

    Button ok = new Button("OK");
    Button cancel = new Button("Cancel");

    Label loginLabel = new Label("Login", "Container");
    loginLabel.getAllStyles().setAlignment(Component.CENTER);

    Label passwordLabel = new Label("Password", "Container");
    passwordLabel.getAllStyles().setAlignment(Component.CENTER);

    TextField login = new TextField("", "Login", 20, TextArea.ANY);
    TextField password = new TextField("", "Password", 20, TextArea.PASSWORD);
    Style loginStyle = login.getAllStyles();
    Stroke borderStroke = new Stroke(2, Stroke.CAP_SQUARE, Stroke.JOIN_MITER, 1);
    loginStyle.setBorder(RoundRectBorder.create().
            strokeColor(0).
            strokeOpacity(120).
            stroke(borderStroke));
    loginStyle.setBgColor(0xffffff);
    loginStyle.setBgTransparency(255);
    loginStyle.setMarginUnit(Style.UNIT_TYPE_DIPS);
    loginStyle.setMargin(Component.BOTTOM, 3);
    Style passwordStyle = password.getAllStyles();
    passwordStyle.setBorder(RoundRectBorder.create().
            strokeColor(0).
            strokeOpacity(120).
            stroke(borderStroke));
    passwordStyle.setBgColor(0xffffff);
    passwordStyle.setBgTransparency(255);

    Container box = BoxLayout.encloseY(
            loginLabel,
            login,
            passwordLabel,
            password,
                GridLayout.encloseIn(2, cancel, ok));

    Button closeButton = new Button();
    Style closeStyle = closeButton.getAllStyles();
    closeStyle.setFgColor(0xffffff);
    closeStyle.setBgTransparency(0);
    closeStyle.setPaddingUnit(Style.UNIT_TYPE_DIPS);
    closeStyle.setPadding(3, 3, 3, 3);
    closeStyle.setBorder(RoundBorder.create().shadowOpacity(100));
    FontImage.setMaterialIcon(closeButton, FontImage.MATERIAL_CLOSE);

    Container layers = LayeredLayout.encloseIn(box, FlowLayout.encloseRight(closeButton));
    Style boxStyle = box.getUnselectedStyle();
    boxStyle.setBgTransparency(255);
    boxStyle.setBgColor(0xeeeeee);
    boxStyle.setMarginUnit(Style.UNIT_TYPE_DIPS);
    boxStyle.setPaddingUnit(Style.UNIT_TYPE_DIPS);
    boxStyle.setMargin(4, 3, 3, 3);
    boxStyle.setPadding(2, 2, 2, 2);

    hi.add(BorderLayout.CENTER, layers);

    hi.show();

- ## Method Summary

  Modifier and Type
  Method
  Description
  `RoundRectBorder`
  `arrowSize(float size)`
  Change the size of the arrow used for component tracking.
  `RoundRectBorder`
  `bezierCorners(boolean bezierCorners)`
  True if the corners are Bezier curves, otherwise the corners are drawn as a regular arc
  `RoundRectBorder`
  `bottomLeftMode(boolean bottomLeft)`
  True to draw the bottom left corner rounded, false to draw it as a corner
  `RoundRectBorder`
  `bottomOnlyMode(boolean bottomOnlyMode)`
  Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle
  `RoundRectBorder`
  `bottomRightMode(boolean bottomRight)`
  True to draw the bottom right corner rounded, false to draw it as a corner
  `RoundRectBorder`
  `cornerRadius(float cornerRadius)`
  The radius of the corners in millimeters
  `static RoundRectBorder`
  `create()`
  Creates a flat border with styles derived from the component UIID
  `RoundRectBorder`
  `cssBoxModel(boolean cssBoxModel)`
  Makes this border follow the CSS box model when the component is measured.
  `boolean`
  `equals(Object obj)`
  {{Indicates whether some other object is "equal to" this one.
  `float`
  `getCornerRadius()`
  The radius of the corners in millimeters
  `int`
  `getMinimumHeight()`
  Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g.
  `int`
  `getMinimumWidth()`
  Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g.
  `float`
  `getShadowBlur()`
  The Gaussian blur size
  `int`
  `getShadowColor()`
  The color of the shadow as an RRGGBB color
  `int`
  `getShadowOpacity()`
  The opacity of the shadow between 0 and 255
  `float`
  `getShadowSpread()`
  The spread of the shadow in pixels of millimeters
  `float`
  `getShadowX()`
  X axis bias of the shadow between 0 and 1 where 0 is to the top and 1 is to the bottom, defaults to 0.5
  `float`
  `getShadowY()`
  Y axis bias of the shadow between 0 and 1 where 0 is to the left and 1 is to the right, defaults to 0.5
  `int`
  `getStrokeColor()`
  The color of the edge of the border if applicable
  `int`
  `getStrokeOpacity()`
  The opacity of the edge of the border if applicable
  `float`
  `getStrokeThickness()`
  The thickness of the edge of the border if applicable, 0 if no stroke is needed
  `float`
  `getTrackComponentHorizontalPosition()`
  Gets the explicitly set horizontal position of the tracking arrow.
  `int`
  `getTrackComponentSide()`
  Gets the side that the tracking component should be displayed on if using explicit placement.
  `float`
  `getTrackComponentVerticalPosition()`
  Gets the explicitly set vertical position of the tracking arrow.
  `int`
  `hashCode()`
  Returns a hash code value for the object.
  `boolean`
  `isBackgroundPainter()`
  Returns true if installing this border will override the painting of the component background
  `boolean`
  `isBezierCorners()`
  True if the corners are bezier curves, otherwise the corners are drawn as a regular arc
  `boolean`
  `isBottomLeft()`
  Returns true if this border corner is round and false if it's square
  `boolean`
  `isBottomOnlyMode()`
  Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle
  `boolean`
  `isBottomRight()`
  Returns true if this border corner is round and false if it's square
  `boolean`
  `isCssBoxModel()`
  True if this border is measured according to the CSS box model
  `boolean`
  `isStrokeMM()`
  True if the thickness of the stroke is in millimeters
  `boolean`
  `isTopLeft()`
  Returns true if this border corner is round and false if it's square
  `boolean`
  `isTopOnlyMode()`
  Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle
  `boolean`
  `isTopRight()`
  Returns true if this border corner is round and false if it's square
  `boolean`
  `isUseCache()`
  Checks whether this RoundRectBorder instance caches the border as a background image.
  `void`
  `paintBorderBackground(Graphics g, Component c)`
  Has effect when the border demands responsibility for background painting normally the painter will perform this work but in this case the border might do it instead.
  `void`
  `setArrowSize(float size)`
  Change the size of the arrow used for component tracking.
  `RoundRectBorder`
  `shadowBlur(float shadowBlur)`
  The blur on the shadow this is the standard Gaussian blur radius
  `RoundRectBorder`
  `shadowColor(int shadowColor)`
  Sets the color of the shadow as an RRGGBB color
  `RoundRectBorder`
  `shadowOpacity(int shadowOpacity)`
  Sets the opacity of the shadow from 0 - 255 where 0 means no shadow and 255 means opaque black shadow
  `RoundRectBorder`
  `shadowSpread(float shadowSpread)`
  Sets the spread of the shadow in millimeters i.e how much bigger is it than the actual border
  `RoundRectBorder`
  `shadowSpread(int shadowSpread)`
  Sets the spread in pixels of the shadow i.e how much bigger is it than the actual border
  `RoundRectBorder`
  `shadowX(float shadowX)`
  The position of the shadow on the X axis where 0.5f means the center and higher values draw it to the right side
  `RoundRectBorder`
  `shadowY(float shadowY)`
  The position of the shadow on the Y axis where 0.5f means the center and higher values draw it to the bottom
  `RoundRectBorder`
  `stroke(float stroke, boolean mm)`
  Sets the stroke of the border
  `RoundRectBorder`
  `stroke(Stroke stroke)`
  Sets the stroke of the border
  `RoundRectBorder`
  `strokeColor(int strokeColor)`
  Sets the stroke color of the border
  `RoundRectBorder`
  `strokeOpacity(int strokeOpacity)`
  Sets the opacity of the stroke line around the border
  `RoundRectBorder`
  `topLeftMode(boolean topLeft)`
  True to draw the top left corner rounded, false to draw it as a corner
  `RoundRectBorder`
  `topOnlyMode(boolean topOnlyMode)`
  Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle
  `RoundRectBorder`
  `topRightMode(boolean topRight)`
  True to draw the top right corner rounded, false to draw it as a corner
  `RoundRectBorder`
  `trackComponentHorizontalPosition(float pos)`
  Explicitly sets the horizontal position of the tracking arrow.
  `RoundRectBorder`
  `trackComponentSide(int side)`
  Explicitly positions the arrow used for component tracking to a particular side of the border.
  `RoundRectBorder`
  `trackComponentVerticalPosition(float pos)`
  Explicitly sets the vertical position of the tracking arrow.
  `RoundRectBorder`
  `useCache(boolean useCache)`
  Sets whether this RoundRectBorder instance should cache the border as a background image.

  ### Methods inherited from class Border

  `addOuterBorder, clearImageBorderSpecialTile, createBevelLowered, createBevelLowered, createBevelRaised, createBevelRaised, createCompoundBorder, createDashedBorder, createDashedBorder, createDottedBorder, createDottedBorder, createDoubleBorder, createDoubleBorder, createEmpty, createEtchedLowered, createEtchedLowered, createEtchedRaised, createEtchedRaised, createGrooveBorder, createGrooveBorder, createHorizonalImageBorder, createImageBorder, createImageBorder, createImageScaledBorder, createImageSplicedBorder, createInsetBorder, createInsetBorder, createLineBorder, createLineBorder, createLineBorder, createLineBorder, createLineBorder, createLineBorder, createOutsetBorder, createOutsetBorder, createPressedVersion, createRidgeBorder, createRidgeBorder, createRoundBorder, createRoundBorder, createRoundBorder, createRoundBorder, createUndelineBorder, createUndelineBorder, createUnderlineBorder, createUnderlineBorder, createUnderlineBorder, createUnderlineBorder, createVerticalImageBorder, getCompoundBorders, getDefaultBorder, getEmpty, getFocusedInstance, getPressedInstance, getProperty, getThickness, getTrackComponent, isEmptyBorder, isPaintOuterBorderFirst, isRectangleType, lock, mirrorBorder, paint, setDefaultBorder, setFocusedInstance, setImageBorderSpecialTile, setImageBorderSpecialTile, setPaintOuterBorderFirst, setPressedInstance, setThickness, setTrackComponent, setTrackComponent, unlock`

  ### Methods inherited from class Object

  `clone, getClass, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### create

    public static RoundRectBorder create()

    Creates a flat border with styles derived from the component UIID

    ###### Returns

    a border instance

  - ### arrowSize

    public RoundRectBorder arrowSize(float size)

    Change the size of the arrow used for component tracking.

    ###### Parameters

    - `size`: Size of arrow in millimeters.

    ###### Returns

    a border instance

  - ### setArrowSize

    public void setArrowSize(float size)

    Change the size of the arrow used for component tracking.

    ###### Parameters

    - `size`: Size of arrow in millimeters.

  - ### strokeOpacity

    public RoundRectBorder strokeOpacity(int strokeOpacity)

    Sets the opacity of the stroke line around the border

    ###### Parameters

    - `strokeOpacity`: the opacity from 0-255 where 255 is completely opaque

    ###### Returns

    border instance so these calls can be chained

  - ### trackComponentSide

    public RoundRectBorder trackComponentSide(int side)

    Explicitly positions the arrow used for component tracking to a particular side of the border. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (`#setTrackComponent(com.codename1.ui.geom.Rectangle)`). Use in conjunction with `#trackComponentHorizontalPosition(float)`, and `#trackComponentHorizontalPosition`.

    ###### Parameters

    - `side`: @param side The side to place the tracking arrow on. Values `Component#TOP`, `Component#BOTTOM`, `Component#LEFT`, or `Component#BOTTOM`. Set negative value for default behaviour, which is to just calculate the arrow position based on the tracking component bounds.

    ###### Returns

    Self for chaining.

  - ### getTrackComponentSide

    public int getTrackComponentSide()

    Gets the side that the tracking component should be displayed on if using explicit placement.

    ###### Returns

    Returns:
      The side that the arrow should be rendered on. Values `Component#TOP`, `Component#BOTTOM`, `Component#LEFT`, or a negative number to indicate that the position will be calculated based on the position of the tracking component. or `Component#BOTTOM`.

  - ### trackComponentVerticalPosition

    public RoundRectBorder trackComponentVerticalPosition(float pos)

    Explicitly sets the vertical position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (`#setTrackComponent(com.codename1.ui.geom.Rectangle)`).

    ###### Parameters

    - `pos`: @param pos Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from top to bottom. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

    ###### Returns

    Self for chainging.

  - ### getTrackComponentVerticalPosition

    public float getTrackComponentVerticalPosition()

    Gets the explicitly set vertical position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (`#setTrackComponent(com.codename1.ui.geom.Rectangle)`).

    ###### Returns

    Returns:
      Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from top to bottom. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

  - ### trackComponentHorizontalPosition

    public RoundRectBorder trackComponentHorizontalPosition(float pos)

    Explicitly sets the horizontal position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (`#setTrackComponent(com.codename1.ui.geom.Rectangle)`).

    ###### Parameters

    - `pos`: @param pos Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from left to right. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

    ###### Returns

    Self for chainging.

  - ### getTrackComponentHorizontalPosition

    public float getTrackComponentHorizontalPosition()

    Gets the explicitly set horizontal position of the tracking arrow. This can be used to override the default positioning, which is to place the arrow according to the position of the tracking component (`#setTrackComponent(com.codename1.ui.geom.Rectangle)`).

    ###### Returns

    Returns:
      Vertical position of the arrow. Values between 0 and 1 will place the arrow in the range from left to right. Negative values result in default behaviour, which is to calculate the position based on the tracking component position.

  - ### useCache

    public RoundRectBorder useCache(boolean useCache)

    Sets whether this RoundRectBorder instance should cache the border as a background image.

    This setting is on by default, but can be turned off, as some older, low-memory devices may run into memory trouble if it is using a lot of RoundRectBorders. Turn the cache off for low-memory devices.

    NOTE: Using the cache is required for gaussian blur to work. If cache is disabled, then gaussian blur settings will be ignored.

    ###### Parameters

    - `useCache`: True to cache the border as a mutable image on the Component.

    ###### Returns

    Self for chaining.

  - ### isUseCache

    public boolean isUseCache()
    Checks whether this RoundRectBorder instance caches the border as a background image.

  - ### strokeColor

    public RoundRectBorder strokeColor(int strokeColor)

    Sets the stroke color of the border

    ###### Parameters

    - `strokeColor`: the color

    ###### Returns

    border instance so these calls can be chained

  - ### stroke

    public RoundRectBorder stroke(Stroke stroke)

    Sets the stroke of the border

    ###### Parameters

    - `stroke`: the stroke object

    ###### Returns

    border instance so these calls can be chained

  - ### stroke

    public RoundRectBorder stroke(float stroke, boolean mm)

    Sets the stroke of the border

    ###### Parameters

    - `stroke`: the thickness of the stroke object

    - `mm`: set to true to indicate the value is in millimeters, false indicates pixels

    ###### Returns

    border instance so these calls can be chained

  - ### shadowSpread

    public RoundRectBorder shadowSpread(float shadowSpread)

    Sets the spread of the shadow in millimeters i.e how much bigger is it than the actual border

    ###### Parameters

    - `shadowSpread`: the amount in millimeters representing the size of the shadow

    ###### Returns

    border instance so these calls can be chained

  - ### shadowSpread

    public RoundRectBorder shadowSpread(int shadowSpread)

    Sets the spread in pixels of the shadow i.e how much bigger is it than the actual border

    ###### Parameters

    - `shadowSpread`: the amount in pixels representing the size of the shadow

    ###### Returns

    border instance so these calls can be chained

  - ### shadowOpacity

    public RoundRectBorder shadowOpacity(int shadowOpacity)

    Sets the opacity of the shadow from 0 - 255 where 0 means no shadow and 255 means opaque black shadow

    ###### Parameters

    - `shadowOpacity`: the opacity of the shadow

    ###### Returns

    border instance so these calls can be chained

  - ### shadowColor

    public RoundRectBorder shadowColor(int shadowColor)

    Sets the color of the shadow as an RRGGBB color

    ###### Parameters

    - `shadowColor`: the color of the shadow

    ###### Returns

    border instance so these calls can be chained

  - ### shadowX

    public RoundRectBorder shadowX(float shadowX)

    The position of the shadow on the X axis where 0.5f means the center and higher values draw it to the right side

    ###### Parameters

    - `shadowX`: the position of the shadow between 0 - 1 where 0 equals left and 1 equals right

    ###### Returns

    border instance so these calls can be chained

  - ### shadowY

    public RoundRectBorder shadowY(float shadowY)

    The position of the shadow on the Y axis where 0.5f means the center and higher values draw it to the bottom

    ###### Parameters

    - `shadowY`: the position of the shadow between 0 - 1 where 0 equals top and 1 equals bottom

    ###### Returns

    border instance so these calls can be chained

  - ### shadowBlur

    public RoundRectBorder shadowBlur(float shadowBlur)

    The blur on the shadow this is the standard Gaussian blur radius

    ###### Parameters

    - `shadowBlur`: The blur on the shadow this is the standard Gaussian blur radius

    ###### Returns

    border instance so these calls can be chained

  - ### cornerRadius

    public RoundRectBorder cornerRadius(float cornerRadius)

    The radius of the corners in millimeters

    ###### Parameters

    - `cornerRadius`: the radius value

    ###### Returns

    border instance so these calls can be chained

  - ### bezierCorners

    public RoundRectBorder bezierCorners(boolean bezierCorners)

    True if the corners are Bezier curves, otherwise the corners are drawn as a regular arc

    ###### Parameters

    - `bezierCorners`: true if the corners use a bezier curve for drawing

    ###### Returns

    border instance so these calls can be chained

  - ### cssBoxModel

    public RoundRectBorder cssBoxModel(boolean cssBoxModel)

    Makes this border follow the CSS box model when the component is measured.

    By default a `RoundRectBorder` reports a minimum size of twice the corner radius (see `getMinimumHeight()`), which grows the component so a fully rounded "pill" always fits. That is the behavior hand written code and the designer rely on, but it is not how CSS behaves: in CSS `border-radius` never contributes to the size of the box, it is simply scaled down when the box is too small to fit it. This flag only changes the reported minimum size; scaling the radius down to fit the component it is actually given happens in both modes.

    Borders generated by the CSS compiler enable this mode so a rule such as `border-radius: 0 3mm 3mm 0` renders with the padding the stylesheet asked for instead of a component inflated to 6mm tall.

    ###### Parameters

    - `cssBoxModel`: true to measure like CSS, false for the legacy pill sizing

    ###### Returns

    border instance so these calls can be chained

  - ### isCssBoxModel

    public boolean isCssBoxModel()

    True if this border is measured according to the CSS box model

    ###### Returns

    the cssBoxModel value

  - ### topLeftMode

    public RoundRectBorder topLeftMode(boolean topLeft)

    True to draw the top left corner rounded, false to draw it as a corner

    ###### Parameters

    - `topLeft`: true for round false for sharp

    ###### Returns

    border instance so these calls can be chained

  - ### topRightMode

    public RoundRectBorder topRightMode(boolean topRight)

    True to draw the top right corner rounded, false to draw it as a corner

    ###### Parameters

    - `topRight`: true for round false for sharp

    ###### Returns

    border instance so these calls can be chained

  - ### bottomLeftMode

    public RoundRectBorder bottomLeftMode(boolean bottomLeft)

    True to draw the bottom left corner rounded, false to draw it as a corner

    ###### Parameters

    - `bottomLeft`: true for round false for sharp

    ###### Returns

    border instance so these calls can be chained

  - ### bottomRightMode

    public RoundRectBorder bottomRightMode(boolean bottomRight)

    True to draw the bottom right corner rounded, false to draw it as a corner

    ###### Parameters

    - `bottomRight`: true for round false for sharp

    ###### Returns

    border instance so these calls can be chained

  - ### topOnlyMode

    public RoundRectBorder topOnlyMode(boolean topOnlyMode)

    Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle

    ###### Parameters

    - `topOnlyMode`: new value for top only mode

    ###### Returns

    border instance so these calls can be chained

  - ### bottomOnlyMode

    public RoundRectBorder bottomOnlyMode(boolean bottomOnlyMode)

    Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle

    ###### Parameters

    - `bottomOnlyMode`: new value for bottom only mode

    ###### Returns

    border instance so these calls can be chained

  - ### paintBorderBackground

    public void paintBorderBackground(Graphics g, Component c)
    Description copied from class: `Border`

    Has effect when the border demands responsibility for background painting normally the painter will perform this work but in this case the border might do it instead.

    ###### Parameters

    - `g`: graphics context to draw onto

    - `c`: component whose border should be drawn

    Overrides:
      `paintBorderBackground` in class `Border`

  - ### getMinimumHeight

    public int getMinimumHeight()
    Description copied from class: `Border`

    Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the minimum width would be left+right

    ###### Returns

    0 if not applicable or a dimension if it is.

    Overrides:
      `getMinimumHeight` in class `Border`

  - ### getMinimumWidth

    public int getMinimumWidth()
    Description copied from class: `Border`

    Returns the minimum size required to properly display this border, normally this is 0 but a border might deem itself undisplayable with too small a size e.g. for the case of an image border the minimum height would be top + bottom and the minimum width would be left+right

    ###### Returns

    0 if not applicable or a dimension if it is.

    Overrides:
      `getMinimumWidth` in class `Border`

  - ### isBackgroundPainter

    public boolean isBackgroundPainter()
    Description copied from class: `Border`

    Returns true if installing this border will override the painting of the component background

    ###### Returns

    true if this border replaces the painter

    Overrides:
      `isBackgroundPainter` in class `Border`

  - ### getStrokeColor

    public int getStrokeColor()

    The color of the edge of the border if applicable

    ###### Returns

    the strokeColor

  - ### getStrokeOpacity

    public int getStrokeOpacity()

    The opacity of the edge of the border if applicable

    ###### Returns

    the strokeOpacity

  - ### getStrokeThickness

    public float getStrokeThickness()

    The thickness of the edge of the border if applicable, 0 if no stroke is needed

    ###### Returns

    the strokeThickness

  - ### isStrokeMM

    public boolean isStrokeMM()

    True if the thickness of the stroke is in millimeters

    ###### Returns

    the strokeMM

  - ### isBezierCorners

    public boolean isBezierCorners()

    True if the corners are bezier curves, otherwise the corners are drawn as a regular arc

    ###### Returns

    true if the corners are a curve

  - ### getShadowSpread

    public float getShadowSpread()

    The spread of the shadow in pixels of millimeters

    ###### Returns

    the shadowSpread

  - ### getShadowOpacity

    public int getShadowOpacity()

    The opacity of the shadow between 0 and 255

    ###### Returns

    the shadowOpacity

  - ### getShadowColor

    public int getShadowColor()

    The color of the shadow as an RRGGBB color

    ###### Returns

    the shadowColor

  - ### getShadowX

    public float getShadowX()

    X axis bias of the shadow between 0 and 1 where 0 is to the top and 1 is to the bottom, defaults to 0.5

    ###### Returns

    the shadowX

  - ### getShadowY

    public float getShadowY()

    Y axis bias of the shadow between 0 and 1 where 0 is to the left and 1 is to the right, defaults to 0.5

    ###### Returns

    the shadowY

  - ### getShadowBlur

    public float getShadowBlur()

    The Gaussian blur size

    ###### Returns

    the shadowBlur

  - ### getCornerRadius

    public float getCornerRadius()

    The radius of the corners in millimeters

    ###### Returns

    the radius

  - ### isTopOnlyMode

    public boolean isTopOnlyMode()

    Special mode where only the top of the round rectangle is rounded and the bottom is a regular rectangle

    ###### Returns

    whether this is the top only mode

  - ### isBottomOnlyMode

    public boolean isBottomOnlyMode()

    Special mode where only the bottom of the round rectangle is rounded and the top is a regular rectangle

    ###### Returns

    whether this is the bottom only mode

  - ### equals

    public boolean equals(Object obj)
    Description copied from class: `Border`
    {Indicates whether some other object is "equal to" this one. The equals method implements an equivalence relation: It is reflexive: for any reference value x, x.equals(x) should return true. It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified. For any non-null reference value x, x.equals(null) should return false. The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).}
    Overrides:
      `equals` in class `Border`

  - ### hashCode

    public int hashCode()
    Description copied from class: `Border`
    Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
    Overrides:
      `hashCode` in class `Border`

  - ### isTopLeft

    public boolean isTopLeft()

    Returns true if this border corner is round and false if it's square

    ###### Returns

    the topLeft value

  - ### isTopRight

    public boolean isTopRight()

    Returns true if this border corner is round and false if it's square

    ###### Returns

    the topRight value

  - ### isBottomLeft

    public boolean isBottomLeft()

    Returns true if this border corner is round and false if it's square

    ###### Returns

    the bottomLeft value

  - ### isBottomRight

    public boolean isBottomRight()

    Returns true if this border corner is round and false if it's square

    ###### Returns

    the bottomRight value