summaryrefslogtreecommitdiffstats
path: root/xrdp/xrdp_painter.c
diff options
context:
space:
mode:
authorjsorg71 <jsorg71>2007-09-23 06:47:21 +0000
committerjsorg71 <jsorg71>2007-09-23 06:47:21 +0000
commitd1d5aac19c4bd961aa4e4a85e37b7f8a31992a24 (patch)
tree98454ce06bb0a12d77430a01036124340803e752 /xrdp/xrdp_painter.c
parentef18f927df1c8a4a2ab9b37cbcca0b06efcf8977 (diff)
downloadxrdp-proprietary-d1d5aac19c4bd961aa4e4a85e37b7f8a31992a24.tar.gz
xrdp-proprietary-d1d5aac19c4bd961aa4e4a85e37b7f8a31992a24.zip
unicode
Diffstat (limited to 'xrdp/xrdp_painter.c')
-rw-r--r--xrdp/xrdp_painter.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/xrdp/xrdp_painter.c b/xrdp/xrdp_painter.c
index b266768b..7fb23621 100644
--- a/xrdp/xrdp_painter.c
+++ b/xrdp/xrdp_painter.c
@@ -182,6 +182,7 @@ xrdp_painter_text_width(struct xrdp_painter* self, char* text)
int rv;
int len;
struct xrdp_font_char* font_item;
+ twchar* wstr;
xrdp_painter_font_needed(self);
if (text == 0)
@@ -189,12 +190,15 @@ xrdp_painter_text_width(struct xrdp_painter* self, char* text)
return 0;
}
rv = 0;
- len = g_strlen(text);
+ len = g_mbstowcs(0, text, 0);
+ wstr = (twchar*)g_malloc((len + 2) * sizeof(twchar), 0);
+ g_mbstowcs(wstr, text, len + 1);
for (index = 0; index < len; index++)
{
- font_item = self->font->font_items + (unsigned char)text[index];
+ font_item = self->font->font_items + wstr[index];
rv = rv + font_item->incby;
}
+ g_free(wstr);
return rv;
}
@@ -206,6 +210,7 @@ xrdp_painter_text_height(struct xrdp_painter* self, char* text)
int rv;
int len;
struct xrdp_font_char* font_item;
+ twchar* wstr;
xrdp_painter_font_needed(self);
if (text == 0)
@@ -213,12 +218,15 @@ xrdp_painter_text_height(struct xrdp_painter* self, char* text)
return 0;
}
rv = 0;
- len = g_strlen(text);
+ len = g_mbstowcs(0, text, 0);
+ wstr = (twchar*)g_malloc((len + 2) * sizeof(twchar), 0);
+ g_mbstowcs(wstr, text, len + 1);
for (index = 0; index < len; index++)
{
- font_item = self->font->font_items + (unsigned char)text[index];
+ font_item = self->font->font_items + wstr[index];
rv = MAX(rv, font_item->height);
}
+ g_free(wstr);
return rv;
}
@@ -348,12 +356,13 @@ xrdp_painter_draw_text(struct xrdp_painter* self,
struct xrdp_rect draw_rect;
struct xrdp_font* font;
struct xrdp_font_char* font_item;
+ twchar* wstr;
if (self == 0)
{
return 0;
}
- len = g_strlen(text);
+ len = g_mbstowcs(0, text, 0);
if (len < 1)
{
return 0;
@@ -365,6 +374,9 @@ xrdp_painter_draw_text(struct xrdp_painter* self,
{
return 0;
}
+ /* convert to wide char */
+ wstr = (twchar*)g_malloc((len + 2) * sizeof(twchar), 0);
+ g_mbstowcs(wstr, text, len + 1);
xrdp_painter_font_needed(self);
font = self->font;
f = 0;
@@ -374,7 +386,7 @@ xrdp_painter_draw_text(struct xrdp_painter* self,
data = (char*)g_malloc(len * 4, 1);
for (index = 0; index < len; index++)
{
- font_item = font->font_items + (unsigned char)text[index];
+ font_item = font->font_items + wstr[index];
i = xrdp_cache_add_char(self->wm->cache, font_item);
f = HIWORD(i);
c = LOWORD(i);
@@ -408,6 +420,7 @@ xrdp_painter_draw_text(struct xrdp_painter* self,
}
xrdp_region_delete(region);
g_free(data);
+ g_free(wstr);
return 0;
}