From 34716f86a02b71aa210f998dd7be48bc07550199 Mon Sep 17 00:00:00 2001 From: Greg Ercolano Date: Wed, 16 May 2012 23:19:37 +0000 Subject: [PATCH] Added three methods and dox to Fl_Tooltip: margin_width() -- controls margins around tooltip's text margin_height() -- controls margins above and below tooltip's text wrap_width() -- controls maximum width of text before wordwrapping is enforced These are read-only for the current release, and read/write as an ABI feature. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9510 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/Fl_Tooltip.H | 28 ++++++++++++++++++++++++++ documentation/src/tooltip-options.png | Bin 0 -> 6625 bytes src/Fl_Tooltip.cxx | 20 ++++++++++++------ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 documentation/src/tooltip-options.png diff --git a/FL/Fl_Tooltip.H b/FL/Fl_Tooltip.H index ca631b327..0378aa80b 100644 --- a/FL/Fl_Tooltip.H +++ b/FL/Fl_Tooltip.H @@ -28,6 +28,10 @@ /** The Fl_Tooltip class provides tooltip support for all FLTK widgets. It contains only static methods. + + \image html tooltip-options.png "Fl_Tooltip Options" + \image latex src/tooltip-options.png "Fl_Tooltip Options" width=6cm + */ class FL_EXPORT Fl_Tooltip { public: @@ -74,6 +78,25 @@ public: static Fl_Color textcolor() { return textcolor_; } /** Sets the color of the text in the tooltip. The default is black. */ static void textcolor(Fl_Color c) { textcolor_ = c; } +#if FLTK_ABI_VERSION >= 10302 + /** Gets the amount of extra space left/right of the tooltip's text. Default is 3. */ + static int margin_width() { return margin_width_; } + /** Sets the amount of extra space left/right of the tooltip's text. Default is 3. */ + static void margin_width(int v) { margin_width_ = v; } + /** Gets the amount of extra space above and below the tooltip's text. Default is 3. */ + static int margin_height() { return margin_height_; } + /** Sets the amount of extra space above and below the tooltip's text. Default is 3. */ + static void margin_height(int v) { margin_height_ = v; } + /** Gets the maximum width for tooltip's text before it word wraps. Default is 400. */ + static int wrap_width() { return wrap_width_; } + /** Sets the maximum width for tooltip's text before it word wraps. Default is 400. */ + static void wrap_width(int v) { wrap_width_ = v; } +#else + static int margin_width() { return 3; } + static int margin_height() { return 3; } + static int wrap_width() { return 400; } +#endif + #ifdef __APPLE__ // the unique tooltip window static Fl_Window* current_window(void); @@ -96,6 +119,11 @@ private: static Fl_Font font_; static Fl_Fontsize size_; static Fl_Widget* widget_; //!< Keeps track of the current target widget +#if FLTK_ABI_VERSION >= 10302 + static int margin_width_; //!< distance around tooltip text left+right + static int margin_height_; //!< distance around tooltip text top+bottom + static int wrap_width_; //!< maximum width of tooltip text before it word wraps +#endif }; #endif diff --git a/documentation/src/tooltip-options.png b/documentation/src/tooltip-options.png new file mode 100644 index 0000000000000000000000000000000000000000..f742b72cea1e5aa5b87d9d52c03f3ae5e7895795 GIT binary patch literal 6625 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 aK2mUq`ZywOo%rtwiH-(Dz4ESY)c*h{FPSC) literal 0 HcmV?d00001 diff --git a/src/Fl_Tooltip.cxx b/src/Fl_Tooltip.cxx index b59cec09c..670c7b8e7 100644 --- a/src/Fl_Tooltip.cxx +++ b/src/Fl_Tooltip.cxx @@ -31,8 +31,11 @@ Fl_Color Fl_Tooltip::color_ = fl_color_cube(FL_NUM_RED - 1, Fl_Color Fl_Tooltip::textcolor_ = FL_BLACK; Fl_Font Fl_Tooltip::font_ = FL_HELVETICA; Fl_Fontsize Fl_Tooltip::size_ = -1; - -#define MAX_WIDTH 400 +#if FLTK_ABI_VERSION >= 10302 +int Fl_Tooltip::margin_width_ = 3; +int Fl_Tooltip::margin_height_ = 3; +int Fl_Tooltip::wrap_width_ = 400; +#endif static const char* tip; /** @@ -70,10 +73,11 @@ Fl_Window *Fl_Tooltip::current_window(void) void Fl_TooltipBox::layout() { fl_font(Fl_Tooltip::font(), Fl_Tooltip::size()); - int ww, hh; - ww = MAX_WIDTH; + int ww = Fl_Tooltip::wrap_width(); + int hh; fl_measure(tip, ww, hh, FL_ALIGN_LEFT|FL_ALIGN_WRAP|FL_ALIGN_INSIDE); - ww += 6; hh += 6; + ww += (Fl_Tooltip::margin_width() * 2); + hh += (Fl_Tooltip::margin_height() * 2); // find position on the screen of the widget: int ox = Fl::event_x_root(); @@ -100,7 +104,11 @@ void Fl_TooltipBox::draw() { draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Tooltip::color()); fl_color(Fl_Tooltip::textcolor()); fl_font(Fl_Tooltip::font(), Fl_Tooltip::size()); - fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP)); + int X = Fl_Tooltip::margin_width(); + int Y = Fl_Tooltip::margin_height(); + int W = w() - (Fl_Tooltip::margin_width()*2); + int H = h() - (Fl_Tooltip::margin_height()*2); + fl_draw(tip, X, Y, W, H, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP)); } static char recent_tooltip;