1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#define _E_FONT_C_
/*
* e-font
*
* Temporary wrappers around GdkFonts to get unicode displaying
*
* Author: Lauris Kaplinski <lauris@helixcode.com>
*
* Copyright (C) 2000 Helix Code, Inc.
*
*/
#include <unicode.h>
#include "e-font.h"
struct _EFont {
GdkFont font;
};
EFont *
e_font_from_gdk_name (const gchar *name)
{
GdkFont *font;
font = gdk_fontset_load (name);
return (EFont *) font;
}
EFont *
e_font_from_gdk_font (GdkFont *font)
{
gdk_font_ref (font);
return (EFont *) font;
}
void
e_font_ref (EFont *font)
{
gdk_font_ref (&font->font);
}
void
e_font_unref (EFont *font)
{
gdk_font_unref (&font->font);
}
gint
e_font_ascent (EFont * font)
{
return font->font.ascent;
}
gint
e_font_descent (EFont * font)
{
return font->font.descent;
}
void
e_font_draw_utf8_text (GdkDrawable *drawable, EFont *font, EFontStyle style, GdkGC *gc, gint x, gint y, gchar *text, gint length)
{
guchar *iso_text;
gchar *p;
gint uni, i;
iso_text = alloca (length);
for (p = text, i = 0; i < length; i++, p = unicode_next_utf8 (p)) {
unicode_get_utf8 (p, &uni);
if ((uni < ' ') || (uni > 255)) uni = ' ';
iso_text[i] = uni;
}
gdk_draw_text (drawable, &font->font, gc, x, y, iso_text, length);
if (style & E_FONT_BOLD)
gdk_draw_text (drawable, &font->font, gc, x + 1, y, iso_text, length);
}
gint
e_font_utf8_text_width (EFont *font, EFontStyle style, char *text, int length)
{
guchar *iso_text;
gchar *p;
gint uni, i;
iso_text = alloca (length);
for (p = text, i = 0; i < length; i++, p = unicode_next_utf8 (p)) {
unicode_get_utf8 (p, &uni);
if ((uni < ' ') || (uni > 255)) uni = ' ';
iso_text[i] = uni;
}
return gdk_text_width (&font->font, iso_text, length);
}
|