FLTK 1.3.0
|
00001 // 00002 // "$Id: fl_draw.H 8772 2011-06-02 08:06:09Z manolo $" 00003 // 00004 // Portable drawing function header file for the Fast Light Tool Kit (FLTK). 00005 // 00006 // Copyright 1998-2011 by Bill Spitzak and others. 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 // Library General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU Library General Public 00019 // License along with this library; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00021 // USA. 00022 // 00023 // Please report all bugs and problems on the following page: 00024 // 00025 // http://www.fltk.org/str.php 00026 // 00027 00033 #ifndef fl_draw_H 00034 #define fl_draw_H 00035 00036 #include <FL/x.H> // for Fl_Region 00037 #include <FL/Enumerations.H> // for the color names 00038 #include <FL/Fl_Window.H> // for fl_set_spot() 00039 #include <FL/Fl_Device.H> // for fl_graphics_driver 00040 00041 // Image class... 00042 class Fl_Image; 00043 00044 // Label flags... 00045 FL_EXPORT extern char fl_draw_shortcut; 00046 00051 // Colors: 00061 inline void fl_color(Fl_Color c) {fl_graphics_driver->color(c); } // select indexed color 00063 inline void fl_color(int c) {fl_color((Fl_Color)c);} 00074 inline void fl_color(uchar r, uchar g, uchar b) {fl_graphics_driver->color(r,g,b); } // select actual color 00079 inline Fl_Color fl_color() {return fl_graphics_driver->color();} 00085 // clip: 00091 inline void fl_push_clip(int x, int y, int w, int h) {fl_graphics_driver->push_clip(x,y,w,h); } 00100 #define fl_clip fl_push_clip 00101 00104 inline void fl_push_no_clip() {fl_graphics_driver->push_no_clip(); } 00112 inline void fl_pop_clip() {fl_graphics_driver->pop_clip(); } 00123 inline int fl_not_clipped(int x, int y, int w, int h) {return fl_graphics_driver->not_clipped(x,y,w,h); } 00135 inline int fl_clip_box(int x , int y, int w, int h, int& X, int& Y, int& W, int& H) 00136 {return fl_graphics_driver->clip_box(x,y,w,h,X,Y,W,H); } 00138 inline void fl_restore_clip() { fl_graphics_driver->restore_clip(); } 00145 inline void fl_clip_region(Fl_Region r) { fl_graphics_driver->clip_region(r); } 00149 inline Fl_Region fl_clip_region() { return fl_graphics_driver->clip_region(); } 00150 00151 00152 // points: 00156 inline void fl_point(int x, int y) { fl_graphics_driver->point(x,y); } 00157 00158 // line type: 00186 inline void fl_line_style(int style, int width=0, char* dashes=0) {fl_graphics_driver->line_style(style,width,dashes); } 00187 enum { 00188 FL_SOLID = 0, 00189 FL_DASH = 1, 00190 FL_DOT = 2, 00191 FL_DASHDOT = 3, 00192 FL_DASHDOTDOT = 4, 00193 00194 FL_CAP_FLAT = 0x100, 00195 FL_CAP_ROUND = 0x200, 00196 FL_CAP_SQUARE = 0x300, 00197 00198 FL_JOIN_MITER = 0x1000, 00199 FL_JOIN_ROUND = 0x2000, 00200 FL_JOIN_BEVEL = 0x3000 00201 }; 00202 00203 // rectangles tweaked to exactly fill the pixel rectangle: 00204 00210 inline void fl_rect(int x, int y, int w, int h) { fl_graphics_driver->rect(x,y,w,h); } 00211 00213 inline void fl_rect(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rect(x,y,w,h);} 00215 inline void fl_rectf(int x, int y, int w, int h) { fl_graphics_driver->rectf(x,y,w,h); } 00217 inline void fl_rectf(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rectf(x,y,w,h);} 00218 00225 /* note: doxygen comment here to avoid triplication in os-speciic files */ 00226 FL_EXPORT void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b); 00227 00228 // line segments: 00232 inline void fl_line(int x, int y, int x1, int y1) {fl_graphics_driver->line(x,y,x1,y1); } 00236 inline void fl_line(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->line(x,y,x1,y1,x2,y2); } 00237 00238 // closed line segments: 00242 inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->loop(x,y,x1,y1,x2,y2); } 00246 inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 00247 {fl_graphics_driver->loop(x,y,x1,y1,x2,y2,x3,y3); } 00248 00249 // filled polygons 00253 inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->polygon(x,y,x1,y1,x2,y2); } 00257 inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 00258 { fl_graphics_driver->polygon(x,y,x1,y1,x2,y2,x3,y3); } 00259 00260 // draw rectilinear lines, horizontal segment first: 00264 inline void fl_xyline(int x, int y, int x1) {fl_graphics_driver->xyline(x,y,x1);} 00268 inline void fl_xyline(int x, int y, int x1, int y2) {fl_graphics_driver->xyline(x,y,x1,y2);} 00273 inline void fl_xyline(int x, int y, int x1, int y2, int x3) {fl_graphics_driver->xyline(x,y,x1,y2,x3);} 00274 00275 // draw rectilinear lines, vertical segment first: 00279 inline void fl_yxline(int x, int y, int y1) {fl_graphics_driver->yxline(x,y,y1);} 00283 inline void fl_yxline(int x, int y, int y1, int x2) {fl_graphics_driver->yxline(x,y,y1,x2);} 00288 inline void fl_yxline(int x, int y, int y1, int x2, int y3) {fl_graphics_driver->yxline(x,y,y1,x2,y3);} 00289 00290 // circular lines and pie slices (code in fl_arci.C): 00313 inline void fl_arc(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->arc(x,y,w,h,a1,a2); } 00326 inline void fl_pie(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->pie(x,y,w,h,a1,a2); } 00328 FL_EXPORT void fl_chord(int x, int y, int w, int h, double a1, double a2); // nyi 00329 00330 // scalable drawing code (code in fl_vertex.C and fl_arc.C): 00335 inline void fl_push_matrix() { fl_graphics_driver->push_matrix(); } 00339 inline void fl_pop_matrix() { fl_graphics_driver->pop_matrix(); } 00344 inline void fl_scale(double x, double y) { fl_graphics_driver->scale(x, y); } 00349 inline void fl_scale(double x) { fl_graphics_driver->scale(x, x); } 00354 inline void fl_translate(double x, double y) { fl_graphics_driver->translate(x, y); } 00359 inline void fl_rotate(double d) { fl_graphics_driver->rotate(d); } 00366 inline void fl_mult_matrix(double a, double b, double c, double d, double x,double y) 00367 { fl_graphics_driver->mult_matrix(a, b, c, d, x, y); } 00371 inline void fl_begin_points() {fl_graphics_driver->begin_points(); } 00375 inline void fl_begin_line() {fl_graphics_driver->begin_line(); } 00379 inline void fl_begin_loop() {fl_graphics_driver->begin_loop(); } 00383 inline void fl_begin_polygon() {fl_graphics_driver->begin_polygon(); } 00388 inline void fl_vertex(double x, double y) {fl_graphics_driver->vertex(x,y); } 00397 inline void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3) 00398 {fl_graphics_driver->curve(X0,Y0,X1,Y1,X2,Y2,X3,Y3); } 00407 inline void fl_arc(double x, double y, double r, double start, double end) {fl_graphics_driver->arc(x,y,r,start,end); } 00415 inline void fl_circle(double x, double y, double r) {fl_graphics_driver->circle(x,y,r); } 00419 inline void fl_end_points() {fl_graphics_driver->end_points(); } 00423 inline void fl_end_line() {fl_graphics_driver->end_line(); } 00427 inline void fl_end_loop() {fl_graphics_driver->end_loop(); } 00431 inline void fl_end_polygon() {fl_graphics_driver->end_polygon(); } 00446 inline void fl_begin_complex_polygon() {fl_graphics_driver->begin_complex_polygon(); } 00453 inline void fl_gap() {fl_graphics_driver->gap(); } 00457 inline void fl_end_complex_polygon() {fl_graphics_driver->end_complex_polygon(); } 00458 // get and use transformed positions: 00463 inline double fl_transform_x(double x, double y) {return fl_graphics_driver->transform_x(x, y); } 00468 inline double fl_transform_y(double x, double y) {return fl_graphics_driver->transform_y(x, y); } 00473 inline double fl_transform_dx(double x, double y) {return fl_graphics_driver->transform_dx(x, y); } 00478 inline double fl_transform_dy(double x, double y) {return fl_graphics_driver->transform_dy(x, y); } 00483 inline void fl_transformed_vertex(double xf, double yf) {fl_graphics_driver->transformed_vertex(xf,yf); } 00488 /* NOTE: doxygen comments here to avoid triplication in os-specific sources */ 00489 00490 // Fonts: 00500 inline void fl_font(Fl_Font face, Fl_Fontsize size) { fl_graphics_driver->font(face,size); } 00501 00506 inline Fl_Font fl_font() {return fl_graphics_driver->font();} 00511 inline Fl_Fontsize fl_size() {return fl_graphics_driver->size();} 00512 00513 // information you can get about the current font: 00518 inline int fl_height() {return fl_graphics_driver->height();} 00519 FL_EXPORT int fl_height(int font, int size); 00524 inline int fl_descent() {return fl_graphics_driver->descent();} 00526 FL_EXPORT double fl_width(const char* txt); 00528 inline double fl_width(const char* txt, int n) {return fl_graphics_driver->width(txt, n);} 00532 inline double fl_width(unsigned int c) {return fl_graphics_driver->width(c);} 00541 FL_EXPORT void fl_text_extents(const char*, int& dx, int& dy, int& w, int& h); // NO fltk symbol expansion will be performed 00545 inline void fl_text_extents(const char *t, int n, int& dx, int& dy, int& w, int& h) 00546 {fl_graphics_driver->text_extents(t, n, dx, dy, w, h);} 00547 00548 // font encoding: 00549 // Note: doxygen comments here to avoid duplication for os-sepecific cases 00556 FL_EXPORT const char *fl_latin1_to_local(const char *t, int n=-1); 00563 FL_EXPORT const char *fl_local_to_latin1(const char *t, int n=-1); 00570 FL_EXPORT const char *fl_mac_roman_to_local(const char *t, int n=-1); 00577 FL_EXPORT const char *fl_local_to_mac_roman(const char *t, int n=-1); 00592 FL_EXPORT void fl_draw(const char* str, int x, int y); 00600 FL_EXPORT void fl_draw(int angle, const char* str, int x, int y); 00604 inline void fl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->draw(str,n,x,y); } 00609 inline void fl_draw(int angle,const char* str, int n, int x, int y) {fl_graphics_driver->draw(angle,str,n,x,y); } 00613 inline void fl_rtl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->rtl_draw(str,n,x,y); } 00614 FL_EXPORT void fl_measure(const char* str, int& x, int& y, 00615 int draw_symbols = 1); 00616 FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h, 00617 Fl_Align align, 00618 Fl_Image* img=0, int draw_symbols = 1); 00619 FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h, 00620 Fl_Align align, 00621 void (*callthis)(const char *,int,int,int), 00622 Fl_Image* img=0, int draw_symbols = 1); 00623 00624 // boxtypes: 00625 FL_EXPORT void fl_frame(const char* s, int x, int y, int w, int h); 00626 FL_EXPORT void fl_frame2(const char* s, int x, int y, int w, int h); 00627 FL_EXPORT void fl_draw_box(Fl_Boxtype, int x, int y, int w, int h, Fl_Color); 00628 00629 // images: 00630 00666 inline void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) 00667 { fl_graphics_driver->draw_image(buf, X, Y, W, H, D, L); } 00668 00673 inline void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) 00674 { fl_graphics_driver->draw_image_mono(buf, X, Y, W, H, D, L); } 00675 00709 inline void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) 00710 { fl_graphics_driver->draw_image(cb, data, X, Y, W, H, D); } 00711 00716 FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1); 00717 00723 /* note: doxygen comment here to avoid triplication in os-speciic files */ 00724 FL_EXPORT char fl_can_do_alpha_blending(); 00725 00743 /* note: doxygen comment here to avoid triplication in os-speciic files */ 00744 FL_EXPORT uchar *fl_read_image(uchar *p,int X,int Y,int W,int H,int alpha=0); 00745 00746 // pixmaps: 00747 FL_EXPORT int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color=FL_GRAY); 00748 FL_EXPORT int fl_draw_pixmap(const char* const* cdata, int x,int y,Fl_Color=FL_GRAY); 00749 FL_EXPORT int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h); 00750 FL_EXPORT int fl_measure_pixmap(const char* const* cdata, int &w, int &h); 00751 00752 // other: 00753 FL_EXPORT void fl_scroll(int X, int Y, int W, int H, int dx, int dy, 00754 void (*draw_area)(void*, int,int,int,int), void* data); 00755 FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut); 00756 FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut, const char **eom); 00757 FL_EXPORT unsigned int fl_old_shortcut(const char* s); 00758 FL_EXPORT void fl_overlay_rect(int x,int y,int w,int h); 00759 FL_EXPORT void fl_overlay_clear(); 00760 FL_EXPORT void fl_cursor(Fl_Cursor, Fl_Color fg=FL_BLACK, Fl_Color bg=FL_WHITE); 00761 FL_EXPORT const char* fl_expand_text(const char* from, char* buf, int maxbuf, 00762 double maxw, int& n, double &width, 00763 int wrap, int draw_symbols = 0); 00764 00765 // XIM: 00767 FL_EXPORT void fl_set_status(int X, int Y, int W, int H); 00769 FL_EXPORT void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win=0); 00771 FL_EXPORT void fl_reset_spot(void); 00772 00773 00774 00775 // XForms symbols: 00776 FL_EXPORT int fl_draw_symbol(const char* label,int x,int y,int w,int h, Fl_Color); 00777 FL_EXPORT int fl_add_symbol(const char* name, void (*drawit)(Fl_Color), int scalable); 00780 #endif 00781 00782 // 00783 // End of "$Id: fl_draw.H 8772 2011-06-02 08:06:09Z manolo $". 00784 //