I have a plugin which needs to update the display often, but only tiny regions. Sometimes when the screen is updated, I have marked one tiny region in each of two different non-overlapping components as dirty, with
repaint( Rectangle<int> ), and
g.getClipBounds() returns a union of those two regions (which are far apart) in my
During testing I discovered that even though
g.getClipBounds() returns a large rectangle, in reality I’m only allowed to draw in the small regions which I actually marked dirty (macOS), the rest is clipped away, even if it’s inside
g.getClipBounds(). I could exploit that to optimize my drawing, however I can’t rely on remembering the regions I marked dirty (or could I?), as the system might ask for redrawing even when I haven’t marked it myself.
I thought perhaps declaring the components as opaque by calling
setOpaque( true ); in the constructor would help, because then it wouldn’t need to repaint the parent component, so it wouldn’t actually need to make a union of the rectangles marked for redrawing in two different components. However,
g.getClipBounds() still returns a union of the two rectangles.
Is there a way to obtain only the region marked dirty for each component, and would it be advisable to do so, or could it lead to compatibility issues? Perhaps I might override The drawing is fairly efficient now, so it’s not a big deal, but benchmarking/profiling shows that it’s still possible and beneficial to optimize further if I could do that.