I was just doing some profiling, and it turns out gradient fills are pretty slow. But the gradient has lots of funky features I don’t really need. It would be nice if juce had some optimized gradient fill functions for the most general cases. This is one I use and it seems over 10x faster.
inline void fillVerticalGradient (Graphics& g, const ColourGradient& grad, Rectangle<int> r)
{
const int h = r.getHeight();
const int w = r.getWidth();
const int x = r.getX();
const int y = r.getY();
for (int i = 0; i < h; i++)
{
g.setColour (grad.getColourAtPosition (i / double (h)));
g.fillRect (x, y + i, w, 1);
}
}
This won’t take in to account hi-dpi displays though (whose scale factor is greater than 1.0). For that you’ll probably need to get the Graphics context’s internal scale factor and make your increment 1.0 / scaleFactor?
That probably means using a Rectangle too and I’m not sure if that would adversely affect performance.
Of course, a 1px increment may be fine (or perhaps even a 2px increment in some cases).
I’d check this on a variety of hardware though, it’s likely to be slower on some systems (most notably if using OpenGL).