Next: Getting the Size, Previous: Mouse Handling, Up: Part IV Drawing Objects [Contents][Index]
To avoid drawing outside a box the following routine exists:
void fl_set_clipping(FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h);
It sets a clipping region in the Forms Library’s default GC
used for drawing (but not for output of text, see below). x
,
y
, w
and h
define the area drawing is to restrict
to and are relative to the window/form that will be drawn to. In this
way you can prevent drawing over other objects.
Under some circumstances XForms also does it’s own clipping, i.e.,
while drawing due to a exposure event. This is called "global
clipping". Thus the clipping area you have set via a call of
fl_set_clipping()
may get restricted even further due
this global clipping.
You can check if there’s clipping set for the default GC
using the function
int fl_is_clipped(int include_global);
which returns 1
if clipping is switched on and 0
otherwise. The include_global
argument tells the function
if global clipping is to be included in the answer or not (i.e.,
if the argument is 0
only clipping set via
fl_set_clipping()
is reported).
The area currently clipped to is returned by the function
int fl_get_clipping(int include_global, FL_Coord *x,FL_Coord *y, FL_Coord *width, FL_Coord *height);
On return the four pointer arguments are set to the position and size
of the clipping rectangle (at least if clipping is switched on) and
the qreturn value of this function is the same as that of
fl_is_clipped()
. The include_global
argument has
the same meaning as for fl_is_clipped()
, i.e., it
controls if the effects of global clipping is included in the results.
When finished with drawing always use
void fl_unset_clipping(void);
to switch clipping of again.
You also can check and obtain the current settings for global clipping using the functions
int fl_is_global_clipped(void); int fl_get_global_clipping(FL_Coord *x,FL_Coord *y, FL_Coord *width, FL_Coord *height);
Clipping for text is controlled via a different GC
and thus
needs to be set, tested for and unset using a different set of functions:
void fl_set_text_clipping(FL_Coord x,FL_Coord y,FL_Coord w,FL_Coord h); int fl_is_text_clipped(int include_global); int fl_get_text_clipping(int include_global, FL_Coord *x,FL_Coord *y, FL_Coord *width, FL_Coord *height); void fl_unset_text_clipping(void);
Finally, there are functions to set and unset the clipping for a
specific GC
:
void fl_set_gc_clipping(GC gc, FL_Coord x, FL_Coord y, FL_Coord width, FL_Coord height); void fl_unset_gc_clipping(GC gc);
Please note that setting clipping for a GC
will always further
restrict the region to the region of global clipping (if it is on at
the moment the function is called) and unsetting clipping will still
retain global clipping if this is on at the moment the second function
is invoked (if it is currently on can be checked using the
fl_is_global_clipped()
).
Next: Getting the Size, Previous: Mouse Handling, Up: Part IV Drawing Objects [Contents][Index]