Bump version.
[ntk.git] / documentation / src / drawing.dox
blobb5c69c4b17d40a522d27ea2e6c612041c343f263
1 /**
3  \page  drawing Drawing Things in FLTK
5 This chapter covers the drawing functions that are provided with FLTK.
7 \section sect_WhenCanYouDraw When Can You Draw Things in FLTK?
9 There are only certain places you can execute drawing code in FLTK.
10 Calling these functions at other places will result in undefined behavior!
12 \li The most common place is inside the virtual Fl_Widget::draw() method.
13     To write code here, you must subclass one of the existing Fl_Widget
14     classes and implement your own version of draw().
16 \li You can also create custom \ref common_boxtypes "boxtypes" and
17     \ref common_labeltype "labeltypes". These involve writing small
18     procedures that can be called by existing Fl_Widget::draw() methods.
19     These "types" are identified by an 8-bit index that is stored in the
20     widget's \p box(), \p labeltype(), and possibly other properties.
22 \li You can call Fl_Window::make_current() to do incremental update of a
23     widget. Use Fl_Widget::window() to find the window.
26 \section sect_DrawingFunctions Drawing Functions
28 To use the drawing functions you must first include the <FL/fl_draw.H>
29 header file. FLTK provides the following types of drawing functions:
31 \li \ref ssect_Boxes
32 \li \ref ssect_Clipping
33 \li \ref drawing_colors
34 \li \ref ssect_Lines
35 \li \ref ssect_Fast
36 \li \ref ssect_Complex
37 \li \ref ssect_Text
38 \li \ref ssect_Fonts
39 \li \ref ssect_CharacterEncoding
40 \li \ref ssect_Overlay
41 \li \ref drawing_images
42 \li \ref ssect_DirectImageDrawing
43 \li \ref ssect_DirectImageReading
44 \li \ref ssect_Fl_Image
45 \li \ref ssect_Offscreen
47 \subsection ssect_Boxes Boxes
49 FLTK provides three functions that can be used to draw boxes for buttons
50 and other UI controls. Each function uses the supplied upper-lefthand corner
51 and width and height to determine where to draw the box.
53 void fl_draw_box(Fl_Boxtype b, int x, int y, int w, int h, Fl_Color c);
55 \par
56 The \p %fl_draw_box() function draws a standard boxtype \p b
57 in the specified color \p c.
59 \anchor drawing_fl_frame
60 void fl_frame(const char *s, int x, int y, int w, int h) <br>
61 void fl_frame2(const char *s, int x, int y, int w, int h)
63 \par
64 The \p %fl_frame() and \p %fl_frame2() functions draw a series of
65 line segments around the given box. The string \p s must contain groups
66 of 4 letters which specify one of 24 standard grayscale values,
67 where 'A' is black and 'X' is white.
68 The results of calling these functions with a string that is not a
69 multiple of 4 characters in length are undefined.
71 \par
72 The only difference between \p %fl_frame() and \p %fl_frame2()
73 is the order of the line segments:
74   - For \p %fl_frame() the order of each set of 4 characters is:
75     top, left, bottom, right.
76   - For \p %fl_frame2() the order of each set of 4 characters is:
77     bottom, right, top, left.
79 \par
80 Note that
81 \ref common_fl_frame "fl_frame(Fl_Boxtype b)" 
82 is described in the \ref common_boxtypes section.
85 \subsection ssect_Clipping Clipping
87 You can limit all your drawing to a rectangular region by calling
88 \p %fl_push_clip(), and put the drawings back by using
89 \p %fl_pop_clip().
90 This rectangle is measured in pixels and is unaffected by the current
91 transformation matrix.
93 In addition, the system may provide clipping when updating windows
94 which may be more complex than a simple rectangle.
96 void fl_push_clip(int x, int y, int w, int h) <br>
97 void fl_clip(int x, int y, int w, int h)
99 \par
100 Intersect the current clip region with a rectangle and push this new
101 region onto the stack.
103 \par
104 The \p %fl_clip() version is deprecated and
105 will be removed from future releases.
107 void fl_push_no_clip()
109 \par
110 Pushes an empty clip region on the stack so nothing will be clipped.
112 void fl_pop_clip()
114 \par
115 Restore the previous clip region.
117 \par
118 \b Note:
119 You must call \p %fl_pop_clip() once for every time you call
120 \p %fl_push_clip().
121 If you return to FLTK with the clip stack not empty unpredictable results
122 occur.
124 int fl_not_clipped(int x, int y, int w, int h)
126 \par
127 Returns non-zero if any of the rectangle intersects the current clip
128 region. If this returns 0 you don't have to draw the object.
130 \par
131 \b Note:
132 Under X this returns 2 if the rectangle is partially clipped,
133 and 1 if it is entirely inside the clip region.
135 int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H)
137 \par
138 Intersect the rectangle <tt>x,y,w,h</tt> with the current
139 clip region and returns the bounding box of the result in
140 <tt>X,Y,W,H</tt>. Returns non-zero if the resulting rectangle is
141 different than the original. This can be used to limit the
142 necessary drawing to a rectangle. \c W and \c H are
143 set to zero if the rectangle is completely outside the region.
145 void fl_clip_region(Fl_Region r) <br>
146 Fl_Region fl_clip_region()
148 \par
149 Replace the top of the clip stack with a clipping region of any shape.
150 Fl_Region is an operating system specific type. The second form returns 
151 the current clipping region.
154 \section drawing_colors Colors
156 FLTK manages colors as 32-bit unsigned integers, encoded as RGBI.
157 When the RGB bytes are non-zero, the value is treated as RGB.
158 If these bytes are zero, the I byte will be used as an index
159 into the colormap.
161 Values from 0 to 255, i.e. the I index value, represent
162 colors from the FLTK 1.3.x standard colormap
163 and are allocated as needed on screens without TrueColor support.
164 The \b Fl_Color enumeration type defines the
165 standard colors and color cube for the first 256 colors. All of
166 these are named with symbols in
167 \ref enumerations "<FL/Enumerations.H>".
169 Color values greater than 255 are treated as 24-bit RGB
170 values. These are mapped to the closest color supported by the
171 screen, either from one of the 256 colors in the FLTK 1.3.x
172 colormap or a direct RGB value on TrueColor screens.
174 Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) <br>
175 Fl_Color fl_rgb_color(uchar grayscale)
177 \par
178 Generate Fl_Color out of specified
179 8-bit RGB values or one 8-bit grayscale value.
181 void fl_color(Fl_Color c) <br>
182 void fl_color(int c)
184 \par
185 Sets the color for all subsequent drawing operations.
186 Please use the first form:
187 the second form is only provided for back compatibility.
189 \par
190 For colormapped displays, a color cell will be allocated out
191 of \p fl_colormap the first time you use a color. If the
192 colormap fills up then a least-squares algorithm is used to find
193 the closest color.
195 Fl_Color fl_color()
197 \par
198 Returns the last color that was set using \p %fl_color().
199 This can be used for state save/restore.
201 void fl_color(uchar r, uchar g, uchar b)
203 \par
204 Set the color for all subsequent drawing operations. The
205 closest possible match to the RGB color is used. The RGB color
206 is used directly on TrueColor displays. For colormap visuals the
207 nearest index in the gray ramp or color cube is used.
209 unsigned Fl::get_color(Fl_Color i) <br>
210 void Fl::get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue)
212 \par
213 Generate RGB values from a colormap index value \p i.
214 The first returns the RGB as a 32-bit unsigned integer,
215 and the second decomposes the RGB into three 8-bit values.
216 \todo work out why Fl::get_color() does not give links!
218 Fl::get_system_colors() <br>
219 Fl::foreground() <br>
220 Fl::background() <br>
221 Fl::background2()
223 \par
224 The first gets color values from the user preferences or the system,
225 and the other routines are used to apply those values.
227 Fl::own_colormap() <br>
228 Fl::free_color(Fl_Color i, int overlay) <br>
229 Fl::set_color(Fl_Color i, unsigned c)
231 \par
232 \p Fl::own_colormap() is used to install a local colormap [X11 only].
233 \par
234 \p Fl::free_color() and \p Fl::set_color() are used to remove and replace
235 entries from the colormap.
236 \todo work out why these do not give links!
238 There are two predefined graphical interfaces for choosing colors.
239 The function fl_show_colormap() shows a table of colors and returns an
240 Fl_Color index value.
241 The Fl_Color_Chooser widget provides a standard RGB color chooser.
243 As the Fl_Color encoding maps to a 32-bit unsigned integer representing
244 RGBI, it is also possible to specify a color using a hex constant as a
245 color map index:
246 <pre>
247 // COLOR MAP INDEX
248 color(0x000000II)
249         ------ |
250            |   |
251            |   Color map index (8 bits)
252            Must be zero
253 </pre>
254 \code
255 button->color(0x000000ff);                  // colormap index #255 (FL_WHITE)
256 \endcode
258 or specify a color using a hex constant for the RGB components:
259 <pre>
260 // RGB COLOR ASSIGNMENTS
261 color(0xRRGGBB00)
262          | | | |
263          | | | Must be zero
264          | | Blue (8 bits)
265          | Green (8 bits)
266          Red (8 bits)
267 </pre>
268 \code
269 button->color(0xff000000);                  // RGB: red
270 button->color(0x00ff0000);                  // RGB: green
271 button->color(0x0000ff00);                  // RGB: blue
272 button->color(0xffffff00);                  // RGB: white
273 \endcode
275 \note
276 If TrueColor is not available, any RGB colors will be set to
277 the nearest entry in the colormap.
279 \subsection ssect_Lines Line Dashes and Thickness
281 FLTK supports drawing of lines with different styles and
282 widths. Full functionality is not available under Windows 95, 98,
283 and Me due to the reduced drawing functionality these operating
284 systems provide.
286 void fl_line_style(int style, int width, char* dashes)
288 \par
289 Set how to draw lines (the "pen").  If you change this it is your
290 responsibility to set it back to the default with
291 \p fl_line_style(0).
293 \par
294 \b Note:
295 Because of how line styles are implemented on MS Windows systems, you
296 \e must set the line style \e after setting the drawing color.
297 If you set the
298 color after the line style you will lose the line style settings!
300 \par
301 \p style is a bitmask which is a bitwise-OR of the following
302 values. If you don't specify a dash type you will get a solid
303 line. If you don't specify a cap or join type you will get a
304 system-defined default of whatever value is fastest.
306 \par
307 \li <tt>FL_SOLID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------</tt>
308 \li <tt>FL_DASH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - - - -</tt>
309 \li <tt>FL_DOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .......</tt>
310 \li <tt>FL_DASHDOT&nbsp;&nbsp;&nbsp; - . - .</tt>
311 \li <tt>FL_DASHDOTDOT - .. -</tt>
312 \li <tt>FL_CAP_FLAT</tt>
313 \li <tt>FL_CAP_ROUND</tt>
314 \li <tt>FL_CAP_SQUARE</tt> (extends past end point 1/2 line width)
315 \li <tt>FL_JOIN_MITER</tt> (pointed)
316 \li <tt>FL_JOIN_ROUND</tt>
317 \li <tt>FL_JOIN_BEVEL</tt> (flat)
319 \par
320 \p width is the number of pixels thick to draw the lines.
321 Zero results in the system-defined default, which on both X and
322 Windows is somewhat different and nicer than 1.
324 \par
325 \p dashes is a pointer to an array of dash lengths, measured in
326 pixels.  The first location is how long to draw a solid portion, the
327 next is how long to draw the gap, then the solid, etc.  It is
328 terminated with a zero-length entry. A \p NULL pointer or a zero-length
329 array results in a solid line. Odd array sizes are not supported and
330 result in undefined behavior.
332 \par
333 \b Note:
334 The dashes array does not work under Windows 95, 98, or Me, since those
335 operating systems do not support complex line styles.
338 \subsection ssect_Fast Drawing Fast Shapes
340 These functions are used to draw almost all the FLTK widgets.
341 They draw on exact pixel boundaries and are as fast as possible.
342 Their behavior is duplicated exactly on all platforms FLTK is
343 ported. It is undefined whether these are affected by the
344 \ref ssect_Complex "transformation matrix",
345 so you should only call these while the matrix is set to the
346 identity matrix (the default).
348 void fl_point(int x, int y)
350 \par
351 Draw a single pixel at the given coordinates.
353 void fl_rectf(int x, int y, int w, int h) <br>
354 void fl_rectf(int x, int y, int w, int h)
356 \par
357 Color a rectangle that exactly fills the given bounding box.
359 void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b)
361 \par
362 Color a rectangle with "exactly" the passed
363 <tt>r,g,b</tt> color. On screens with less than 24 bits of
364 color this is done by drawing a solid-colored block using
365 \ref drawing_fl_draw_image "fl_draw_image()"
366 so that the correct color shade is produced.
368 void fl_rect(int x, int y, int w, int h) <br>
369 void fl_rect(int x, int y, int w, int h, Fl_Color c)
371 \par
372 Draw a 1-pixel border \e inside this bounding box.
374 void fl_line(int x, int y, int x1, int y1) <br>
375 void fl_line(int x, int y, int x1, int y1, int x2, int y2)
377 \par
378 Draw one or two lines between the given points.
380 void fl_loop(int x, int y, int x1, int y1, int x2, int y2) <br>
381 void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3)
383 \par
384 Outline a 3 or 4-sided polygon with lines.
386 void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) <br>
387 void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3)
389 \par
390 Fill a 3 or 4-sided polygon. The polygon must be convex.
392 void fl_xyline(int x, int y, int x1) <br>
393 void fl_xyline(int x, int y, int x1, int y2) <br>
394 void fl_xyline(int x, int y, int x1, int y2, int x3)
396 \par
397 Draw horizontal and vertical lines. A horizontal line is
398 drawn first, then a vertical, then a horizontal.
400 void fl_yxline(int x, int y, int y1) <br>
401 void fl_yxline(int x, int y, int y1, int x2) <br>
402 void fl_yxline(int x, int y, int y1, int x2, int y3)
404 \par
405 Draw vertical and horizontal lines. A vertical line is drawn
406 first, then a horizontal, then a vertical.
408 void fl_arc(int x, int y, int w, int h, double a1, double a2) <br>
409 void fl_pie(int x, int y, int w, int h, double a1, double a2)
411 \par
412 Draw ellipse sections using integer coordinates. These
413 functions match the rather limited circle drawing code provided
414 by X and MS Windows. The advantage over using
415 \ref drawing_fl_arc "fl_arc()"
416 with floating point
417 coordinates is that they are faster because they often use the
418 hardware, and they draw much nicer small circles, since the
419 small sizes are often hard-coded bitmaps.
421 \par
422 If a complete circle is drawn it will fit inside the passed bounding
423 box. The two angles are measured in degrees counter-clockwise from
424 3'oclock and are the starting and ending angle of the arc, \p a2
425 must be greater or equal to \p a1.
427 \par
428 \p %fl_arc() draws a series of lines to approximate the arc.
429 Notice that the integer version of \p %fl_arc() has a different
430 number of arguments to the other
431 \ref drawing_fl_arc "fl_arc()"
432 function described later in this chapter.
434 \par
435 \p %fl_pie() draws a filled-in pie slice. This slice may
436 extend outside the line drawn by \p %fl_arc(); to avoid this
437 use \p w-1 and \p h-1.
439 \todo
440 add an Fl_Draw_Area_Cb typedef to allow fl_scroll(...) to be doxygenated?
442 void fl_scroll(int X, int Y, int W, int H, int dx, int dy, void (*draw_area)(void*, int,int,int,int), void* data)
444 \par
445 Scroll a rectangle and draw the newly exposed portions. The contents
446 of the rectangular area is first shifted by \p dx and 
447 \p dy pixels. The callback is then called for every newly 
448 exposed rectangular area,
451 \subsection ssect_Complex Drawing Complex Shapes
453 The complex drawing functions let you draw arbitrary shapes
454 with 2-D linear transformations. The functionality matches that
455 found in the Adobe&reg; PostScript&tm; language. The
456 exact pixels that are filled are less defined than for the fast
457 drawing functions so that FLTK can take advantage of drawing
458 hardware. On both X and MS Windows the transformed vertices are
459 rounded to integers before drawing the line segments: this
460 severely limits the accuracy of these functions for complex
461 graphics, so use OpenGL when greater accuracy and/or performance
462 is required.
464 void fl_push_matrix() <br>
465 void fl_pop_matrix()
467 \par
468 Save and restore the current transformation.  The maximum
469 depth of the stack is 32 entries.
471 void fl_scale(double x,double y) <br>
472 void fl_scale(double x) <br>
473 void fl_translate(double x,double y) <br>
474 void fl_rotate(double d) <br>
475 void fl_mult_matrix(double a,double b,double c,double d,double x,double y)
477 \par
478 Concatenate another transformation onto the current one. The rotation
479 angle is in degrees (not radians) and is counter-clockwise.
481 double fl_transform_x(double x, double y) <br>
482 double fl_transform_y(double x, double y) <br>
483 double fl_transform_dx(double x, double y) <br>
484 double fl_transform_dy(double x, double y) <br>
485 void fl_transformed_vertex(double xf, double yf)
487 \par
488 Transform a coordinate or a distance using the current transformation matrix.
489 After transforming a coordinate pair, it can be added to the vertex
490 list without any further translations using \p %fl_transformed_vertex().
492 void fl_begin_points() <br>
493 void fl_end_points()
495 \par
496 Start and end drawing a list of points. Points are added to
497 the list with \p %fl_vertex().
499 void fl_begin_line() <br>
500 void fl_end_line()
502 \par
503 Start and end drawing lines.
505 void fl_begin_loop() <br>
506 void fl_end_loop()
508 \par
509 Start and end drawing a closed sequence of lines.
511 void fl_begin_polygon() <br>
512 void fl_end_polygon()
514 \par
515 Start and end drawing a convex filled polygon.
517 void fl_begin_complex_polygon() <br>
518 void fl_gap() <br>
519 void fl_end_complex_polygon()
521 \par
522 Start and end drawing a complex filled polygon. This polygon
523 may be concave, may have holes in it, or may be several
524 disconnected pieces. Call \p %fl_gap() to separate loops of
525 the path. It is unnecessary but harmless to call
526 \p %fl_gap() before the first vertex, after the last one,
527 or several times in a row.
529 \par
530 \p %fl_gap() should only be called between 
531 \p %fl_begin_complex_polygon() and
532 \p %fl_end_complex_polygon().
533 To outline the polygon, use
534 \p %fl_begin_loop() and replace each
535 \p %fl_gap() with a
536 \p %fl_end_loop();%fl_begin_loop() pair.
538 \par
539 \b Note:
540 For portability, you should only draw polygons that appear the same whether
541 "even/odd" or "non-zero" winding rules are used to fill them. Holes should
542 be drawn in the opposite direction of the outside loop.
544 void fl_vertex(double x,double y)
546 \par
547 Add a single vertex to the current path.
549 void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3)
551 \par
552 Add a series of points on a Bezier curve to the path.  The curve ends
553 (and two of the points) are at <tt>X0,Y0</tt> and <tt>X3,Y3</tt>.
555 \anchor drawing_fl_arc
556 void fl_arc(double x, double y, double r, double start, double end)
558 \par
559 Add a series of points to the current path on the arc of a
560 circle; you can get elliptical paths by using scale and rotate
561 before calling \p %fl_arc().
562 The center of the circle is given by \p x and \p y,
563 and \p r is its radius.
564 \p %fl_arc()
565 takes \p start and \p end angles that are measured
566 in degrees counter-clockwise from 3 o'clock.
567 If \p end is less than \p start then it draws the arc in a clockwise
568 direction.
570 void fl_circle(double x, double y, double r)
572 \par
573 \p fl_circle(...) is equivalent to \p fl_arc(...,0,360) but may
574 be faster. It must be the \e only thing in the path: if you want
575 a circle as part of a complex polygon you must use \p %fl_arc().
577 \par
578 \b Note:
579 \p %fl_circle() draws incorrectly if the transformation is both rotated and
580 non-square scaled.
582 \subsection ssect_Text Drawing Text
584 All text is drawn in the
585 \ref drawing_fl_font "current font".
586 It is undefined whether this location or the characters are
587 modified by the current transformation.
589 void fl_draw(const char *, int x, int y) <br>
590 void fl_draw(const char *, int n, int x, int y)
592 \par
593 Draw a nul-terminated string or an array of \p n characters
594 starting at the given location. Text is aligned to the left and to
595 the baseline of the font. To align to the bottom, subtract
596 \p %fl_descent() from \p y.
597 To align to the top, subtract \p %fl_descent() and add \p %fl_height().
598 This version of \p %fl_draw()  provides direct access to
599 the text drawing function of the underlying OS. It does not apply any 
600 special handling to control characters. 
602 void fl_draw(const char* str, int x, int y, int w, int h, Fl_Align align, Fl_Image* img, int draw_symbols)
604 \par
605 Fancy string drawing function which is used to draw all the
606 labels. The string is formatted and aligned inside the passed
607 box.  Handles '\\t' and '\\n', expands all other control
608 characters to ^X, and aligns inside or against the edges of the
609 box described by \p x, \p y, \p w and \p h.
610 See Fl_Widget::align() for values for \p align.
611 The value \p FL_ALIGN_INSIDE is ignored, as this function always
612 prints inside the box.
614 \par
615 If \p img is provided and is not \p NULL, the
616 image is drawn above or below the text as specified by the
617 \p align value.
619 \par
620 The \p draw_symbols argument specifies whether or not
621 to look for symbol names starting with the "@" character.
623 \par
624 The text length is limited to 1024 characters per line.
626 void fl_measure(const char *str, int& w, int& h, int draw_symbols)
628 \par
629 Measure how wide and tall the string will be when printed by
630 the \p fl_draw(...align) function.
631 If the incoming \p w is non-zero it will wrap to that width.
633 int fl_height()
635 \par
636 Recommended minimum line spacing for the current font.  You
637 can also just use the value of \p size passed to
638 \ref drawing_fl_font "fl_font()".
640 int fl_descent()
642 \par
643 Recommended distance above the bottom of a \p %fl_height() tall box to draw
644 the text at so it looks centered vertically in that box.
646 double fl_width(const char* txt) <br>
647 double fl_width(const char* txt, int n) <br>
648 double fl_width(unsigned int unicode_char)
650 \par
651 Return the pixel width of a nul-terminated string, a sequence of \p n
652 characters, or a single character in the current font.
654 const char* fl_shortcut_label(int shortcut)
656 \par
657 Unparse a shortcut value as used by Fl_Button or Fl_Menu_Item
658 into a human-readable string like "Alt+N".  This only
659 works if the shortcut is a character key or a numbered function
660 key. If the shortcut is zero an empty string is returned. The
661 return value points at a static buffer that is overwritten with
662 each call.
664 \subsection ssect_Fonts Fonts
666 FLTK supports a set of standard fonts based on the Times,
667 Helvetica/Arial, Courier, and Symbol typefaces, as well as
668 custom fonts that your application may load. Each font is
669 accessed by an index into a font table.
671 Initially only the first 16 faces are filled in. There are
672 symbolic names for them: FL_HELVETICA,
673 FL_TIMES, FL_COURIER, and modifier values
674 FL_BOLD and FL_ITALIC which can be added to
675 these, and FL_SYMBOL and FL_ZAPF_DINGBATS.
676 Faces greater than 255 cannot be used in Fl_Widget
677 labels, since Fl_Widget stores the index as a byte.
679 \anchor drawing_fl_font
680 void fl_font(int face, int size)
682 \par
683 Set the current font, which is then used by the routines
684 described above. You may call this outside a draw context if
685 necessary to call fl_width(), but on X this will open
686 the display.
688 \par
689 The font is identified by a \p face and a \p size.
690 The size of the font is measured in \p pixels and not "points".
691 Lines should be spaced \p size pixels apart or more.
693 int fl_font() <br>
694 int fl_size()
696 \par
697 Returns the face and size set by the most recent call to
698 \p fl_font(a,b). This can be used to save/restore the font.
700 \subsection ssect_CharacterEncoding Character Encoding
702 FLTK 1.3 expects all text in Unicode UTF-8 encoding. UTF-8 is 
703 ASCII compatible for the first 128 characters. International 
704 characters are encoded in multibyte sequences. 
706 FLTK expects individual characters, characters that are not part of 
707 a string, in UCS-4 encoding, which is also ASCII compatible, but 
708 requires 4 bytes to store a Unicode character.
710 For more information about character encodings, see the chapter on
711 \ref unicode.
713 \subsection ssect_Overlay Drawing Overlays
715 These functions allow you to draw interactive selection rectangles
716 without using the overlay hardware. FLTK will XOR a single rectangle
717 outline over a window.
719 void fl_overlay_rect(int x, int y, int w, int h); <br>
720 void fl_overlay_clear();
722 \par
723 \p %fl_overlay_rect() draws a selection rectangle, erasing any
724 previous rectangle by XOR'ing it first. \p %fl_overlay_clear()
725 will erase the rectangle without drawing a new one.
727 \par
728 Using these functions is tricky. You should make a widget
729 with both a \p handle() and \p draw() method.
730 \p draw() should call \p %fl_overlay_clear() before
731 doing anything else.  Your \p handle() method should call
732 <tt>window()->make_current()</tt> and then
733 \p %fl_overlay_rect() after FL_DRAG events, and
734 should call \p %fl_overlay_clear() after a
735 FL_RELEASE event.
738 \section drawing_images Drawing Images
740 To draw images, you can either do it directly from data in
741 your memory, or you can create a Fl_Image object. The advantage of
742 drawing directly is that it is more intuitive, and it is faster
743 if the image data changes more often than it is redrawn. The
744 advantage of using the object is that FLTK will cache translated
745 forms of the image (on X it uses a server pixmap) and thus
746 redrawing is \e much faster.
748 \subsection ssect_DirectImageDrawing Direct Image Drawing
750 The behavior when drawing images when the current
751 transformation matrix is not the identity is not defined, so you
752 should only draw images when the matrix is set to the identity.
754 \anchor drawing_fl_draw_image
755 void fl_draw_image(const uchar *buf,int X,int Y,int W,int H,int D,int L)<br>
756 void fl_draw_image_mono(const uchar *buf,int X,int Y,int W,int H,int D,int L)
758 \par
759 Draw an 8-bit per color RGB or luminance image.  The pointer
760 points at the "r" data of the top-left pixel. Color
761 data must be in <tt>r,g,b</tt> order.
762 The top left corner is given by \p X and \p Y
763 and the size of the image is given by \p W and \p H.
764 \p D is the delta to add to the pointer between pixels,
765 it may be any value greater or equal to \p 3,
766 or it can be negative to flip the image horizontally.
767 \p L is the delta to add to the pointer between lines
768 (if 0 is passed it uses \p W*D).
769 and may be larger than \p W*D to crop data,
770 or negative to flip the image vertically.
772 \par
773 It is highly recommended that you put the following code before the
774 first show() of \e any window in your program to get rid
775 of the dithering if possible: 
777 \code
778 Fl::visual(FL_RGB);
779 \endcode
781 \par
782 Gray scale (1-channel) images may be drawn. This is done if
783 <tt>abs(D)</tt> is less than 3, or by calling
784 \p %fl_draw_image_mono(). Only one 8-bit sample is used for
785 each pixel, and on screens with different numbers of bits for
786 red, green, and blue only gray colors are used. Setting
787 \p D greater than 1 will let you display one channel of a
788 color image.
790 \par
791 \b Note:
792 The X version does not support all possible visuals.
793 If FLTK cannot draw the image in the current visual it
794 will abort. FLTK supports any visual of 8 bits or less,
795 and all common TrueColor visuals up to 32 bits.
797 typedef void (*Fl_Draw_Image_Cb)(void *data,int x,int y,int w,uchar *buf) <br>
798 void fl_draw_image(Fl_Draw_Image_Cb cb,void *data,int X,int Y,int W,int H,int D) <br>
799 void fl_draw_image_mono(Fl_Draw_Image_Cb cb,void *data,int X,int Y,int W,int H,int D)
801 \par
802 Call the passed function to provide each scan line of the
803 image.  This lets you generate the image as it is being drawn,
804 or do arbitrary decompression of stored data, provided it can be
805 decompressed to individual scan lines easily.
807 \par
808 The callback is called with the \p void* user data
809 pointer which can be used to point at a structure of information
810 about the image, and the \p x, \p y, and \p w
811 of the scan line desired from the image. 0,0 is the upper-left
812 corner of the image, <I>not <tt>X,Y</tt></I>. A pointer to a
813 buffer to put the data into is passed. You must copy \p w
814 pixels from scanline \p y, starting at pixel \p x,
815 to this buffer.
817 \par
818 Due to cropping, less than the whole image may be requested.
819 So \p x may be greater than zero, the first \p y may
820 be greater than zero, and \p w may be less than \p W.
821 The buffer is long enough to store the entire \p W*D
822 pixels, this is for convenience with some decompression
823 schemes where you must decompress the entire line at once:
824 decompress it into the buffer, and then if \p x is not
825 zero, copy the data over so the \p x'th pixel is at the
826 start of the buffer.
828 \par
829 You can assume the \p y's will be consecutive, except
830 the first one may be greater than zero.
832 \par
833 If \p D is 4 or more, you must fill in the unused bytes
834 with zero.
836 int fl_draw_pixmap(char* const* data, int x, int y, Fl_Color bg) <br>
837 int fl_draw_pixmap(const char* const* cdata, int x, int y, Fl_Color bg)
839 \par
840 Draws XPM image data, with the top-left corner at the given position.
841 The image is dithered on 8-bit displays so you won't lose color space
842 for programs displaying both images and pixmaps. This function returns
843 zero if there was any error decoding the XPM data.
845 \par
846 To use an XPM, do:
848 \code
849 #include "foo.xpm"
851 fl_draw_pixmap(foo, X, Y);
852 \endcode
854 \par
855 Transparent colors are replaced by the optional
856 Fl_Color argument. To draw with true transparency you must
857 use the Fl_Pixmap class.
859 int fl_measure_pixmap(char* const* data, int &w, int &h) <br>
860 int fl_measure_pixmap(const char* const* cdata, int &w, int &h)
862 \par
863 An XPM image contains the dimensions in its data. This
864 function finds and returns the width and height. The return
865 value is non-zero if the dimensions were parsed ok and zero if
866 there was any problem.
868 \subsection ssect_DirectImageReading Direct Image Reading
870 FLTK provides a single function for reading from the current
871 window or off-screen buffer into a RGB(A) image buffer.
873 uchar* fl_read_image(uchar *p, int X, int Y, int W, int H, int alpha)
875 \par
876 Read a RGB(A) image from the current window or off-screen
877 buffer. The \p p argument points to a buffer that can hold
878 the image and must be at least \p W*H*3 bytes when reading
879 RGB images and \p W*H*4 bytes when reading RGBA images. If
880 \p NULL, \p %fl_read_image() will create an array of
881 the proper size which can be freed using \p delete[].
883 \par
884 The \p alpha parameter controls whether an alpha
885 channel is created and the value that is placed in the alpha
886 channel. If 0, no alpha channel is generated.
888 \subsection ssect_Fl_Image Image Classes
890 FLTK provides a base image class called Fl_Image which supports
891 creating, copying, and drawing images of various kinds, along
892 with some basic color operations. Images can be used as labels
893 for widgets using the \p image() and \p deimage() methods or drawn directly.
895 The Fl_Image class does almost nothing by itself, but is instead 
896 supported by three basic image types:
898 \li Fl_Bitmap
899 \li Fl_Pixmap
900 \li Fl_RGB_Image
902 The Fl_Bitmap class encapsulates a mono-color bitmap image.
903 The \p draw() method draws the image using the current drawing
904 color.
906 The Fl_Pixmap class encapsulates a colormapped image.
907 The \p draw() method draws the image using the colors in the
908 file, and masks off any transparent colors automatically.
910 The Fl_RGB_Image class encapsulates a full-color 
911 (or grayscale) image with 1 to 4 color components. Images with 
912 an even number of components are assumed to contain an 
913 alpha channel that is used for transparency. The transparency 
914 provided by the draw() method is either a 24-bit 
915 blend against the existing window contents or a "screen door" 
916 transparency mask, depending on the platform and screen color depth. 
918 char fl_can_do_alpha_blending()
920 \par
921 \p %fl_can_do_alpha_blending() will return 1, if your
922 platform supports true alpha blending for RGBA images, or 0, 
923 if FLTK will use screen door transparency.
925 FLTK also provides several image classes based on the three
926 standard image types for common file formats:
928 \li Fl_GIF_Image 
929 \li Fl_JPEG_Image 
930 \li Fl_PNG_Image 
931 \li Fl_PNM_Image 
932 \li Fl_XBM_Image 
933 \li Fl_XPM_Image
935 Each of these image classes load a named file of the
936 corresponding format. The Fl_Shared_Image class
937 can be used to load any type of image file - the class examines
938 the file and constructs an image of the appropriate type.
940 Finally, FLTK provides a special image class called Fl_Tiled_Image to
941 tile another image object in the specified area. This class can be
942 used to tile a background image in a Fl_Group widget, for example.
944 virtual void Fl_Tiled_Image::copy(); <br>
945 virtual Fl_Image* Fl_Tiled_Image::copy(int w, int h);
947 \par
948 The \p copy() method creates a copy of the image. The second form
949 specifies the new size of the image - the image is resized using the
950 nearest-neighbor algorithm.
952 void Fl_Tiled_Image::draw(int x, int y, int w, int h, int ox, int oy);
954 \par
955 The \p draw() method draws the image object.
956 <tt>x,y,w,h</tt> indicates a destination rectangle.
957 <tt>ox,oy,w,h</tt> is a source rectangle. This source rectangle
958 is copied to the destination. The source rectangle may extend
959 outside the image, i.e. \p ox and \p oy may be
960 negative and \p w and \p h may be bigger than the
961 image, and this area is left unchanged.
963 void Fl_Tiled_Image::draw(int x, int y)
965 \par
966 Draws the image with the upper-left corner at <tt>x,y</tt>.
967 This is the same as doing \p draw(x,y,img->w(),img->h(),0,0).
969 \subsection ssect_Offscreen Offscreen Drawing
971 Sometimes it can be very useful to generate a complex drawing
972 in memory first and copy it to the screen at a later point in 
973 time. This technique can significantly reduce the amount of
974 repeated drawing. Offscreen drawing functions are declared in <FL/x.H>.
975 Fl_Double_Window uses offscreen rendering
976 to avoid flickering on systems that don't support 
977 double-buffering natively. 
979 Fl_Offscreen fl_create_offscreen(int w, int h)
981 \par
982 Create an RGB offscreen buffer with \p w*h pixels.
984 void fl_delete_offscreen(Fl_Offscreen)
986 \par
987 Delete a previously created offscreen buffer. All drawings are lost.
989 void fl_begin_offscreen(Fl_Offscreen)
991 \par
992 Send all subsequent drawing commands to this offscreen buffer. 
993 FLTK can draw into a buffer at any time. There is no need to wait for 
994 an Fl_Widget::draw() to occur.
996 void fl_end_offscreen()
998 \par
999 Quit sending drawing commands to this offscreen buffer.
1001 void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen osrc, int srcx, int srcy)
1003 \par
1004 Copy a rectangular area of the size \p w*h from \p srcx,srcy
1005 in the offscreen buffer into the current buffer at \p x,y.
1008 \htmlonly
1009 <hr>
1010 <table summary="navigation bar" width="100%" border="0">
1011 <tr>
1012   <td width="45%" align="LEFT">
1013     <a class="el" href="editor.html">
1014     [Prev]
1015     Designing a Simple Text Editor
1016     </a>
1017   </td>
1018   <td width="10%" align="CENTER">
1019     <a class="el" href="index.html">[Index]</a>
1020   </td>
1021   <td width="45%" align="RIGHT">
1022     <a class="el" href="events.html">
1023     Handling Events
1024     [Next]
1025     </a>
1026   </td>
1027 </tr>
1028 </table>
1029 \endhtmlonly