summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Screen_Driver.H2
-rw-r--r--src/Fl_Text_Display.cxx18
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.H1
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.cxx8
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$".
//