diff options
-rw-r--r-- | src/FbTk/XFontImp.cc | 23 | ||||
-rw-r--r-- | src/FbTk/XFontImp.hh | 2 | ||||
-rw-r--r-- | src/FbTk/XmbFontImp.cc | 4 |
3 files changed, 11 insertions, 18 deletions
diff --git a/src/FbTk/XFontImp.cc b/src/FbTk/XFontImp.cc index fa88593..73ae384 100644 --- a/src/FbTk/XFontImp.cc +++ b/src/FbTk/XFontImp.cc | |||
@@ -102,14 +102,14 @@ void XFontImp::drawText(const FbDrawable &w, int screen, GC gc, const char* text | |||
102 | if (!text || !*text || m_fontstruct == 0) | 102 | if (!text || !*text || m_fontstruct == 0) |
103 | return; | 103 | return; |
104 | 104 | ||
105 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, len)); | ||
106 | |||
105 | // use roated font functions? | 107 | // use roated font functions? |
106 | if (orient != ROT0 && validOrientation(orient)) { | 108 | if (orient != ROT0 && validOrientation(orient)) { |
107 | drawRotText(w.drawable(), screen, gc, text, len, x, y, orient); | 109 | drawRotText(w.drawable(), screen, gc, localestr.c_str(), localestr.size(), x, y, orient); |
108 | return; | 110 | return; |
109 | } | 111 | } |
110 | 112 | ||
111 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, 0, len)); | ||
112 | |||
113 | XSetFont(w.display(), gc, m_fontstruct->fid); | 113 | XSetFont(w.display(), gc, m_fontstruct->fid); |
114 | XDrawString(w.display(), w.drawable(), gc, x, y, localestr.data(), localestr.size()); | 114 | XDrawString(w.display(), w.drawable(), gc, x, y, localestr.data(), localestr.size()); |
115 | } | 115 | } |
@@ -330,7 +330,10 @@ void XFontImp::freeRotFont(XRotFontStruct *rotfont) { | |||
330 | rotfont = 0; | 330 | rotfont = 0; |
331 | } | 331 | } |
332 | 332 | ||
333 | void XFontImp::drawRotText(Drawable w, int screen, GC gc, const FbString &text, size_t len, int x, int y, FbTk::Orientation orient) const { | 333 | void XFontImp::drawRotText(Drawable w, int screen, GC gc, const char* text, size_t len, int x, int y, FbTk::Orientation orient) const { |
334 | |||
335 | if (!text || !*text || len<1) | ||
336 | return; | ||
334 | 337 | ||
335 | Display *dpy = App::instance()->display(); | 338 | Display *dpy = App::instance()->display(); |
336 | static GC my_gc = 0; | 339 | static GC my_gc = 0; |
@@ -338,27 +341,17 @@ void XFontImp::drawRotText(Drawable w, int screen, GC gc, const FbString &text, | |||
338 | 341 | ||
339 | XRotFontStruct *rotfont = m_rotfonts[orient]; | 342 | XRotFontStruct *rotfont = m_rotfonts[orient]; |
340 | 343 | ||
341 | if (text.empty() || len<1) | ||
342 | return; | ||
343 | |||
344 | if (my_gc == 0) | 344 | if (my_gc == 0) |
345 | my_gc = XCreateGC(dpy, w, 0, 0); | 345 | my_gc = XCreateGC(dpy, w, 0, 0); |
346 | 346 | ||
347 | XCopyGC(dpy, gc, GCForeground|GCBackground, my_gc); | 347 | XCopyGC(dpy, gc, GCForeground|GCBackground, my_gc); |
348 | 348 | ||
349 | // vertical or upside down | 349 | // vertical or upside down |
350 | |||
351 | XSetFillStyle(dpy, my_gc, FillStippled); | 350 | XSetFillStyle(dpy, my_gc, FillStippled); |
352 | string localestr = text; | ||
353 | localestr.erase(len, string::npos); | ||
354 | localestr = FbStringUtil::FbStrToLocale(localestr); | ||
355 | const char *ctext = localestr.data(); | ||
356 | len = localestr.size(); | ||
357 | |||
358 | 351 | ||
359 | // loop through each character in texting | 352 | // loop through each character in texting |
360 | for (size_t i = 0; i<len; i++) { | 353 | for (size_t i = 0; i<len; i++) { |
361 | ichar = ctext[i]-32; | 354 | ichar = text[i]-32; |
362 | 355 | ||
363 | // make sure it's a printing character | 356 | // make sure it's a printing character |
364 | if (ichar >= 0 && ichar<95) { | 357 | if (ichar >= 0 && ichar<95) { |
diff --git a/src/FbTk/XFontImp.hh b/src/FbTk/XFontImp.hh index ccebbb7..600bb68 100644 --- a/src/FbTk/XFontImp.hh +++ b/src/FbTk/XFontImp.hh | |||
@@ -72,7 +72,7 @@ private: | |||
72 | void rotate(FbTk::Orientation orient); | 72 | void rotate(FbTk::Orientation orient); |
73 | 73 | ||
74 | void freeRotFont(XRotFontStruct * rotfont); | 74 | void freeRotFont(XRotFontStruct * rotfont); |
75 | void drawRotText(Drawable w, int screen, GC gc, const FbString &text, size_t len, int x, int y, FbTk::Orientation orient) const; | 75 | void drawRotText(Drawable w, int screen, GC gc, const char* text, size_t len, int x, int y, FbTk::Orientation orient) const; |
76 | 76 | ||
77 | XRotFontStruct *m_rotfonts[4]; ///< rotated font structure (only 3 used) | 77 | XRotFontStruct *m_rotfonts[4]; ///< rotated font structure (only 3 used) |
78 | bool m_rotfonts_loaded[4]; // whether we've tried yet | 78 | bool m_rotfonts_loaded[4]; // whether we've tried yet |
diff --git a/src/FbTk/XmbFontImp.cc b/src/FbTk/XmbFontImp.cc index 7613a40..8f2bdf9 100644 --- a/src/FbTk/XmbFontImp.cc +++ b/src/FbTk/XmbFontImp.cc | |||
@@ -204,7 +204,7 @@ void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const cha | |||
204 | } else | 204 | } else |
205 | #endif //X_HAVE_UTF8_STRING | 205 | #endif //X_HAVE_UTF8_STRING |
206 | { | 206 | { |
207 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, 0, len)); | 207 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, len)); |
208 | XmbDrawString(d.display(), d.drawable(), m_fontset, | 208 | XmbDrawString(d.display(), d.drawable(), m_fontset, |
209 | main_gc, x, y, | 209 | main_gc, x, y, |
210 | localestr.data(), localestr.size()); | 210 | localestr.data(), localestr.size()); |
@@ -241,7 +241,7 @@ void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const cha | |||
241 | } else | 241 | } else |
242 | #endif //X_HAVE_UTF8_STRING | 242 | #endif //X_HAVE_UTF8_STRING |
243 | { | 243 | { |
244 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, 0, len)); | 244 | std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, len)); |
245 | XmbDrawString(dpy, canvas.drawable(), m_fontset, | 245 | XmbDrawString(dpy, canvas.drawable(), m_fontset, |
246 | font_gc.gc(), xpos, ypos, | 246 | font_gc.gc(), xpos, ypos, |
247 | localestr.data(), localestr.size()); | 247 | localestr.data(), localestr.size()); |