Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/dox
Modified Files:
dox.c dox.h format.c text.c ttfont.c
Log Message:
Bye bye Imlib1 and Fnlib.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/dox.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- dox.c 18 Jul 2004 19:01:16 -0000 1.32
+++ dox.c 25 Jul 2004 09:34:42 -0000 1.33
@@ -48,14 +48,6 @@
Display *disp;
Root VRoot;
-#if !USE_IMLIB2
-ImlibData *pI1Ctx;
-ImlibImage *pIcImg;
-Drawable vIcDrw;
-#endif
-#if USE_FNLIB
-FnlibData *pFnlibData;
-#endif
Window win_main, win_title, win_exit, win_next, win_prev, win_text,
win_cover;
Imlib_Image *im_text;
@@ -114,15 +106,10 @@
int x_return, y_return;
unsigned int border_width_return;
-#if !USE_IMLIB2
- ImlibInitParams params;
-#endif
-
VRoot.scr = DefaultScreen(disp);
VRoot.win = FindRootWindow(disp);
XGetGeometry(disp, VRoot.win, &root_return, &x_return, &y_return,
&VRoot.w, &VRoot.h, &border_width_return, &VRoot.depth);
-#if USE_IMLIB2
VRoot.vis = DefaultVisual(disp, VRoot.scr);
VRoot.depth = DefaultDepth(disp, VRoot.scr);
VRoot.cmap = DefaultColormap(disp, VRoot.scr);
@@ -134,16 +121,6 @@
imlib_context_set_colormap(VRoot.cmap);
imlib_context_set_dither(1);
imlib_context_set_dither_mask(0);
-#else
- params.flags = PARAMS_IMAGECACHESIZE | PARAMS_PIXMAPCACHESIZE;
- params.imagecachesize = (EDOX_DEFAULT_W * EDOX_DEFAULT_H * 3 * 2);
- params.pixmapcachesize = (EDOX_DEFAULT_W * EDOX_DEFAULT_H * 3 * 2 * 8);
- pI1Ctx = Imlib_init_with_params(disp, ¶ms);
- Imlib_set_render_type(pI1Ctx, RT_DITHER_TRUECOL);
- VRoot.vis = Imlib_get_visual(pI1Ctx);
- VRoot.depth = pI1Ctx->x.depth;
- VRoot.cmap = Imlib_get_colormap(pI1Ctx);
-#endif
}
static Window
@@ -175,6 +152,7 @@
hnt.min_height = hh;
hnt.max_height = hh;
XSetWMNormalHints(disp, win, &hnt);
+
return win;
}
@@ -200,7 +178,7 @@
imlib_context_set_drawable(win);
imlib_render_pixmaps_for_whole_image(&pmap, &mask);
XSetWindowBackgroundPixmap(disp, win, pmap);
- IMLIB_FREE_PIXMAP_AND_MASK(pmap, mask);
+ imlib_free_pixmap_and_mask(pmap);
}
static void
@@ -211,12 +189,8 @@
imlib_render_image_on_drawable(0, 0);
}
-#if USE_IMLIB2
#define ApplyImage3(win, im) \
XClearWindow(disp, win)
-#else
-#define ApplyImage3 ApplyImage2
-#endif
#define FREE_LINKS \
ll = l; \
@@ -289,9 +263,6 @@
setlocale(LC_NUMERIC, "C");
VRootInit();
-#if USE_FNLIB
- pFnlibData = Fnlib_init(pI1Ctx);
-#endif
if (argc < 2)
{
@@ -356,10 +327,6 @@
GetObjects(f);
fclose(f);
-#if USE_FNLIB
- Fnlib_add_dir(pFnlibData, docdir);
-#endif
-
t = 16;
wx = (VRoot.w - w) / 2;
wy = (VRoot.h - (h + t)) / 2;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/dox.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- dox.h 1 Jul 2004 21:04:40 -0000 1.36
+++ dox.h 25 Jul 2004 09:34:42 -0000 1.37
@@ -52,113 +52,11 @@
#include <sys/ipc.h>
#include <sys/shm.h>
-#if USE_IMLIB2
#include <Imlib2.h>
-#define IMLIB1_SET_CONTEXT(root_ctx)
-
#define EAllocColor(pxc) \
XAllocColor(disp, VRoot.cmap, pxc)
-#define IMLIB_FREE_PIXMAP_AND_MASK(pmap, mask) \
- imlib_free_pixmap_and_mask(pmap)
-
-#define IC_RenderDepth() DefaultDepth(disp, VRoot.scr)
-
-#else
-
-#include <Imlib.h>
-
-extern ImlibData *pI1Ctx;
-extern ImlibImage *pIcImg;
-extern Drawable vIcDrw;
-
-#define IMLIB1_SET_CONTEXT(root_ctx) \
- pI1Ctx = ((root_ctx) && prImlib_Context) ? prImlib_Context : pImlib_Context
-
-#define imlib_context_set_image(im_img) \
- pIcImg = im_img
-#define imlib_context_set_drawable(im_drw) \
- vIcDrw = im_drw
-
-#define imlib_context_set_dither(onoff) \
- Imlib_set_render_type(pI1Ctx, RT_DITHER_TRUECOL)
-#define imlib_context_get_dither() \
- Imlib_get_render_type(pI1Ctx)
-
-#define imlib_image_get_width() \
- pIcImg->rgb_width
-#define imlib_image_get_height() \
- pIcImg->rgb_height
-
-#define imlib_load_image(file) \
- Imlib_load_image(pI1Ctx, file)
-#define imlib_create_image_from_drawable(mask, x, y, w, h, grab) \
- Imlib_create_image_from_drawable(pI1Ctx, vIcDrw, mask, x, y, w, h)
-
-#define imlib_image_set_format(fmt)
-#define imlib_save_image(file) \
- Imlib_save_image_to_ppm(pI1Ctx, pIcImg, file)
-
-#define imlib_render_pixmaps_for_whole_image(p, m) \
- Imlib_render(pI1Ctx, pIcImg, imlib_image_get_width(),
imlib_image_get_height()); \
- if (p) *p = Imlib_copy_image(pI1Ctx, pIcImg); \
- if (m) *m = Imlib_copy_mask(pI1Ctx, pIcImg)
-#define imlib_render_pixmaps_for_whole_image_at_size(p, m, w, h) \
- Imlib_render(pI1Ctx, pIcImg, w, h); \
- if (p) *p = Imlib_copy_image(pI1Ctx, pIcImg); \
- if (m) *m = Imlib_copy_mask(pI1Ctx, pIcImg)
-#define imlib_render_image_on_drawable(x, y) \
- Imlib_apply_image(pI1Ctx, pIcImg, vIcDrw)
-#define imlib_render_image_on_drawable_at_size(x, y, w, h) \
- Imlib_paste_image(pI1Ctx, pIcImg, vIcDrw, x, y, w, h)
-
-#define imlib_create_cropped_scaled_image(x, y, w, h, w2, h2) \
- Imlib_clone_scaled_image(pI1Ctx, pIcImg, w2, h2)
-
-#define imlib_image_orientate(rot) \
- switch (rot) { \
- case 1: \
- Imlib_rotate_image(pI1Ctx, pIcImg, 1); \
- Imlib_flip_image_horizontal(pI1Ctx, pIcImg); \
- break; \
- case 2: \
- Imlib_flip_image_vertical(pI1Ctx, pIcImg); \
- Imlib_flip_image_horizontal(pI1Ctx, pIcImg); \
- case 3: \
- Imlib_rotate_image(pI1Ctx, pIcImg, -1); \
- Imlib_flip_image_vertical(pI1Ctx, pIcImg); \
- break; \
- }
-
-#define imlib_free_image() \
- ({ Imlib_destroy_image(pI1Ctx, pIcImg); pIcImg = NULL; })
-#define imlib_free_image_and_decache() \
- ({ Imlib_kill_image(pI1Ctx, pIcImg); pIcImg = NULL; })
-#define imlib_free_pixmap_and_mask(pmap) \
- Imlib_free_pixmap(pI1Ctx, pmap)
-
-#define IMLIB_FREE_PIXMAP_AND_MASK(pmap, mask) \
- ({ Imlib_free_pixmap(pI1Ctx, pmap); Imlib_free_pixmap(pI1Ctx, mask); })
-
-#define imlib_image_set_border(im_bdr) \
- Imlib_set_image_border(pI1Ctx, pIcImg, im_bdr)
-
-#define EAllocColor(pxc) \
- ({ int r = ((pxc)->red)>>8, g = ((pxc)->green)>>8, b = ((pxc)->blue)>>8; \
- (pxc)->pixel = Imlib_best_color_match(pI1Ctx, &r, &g, &b); })
-
-#define Imlib_Context ImlibData
-#define Imlib_Image ImlibImage
-#define Imlib_Color ImlibColor
-#define Imlib_Border ImlibBorder
-#define IC_RenderDepth() (pImlib_Context->x.render_depth)
-#endif
-
-#if USE_FNLIB
-#include <Fnlib.h>
-#endif
-
#if HAVE___ATTRIBUTE__
#define __UNUSED__ __attribute__((unused))
#else
@@ -201,10 +99,6 @@
typedef struct _textstate
{
char *fontname;
-#if USE_FNLIB
- FnlibStyle style;
- FnlibFont *font;
-#endif
XColor fg_col;
XColor bg_col;
int effect;
@@ -321,10 +215,6 @@
extern Display *disp;
extern Root VRoot;
-
-#if USE_FNLIB
-extern FnlibData *pFnlibData;
-#endif
extern char *docdir;
#define Emalloc malloc
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/format.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- format.c 29 Jun 2004 18:23:17 -0000 1.17
+++ format.c 25 Jul 2004 09:34:42 -0000 1.18
@@ -517,13 +517,6 @@
int wastext = 0;
ts.fontname = NULL;
-#if USE_FNLIB
- ts.style.orientation = FONT_TO_RIGHT;
- ts.style.mode = MODE_WRAP_WORD;
- ts.style.justification = 0;
- ts.style.spacing = 0;
- ts.font = NULL;
-#endif
ESetColor(&ts.fg_col, 0, 0, 0);
ESetColor(&ts.bg_col, 0, 0, 0);
ts.effect = 0;
@@ -604,15 +597,6 @@
case FONT:
fn = pg->obj[i].object;
ts.fontname = NULL;
-#if USE_FNLIB
- ts.style.orientation = FONT_TO_RIGHT;
- ts.style.mode = MODE_WRAP_WORD;
- ts.style.justification = 0;
- ts.style.spacing = 0;
- if (ts.font)
- Fnlib_free_font(pFnlibData, ts.font);
- ts.font = NULL;
-#endif
ESetColor(&ts.fg_col, 0, 0, 0);
ESetColor(&ts.bg_col, 0, 0, 0);
ts.effect = 0;
@@ -1007,10 +991,6 @@
}
}
-#if USE_FNLIB
- if (ts.font)
- Fnlib_free_font(pFnlibData, ts.font);
-#endif
if (ts.efont)
Efont_free(ts.efont);
if (ts.xfont)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/text.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- text.c 22 May 2004 23:08:20 -0000 1.17
+++ text.c 25 Jul 2004 09:34:42 -0000 1.18
@@ -57,23 +57,13 @@
void
TextStateLoadFont(TextState * ts)
{
-#if USE_FNLIB
- if ((ts->font) || (ts->efont) || (ts->xfont) || (ts->xfontset))
-#else
if ((ts->efont) || (ts->xfont) || (ts->xfontset))
-#endif
return;
+
if (!ts->fontname)
return;
-#if USE_FNLIB
- if ((!ts->font) && (!ts->efont))
- ts->font = Fnlib_load_font(pFnlibData, ts->fontname);
-#endif
-#if USE_FNLIB
- if ((!ts->font) && (!ts->efont))
-#else
+
if (!ts->efont)
-#endif
{
char s[4096], w[4046], *s2, *ss;
@@ -101,11 +91,8 @@
if (s2)
free(s2);
}
-#if USE_FNLIB
- if ((!ts->font) && (!ts->efont))
-#else
+
if (!ts->efont)
-#endif
{
if ((!ts->xfont) && (strchr(ts->fontname, ',') == NULL))
{
@@ -153,30 +140,16 @@
*width = 0;
*height = 0;
+
lines = TextGetLines(text, &num_lines);
if (!lines)
return;
+
if (!ts)
return;
+
TextStateLoadFont(ts);
-#if USE_FNLIB
- if (ts->font)
- {
- for (i = 0; i < num_lines; i++)
- {
- int high, wid, dummy;
- Fnlib_measure(pFnlibData, ts->font, 0, 0, 999999, 999999,
- 0, 0, fsize, &ts->style, (unsigned char *)lines[i],
- 0, 0, &dummy, &dummy, &wid, &high, &dummy,
- &dummy, &dummy, &dummy);
- *height += high;
- if (wid > *width)
- *width = wid;
- }
- }
- else
-#endif
if (ts->efont)
{
for (i = 0; i < num_lines; i++)
@@ -247,35 +220,17 @@
lines = TextGetLines(text, &num_lines);
if (!lines)
return;
+
if (!ts)
return;
+
TextStateLoadFont(ts);
xx = x;
yy = y;
+
if (!gc)
gc = XCreateGC(disp, win, 0, &gcv);
-#if USE_FNLIB
- if (ts->font)
- {
- for (i = 0; i < num_lines; i++)
- {
- int high, wid, dummy;
- Fnlib_measure(pFnlibData, ts->font, 0, 0, 999999, 999999,
- 0, 0, fsize, &ts->style, (unsigned char *)lines[i],
- 0, 0, &dummy, &dummy, &wid, &high, &dummy,
- &dummy, &dummy, &dummy);
- if ((ts->style.orientation == FONT_TO_UP) ||
- (ts->style.orientation == FONT_TO_DOWN))
- fsize = w;
- xx = x + (((w - wid) * justification) >> 10);
- Fnlib_draw(pFnlibData, ts->font, win, 0, xx, yy, w, h,
- 0, 0, fsize, &ts->style, (unsigned char *)lines[i]);
- yy += high;
- }
- }
- else
-#endif
if (ts->efont)
{
for (i = 0; i < num_lines; i++)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/ttfont.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- ttfont.c 26 Jun 2004 20:27:30 -0000 1.16
+++ ttfont.c 25 Jul 2004 09:34:42 -0000 1.17
@@ -22,8 +22,6 @@
*/
#include "dox.h"
-#if USE_IMLIB2
-
struct _efont
{
Imlib_Font *face;
@@ -120,1063 +118,6 @@
*max_descent_return = imlib_get_maximum_font_descent();
}
-#else /* USE_IMLIB1 */
-
-#define TT_VALID( handle ) ( ( handle ).z != NULL )
-
-#if TEST_TTFONT
-#undef XSync
-#undef IC_RenderDepth
-#define IC_RenderDepth() DefaultDepth(disp, DefaultScreen(disp))
-#define EGetGeometry XGetGeometry
-#endif
-
-#ifdef HAVE_FREETYPE1_FREETYPE_FREETYPE_H
-#include <freetype1/freetype/freetype.h>
-#elif defined(HAVE_FREETYPE_FREETYPE_H)
-#include <freetype/freetype.h>
-#else
-#include <freetype.h>
-#endif
-
-struct _efont
-{
- TT_Engine engine;
- TT_Face face;
- TT_Instance instance;
- TT_Face_Properties properties;
- int num_glyph;
- TT_Glyph *glyphs;
- TT_Raster_Map **glyphs_cached;
- TT_CharMap char_map;
- int max_descent;
- int max_ascent;
-};
-
-typedef struct _efont_color_tab EfontColorTable;
-
-struct _efont_color_tab
-{
- Colormap cmap;
-
- XColor list[256];
- unsigned char match[8][8][8];
-};
-
-/*static EfontColorTable *color_tab = NULL; */
-static unsigned char alpha_lut[5] = { 0, 64, 128, 192, 255 };
-static unsigned char bounded_palette[9] = { 0, 1, 2, 3, 4, 4, 4, 4, 4 };
-
-struct _imlib_encoding_map
-{
- unsigned short char_map[98];
-};
-
-typedef struct _imlib_encoding_map ImlibEncodingMap;
-
-/* Encoding maps */
-static const ImlibEncodingMap iso1 = {
- {
- /* ISO-8859-1 encoding (conversion to UTF-8) */
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8,
- 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1,
- 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA,
- 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
- 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC,
- 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5,
- 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE,
- 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
- 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9,
- 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF}
-};
-
-static const ImlibEncodingMap iso2 = {
- {
- /* ISO-8859-2 encoding (conversion to UTF-8) */
- 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8,
- 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0, 0x0105,
- 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8, 0x0161, 0x015F,
- 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102,
- 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A,
- 0x00CD, 0x00CE, 0x010E, 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150,
- 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162,
- 0x00DF, 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111,
- 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F,
- 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9}
-};
-
-static const ImlibEncodingMap iso3 = {
- {
- /* ISO-8859-3 encoding (conversion to UTF-8) */
- 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0124, 0x00A7, 0x00A8, 0x0130,
- 0x015E, 0x011E, 0x0134, 0x00AD, 0x017B, 0x00B0, 0x0127, 0x00B2, 0x00B3,
- 0x00B4, 0x00B5, 0x0125, 0x00B7, 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135,
- 0x00BD, 0x017C, 0x00C0, 0x00C1, 0x00C2, 0x00C4, 0x010A, 0x0108, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D1,
- 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, 0x011C, 0x00D9, 0x00DA,
- 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E4,
- 0x010B, 0x0109, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED,
- 0x00EE, 0x00EF, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
- 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9}
-};
-
-static const ImlibEncodingMap iso4 = {
- {
- /* ISO-8859-4 encoding (conversion to UTF-8) */
- 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, 0x00A8,
- 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, 0x00B0, 0x0105,
- 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, 0x00B8, 0x0161, 0x0113,
- 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, 0x0100, 0x00C1, 0x00C2, 0x00C3,
- 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116,
- 0x00CD, 0x00CE, 0x012A, 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5,
- 0x00D6, 0x00D7, 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A,
- 0x00DF, 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, 0x0111,
- 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x0173,
- 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9}
-};
-
-static const ImlibEncodingMap iso5 = {
- {
- /* ISO-8859-5 encoding (conversion to UTF-8) */
- 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408,
- 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 0x0410, 0x0411,
- 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A,
- 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423,
- 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C,
- 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435,
- 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
- 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x2116,
- 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459,
- 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F}
-};
-
-static const ImlibEncodingMap *_imlib_encodings[5] =
- { &iso1, &iso2, &iso3, &iso4, &iso5 };
-int IsoEncoding = ENCOING_ISO_8859_1;
-char encoding_initialized = 0;
-
-static void
-__init_iso_encoding(void)
-{
- /* Set the current ISO encoding based on (in that order):
- * the "IMLIB_ENCODING" environment variable,
- * the "LANG" variable,
- * the ISO-8859-1 default */
-
- char *s, *enc_num, *lang;
- char iso2lang[21] = "cs hu pl ro hr sk sl";
- char iso3lang[6] = "eo mt";
- char iso4lang[12] = "et lv lt kl";
- char iso5lang[18] = "bg be mk ru sr uk";
-
- /* Check if we already initialized the encoding */
- if (!encoding_initialized)
- {
- IsoEncoding = 255;
- /* First check if we have IMLIB_ENCODING variable set */
- if ((s = getenv("IMLIB_ENCODING")) != NULL)
- {
- if ((enc_num = strstr(s, "8859-")) != NULL)
- {
- if (!strcmp((enc_num + 5), "1"))
- IsoEncoding = 0;
- else if (!strcmp((enc_num + 5), "2"))
- IsoEncoding = 1;
- else if (!strcmp((enc_num + 5), "3"))
- IsoEncoding = 2;
- else if (!strcmp((enc_num + 5), "4"))
- IsoEncoding = 3;
- else if (!strcmp((enc_num + 5), "5"))
- IsoEncoding = 4;
- }
- }
- if (IsoEncoding == 255)
- {
- /* Still not initialized - try to guess from LANG variable */
- if ((lang = getenv("LANG")) != NULL)
- {
- if (strstr(iso2lang, lang) != NULL)
- IsoEncoding = 1;
- else if (strstr(iso3lang, lang) != NULL)
- IsoEncoding = 2;
- else if (strstr(iso4lang, lang) != NULL)
- IsoEncoding = 3;
- else if (strstr(iso5lang, lang) != NULL)
- IsoEncoding = 4;
- }
- }
- if (IsoEncoding == 255)
- {
- /* Still not initialized - default to ISO8859-1 */
- IsoEncoding = 0;
- }
- encoding_initialized = 1;
- }
-}
-
-static TT_Raster_Map *
-create_font_raster(int width, int height)
-{
- TT_Raster_Map *rmap;
-
- rmap = Emalloc(sizeof(TT_Raster_Map));
- rmap->width = (width + 3) & -4;
- rmap->rows = height;
- rmap->flow = TT_Flow_Down;
- rmap->cols = rmap->width;
- rmap->size = rmap->rows * rmap->width;
- if (rmap->size > 0)
- {
- rmap->bitmap = Emalloc(rmap->size);
- memset(rmap->bitmap, 0, rmap->size);
- }
- else
- rmap->bitmap = NULL;
- return rmap;
-}
-
-static TT_Raster_Map *
-duplicate_raster(TT_Raster_Map * rmap)
-{
- TT_Raster_Map *new_rmap;
-
- new_rmap = Emalloc(sizeof(TT_Raster_Map));
- *new_rmap = *rmap;
- if (new_rmap->size > 0)
- {
- new_rmap->bitmap = Emalloc(new_rmap->size);
- memcpy(new_rmap->bitmap, rmap->bitmap, new_rmap->size);
- }
- else
- new_rmap->bitmap = NULL;
- return new_rmap;
-}
-
-static void
-clear_raster(TT_Raster_Map * rmap)
-{
- memset(rmap->bitmap, 0, rmap->size);
-}
-
-static void
-destroy_font_raster(TT_Raster_Map * rmap)
-{
- if (!rmap)
- return;
- if (rmap->bitmap)
- Efree(rmap->bitmap);
- Efree(rmap);
-}
-
-static TT_Raster_Map *
-calc_size(Efont * f, int *width, int *height, const char *text)
-{
- int i, upm, ascent, descent, pw, ph;
- TT_Instance_Metrics imetrics;
- TT_Glyph_Metrics gmetrics;
- TT_Raster_Map *rtmp;
-
- TT_Get_Instance_Metrics(f->instance, &imetrics);
- upm = f->properties.header->Units_Per_EM;
- ascent = (f->properties.horizontal->Ascender * imetrics.y_ppem) / upm;
- descent = (f->properties.horizontal->Descender * imetrics.y_ppem) / upm;
- if (descent < 0)
- descent = -descent;
- pw = 0;
- ph = ((f->max_ascent) - f->max_descent) / 64;
-
- for (i = 0; text[i]; i++)
- {
- unsigned char j = text[i];
-
- if (!TT_VALID(f->glyphs[j]))
- continue;
- TT_Get_Glyph_Metrics(f->glyphs[j], &gmetrics);
- if (i == 0)
- {
- pw += ((-gmetrics.bearingX) / 64);
- }
- if (text[i + 1] == 0)
- {
- pw += (gmetrics.bbox.xMax / 64);
- }
- else
- pw += gmetrics.advance / 64;
- }
- *width = pw;
- *height = ph;
-
- rtmp = create_font_raster(imetrics.x_ppem + 32, imetrics.y_ppem + 32);
- rtmp->flow = TT_Flow_Up;
- return rtmp;
-}
-
-static void
-render_text(TT_Raster_Map * rmap, TT_Raster_Map * rchr, Efont * f,
- const char *text, int *xor, int *yor)
-{
- TT_Glyph_Metrics metrics;
- TT_Instance_Metrics imetrics;
- TT_F26Dot6 x, y, xmin, ymin, xmax, ymax;
- int i, ioff, iread;
- char *off, *read, *_off, *_read;
- int x_offset, y_offset;
- unsigned char j;
- TT_Raster_Map *rtmp;
-
- TT_Get_Instance_Metrics(f->instance, &imetrics);
-
- j = text[0];
- TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
- x_offset = (-metrics.bearingX) / 64;
-
- y_offset = -(f->max_descent / 64);
-
- *xor = x_offset;
- *yor = rmap->rows - y_offset;
-
- rtmp = NULL;
- for (i = 0; text[i]; i++)
- {
- j = text[i];
- if (!TT_VALID(f->glyphs[j]))
- continue;
-
- TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
-
- xmin = metrics.bbox.xMin & -64;
- ymin = metrics.bbox.yMin & -64;
- xmax = (metrics.bbox.xMax + 63) & -64;
- ymax = (metrics.bbox.yMax + 63) & -64;
-
- if (f->glyphs_cached[j])
- rtmp = f->glyphs_cached[j];
- else
- {
- rtmp = rchr;
- clear_raster(rtmp);
- TT_Get_Glyph_Pixmap(f->glyphs[j], rtmp, -xmin, -ymin);
- f->glyphs_cached[j] = duplicate_raster(rtmp);
- }
- /* Blit-or the resulting small pixmap into the biggest one */
- /* We do that by hand, and provide also clipping. */
-
- xmin = (xmin >> 6) + x_offset;
- ymin = (ymin >> 6) + y_offset;
- xmax = (xmax >> 6) + x_offset;
- ymax = (ymax >> 6) + y_offset;
-
- /* Take care of comparing xmin and ymin with signed values! */
- /* This was the cause of strange misplacements when Bit.rows */
- /* was unsigned. */
-
- if (xmin >= (int)rmap->width || ymin >= (int)rmap->rows ||
- xmax < 0 || ymax < 0)
- continue;
-
- /* Note that the clipping check is performed _after_ rendering */
- /* the glyph in the small bitmap to let this function return */
- /* potential error codes for all glyphs, even hidden ones. */
-
- /* In exotic glyphs, the bounding box may be larger than the */
- /* size of the small pixmap. Take care of that here. */
-
- if (xmax - xmin + 1 > rtmp->width)
- xmax = xmin + rtmp->width - 1;
-
- if (ymax - ymin + 1 > rtmp->rows)
- ymax = ymin + rtmp->rows - 1;
-
- /* set up clipping and cursors */
-
- iread = 0;
- if (ymin < 0)
- {
- iread -= ymin * rtmp->cols;
- ioff = 0;
- ymin = 0;
- }
- else
- ioff = (rmap->rows - ymin - 1) * rmap->cols;
-
- if (ymax >= rmap->rows)
- ymax = rmap->rows - 1;
-
- if (xmin < 0)
- {
- iread -= xmin;
- xmin = 0;
- }
- else
- ioff += xmin;
-
- if (xmax >= rmap->width)
- xmax = rmap->width - 1;
-
- _read = (char *)rtmp->bitmap + iread;
- _off = (char *)rmap->bitmap + ioff;
-
- for (y = ymin; y <= ymax; y++)
- {
- read = _read;
- off = _off;
-
- for (x = xmin; x <= xmax; x++)
- {
- *off = bounded_palette[*off | *read];
- off++;
- read++;
- }
- _read += rtmp->cols;
- _off -= rmap->cols;
- }
- x_offset += metrics.advance / 64;
- }
-}
-
-static void
-merge_text_16(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
- unsigned long col)
-{
- int x, y, tmp;
- unsigned char *ptr;
- unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
- unsigned long pixel;
-
- cr = (col >> 8) & 0xf8;
- cg = (col >> 3) & 0xfc;
- cb = (col << 3) & 0xf8;
- for (y = 0; y < xim->height; y++)
- {
- ptr = (unsigned char *)rmap->bitmap + offset_x +
- ((y + offset_y) * rmap->cols);
- for (x = 0; x < xim->width; x++)
- {
- if ((a = alpha_lut[*ptr]) > 0)
- {
- if (a < 255)
- {
- pixel = XGetPixel(xim, x, y);
- r = (pixel >> 8) & 0xf8;
- g = (pixel >> 3) & 0xfc;
- b = (pixel << 3) & 0xf8;
-
- tmp = (cr - r) * a;
- nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cg - g) * a;
- ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cb - b) * a;
- nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
- pixel = ((nr & 0xf8) << 8) | ((ng & 0xfc) << 3) |
- ((nb & 0xf8) >> 3);
- XPutPixel(xim, x, y, pixel);
- }
- else
- XPutPixel(xim, x, y, col);
- }
- ptr++;
- }
- }
-}
-
-static void
-merge_text_15(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
- unsigned long col)
-{
- int x, y, tmp;
- unsigned char *ptr;
- unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
- unsigned long pixel;
-
- cr = (col >> 7) & 0xf8;
- cg = (col >> 2) & 0xf8;
- cb = (col << 3) & 0xf8;
- for (y = 0; y < xim->height; y++)
- {
- ptr = (unsigned char *)rmap->bitmap + offset_x +
- ((y + offset_y) * rmap->cols);
- for (x = 0; x < xim->width; x++)
- {
- if ((a = alpha_lut[*ptr]) > 0)
- {
- if (a < 255)
- {
- pixel = XGetPixel(xim, x, y);
- r = (pixel >> 7) & 0xf8;
- g = (pixel >> 2) & 0xf8;
- b = (pixel << 3) & 0xf8;
-
- tmp = (cr - r) * a;
- nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cg - g) * a;
- ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cb - b) * a;
- nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
- pixel = ((nr & 0xf8) << 7) | ((ng & 0xf8) << 2) |
- ((nb & 0xf8) >> 3);
- XPutPixel(xim, x, y, pixel);
- }
- else
- XPutPixel(xim, x, y, col);
- }
- ptr++;
- }
- }
-}
-
-static void
-merge_text_24(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
- unsigned long col)
-{
- int x, y, tmp;
- unsigned char *ptr;
- unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
- unsigned long pixel;
-
- cr = (col >> 16) & 0xff;
- cg = (col >> 8) & 0xff;
- cb = col & 0xff;
- for (y = 0; y < xim->height; y++)
- {
- ptr = (unsigned char *)rmap->bitmap + offset_x +
- ((y + offset_y) * rmap->cols);
- for (x = 0; x < xim->width; x++)
- {
- if ((a = alpha_lut[*ptr]) > 0)
- {
- if (a < 255)
- {
- pixel = XGetPixel(xim, x, y);
- r = (pixel >> 16) & 0xff;
- g = (pixel >> 8) & 0xff;
- b = pixel & 0xff;
-
- tmp = (cr - r) * a;
- nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cg - g) * a;
- ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
- tmp = (cb - b) * a;
- nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
- pixel = ((nr << 16) | (ng << 8) | (nb));
- XPutPixel(xim, x, y, pixel);
- }
- else
- XPutPixel(xim, x, y, col);
- }
- ptr++;
- }
- }
-}
-
-/*
- * static void
- * merge_text_8(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
- * unsigned long col, Colormap cm)
- * {
- * int x, y, tmp;
- * unsigned char *ptr;
- * unsigned char a, r, g, b, nr, ng, nb;
- * unsigned long pixel;
- *
- * for (y = 0; y < xim->height; y++)
- * {
- * ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
- * for (x = 0; x < xim->width; x++)
- * {
- * if ((a = alpha_lut[*ptr]) > 0)
- * {
- * pixel = XGetPixel(xim, x, y);
- * r = (pixel >> 8) & 0xf8;
- * g = (pixel >> 3) & 0xfc;
- * b = (pixel << 3) & 0xf8;
- *
- * tmp = (255 - r) * a;
- * nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
- * tmp = (255 - g) * a;
- * ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
- * tmp = (255 - b) * a;
- * nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
- * pixel = ((nr & 0xf8) << 8) | ((ng & 0xfc) << 3) | ((nb & 0xf8) >> 3);
- * XPutPixel(xim, x, y, pixel);
- * }
- * ptr++;
- * }
- * }
- * col = 0;
- * cm = 0;
- * }
- */
-
-static void
-merge_text_1(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
- unsigned long col)
-{
- int x, y;
- unsigned char *ptr;
-
- for (y = 0; y < xim->height; y++)
- {
- ptr = (unsigned char *)rmap->bitmap + offset_x +
- ((y + offset_y) * rmap->cols);
- for (x = 0; x < xim->width; x++)
- {
- if (alpha_lut[*ptr] > 2)
- XPutPixel(xim, x, y, col);
- ptr++;
- }
- }
-}
-
-static char x_error = 0;
-
-static void
-handle_x_error(Display * d, XErrorEvent * ev)
-{
- d = NULL;
- ev = NULL;
- x_error = 1;
-}
-
-void
-EFont_draw_string(Display * disp, Drawable win, GC gc, int x, int y,
- const char *text, Efont * f, Visual * vis, Colormap cm)
-{
- XImage *xim;
- XShmSegmentInfo shminfo;
- int width, height, w, h, inx, iny, clipx, clipy, rx, ry;
- XWindowAttributes xatt, ratt;
- TT_Raster_Map *rmap, *rtmp;
- unsigned long col;
- XGCValues gcv;
- static char shm_checked = 0, shm = 1;
- XErrorHandler erh = NULL;
- Window chld;
- char is_pixmap = 0;
-
- inx = 0;
- iny = 0;
- rtmp = calc_size(f, &w, &h, text);
- rmap = create_font_raster(w, h);
-
- render_text(rmap, rtmp, f, text, &inx, &iny);
-
- XGrabServer(disp);
- erh = XSetErrorHandler((XErrorHandler) handle_x_error);
- x_error = 0;
- XGetWindowAttributes(disp, win, &xatt);
- XFlush(disp);
- if (x_error)
- {
- x_error = 0;
- is_pixmap = 1;
- XGetGeometry(disp, win, &chld, &rx, &rx,
- (unsigned int *)&xatt.width, (unsigned int *)&xatt.height,
- (unsigned int *)&rx, (unsigned int *)&xatt.depth);
- XFlush(disp);
- if (x_error)
- {
- destroy_font_raster(rmap);
- destroy_font_raster(rtmp);
- XUngrabServer(disp);
- XFlush(disp);
- XSetErrorHandler((XErrorHandler) erh);
- return;
- }
- }
- XSetErrorHandler((XErrorHandler) erh);
- if (!is_pixmap)
- {
- XGetWindowAttributes(disp, xatt.root, &ratt);
- XTranslateCoordinates(disp, win, xatt.root, 0, 0, &rx, &ry, &chld);
- if ((xatt.map_state != IsViewable) && (xatt.backing_store == NotUseful))
- {
- destroy_font_raster(rmap);
- destroy_font_raster(rtmp);
- XUngrabServer(disp);
- XFlush(disp);
- return;
- }
- }
- XGetGCValues(disp, gc, GCForeground, &gcv);
- col = gcv.foreground;
-
- clipx = 0;
- clipy = 0;
-
- x = x - inx;
- y = y - iny;
-
- width = xatt.width - x;
- height = xatt.height - y;
- if (width > w)
- width = w;
- if (height > h)
- height = h;
-
- if (!is_pixmap)
- {
- if ((rx + x + width) > ratt.width)
- width = ratt.width - (rx + x);
- if ((ry + y + height) > ratt.height)
- height = ratt.height - (ry + y);
- }
- if (x < 0)
- {
- clipx = -x;
- width += x;
- x = 0;
- }
- if (y < 0)
- {
- clipy = -y;
- height += y;
- y = 0;
- }
- if (!is_pixmap)
- {
- if ((rx + x) < 0)
- {
- clipx -= (rx + x);
- width += (rx + x);
- x = -rx;
- }
- if ((ry + y) < 0)
- {
- clipy -= (ry + y);
- height += (ry + y);
- y = -ry;
- }
- }
- if ((width <= 0) || (height <= 0))
- {
- destroy_font_raster(rmap);
- destroy_font_raster(rtmp);
- XUngrabServer(disp);
- XFlush(disp);
- return;
- }
- if (shm)
- {
- if (!shm_checked)
- {
- erh = XSetErrorHandler((XErrorHandler) handle_x_error);
- }
- xim = XShmCreateImage(disp, vis, xatt.depth, ZPixmap, NULL,
- &shminfo, width, height);
- if (!shm_checked)
- {
- XSync(disp, False);
- if (x_error)
- {
- shm = 0;
- XDestroyImage(xim);
- xim = XGetImage(disp, win, x, y, width, height,
- 0xffffffff, ZPixmap);
- XSetErrorHandler((XErrorHandler) erh);
- shm_checked = 1;
- }
- else
- {
- shminfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line *
- xim->height, IPC_CREAT | 0666);
- if (shminfo.shmid < 0)
- {
- shm = 0;
- XDestroyImage(xim);
- xim = XGetImage(disp, win, x, y, width, height,
- 0xffffffff, ZPixmap);
- XSetErrorHandler((XErrorHandler) erh);
- shm_checked = 1;
- }
- else
- {
- shminfo.shmaddr = xim->data = shmat(shminfo.shmid, 0, 0);
- shminfo.readOnly = False;
- XShmAttach(disp, &shminfo);
- }
- }
- }
- else
- {
- shminfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line *
- xim->height, IPC_CREAT | 0666);
- if (shminfo.shmid < 0)
- {
- shm = 0;
- XDestroyImage(xim);
- xim = XGetImage(disp, win, x, y, width, height,
- 0xffffffff, ZPixmap);
- XSetErrorHandler((XErrorHandler) erh);
- shm_checked = 1;
- }
- else
- {
- shminfo.shmaddr = xim->data = shmat(shminfo.shmid, 0, 0);
- shminfo.readOnly = False;
- XShmAttach(disp, &shminfo);
- }
- }
- if (!shm_checked)
- {
- XSync(disp, False);
- if (x_error)
- {
- shm = 0;
- XDestroyImage(xim);
- xim = XGetImage(disp, win, x, y, width, height,
- 0xffffffff, ZPixmap);
- shm_checked = 1;
- }
- XSetErrorHandler((XErrorHandler) erh);
- shm_checked = 1;
- }
- }
- else
- xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
- if (shm)
- XShmGetImage(disp, win, xim, x, y, 0xffffffff);
- XUngrabServer(disp);
- XFlush(disp);
-
- if (xatt.depth == 16)
- {
- XVisualInfo xvi, *xvir;
- int num;
-
- xvi.visualid = XVisualIDFromVisual(vis);;
- xvir = XGetVisualInfo(disp, VisualIDMask, &xvi, &num);
- if (xvir)
- {
- if (xvir->red_mask != 0xf800)
- xatt.depth = 15;
- XFree(xvir);
- }
- }
- if (xatt.depth == 16)
- merge_text_16(xim, rmap, clipx, clipy, col);
- else if ((xatt.depth == 24) || (xatt.depth == 32))
- merge_text_24(xim, rmap, clipx, clipy, col);
-/* else if (xatt.depth == 8)
- * merge_text_8(xim, rmap, clipx, clipy, cm, col); */
- else if (xatt.depth == 15)
- merge_text_15(xim, rmap, clipx, clipy, col);
- else if (xatt.depth <= 8)
- merge_text_1(xim, rmap, clipx, clipy, col);
-
- if (shm)
- XShmPutImage(disp, win, gc, xim, 0, 0, x, y, width, height, False);
- else
- XPutImage(disp, win, gc, xim, 0, 0, x, y, width, height);
- destroy_font_raster(rmap);
- destroy_font_raster(rtmp);
- if (shm)
- {
- XSync(disp, False);
- XShmDetach(disp, &shminfo);
- shmdt(shminfo.shmaddr);
- shmctl(shminfo.shmid, IPC_RMID, 0);
- }
- XDestroyImage(xim);
- cm = 0;
-}
-
-void
-Efont_free(Efont * f)
-{
- int i;
-
- if (!f)
- return;
- TT_Done_Instance(f->instance);
- TT_Close_Face(f->face);
- for (i = 0; i < 256; i++)
- {
- if (f->glyphs_cached[i])
- destroy_font_raster(f->glyphs_cached[i]);
- if (!TT_VALID(f->glyphs[i]))
- TT_Done_Glyph(f->glyphs[i]);
- }
- if (f->glyphs)
- Efree(f->glyphs);
- if (f->glyphs_cached)
- Efree(f->glyphs_cached);
- Efree(f);
-}
-
-Efont *
-Efont_load(const char *file, int size)
-{
- TT_Error error;
- TT_Glyph_Metrics metrics;
- static TT_Engine engine;
- static char have_engine = 0;
- int dpi = 96;
- Efont *f;
- unsigned short i, n, index, load_flags;
- unsigned short num_glyphs = 0, no_cmap = 0;
- unsigned short platform, encoding;
-
- __init_iso_encoding();
- if (!have_engine)
- {
- error = TT_Init_FreeType(&engine);
- if (error)
- return NULL;
- have_engine = 1;
- }
- f = Emalloc(sizeof(Efont));
- f->engine = engine;
- error = TT_Open_Face(f->engine, file, &f->face);
- if (error)
- {
- Efree(f);
-/* fprintf(stderr, "Unable to open font\n"); */
- return NULL;
- }
- error = TT_Get_Face_Properties(f->face, &f->properties);
- if (error)
- {
- TT_Close_Face(f->face);
- Efree(f);
-/* fprintf(stderr, "Unable to get face properties\n"); */
- return NULL;
- }
- error = TT_New_Instance(f->face, &f->instance);
- if (error)
- {
- TT_Close_Face(f->face);
- Efree(f);
-/* fprintf(stderr, "Unable to create instance\n"); */
- return NULL;
- }
- TT_Set_Instance_Resolutions(f->instance, dpi, dpi);
- TT_Set_Instance_CharSize(f->instance, size * 64);
-
- n = f->properties.num_CharMaps;
-
- for (i = 0; i < n; i++)
- {
- TT_Get_CharMap_ID(f->face, i, &platform, &encoding);
- if ((platform == 3 && encoding == 1) ||
- (platform == 0 && encoding == 0))
- {
- /* TT_Get_CharMap(f->face, i, &char_map); */
- TT_Get_CharMap(f->face, i, &(f->char_map));
- break;
- }
- }
- if (i == n)
- {
- no_cmap = 1;
- num_glyphs = f->properties.num_Glyphs;
- TT_Done_Instance(f->instance);
- TT_Close_Face(f->face);
- Efree(f);
-/* fprintf(stderr, "Sorry, but this font doesn't contain any Unicode mapping
table\n"); */
- return NULL;
- }
- f->num_glyph = 256;
- f->glyphs = (TT_Glyph *) Emalloc(256 * sizeof(TT_Glyph));
- memset(f->glyphs, 0, 256 * sizeof(TT_Glyph));
- f->glyphs_cached = (TT_Raster_Map **) Emalloc(256 * sizeof(TT_Raster_Map *));
- memset(f->glyphs_cached, 0, 256 * sizeof(TT_Raster_Map *));
-
- load_flags = TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH;
-
- f->max_descent = 0;
- f->max_ascent = 0;
-
- for (i = 0; i < 256; ++i)
- {
- if (TT_VALID(f->glyphs[i]))
- continue;
-
- if (no_cmap)
- {
- index = (i - ' ' + 1) < 0 ? 0 : (i - ' ' + 1);
- if (index >= num_glyphs)
- index = 0;
- }
- else if (i < 0xA0)
- index = TT_Char_Index(f->char_map, i);
- else
- index =
- TT_Char_Index(f->char_map,
- _imlib_encodings[IsoEncoding]->
- char_map[(i - 0xA0)]);
-
- TT_New_Glyph(f->face, &f->glyphs[i]);
- TT_Load_Glyph(f->instance, f->glyphs[i], index, load_flags);
- TT_Get_Glyph_Metrics(f->glyphs[i], &metrics);
-
- if ((metrics.bbox.yMin & -64) < f->max_descent)
- f->max_descent = (metrics.bbox.yMin & -64);
- if (((metrics.bbox.yMax + 63) & -64) > f->max_ascent)
- f->max_ascent = ((metrics.bbox.yMax + 63) & -64);
- }
- return f;
-}
-
-void
-Efont_extents(Efont * f, const char *text, int *font_ascent_return,
- int *font_descent_return, int *width_return,
- int *max_ascent_return, int *max_descent_return,
- int *lbearing_return, int *rbearing_return)
-{
- int i, upm, ascent, descent, pw;
- TT_Instance_Metrics imetrics;
- TT_Glyph_Metrics gmetrics;
-
- if (!f)
- return;
-
- TT_Get_Instance_Metrics(f->instance, &imetrics);
- upm = f->properties.header->Units_Per_EM;
- ascent = (f->properties.horizontal->Ascender * imetrics.y_ppem) / upm;
- descent = (f->properties.horizontal->Descender * imetrics.y_ppem) / upm;
- if (ascent < 0)
- ascent = -ascent;
- if (descent < 0)
- descent = -descent;
- pw = 0;
-
- for (i = 0; text[i]; i++)
- {
- unsigned char j = text[i];
-
- if (!TT_VALID(f->glyphs[j]))
- continue;
- TT_Get_Glyph_Metrics(f->glyphs[j], &gmetrics);
- if (i == 0)
- {
- if (lbearing_return)
- *lbearing_return = ((-gmetrics.bearingX) / 64);
- }
- if (text[i + 1] == 0)
- {
- if (rbearing_return)
- *rbearing_return =
- ((gmetrics.bbox.xMax - gmetrics.advance) / 64);
- }
- pw += gmetrics.advance / 64;
- }
- if (font_ascent_return)
- *font_ascent_return = ascent;
- if (font_descent_return)
- *font_descent_return = descent;
- if (width_return)
- *width_return = pw;
- if (max_ascent_return)
- *max_ascent_return = f->max_ascent;
- if (max_descent_return)
- *max_descent_return = f->max_descent;
-}
-#endif /* USE_IMLIB1 */
-
#if TEST_TTFONT
#undef XSync
@@ -1194,11 +135,9 @@
disp = XOpenDisplay(NULL);
-#if USE_IMLIB2
imlib_context_set_display(disp);
imlib_context_set_visual(DefaultVisual(disp, DefaultScreen(disp)));
imlib_context_set_colormap(DefaultColormap(disp, DefaultScreen(disp)));
-#endif
srand(time(NULL));
win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 640, 480, 0,
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs