diff options
Diffstat (limited to 'FL/Fl_Help_View.H')
| -rw-r--r-- | FL/Fl_Help_View.H | 75 |
1 files changed, 60 insertions, 15 deletions
diff --git a/FL/Fl_Help_View.H b/FL/Fl_Help_View.H index a98e40ed0..aff5099c3 100644 --- a/FL/Fl_Help_View.H +++ b/FL/Fl_Help_View.H @@ -84,6 +84,59 @@ struct Fl_Help_Link }; /** Fl_Help_Target structure */ + +/* + * Fl_Help_View font stack opaque implementation + */ + +/** Fl_Help_View font stack element definition */ +struct Fl_Help_Font_Style { + Fl_Font f; ///< Font + Fl_Fontsize s; ///< Font Size + Fl_Color c; ///< Font Color + void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes + void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes + Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);} + Fl_Help_Font_Style(){} // For in table use +}; + +/** Fl_Help_View font stack definition */ +const size_t MAX_FL_HELP_FS_ELTS = 100; + +struct Fl_Help_Font_Stack { + /** font stack construction, initialize attributes.*/ + Fl_Help_Font_Stack() { + nfonts_ = 0; + } + + void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) { + nfonts_ = 0; + elts_[nfonts_].set(f, s, c); + fl_font(f, s); + fl_color(c); + } + /** Gets the top (current) elt on the stack */ + void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); } + /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */ + void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) { + if (nfonts_ < MAX_FL_HELP_FS_ELTS-1) nfonts_ ++; + elts_[nfonts_].set(f, s, c); + fl_font(f, s); fl_color(c); + } + /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */ + void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { + top(f, s, c); + fl_font(f, s); fl_color(c); + if (nfonts_ > 0) nfonts_ --; + } + /** Gets the current count of font style elts in the stack */ + size_t count() const {return nfonts_;} /// Gets the current number of fonts in the stack + +protected: + size_t nfonts_; ///< current number of fonts in stack + Fl_Help_Font_Style elts_[100]; ///< font eletments +}; + struct Fl_Help_Target { char name[32]; ///< Target name @@ -107,15 +160,11 @@ class FL_EXPORT Fl_Help_View : public Fl_Group //// Help viewer widget Fl_Font textfont_; ///< Default font for text Fl_Fontsize textsize_; ///< Default font size const char *value_; ///< HTML text value - + Fl_Help_Font_Stack fstack_; ///< font stack management int nblocks_, ///< Number of blocks/paragraphs ablocks_; ///< Allocated blocks Fl_Help_Block *blocks_; ///< Blocks - int nfonts_; ///< Number of fonts in stack - Fl_Font fonts_[100]; ///< Font stack - Fl_Fontsize font_sizes_[100]; ///< Font Size stack - Fl_Help_Func *link_; ///< Link transform function int nlinks_, ///< Number of links @@ -150,6 +199,12 @@ class FL_EXPORT Fl_Help_View : public Fl_Group //// Help viewer widget static Fl_Color hv_selection_color; static Fl_Color hv_selection_text_color; + + void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); } + void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);} + void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);} + void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);} + Fl_Help_Block *add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0); void add_link(const char *n, int xx, int yy, int ww, int hh); void add_target(const char *n, int yy); @@ -166,16 +221,6 @@ class FL_EXPORT Fl_Help_View : public Fl_Group //// Help viewer widget int get_length(const char *l); int handle(int); - void initfont(Fl_Font &f, Fl_Fontsize &s) { nfonts_ = 0; - fl_font(f = fonts_[0] = textfont_, - s = font_sizes_[0] = textsize_); } - void pushfont(Fl_Font f, Fl_Fontsize s) { if (nfonts_ < 99) nfonts_ ++; - fl_font(fonts_[nfonts_] = f, - font_sizes_[nfonts_] = s); } - void popfont(Fl_Font &f, Fl_Fontsize &s) { if (nfonts_ > 0) nfonts_ --; - fl_font(f = fonts_[nfonts_], - s = font_sizes_[nfonts_]); } - void hv_draw(const char *t, int x, int y); char begin_selection(); char extend_selection(); |
