private void SetCallback(IntPtr pointer, IntPtr clientData)
{
float[] data = new float[4]; /* R, G, B, A */
Marshal.Copy(pointer, data, 0, data.Length);
if (IsValid(data[0], data[1], data[2], data[3]))
{
bool changed = (data[0] != r)
|| (data[1] != g)
|| (data[2] != b)
|| (data[3] != a);
r = data[0];
g = data[1];
b = data[2];
a = data[3];
if (changed) {
OnChanged(EventArgs.Empty);
}
}
}