This patch implements a new clipping API. This topic was discussed at length
about one year ago and has been on the TODO list since then.
It deprecates set_clip() and replaces it with 5 new functions:
void set_clip_rect(BITMAP *bitmap, int x1, int y1, int x2, int y2);
void add_clip_rect(BITMAP *bitmap, int x1, int y1, int x2, int y2);
inline void get_clip_rect(BITMAP *bitmap, int *x1, int *y1, int *x2, int*y2);
inline void set_clip_state, (BITMAP *bitmap, int state);
inline int get_clip_state(BITMAP *bitmap);
The semantics of the coordinates is the same as the current one for set_clip.
The main difference is that the *_rect functions are orthogonal to the
*_state functions.
I skimmed through the drawing code and verified that it properly tests the
clipping rectangle before performing any operations, so it is possible to
turn off drawing by specifying a "reversed" clipping rectangle. This was
not doable with the former set_clip (it authoritatively re-ordered the
coordinates) but is now with set_clip_rect.