# UserInputAttributes<T> class

Namespace: [Grasshopper2.Parameters.Special](https://developer.rhino3d.com/api/gh2/namespace/grasshopper2.parameters.special.md) · Assembly: [Grasshopper2](https://developer.rhino3d.com/api/gh2/assembly/grasshopper2.md)

```cs
public abstract class UserInputAttributes<T> : ParameterAttributes<T>, IResizableAttributes, ICursorAwareAttributes, IResponsive
```

Abstract attributes for typical, rectangular, resizable user input objects such as sliders, pickers and swatches. Inherit your own attributes for your custom input objects from this class whenever possible to ensure a consistent look and feel.

**Type parameters:**

- `T` (where IParameter)

**Derived types:** [ButtonAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.buttonattributes.md), [ColourSwatchAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.colourswatchattributes.md), [ComplexPickerAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.complexpickerattributes.md), [ConstantPickerAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.constantpickerattributes.md), [MetaNamePickerAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.metanamepickerattributes.md), [NumberSliderAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.numbersliderattributes.md), [PathMapperAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.pathmapperattributes.md), [ProtractorAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.protractorattributes.md), [TemporalPickerAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.temporalpickerattributes.md), [TextInputAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.textinputattributes.md)

## Constructors

- [UserInputAttributes<T>](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/ctor.md): Base class constructor.

## Properties

- [AllowVerticalResize](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/allowverticalresize.md): Gets whether these attributes can be resized vertically.
- [DrawOnTop](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/drawontop.md): Override this property if the hosted control ought to be drawn on top of the underlying attributes.
- [IResizableAttributes.Size](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/grasshopper2-doc-attributes-iresizableattributes-size.md): This is added so that these attributes can be included in the ResizeAction unto mechanism.
- [HasInlet](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hasinlet.md)
- [HasOutlet](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hasoutlet.md)
- [HostingBounds](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostingbounds.md): Gets the hosting bounds as currently layed out.
- [Inlet](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/inlet.md)
- [MaximumHeightUnits](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/maximumheightunits.md): Gets the maximum number of height units for resizable attributes. By default this value is 10.
- [MinimumHostingWidth](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/minimumhostingwidth.md): Gets the minimum allowed width of the hosting region.
- [Outlet](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/outlet.md)
- [Responder](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/responder.md): Gets the [Responses](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.flex.responses.md) dispatcher for these attributes. Subclasses can subscribe to the hook events on the returned object to extend interaction behaviour beyond what the [UserInputAttributes<T>.HostMouseDown(ResponseMouseArgs)](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmousedown.md) family covers.
- [ShowUiButton](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/showuibutton.md)
- [UiButtonBounds](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/uibuttonbounds.md): Gets the bounds of the UI popup button. Empty if the button is not shown. Exposed so external consumers (such as canvas hints) can target the button without reaching into the protected layout stack.
- [VerticalUnits](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/verticalunits.md)

## Methods

- [Draw](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/draw.md)
- [DrawHostedControl](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/drawhostedcontrol.md)
- [ICursorAwareAttributes.CursorAt](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/grasshopper2-doc-icursorawareattributes-cursorat.md)
- [HostCursorAt](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostcursorat.md): Override to supply a cursor for a point over the hosted control, e.g. hover feedback over interactive elements the host draws. Called by the [ICursorAwareAttributes](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.icursorawareattributes.md) implementation once the resize-grip cursors have been ruled out. Return `null` (the default) for the standard cursor.
- [HostingBoundsChanged](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostingboundschanged.md): Invoked when the bounds of the hosting control are changed. Override this method if you want to take action upon a resize.
- [HostKeyDown](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostkeydown.md)
- [HostKeyUp](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostkeyup.md)
- [HostMouseDoubleClick](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmousedoubleclick.md)
- [HostMouseDown](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmousedown.md)
- [HostMouseDrag](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmousedrag.md)
- [HostMouseLeave](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmouseleave.md): Override to react to the cursor moving off this attribute, e.g. by clearing any cached mouseover index. Default: no-op.
- [HostMouseOver](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmouseover.md): Override to respond to mouseover cursor motion (no buttons held). Called on every cursor motion while the cursor is coincident with this attribute. Default: no-op.
- [HostMouseSingleClick](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmousesingleclick.md)
- [HostMouseUp](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostmouseup.md)
- [HostRotation](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/hostrotation.md): Override to respond to a rotation gesture (trackpad two-finger rotate) over the host region. Default: no-op.
- [InvalidateLayout](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/invalidatelayout.md): Marks the layout as dirty so it gets recomputed on the next draw cycle. Subclasses typically flip an internal `_layoutValid` flag. Most callers should also raise [OnLayoutChanged](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.documentobject/onlayoutchanged.md) on the owner to actually trigger a canvas redraw.
- [Layout](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/layout.md)
- [PivotMoved](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/pivotmoved.md): Override this method if your attributes need to handle pivot motion. The default implementation translates [Bounds](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/bounds.md) and [Stack](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/stack.md) by the pivot delta. Overrides should typically chain to this base implementation.
- [ShowTooltipAt](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/showtooltipat.md)
- [ShowUi](https://developer.rhino3d.com/api/gh2/type/grasshopper2.parameters.special.userinputattributes-1/showui.md): Override this method to handle clicks on the UI button.

## Inherited Members

- From [Attributes<T>](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1.md): [AggregateBounds](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/aggregatebounds.md), [Bounds](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/bounds.md), [IntegerPivot](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/integerpivot.md), [Owner](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/owner.md), [Pivot](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/pivot.md), [Snappable](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/snappable.md), [Stack](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/stack.md), [DefaultTooltipContent](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/defaulttooltipcontent.md), [Draw](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/draw.md), [HandleDoubleClick](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/handledoubleclick.md), [Intersects](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/intersects.md), [InvalidateDisplay](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/invalidatedisplay.md), [IsCoincident](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/iscoincident.md), [IsContained](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/iscontained.md), [Move](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/move.md), [TooltipDetails](https://developer.rhino3d.com/api/gh2/type/grasshopper2.doc.attributes-1/tooltipdetails.md)
