diff options
| -rw-r--r-- | FL/Fl_Screen_Driver.H | 2 | ||||
| -rw-r--r-- | src/Fl_Text_Display.cxx | 18 | ||||
| -rw-r--r-- | src/drivers/X11/Fl_X11_Screen_Driver.H | 1 | ||||
| -rw-r--r-- | src/drivers/X11/Fl_X11_Screen_Driver.cxx | 8 |
4 files changed, 16 insertions, 13 deletions
diff --git a/FL/Fl_Screen_Driver.H b/FL/Fl_Screen_Driver.H index e97a7fb21..659caedf7 100644 --- a/FL/Fl_Screen_Driver.H +++ b/FL/Fl_Screen_Driver.H @@ -110,6 +110,8 @@ public: virtual int dnd(int use_selection = 0) {return 0;} // null means no platform-specific key bindings for Fl_Text_Editor Fl_Text_Editor::Key_Binding *text_editor_extra_key_bindings; + // default implementation may be enough + virtual int text_display_can_leak() { return 0; } }; diff --git a/src/Fl_Text_Display.cxx b/src/Fl_Text_Display.cxx index d3967b70d..dc86319aa 100644 --- a/src/Fl_Text_Display.cxx +++ b/src/Fl_Text_Display.cxx @@ -33,12 +33,6 @@ #include <FL/Fl_Window.H> #include <FL/Fl_Screen_Driver.H> -#if defined(WIN32) || defined(__APPLE__) // PORTME: Fl_Screen_Driver - platform editor feel -#elif defined(FL_PORTING) -# pragma message "FL_PORTING: look out for some code that visualizes character composing" -#else -#endif - #undef min #undef max @@ -2206,18 +2200,16 @@ void Fl_Text_Display::draw_string(int style, if (!(style & BG_ONLY_MASK)) { fl_color( foreground ); fl_font( font, fsize ); -#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT // PORTME: Fl_Graphics_Driver - platform editor feel (fix this: fonts should not leak!) - // makes sure antialiased ÄÖÜ do not leak on line above - fl_push_clip(X, Y, toX - X, mMaxsize); -#endif + // Make sure antialiased ÄÖÜ do not leak on line above: + // on X11+Xft the antialiased part of characters such as ÄÖÜ leak on the bottom pixel of the line above + static int can_leak = Fl::screen_driver()->text_display_can_leak(); + if (can_leak) fl_push_clip(X, Y, toX - X, mMaxsize); fl_draw( string, nChars, X, Y + mMaxsize - fl_descent()); if (Fl::screen_driver()->has_marked_text() && Fl::compose_state && (style & PRIMARY_MASK)) { fl_color( fl_color_average(foreground, background, 0.6) ); fl_line(X, Y + mMaxsize - 1, X + fl_width(string, nChars), Y + mMaxsize - 1); } -#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT // PORTME: platform editor feel - fl_pop_clip(); -#endif + if (can_leak) fl_pop_clip(); } // CET - FIXME diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.H b/src/drivers/X11/Fl_X11_Screen_Driver.H index 0cfe6311a..2f89eaabf 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.H +++ b/src/drivers/X11/Fl_X11_Screen_Driver.H @@ -76,6 +76,7 @@ public: virtual int dnd(int unused); virtual int compose(int &del); virtual void compose_reset(); + virtual int text_display_can_leak(); }; diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index 03981271c..530e18e4a 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -628,6 +628,14 @@ void Fl_X11_Screen_Driver::compose_reset() if (fl_xim_ic) XmbResetIC(fl_xim_ic); } +int Fl_X11_Screen_Driver::text_display_can_leak() { +#if USE_XFT + return 1; +#else + return 0; +#endif +} + // // End of "$Id$". // |
