# PenSkin

#### new PenSkin(id, renderer)

Create a Skin which implements a Scratch pen layer.

##### Parameters:

Name | Type | Description
--- | --- | ---
`id` | int | The unique ID for this Skin.
`renderer` | RenderWebGL | The renderer which will use this Skin.

##### Listens to Events:

- RenderWebGL#event:NativeSizeChanged

### Extends

- Skin

### Members

#### (private, static, constant) DefaultPenAttributes :PenSkin#PenAttributes

The pen attributes to use when unspecified.

##### Type:

- PenSkin#PenAttributes

#### _canvas :HTMLCanvasElement

##### Type:

- HTMLCanvasElement

#### _canvasDirty :boolean

##### Type:

- boolean

#### _id :int

Inherited From:
  - Skin#_id

##### Type:

- int

#### (private) _renderer :RenderWebGL

##### Type:

- RenderWebGL

#### _rotationCenter :Vec3

Inherited From:
  - Skin#_rotationCenter

##### Type:

- Vec3

#### _texture :WebGLTexture

##### Type:

- WebGLTexture

#### (private) _uniforms :Object.<string, *>

Inherited From:
  - Skin#_uniforms

The uniforms to be used by the vertex and pixel shaders. Some of these are used by other parts of the renderer as well.

##### Type:

- Object.<string, *>

#### id

Inherited From:
  - Skin#id

#### rotationCenter

Inherited From:
  - Skin#rotationCenter

#### size

Overrides:
  - Skin#size

### Methods

#### (private) _setAttributes(context, penAttributes)

Set context state to match provided pen attributes.

##### Parameters:

Name | Type | Description
--- | --- | ---
`context` | CanvasRenderingContext2D | the canvas rendering context to be modified.
`penAttributes` | PenAttributes | the pen attributes to be used.

#### (private) _setCanvasSize(canvasSize)

Set the size of the pen canvas.

##### Parameters:

Name | Type | Description
--- | --- | ---
`canvasSize` | Array.<int> | the new width and height for the canvas.

#### calculateRotationCenter() → {Array.<number>}

Inherited From:
  - Skin#calculateRotationCenter

Get the center of the current bounding box

##### Returns:

the center of the current bounding box

Type
  Array.<number>

#### clear()

Clear the pen layer.

#### dispose()

Overrides:
  - Skin#dispose

Dispose of this object. Do not use it after calling this method.

#### drawLine(penAttributes, x0, y0, x1, y1)

Draw a point on the pen layer.

##### Parameters:

Name | Type | Description
--- | --- | ---
`penAttributes` | PenAttributes | how the line should be drawn.
`x0` | number | the X coordinate of the beginning of the line.
`y0` | number | the Y coordinate of the beginning of the line.
`x1` | number | the X coordinate of the end of the line.
`y1` | number | the Y coordinate of the end of the line.

#### drawPoint(penAttributes, x, y)

Draw a point on the pen layer.

##### Parameters:

Name | Type | Description
--- | --- | ---
`penAttributes` | PenAttributes | how the point should be drawn.
`x` | number | the X coordinate of the point to draw.
`y` | number | the Y coordinate of the point to draw.

#### drawStamp(stampElement, x, y)

Stamp an image onto the pen layer.

##### Parameters:

Name | Type | Description
--- | --- | ---
`stampElement` | HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | the element to use as the stamp.
`x` | number | the X coordinate of the stamp to draw.
`y` | number | the Y coordinate of the stamp to draw.

#### getTexture(pixelsWide, pixelsTall) → {WebGLTexture}

Overrides:
  - Skin#getTexture

##### Parameters:

Name | Type | Description
--- | --- | ---
`pixelsWide` | int | The width that the skin will be rendered at, in GPU pixels.
`pixelsTall` | int | The height that the skin will be rendered at, in GPU pixels.

##### Returns:

The GL texture representation of this skin when drawing at the given size.

Type
  WebGLTexture

#### getUniforms(scale) → {object.<string, *>}

Inherited From:
  - Skin#getUniforms

Update and returns the uniforms for this skin.

##### Parameters:

Name | Type | Description
--- | --- | ---
`scale` | Array.<number> | The scaling factors to be used.

##### Returns:

the shader uniforms to be used when rendering with this Skin.

Type
  object.<string, *>

#### onNativeSizeChanged(event)

React to a change in the renderer's native size.

##### Parameters:

Name | Type | Description
--- | --- | ---
`event` | object | The change event.

#### setRotationCenter(x, y)

Inherited From:
  - Skin#setRotationCenter

Set the origin, in object space, about which this Skin should rotate.

##### Parameters:

Name | Type | Description
--- | --- | ---
`x` | number | The x coordinate of the new rotation center.
`y` | number | The y coordinate of the new rotation center.

##### Fires:

- Skin.event:WasAltered

### Type Definitions

#### PenAttributes

##### Properties:

Name | Type | Attributes | Description
--- | --- | --- | ---
`diameter` | number | <optional> | The size (diameter) of the pen.
`color4f` | Array.<number> | <optional> | The pen color as an array of [r,g,b,a], each component in the range [0,1].

Attributes to use when drawing with the pen

##### Type:

- object