summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2005-02-24 19:52:40 +0000
committerOwen Taylor <otaylor@src.gnome.org>2005-02-24 19:52:40 +0000
commita1d88c49c68f60982dd8301a913d2930728fc77d (patch)
tree601dac7acc0d6131a413c9ad23171515ca50c432 /modules
parentf0653b4131c0c2d811f662785a7b4d971d370bef (diff)
downloadpango-a1d88c49c68f60982dd8301a913d2930728fc77d.tar.gz
PangoCairoFontMap for win32 fonts.
2005-02-24 Owen Taylor <otaylor@redhat.com> * pango/pangocairo-win32.h pango/pangocairo-win32font.c pango/pangocairo-win32fontmap.c pango/Makefile.am: PangoCairoFontMap for win32 fonts. * pango/pangocairo-fontmap.c: Use PangoCairoWin32FontMap when available. * pango/pangowin32.h pango/pangowin32-fontmap.h pango/pangowin32.c: Add virtual pango_win32_font_select_font() to prepare a DC for use with a PangoWin32Font, and to release, pango_win32_font_scale_font() to get logical unit => Pango units scale, pango_win32_font_done_font() to release resources. * pango/pangowin32-fontmap.[ch]: Add a find_font() virtual method to allow subclasses that change how PangoFont lookup and creation happens. * pango/pangowin32-fontmap.c: Move initialization into pango_win32_font_map_init() to facilitate derivation. * pango/pangowin2.c pango/pangowin32-fontmap.c pango/pangowin32-private.h: Move PangoWin32Font/PangoWin32FontMap definitions into pangowin32-private.h to allow derivation for PangoCairoWin32Font. * modules/basic/basic-win32.c: Use pango_win32_font_select_font() and friends. * modules/basic/basic-win32.c: Use g_utf8_to_utf16 instead of g_convert for simplicity and speed. * pango/fonts.c (pango_font_get_font_map) pango/pango-font.h pango/pangofc-font.c pango/pangowin32.c pango/pango.c pango/pango.def docs/pango-sections.txt: Add a virtual function to get the fontmap for a font. * pango/pangocairo-render.c: Use pango_font_get_font_map() rather than PangoFcFontMap hack. * pango/pango-types.h: Move the declaration of PangoFontMap here to avoid interactions between pango-font.h and pango-fontmap.h. * pango/pangocairo.h: Remove accidental include of pangofc-fontmap.h.
Diffstat (limited to 'modules')
-rw-r--r--modules/basic/basic-win32.c46
1 files changed, 12 insertions, 34 deletions
diff --git a/modules/basic/basic-win32.c b/modules/basic/basic-win32.c
index 236532c6..e4ee80c3 100644
--- a/modules/basic/basic-win32.c
+++ b/modules/basic/basic-win32.c
@@ -24,6 +24,7 @@
#define BASIC_WIN32_DEBUGGING
+#include <math.h>
#include <stdlib.h>
#include <glib.h>
@@ -713,6 +714,7 @@ itemize_shape_and_place (PangoFont *font,
SCRIPT_CONTROL control;
SCRIPT_STATE state;
SCRIPT_ITEM items[100];
+ double scale = pango_win32_font_get_scale_factor (font);
memset (&control, 0, sizeof (control));
memset (&state, 0, sizeof (state));
@@ -822,9 +824,9 @@ itemize_shape_and_place (PangoFont *font,
if (iglyphs[glyphix] != 0)
{
glyphs->glyphs[ng+glyphix].glyph = iglyphs[glyphix];
- glyphs->glyphs[ng+glyphix].geometry.width = PANGO_SCALE * advances[glyphix];
- glyphs->glyphs[ng+glyphix].geometry.x_offset = PANGO_SCALE * offsets[glyphix].du;
- glyphs->glyphs[ng+glyphix].geometry.y_offset = PANGO_SCALE * offsets[glyphix].dv;
+ glyphs->glyphs[ng+glyphix].geometry.width = floor (0.5 + scale * advances[glyphix]);
+ glyphs->glyphs[ng+glyphix].geometry.x_offset = floor (0.5 + scale * offsets[glyphix].du);
+ glyphs->glyphs[ng+glyphix].geometry.y_offset = floor (0.5 + scale * offsets[glyphix].dv);
}
else
{
@@ -865,40 +867,19 @@ uniscribe_shape (PangoFont *font,
PangoGlyphString *glyphs)
{
wchar_t *wtext;
- int wlen, i;
+ long wlen;
+ int i;
gboolean retval = TRUE;
- HGDIOBJ old_font = NULL;
- HFONT hfont = NULL;
- LOGFONT *lf;
SCRIPT_CACHE script_cache[100];
- wtext = (wchar_t *) g_convert (text, length, "UTF-16LE", "UTF-8",
- NULL, &wlen, NULL);
- if (wtext == NULL)
+ if (!pango_win32_font_select_font (font, hdc))
return FALSE;
- wlen /= 2;
-
- lf = pango_win32_font_logfont (font);
- hfont = pango_win32_font_cache_load (font_cache, lf);
- g_free (lf);
-
- if (hfont == NULL)
+ wtext = g_utf8_to_utf16 (text, length, NULL, &wlen, NULL);
+ if (wtext == NULL)
retval = FALSE;
if (retval)
- old_font = SelectObject (hdc, hfont);
-
- if (old_font == NULL)
- {
-#ifdef BASIC_WIN32_DEBUGGING
- if (pango_win32_debug)
- printf ("pango-basic-win32: SelectObject for font failed\n");
-#endif
- retval = FALSE;
- }
-
- if (retval)
{
memset (script_cache, 0, sizeof (script_cache));
retval = itemize_shape_and_place (font, hdc, wtext, wlen, analysis, glyphs, script_cache);
@@ -924,12 +905,9 @@ uniscribe_shape (PangoFont *font,
}
- g_free (wtext);
- if (old_font != NULL)
- SelectObject (hdc, old_font);
+ pango_win32_font_done_font (font);
- if (hfont != NULL)
- pango_win32_font_cache_unload (font_cache, hfont);
+ g_free (wtext);
return retval && glyphs->num_glyphs > 0;
}