utf-8 fix, a fixed patch from Sergey Kuleshov
This commit is contained in:
parent
52cb375886
commit
41249b77fb
2 changed files with 48 additions and 34 deletions
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
//$Id: XftFontImp.cc,v 1.2 2002/12/01 13:42:15 rathnor Exp $
|
//$Id: XftFontImp.cc,v 1.3 2004/08/10 11:57:35 fluxgen Exp $
|
||||||
|
|
||||||
#include "XftFontImp.hh"
|
#include "XftFontImp.hh"
|
||||||
#include "App.hh"
|
#include "App.hh"
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif //HAVE_CONFIG_H
|
#endif //HAVE_CONFIG_H
|
||||||
|
|
||||||
namespace FbTk {
|
namespace FbTk {
|
||||||
|
|
||||||
XftFontImp::XftFontImp(const char *name, bool utf8):m_xftfont(0),
|
XftFontImp::XftFontImp(const char *name, bool utf8):m_xftfont(0),
|
||||||
|
@ -93,20 +94,33 @@ void XftFontImp::drawText(Drawable w, int screen, GC gc, const char *text, size_
|
||||||
// draw string
|
// draw string
|
||||||
#ifdef HAVE_XFT_UTF8_STRING
|
#ifdef HAVE_XFT_UTF8_STRING
|
||||||
if (m_utf8mode) {
|
if (m_utf8mode) {
|
||||||
XftDrawStringUtf8(draw,
|
// check the string size,
|
||||||
&xftcolor,
|
// if the size is zero we use the XftDrawString8 function instead.
|
||||||
m_xftfont,
|
XGlyphInfo ginfo;
|
||||||
x, y,
|
XftTextExtentsUtf8(App::instance()->display(),
|
||||||
(XftChar8 *)(text), len);
|
|
||||||
} else
|
|
||||||
#endif // HAVE_XFT_UTF8_STRING
|
|
||||||
{
|
|
||||||
XftDrawString8(draw,
|
|
||||||
&xftcolor,
|
|
||||||
m_xftfont,
|
m_xftfont,
|
||||||
x, y,
|
(XftChar8 *)text, len,
|
||||||
(XftChar8 *)(text), len);
|
&ginfo);
|
||||||
}
|
if (ginfo.xOff != 0) {
|
||||||
|
XftDrawStringUtf8(draw,
|
||||||
|
&xftcolor,
|
||||||
|
m_xftfont,
|
||||||
|
x, y,
|
||||||
|
(XftChar8 *)(text), len);
|
||||||
|
XftColorFree(disp, DefaultVisual(disp, screen),
|
||||||
|
DefaultColormap(disp, screen), &xftcolor);
|
||||||
|
XftDrawDestroy(draw);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // HAVE_XFT_UTF8_STRING
|
||||||
|
|
||||||
|
XftDrawString8(draw,
|
||||||
|
&xftcolor,
|
||||||
|
m_xftfont,
|
||||||
|
x, y,
|
||||||
|
(XftChar8 *)(text), len);
|
||||||
|
|
||||||
|
|
||||||
XftColorFree(disp, DefaultVisual(disp, screen),
|
XftColorFree(disp, DefaultVisual(disp, screen),
|
||||||
DefaultColormap(disp, screen), &xftcolor);
|
DefaultColormap(disp, screen), &xftcolor);
|
||||||
|
@ -116,21 +130,27 @@ void XftFontImp::drawText(Drawable w, int screen, GC gc, const char *text, size_
|
||||||
unsigned int XftFontImp::textWidth(const char * const text, unsigned int len) const {
|
unsigned int XftFontImp::textWidth(const char * const text, unsigned int len) const {
|
||||||
if (m_xftfont == 0)
|
if (m_xftfont == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
XGlyphInfo ginfo;
|
XGlyphInfo ginfo;
|
||||||
|
|
||||||
#ifdef HAVE_XFT_UTF8_STRING
|
#ifdef HAVE_XFT_UTF8_STRING
|
||||||
if (m_utf8mode) {
|
if (m_utf8mode) {
|
||||||
XftTextExtentsUtf8(App::instance()->display(),
|
XftTextExtentsUtf8(App::instance()->display(),
|
||||||
m_xftfont,
|
m_xftfont,
|
||||||
(XftChar8 *)text, len,
|
(XftChar8 *)text, len,
|
||||||
&ginfo);
|
&ginfo);
|
||||||
} else
|
if (ginfo.xOff != 0)
|
||||||
|
return ginfo.xOff;
|
||||||
|
|
||||||
|
// the utf8 failed, try normal extents
|
||||||
|
}
|
||||||
#endif //HAVE_XFT_UTF8_STRING
|
#endif //HAVE_XFT_UTF8_STRING
|
||||||
{
|
|
||||||
XftTextExtents8(App::instance()->display(),
|
XftTextExtents8(App::instance()->display(),
|
||||||
m_xftfont,
|
m_xftfont,
|
||||||
(XftChar8 *)text, len,
|
(XftChar8 *)text, len,
|
||||||
&ginfo);
|
&ginfo);
|
||||||
}
|
|
||||||
return ginfo.xOff;
|
return ginfo.xOff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: XmbFontImp.cc,v 1.7 2004/02/10 19:03:42 fluxgen Exp $
|
// $Id: XmbFontImp.cc,v 1.8 2004/08/10 11:57:35 fluxgen Exp $
|
||||||
|
|
||||||
#include "XmbFontImp.hh"
|
#include "XmbFontImp.hh"
|
||||||
|
|
||||||
|
@ -186,13 +186,6 @@ XFontSet createFontSet(const char *fontname) {
|
||||||
namespace FbTk {
|
namespace FbTk {
|
||||||
|
|
||||||
XmbFontImp::XmbFontImp(const char *filename, bool utf8):m_fontset(0), m_utf8mode(utf8) {
|
XmbFontImp::XmbFontImp(const char *filename, bool utf8):m_fontset(0), m_utf8mode(utf8) {
|
||||||
#ifdef DEBUG
|
|
||||||
#ifdef X_HAVE_UTF8_STRING
|
|
||||||
cerr<<"Using utf8 = "<<utf8<<endl;
|
|
||||||
#else // X_HAVE_UTF8_STRING
|
|
||||||
cerr<<"Using uft8 = false"<<endl;
|
|
||||||
#endif //X_HAVE_UTF8_STRING
|
|
||||||
#endif // DEBUG
|
|
||||||
if (filename != 0)
|
if (filename != 0)
|
||||||
load(filename);
|
load(filename);
|
||||||
}
|
}
|
||||||
|
@ -238,18 +231,19 @@ void XmbFontImp::drawText(Drawable w, int screen, GC gc, const char *text,
|
||||||
unsigned int XmbFontImp::textWidth(const char * const text, unsigned int len) const {
|
unsigned int XmbFontImp::textWidth(const char * const text, unsigned int len) const {
|
||||||
if (m_fontset == 0)
|
if (m_fontset == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
XRectangle ink, logical;
|
XRectangle ink, logical;
|
||||||
#ifdef X_HAVE_UTF8_STRING
|
#ifdef X_HAVE_UTF8_STRING
|
||||||
if (m_utf8mode) {
|
if (m_utf8mode) {
|
||||||
Xutf8TextExtents(m_fontset, text, len,
|
Xutf8TextExtents(m_fontset, text, len,
|
||||||
&ink, &logical);
|
&ink, &logical);
|
||||||
} else
|
if (logical.width != 0)
|
||||||
|
return logical.width;
|
||||||
|
}
|
||||||
#endif // X_HAVE_UTF8_STRING
|
#endif // X_HAVE_UTF8_STRING
|
||||||
{
|
|
||||||
XmbTextExtents(m_fontset, text, len,
|
|
||||||
&ink, &logical);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
XmbTextExtents(m_fontset, text, len,
|
||||||
|
&ink, &logical);
|
||||||
return logical.width;
|
return logical.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue