Doxygen Documentation WP4 Done. Has all documentation content but should be completed in increment 2. Registered for WP5.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6239 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Fabien Costantini 2008-09-14 15:45:27 +00:00
parent 7f4e2867e8
commit ce4d0fd5d8
17 changed files with 359 additions and 63 deletions

View File

@ -37,6 +37,18 @@
#define FL_LINE_DIAL 1
#define FL_FILL_DIAL 2
/**
The Fl_Dial widget provides a circular dial to control a
single floating point value.
<P ALIGN=CENTER>\image html dial.gif
Use type() to set the type of the dial to:
<UL>
<LI>FL_NORMAL_DIAL - Draws a normal dial with a knob. </LI>
<LI>FL_LINE_DIAL - Draws a dial with a line. </LI>
<LI>FL_FILL_DIAL - Draws a dial with a filled arc. </LI>
</UL>
*/
class FL_EXPORT Fl_Dial : public Fl_Valuator {
short a1,a2;
@ -51,11 +63,25 @@ protected:
public:
int handle(int);
/**
Creates a new Fl_Dial widget using the given position, size,
and label string. The default type is FL_NORMAL_DIAL.
*/
Fl_Dial(int x,int y,int w,int h, const char *l = 0);
/**
Sets Or gets the angles used for the minimum and maximum values. The default
values are 45 and 315 (0 degrees is straight down and the angles
progress clockwise). Normally angle1 is less than angle2, but if you
reverse them the dial moves counter-clockwise.
*/
short angle1() const {return a1;}
/** See short angle1() const */
void angle1(short a) {a1 = a;}
/** See short angle1() const */
short angle2() const {return a2;}
/** See short angle1() const */
void angle2(short a) {a2 = a;}
/** See short angle1() const */
void angles(short a, short b) {a1 = a; a2 = b;}
};

View File

@ -46,6 +46,10 @@
// Fl_File_Icon class...
//
/**
The Fl_File_Icon class manages icon images that can be used
as labels in other widgets and as icons in the FileBrowser widget.
*/
class FL_EXPORT Fl_File_Icon //// Icon data
{
static Fl_File_Icon *first_; // Pointer to first icon/filetype
@ -83,27 +87,63 @@ class FL_EXPORT Fl_File_Icon //// Icon data
~Fl_File_Icon();
short *add(short d);
/** Adds a color value to the icon array, returning a pointer to it.*/
short *add_color(Fl_Color c)
{ short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }
/**
Adds a vertex value to the icon array, returning a pointer to it.
The integer version accepts coordinates from 0 to 10000, while the
floating point version goes from 0.0 to 1.0. The origin (0.0) is in
the lower-lefthand corner of the icon.
*/
short *add_vertex(int x, int y)
{ short *d = add((short)VERTEX); add((short)x); add((short)y); return (d); }
/**
Adds a vertex value to the icon array, returning a pointer to it.
The integer version accepts coordinates from 0 to 10000, while the
floating point version goes from 0.0 to 1.0. The origin (0.0) is in
the lower-lefthand corner of the icon.
*/
short *add_vertex(float x, float y)
{ short *d = add((short)VERTEX); add((short)(x * 10000.0));
add((short)(y * 10000.0)); return (d); }
/** Clears all icon data from the icon.*/
void clear() { num_data_ = 0; }
/** Draws the icon in the indicated area.*/
void draw(int x, int y, int w, int h, Fl_Color ic, int active = 1);
/** Set the widgets label to an icon */
void label(Fl_Widget *w);
/** The labeltype function for icons.*/
static void labeltype(const Fl_Label *o, int x, int y, int w, int h, Fl_Align a);
void load(const char *f);
int load_fti(const char *fti);
int load_image(const char *i);
/** Returns next file icon object. See Fl_File_Icon::first() */
Fl_File_Icon *next() { return (next_); }
/** Returns the filename matching pattern for the icon.*/
const char *pattern() { return (pattern_); }
/** Returns the number of words of data used by the icon.*/
int size() { return (num_data_); }
/**
Returns the filetype associated with the icon, which can be one of the
following:
<UL>
<LI>Fl_File_Icon::ANY, any kind of file.
<LI>Fl_File_Icon::PLAIN, plain files.
<LI>Fl_File_Icon::FIFO, named pipes.
<LI>Fl_File_Icon::DEVICE, character and block devices.
<LI>Fl_File_Icon::LINK, symbolic links.
<LI>Fl_File_Icon::DIRECTORY, directories.
</UL>
*/
int type() { return (type_); }
/** Returns the data array for the icon.*/
short *value() { return (data_); }
static Fl_File_Icon *find(const char *filename, int filetype = ANY);
/** Returns a pointer to the first icon in the list.*/
static Fl_File_Icon *first() { return (first_); }
static void load_system_icons(void);
};

