# Shape Theming
Material Design encourages brand expression through shapes. The Material
Components library offers a `shape` library that can be used to create
non-standard shapes.
The `shape` library provides a `MaterialShapeDrawable` class that can draw
custom shapes while taking shadows, elevation, scale and color into account.
## Design & API Documentation
- [Material Design guidelines:
Shape](https://material.io/go/design-shape)
## Usage
`MaterialShapeDrawable` draws itself using a path generated by provided
`CornerTreatment`s and `EdgeTreatment`s. The `shape` library provides some
subclassed `CornerTreatment`s and `EdgeTreatment`s to allow for easily building
new shapes:
- `CutCornerTreatment`
- `RoundedCornerTreatment`
- `TriangleEdgeTreatment`
Both `CornerTreatment` and `EdgeTreatment` can be subclassed to create custom
corners and edges.
Note: The `shape` library is experimental and subject to change.
## Coming Soon
We will be adding theming support for shapes to make the shapes of components
themeable at the application level. This will allow an app to change shapes of
components inside their apps just by specifying shape theme attributes.
Here's an example of what this might look like: Let's say you want to change the
corners in your app to cut corners. You'd be able to specify attributes like
`cornerStylePrimary` and `cornerRadiusPrimary` at the theme level. This might
look something like this:
```xml
```
Then, Material components would read in those theme attributes and style
themselves accordingly.
If you want to change a component's corner style mapping, you'd be able to
change the component's style across the app. Let's say you wanted to modify
`MaterialCardView` so that it uses `cornerRadiusSecondary` instead of
`cornerRadiusPrimary`. All you'd have to do is define your own card style that
extends from the widget's style, and set the component's relevant attributes to
the desired theme attributes:
```xml
```
And set the mapping to the custom component style in the theme:
```xml
```
This would apply the card corner attributes specified in `Widget.MyApp.MyCard`
to all cards in the app. You can also set this style on individual components in
your layout file:
```xml
```
Or you can set the attributes on the widget in your layout file to override the
default behavior on a case-by-case basis:
```xml
```