aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/XmbFontImp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/XmbFontImp.cc')
-rw-r--r--src/FbTk/XmbFontImp.cc28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/FbTk/XmbFontImp.cc b/src/FbTk/XmbFontImp.cc
index 3ce913d..7613a40 100644
--- a/src/FbTk/XmbFontImp.cc
+++ b/src/FbTk/XmbFontImp.cc
@@ -189,10 +189,10 @@ bool XmbFontImp::load(const string &fontname) {
189 return true; 189 return true;
190} 190}
191 191
192void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const FbString &text, 192void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const char* text,
193 size_t len, int x, int y, FbTk::Orientation orient) { 193 size_t len, int x, int y, FbTk::Orientation orient) {
194 194
195 if (m_fontset == 0) 195 if (!text || !*text || m_fontset == 0)
196 return; 196 return;
197 197
198 if (orient == ROT0) { 198 if (orient == ROT0) {
@@ -200,13 +200,11 @@ void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const FbS
200 if (m_utf8mode) { 200 if (m_utf8mode) {
201 Xutf8DrawString(d.display(), d.drawable(), m_fontset, 201 Xutf8DrawString(d.display(), d.drawable(), m_fontset,
202 main_gc, x, y, 202 main_gc, x, y,
203 text.data(), len); 203 text, len);
204 } else 204 } else
205#endif //X_HAVE_UTF8_STRING 205#endif //X_HAVE_UTF8_STRING
206 { 206 {
207 string localestr = text; 207 std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, 0, len));
208 localestr.erase(len, string::npos);
209 localestr = FbStringUtil::FbStrToLocale(localestr);
210 XmbDrawString(d.display(), d.drawable(), m_fontset, 208 XmbDrawString(d.display(), d.drawable(), m_fontset,
211 main_gc, x, y, 209 main_gc, x, y,
212 localestr.data(), localestr.size()); 210 localestr.data(), localestr.size());
@@ -239,13 +237,11 @@ void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const FbS
239 if (m_utf8mode) { 237 if (m_utf8mode) {
240 Xutf8DrawString(dpy, canvas.drawable(), m_fontset, 238 Xutf8DrawString(dpy, canvas.drawable(), m_fontset,
241 font_gc.gc(), xpos, ypos, 239 font_gc.gc(), xpos, ypos,
242 text.data(), len); 240 text, len);
243 } else 241 } else
244#endif //X_HAVE_UTF8_STRING 242#endif //X_HAVE_UTF8_STRING
245 { 243 {
246 string localestr = text; 244 std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, 0, len));
247 localestr.erase(len, string::npos);
248 localestr = FbStringUtil::FbStrToLocale(localestr);
249 XmbDrawString(dpy, canvas.drawable(), m_fontset, 245 XmbDrawString(dpy, canvas.drawable(), m_fontset,
250 font_gc.gc(), xpos, ypos, 246 font_gc.gc(), xpos, ypos,
251 localestr.data(), localestr.size()); 247 localestr.data(), localestr.size());
@@ -277,25 +273,21 @@ void XmbFontImp::drawText(const FbDrawable &d, int screen, GC main_gc, const FbS
277 273
278} 274}
279 275
280unsigned int XmbFontImp::textWidth(const FbString &text, unsigned int len) const { 276unsigned int XmbFontImp::textWidth(const char* text, unsigned int len) const {
277
281 if (m_fontset == 0) 278 if (m_fontset == 0)
282 return 0; 279 return 0;
283 280
284 XRectangle ink, logical; 281 XRectangle ink, logical;
285#ifdef X_HAVE_UTF8_STRING 282#ifdef X_HAVE_UTF8_STRING
286 if (m_utf8mode) { 283 if (m_utf8mode) {
287 Xutf8TextExtents(m_fontset, text.data(), len, 284 Xutf8TextExtents(m_fontset, text, len, &ink, &logical);
288 &ink, &logical);
289 if (logical.width != 0) 285 if (logical.width != 0)
290 return logical.width; 286 return logical.width;
291 } 287 }
292#endif // X_HAVE_UTF8_STRING 288#endif // X_HAVE_UTF8_STRING
293 289
294 string localestr = text; 290 std::string localestr = FbStringUtil::FbStrToLocale(FbString(text, len));
295 if (len > localestr.length())
296 len = localestr.length();
297 localestr.erase(len, string::npos);
298 localestr = FbStringUtil::FbStrToLocale(localestr);
299 XmbTextExtents(m_fontset, localestr.data(), localestr.size(), 291 XmbTextExtents(m_fontset, localestr.data(), localestr.size(),
300 &ink, &logical); 292 &ink, &logical);
301 return logical.width; 293 return logical.width;