Hi @scottyp
I’m currently playing with the Scratchpad you’ve provided through the API to build a plugin to take (among others) handwritten notes 
Example of scratchpad used in plugin editing note UI:
Here some remarks concerning the Scratchpad.
Method setMode()
The method can take 3 values:
'painting'
'panning'
'colorsampling'
- It could be useful to give these values in comments used to build the doc (Scratchpad.h), it can help to use the function without having to go in code to find which values are allowed

- In your Python plugin example, you’ve set
'colorpicking' but source code on kis_scratch_pad.cpp define the value 'colorsampling' (and then, python plugin doesn’t work with color picking)
Additional methods
So, as I took a look in cpp source for scratchpad, and I saw interesting things.
If I may, here some methods that could be interesting to publish through python API (in order of priority I think):
fillTransparent() because it could be interesting to get a transparent background
fillGradient() because it could cool to have gradient 
Concerning this one, internal method define gradient from top-left to bottom-right, using the current selected gradient; if possible:
– An optional QRect object as parameter could be interesting for this method (otherwise if no parameter provided, like now, define QRect from scratchpad bounds)
– An optional gradient Resource object parameter could be interesting too
Other things
Still looking internal code, currently for what I see, all scaling is made using Qt::SmoothTransformation
That good for zoom out, for zoom in, it will depend… sometimes yes, sometime no.
If possible, adding an option: setSmoothTransform(True|False|Auto) (with auto: True on zoom out, False on zoom in)
There’s currently only one way to zoom: use linkCanvasZoom() method
This is not really useful, because if you want to zoom in/out on scratchpad, you have to linkCanvasZoom(True) and change zoom on canvas.
In other word, you can’t zoom scratchpad without zooming canvas 
It seems everything is here: setOnScreenResolution()
By adding an method setScale(), if linkCanvasZoom() is false, we can easily use the manual scale value provided to zoom in/out the scratchpad without changing zoom in canvas
I know that I’m probably able to do proposed improvments by myself (already found main lines of what to do and where to do it I think), and I know that currently there’s not enough developers to improve/implement everything..
But fighting with git as I did last time I tried to do a MR, currently it’s no way.
It’s not really important if proposed improvements are not implemented, that’s just ideas 
The only real important thing I think is, if at least you could fix your plugin (colorsampled!) + comments for documentation it would be great 
Anyway, many thanks for the scratchpad API!
Grum999