# 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 ```