View File

@ -40,6 +40,27 @@
typedef int (*FL_HANDLEPTR)(Fl_Widget *, int , float, float, char);
/**
Emulation of the Forms &quot;free&quot; widget. This emulation allows the free
demo to run, and appears to be useful for porting programs written in
Forms which use the free widget or make subclasses of the Forms
widgets.
<P>There are five types of free, which determine when the handle
function is called: </P>
<UL>
<PRE>
#define FL_NORMAL_FREE 1
#define FL_SLEEPING_FREE 2
#define FL_INPUT_FREE 3
#define FL_CONTINUOUS_FREE 4
#define FL_ALL_FREE 5
</PRE>
</UL>
<P>An FL_INPUT_FREE accepts FL_FOCUS events. A FL_CONTINUOUS_FREE sets
a timeout callback 100 times a second and provides a FL_STEP event,
this has obvious detrimental effects on machine performance.
FL_ALL_FREE does both. FL_SLEEPING_FREE are deactivated.
*/
class FL_EXPORT Fl_Free : public Fl_Widget {
FL_HANDLEPTR hfunc;
static void step(void *);
@ -47,8 +68,8 @@ protected:
void draw();
public:
int handle(int);
Fl_Free(uchar t,int x,int y,int w,int h,const char *l,FL_HANDLEPTR hdl);
~Fl_Free();
Fl_Free(uchar t,int x,int y,int w,int h,const char *l,FL_HANDLEPTR hdl);
~Fl_Free();
};
// old event names for compatability:

View File

@ -167,8 +167,28 @@ public:
// dummy class used to end child groups in constructors for complex
// subclasses of Fl_Group:
/**
This is a dummy class that allows you to end a Fl_Group in a constructor list of a
class:
<UL>
<PRE>class MyClass {
Fl_Group group;
Fl_Button button_in_group;
Fl_End end;
Fl_Button button_outside_group;
MyClass();
};
MyClass::MyClass() :
group(10,10,100,100),
button_in_group(20,20,60,30),
end(),
button_outside_group(10,120,60,30)
{}</PRE>
</UL>
*/
class FL_EXPORT Fl_End {
public:
/** All it does is calling Fl_Group::current()->end() */
Fl_End() {Fl_Group::current()->end();}
};

View File

@ -30,6 +30,22 @@
#include <FL/Fl_Group.H>
/**
This widget was designed to add the functionality of compressing and
aligning widgets.
<P>If type() is Fl_Pack::HORIZONTAL all the children are
resized to the height of the Fl_Pack, and are moved next to
each other horizontally. If type() is not Fl_Pack::HORIZONTAL
then the children are resized to the width and are stacked below each
other. Then the Fl_Pack resizes itself to surround the child
widgets.
<P>This widget is needed for the Fl_Tabs.
In addition you may want to put the Fl_Pack inside an
Fl_Scroll.
<P>The resizable for Fl_Pack is set to NULL by default.</p>
<P>See also: Fl_Group::resizable()
*/
class FL_EXPORT Fl_Pack : public Fl_Group {
int spacing_;
public:
@ -39,8 +55,17 @@ public:
};
void draw();
Fl_Pack(int x,int y,int w ,int h,const char *l = 0);
/**
Gets the number of extra pixels of blank space that are added
between the children.
*/
int spacing() const {return spacing_;}
/**
Sets the number of extra pixels of blank space that are added
between the children.
*/
void spacing(int i) {spacing_ = i;}
/** Same as Fl_Group::type() */
uchar horizontal() const {return type();}
};

View File

