A couple of bug fixes...

# Better mouse handling.

Some of the mouse interactions with the controls felt strange. I made a couple of changes to handle the mouse leaving/entering that made it feel more like traditional controls.

# Off-screen spectrum gradient avoids bad sampling of black/grey indicator bar.

I was seeing an issue (at least in chrome) where when dragging downward, the color value would not be correct, typically being too gray. I believe this was related to when/where the color sample is taken and the indicator bar colors. Instead of doing that, I moved the spectrum gradient to an off-screen buffer from which the color values are read. This should also make a bit of a memory vs. cpu tradeoff in that the render() method does not need to recreate the gradient each call.