// SPDX-License-Identifier: Unlicense OR MIT // Package material implements the Material design. // // To maximize reusability and visual flexibility, user interface controls are // split into two parts: the stateful widget and the stateless drawing of it. // // For example, widget.Clickable encapsulates the state and event // handling of all clickable areas, while the Theme is responsible to // draw a specific area, for example a button. // // This snippet defines a button that prints a message when clicked: // // var gtx layout.Context // button := new(widget.Clickable) // // for button.Clicked(gtx) { // fmt.Println("Clicked!") // } // // Use a Theme to draw the button: // // theme := material.NewTheme(...) // // material.Button(theme, button, "Click me!").Layout(gtx) // // # Customization // // Quite often, a program needs to customize the theme-provided defaults. Several // options are available, depending on the nature of the change. // // Mandatory parameters: Some parameters are not part of the widget state but // have no obvious default. In the program above, the button text is a // parameter to the Theme.Button method. // // Theme-global parameters: For changing the look of all widgets drawn with a // particular theme, adjust the `Theme` fields: // // theme.Palette.Fg = color.NRGBA{...} // // Widget-local parameters: For changing the look of a particular widget, // adjust the widget specific theme object: // // btn := material.Button(theme, button, "Click me!") // btn.Font.Style = text.Italic // btn.Layout(gtx) // // Widget variants: A widget can have several distinct representations even // though the underlying state is the same. A widget.Clickable can be drawn as a // round icon button: // // icon := widget.NewIcon(...) // // material.IconButton(theme, button, icon, "Click me!").Layout(gtx) // // Specialized widgets: Theme both define a generic Label method // that takes a text size, and specialized methods for standard text // sizes such as Theme.H1 and Theme.Body2. package material