@ -32,6 +32,13 @@
#include "Fl_Widget.H"
#endif
/**
This class is provided for Forms compatibility. It provides 2D input.
It would be useful if this could be put atop another widget so that the
crosshairs are on top, but this is not implemented. The color of the
crosshairs is selection_color().
<P ALIGN=CENTER>\image html src=
*/
class FL_EXPORT Fl_Positioner : public Fl_Widget {
double xmin, ymin;
@ -49,25 +56,40 @@ protected:
public:
int handle(int);
/**
Creates a new Fl_Positioner widget using the given position,
size, and label string. The default boxtype is FL_NO_BOX.
*/
Fl_Positioner(int x,int y,int w,int h, const char *l=0);
/** Gets the X axis coordinate.*/
double xvalue() const {return xvalue_;}
/** Gets the Y axis coordinate.*/
double yvalue() const {return yvalue_;}
int xvalue(double);
int yvalue(double);
int value(double,double);
void xbounds(double, double);
/** Gets the X axis minimum */
double xminimum() const {return xmin;}
/** Same as xbounds(a, xmaximum()) */
void xminimum(double a) {xbounds(a,xmax);}
/** Gets the X axis maximum */
double xmaximum() const {return xmax;}
/** Same as xbounds(xminimum(), a) */
void xmaximum(double a) {xbounds(xmin,a);}
void ybounds(double, double);
/** Gets the Y axis minimum */
double yminimum() const {return ymin;}
void yminimum(double a) {ybounds(a,ymax);}
/** Same as ybounds(a, ymaximum()) */
void yminimum(double a) {ybounds(a, ymax);}
/** Gets the Y axis maximum */
double ymaximum() const {return ymax;}
void ymaximum(double a) {ybounds(ymin,a);}
/** Same as ybounds(ymininimum(), a) */
void ymaximum(double a) {ybounds(ymin, a);}
/** Sets the stepping value for the X axis.*/
void xstep(double a) {xstep_ = a;}
/** Sets the stepping value for the Y axis.*/
void ystep(double a) {ystep_ = a;}
};
#endif

View File

@ -30,6 +30,32 @@
#include "Fl_Group.H"
/**
The Fl_Tabs widget is the &quot;file card tabs&quot;
interface that allows you to put lots and lots of buttons and
switches in a panel, as popularized by many toolkits.
<P ALIGN=CENTER>\image html src=</P>
<P>Clicking the tab makes a child visible() by calling
show() on it, and all other children are made invisible
by calling hide() on them. Usually the children are Fl_Group widgets
containing several widgets themselves.
<P>Each child makes a card, and it's label() is printed
on the card tab, including the label font and style. The
selection color of that child is used to color the tab, while
the color of the child determines the background color of the
pane.
<P>The size of the tabs is controlled by the bounding box of the
children (there should be some space between the children and
the edge of the Fl_Tabs), and the tabs may be placed
&quot;inverted&quot; on the bottom, this is determined by which
gap is larger. It is easiest to lay this out in fluid, using the
fluid browser to select each child group and resize them until
the tabs look the way you want them to.
*/
class FL_EXPORT Fl_Tabs : public Fl_Group {
Fl_Widget *value_;
Fl_Widget *push_;

View File

@ -30,9 +30,62 @@
#include "Fl_Group.H"
/**
The Fl_Tile class lets you resize the children by dragging
the border between them:
<P ALIGN=CENTER>\image html Fl_Tile.gif </P>
<P>For the tiling to work correctly, the children of an
Fl_Tile must cover the entire area of the widget, but not
overlap. This means that all children must touch each
other at their edges, and no gaps can't be left inside the
Fl_Tile.
<P>Fl_Tile does not normailly draw any graphics of its own.
The &quot;borders&quot; which can be seen in the snapshot above
are actually part of the children. Their boxtypes have been set
to FL_DOWN_BOX creating the impression of
&quot;ridges&quot; where the boxes touch. What you see are
actually two adjacent FL_DOWN_BOX's drawn next to each
other. All neighboring widgets share the same edge - the widget's
thick borders make it appear as though the widgets aren't actually
touching, but they are. If the edges of adjacent widgets do not
touch, then it will be impossible to drag the corresponding
edges.</P>
<P>Fl_Tile allows objects to be resized to zero dimensions.
To prevent this you can use the resizable() to limit where
corners can be dragged to.</P>
<P>Even though objects can be resized to zero sizes, they must
initially have non-zero sizes so the Fl_Tile can figure out
their layout. If desired, call position() after creating the
children but before displaying the window to set the borders where you
want.
<P>Note on resizable(Fl_Widget &w) :
The &quot;resizable&quot; child widget (which should be invisible) limits where the
border can be dragged to. If you don't set it, it will be possible to
drag the borders right to the edge, and thus resize objects on the edge
to zero width or height. The resizable() widget is not
resized by dragging any borders. See also void Fl_Group::resizable(Fl_Widget &w)
*/
class FL_EXPORT Fl_Tile : public Fl_Group {
public:
int handle(int);
/**
Creates a new Fl_Tile widget using the given position, size,
and label string. The default boxtype is FL_NO_BOX.
<P>The destructor <I>also deletes all the children</I>. This allows a
whole tree to be deleted at once, without having to keep a pointer to
all the children in the user code. A kludge has been done so the
Fl_Tile and all of it's children can be automatic (local)
variables, but you must declare the Fl_Tile <I>first</I>, so
that it is destroyed last.
*/
Fl_Tile(int X,int Y,int W,int H,const char*l=0) : Fl_Group(X,Y,W,H,l) {}
void resize(int, int, int, int);
void position(int, int, int, int);

View File

@ -12,8 +12,8 @@ In Progress Work List (add your WP and name here):
- WP1 (Fabien) DONE
- WP2 (Fabien) DONE
- WP3 (engelsman)
- WP4 (Fabien)
- WP5
- WP4 (Fabien) DONE
- WP5 (Fabien)
- WP6
- WP7
- WP8

View File

@ -135,7 +135,11 @@ int Fl_Dial::handle(int e) {
}
Fl_Dial::Fl_Dial(int X, int Y, int W, int H, const char* l)
: Fl_Valuator(X, Y, W, H, l) {
/**
Creates a new Fl_Dial widget using the given position, size,
and label string. The default type is FL_NORMAL_DIAL.
*/
: Fl_Valuator(X, Y, W, H, l) {
box(FL_OVAL_BOX);
selection_color(FL_INACTIVE_COLOR); // was 37
a1 = 45;

View File

@ -81,11 +81,11 @@
Fl_File_Icon *Fl_File_Icon::first_ = (Fl_File_Icon *)0;
//
// 'Fl_File_Icon::Fl_File_Icon()' - Create a new file icon.
//
Fl_File_Icon::Fl_File_Icon(const char *p, /* I - Filename pattern */
/**
The constructor creates a new Fl_File_Icon with the specified
information.
*/
Fl_File_Icon::Fl_File_Icon(const char *p, /**< I - Filename pattern */
int t, /* I - File type */
int nd, /* I - Number of data values */
short *d) /* I - Data values */
@ -114,12 +114,11 @@ Fl_File_Icon::Fl_File_Icon(const char *p, /* I - Filename pattern */
}
//
// 'Fl_File_Icon::~Fl_File_Icon()' - Remove a file icon.
//
Fl_File_Icon::~Fl_File_Icon()
{
/**
The destructor destroys the icon and frees all memory that has been
allocated for it.
*/
Fl_File_Icon::~Fl_File_Icon() {
Fl_File_Icon *current, // Current icon in list
*prev; // Previous icon in list
@ -144,10 +143,7 @@ Fl_File_Icon::~Fl_File_Icon()
}
//
// 'Fl_File_Icon::add()' - Add data to an icon.
//
/** Adds a keyword value to the icon array, returning a pointer to it.*/
short * // O - Pointer to new data value
Fl_File_Icon::add(short d) // I - Data to add
{
@ -178,10 +174,7 @@ Fl_File_Icon::add(short d) // I - Data to add
}
//
// 'Fl_File_Icon::find()' - Find an icon based upon a given file.
//
/** Finds an icon that matches the given filename and file type.*/
Fl_File_Icon * // O - Matching file icon or NULL
Fl_File_Icon::find(const char *filename,// I - Name of file */
int filetype) // I - Enumerated file type
@ -243,11 +236,7 @@ Fl_File_Icon::find(const char *filename,// I - Name of file */
return (current);
}
//
// 'Fl_File_Icon::draw()' - Draw an icon.
//
/** Drawsan icon. */
void
Fl_File_Icon::draw(int x, // I - Upper-lefthand X
int y, // I - Upper-lefthand Y
@ -446,13 +435,11 @@ Fl_File_Icon::draw(int x, // I - Upper-lefthand X
fl_pop_matrix();
}
//
// 'Fl_File_Icon::label()' - Set the widget's label to an icon.
//
void
Fl_File_Icon::label(Fl_Widget *w) // I - Widget to label
/**
Applies the icon to the widget, registering the Fl_File_Icon
label type as needed.
*/
void Fl_File_Icon::label(Fl_Widget *w) // I - Widget to label
{
Fl::set_labeltype(_FL_ICON_LABEL, labeltype, 0);
w->label(_FL_ICON_LABEL, (const char*)this);

View File

@ -98,10 +98,7 @@ static char *get_kde_val(char *str, const char *key);
static const char *kdedir = NULL;
//
// 'Fl_File_Icon::load()' - Load an icon file...
//
/** Loads the specified icon image. The format is deduced from the filename.*/
void
Fl_File_Icon::load(const char *f) // I - File to read from
{
@ -124,10 +121,7 @@ Fl_File_Icon::load(const char *f) // I - File to read from
}
//
// 'Fl_File_Icon::load_fti()' - Load an SGI-format FTI file...
//
/** Loads an SGI icon file.*/
int // O - 0 on success, non-zero on error
Fl_File_Icon::load_fti(const char *fti) // I - File to read from
{
@ -341,12 +335,8 @@ Fl_File_Icon::load_fti(const char *fti) // I - File to read from
}
//
// 'Fl_File_Icon::load_image()' - Load an image icon file...
//
int // O - 0 on success, non-0 on error
Fl_File_Icon::load_image(const char *ifile) // I - File to read from
/** Load an image icon file from an image filename. Returns 0 on success, non-0 on error. */
int Fl_File_Icon::load_image(const char *ifile) // I - File to read from
{
Fl_Shared_Image *img; // Image file
@ -587,9 +577,14 @@ Fl_File_Icon::load_image(const char *ifile) // I - File to read from
}
//
// 'Fl_File_Icon::load_system_icons()' - Load the standard system icons/filetypes.
/** Loads all system-defined icons. This call is useful when using the
FileChooser widget and should be used when the application
starts:
<UL><PRE>
Fl_File_Icon::load_system_icons();
</PRE></UL>
*/
void
Fl_File_Icon::load_system_icons(void) {
int i; // Looping var

View File

@ -34,6 +34,16 @@
#include <FL/Fl_Pack.H>
#include <FL/fl_draw.H>
/**
Creates a new Fl_Pack widget using the given position, size,
and label string. The default boxtype is FL_NO_BOX.
<P>The destructor <I>also deletes all the children</I>. This allows a
whole tree to be deleted at once, without having to keep a pointer to
all the children in the user code. A kludge has been done so the
Fl_Pack and all of it's children can be automatic (local)
variables, but you must declare the Fl_Pack<I>first</I>, so
that it is destroyed last.
*/
Fl_Pack::Fl_Pack(int X, int Y, int W, int H,const char *l)
: Fl_Group(X, Y, W, H, l) {
resizable(0);

View File

@ -25,6 +25,7 @@
// http://www.fltk.org/str.php
//
// The positioner widget from Forms, gives 2D input
// Written by: Mark Overmars
@ -56,6 +57,7 @@ void Fl_Positioner::draw() {
draw_label();
}
/** Returns the current position in x and y.*/
int Fl_Positioner::value(double X, double Y) {
clear_changed();
if (X == xvalue_ && Y == yvalue_) return 0;
@ -64,10 +66,12 @@ int Fl_Positioner::value(double X, double Y) {
return 1;
}
/** Sets the X axis coordinate.*/
int Fl_Positioner::xvalue(double X) {
return(value(X, yvalue_));
}
/** Sets the Y axis coordinate.*/
int Fl_Positioner::yvalue(double Y) {
return(value(xvalue_, Y));
}
@ -120,6 +124,10 @@ int Fl_Positioner::handle(int e) {
return handle(e, x(), y(), w(), h());
}
/**
Creates a new Fl_Positioner widget using the given position,
size, and label string. The default boxtype is FL_NO_BOX.
*/
Fl_Positioner::Fl_Positioner(int X, int Y, int W, int H, const char* l)
: Fl_Widget(X, Y, W, H, l) {
box(FL_DOWN_BOX);
@ -132,6 +140,7 @@ Fl_Positioner::Fl_Positioner(int X, int Y, int W, int H, const char* l)
xstep_ = ystep_ = 0;
}
/** Sets the X axis bounds.*/
void Fl_Positioner::xbounds(double a, double b) {
if (a != xmin || b != xmax) {
xmin = a; xmax = b;
@ -139,6 +148,7 @@ void Fl_Positioner::xbounds(double a, double b) {
}
}
/** Sets the Y axis bounds.*/
void Fl_Positioner::ybounds(double a, double b) {
if (a != ymin || b != ymax) {
ymin = a; ymax = b;

View File

@ -25,6 +25,7 @@
// http://www.fltk.org/str.php
//
// This is the "file card tabs" interface to allow you to put lots and lots
// of buttons and switches in a panel, as popularized by many toolkits.
@ -248,10 +249,13 @@ int Fl_Tabs::push(Fl_Widget *o) {
return 1;
}
// The value() is the first visible child (or the last child if none
// are visible) and this also hides any other children.
// This allows the tabs to be deleted, moved to other groups, and
// show()/hide() called without it screwing up.
/**
Gets the currently visible widget/tab.
The value() is the first visible child (or the last child if none
are visible) and this also hides any other children.
This allows the tabs to be deleted, moved to other groups, and
show()/hide() called without it screwing up.
*/
Fl_Widget* Fl_Tabs::value() {
Fl_Widget* v = 0;
Fl_Widget*const* a = array();
@ -264,8 +268,11 @@ Fl_Widget* Fl_Tabs::value() {
return v;
}
// Setting the value hides all other children, and makes this one
// visible, iff it is really a child:
/**
Sets the widget to become the current visible widget/tab.
Setting the value hides all other children, and makes this one
visible, if it is really a child.
*/
int Fl_Tabs::value(Fl_Widget *newvalue) {
Fl_Widget*const* a = array();
int ret = 0;
@ -391,6 +398,23 @@ void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
fl_draw_shortcut = prev_draw_shortcut;
}
/**
Creates a new Fl_Tabs widget using the given position, size,
and label string. The default boxtype is FL_THIN_UP_BOX.
<P>Use add(Fl_Widget
*) to add each child, which are usually
Fl_Group widgets. The children should be sized to stay
away from the top or bottom edge of the Fl_Tabs widget,
which is where the tabs will be drawn.
<P>The destructor <I>also deletes all the children</I>. This
allows a whole tree to be deleted at once, without having to
keep a pointer to all the children in the user code. A kludge
has been done so the Fl_Tabs and all of it's children
can be automatic (local) variables, but you must declare the
Fl_Tabs widget <I>first</I> so that it is destroyed last.
*/
Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) :
Fl_Group(X,Y,W,H,l)
{

View File

@ -25,6 +25,7 @@
// http://www.fltk.org/str.php
//
// Group of 2 or 4 "tiles" that can be resized by dragging border
// The size of the first child determines where the resize border is.
// The resizebox is used to limit where the border can be dragged to.
@ -36,7 +37,10 @@
// Drag the edges that were initially at oldx,oldy to newx,newy:
// pass zero as oldx or oldy to disable drag in that direction:
/**
Drag the intersection at from_x,from_y to to_x,to_y.
This redraws all the necessary children.
*/
void Fl_Tile::position(int oix, int oiy, int newx, int newy) {
Fl_Widget*const* a = array();
int *p = sizes();

View File

@ -41,6 +41,34 @@ void Fl_Free::step(void *v) {
Fl::add_timeout(.01,step,v);
}
/**
The constructor takes both the type and the handle
function. The handle function should be declared as follows:
<UL>
<PRE>
int
handle_function(Fl_Widget *w,
int event,
float event_x,
float event_y,
char key)
</PRE>
</UL>
This function is called from the the handle() method in
response to most events, and is called by the draw() method.
The event argument contains the event type:
<UL>
<PRE>
// old event names for compatability:
#define FL_MOUSE FL_DRAG
#define FL_DRAW 0
#define FL_STEP 9
#define FL_FREEMEM 12
#define FL_FREEZE FL_UNMAP
#define FL_THAW FL_MAP
</PRE>
</UL>
*/
Fl_Free::Fl_Free(uchar t,int X, int Y, int W, int H,const char *l,
FL_HANDLEPTR hdl) :
Fl_Widget(X,Y,W,H,l) {
@ -51,6 +79,7 @@ Fl_Widget(X,Y,W,H,l) {
Fl::add_timeout(.01,step,this);
}
/** The destructor will call the handle function with the event FL_FREE_MEM. */
Fl_Free::~Fl_Free() {
Fl::remove_timeout(step,this);
hfunc(this,FL_FREEMEM,0,0,0);