summaryrefslogtreecommitdiff
path: root/pango
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2000-11-30 21:04:52 +0000
committerTor Lillqvist <tml@src.gnome.org>2000-11-30 21:04:52 +0000
commit86666507ded9c2dd4d89e21c8694d14eabe6c0d9 (patch)
tree237765b634b73f5e113830fa44d8f080188b9837 /pango
parent801c16be4a652441d34df85892621470fce58f28 (diff)
downloadpango-86666507ded9c2dd4d89e21c8694d14eabe6c0d9.tar.gz
Define PANGO_VERSION.
2000-11-30 Tor Lillqvist <tml@iki.fi> * pango/makefile.mingw.in (DEFINES): Define PANGO_VERSION. Changes by Hans Breuer: * pango/pango-layout.c (shape_tab): Add a FIXME comment. * pango/pango-markup.c (compare_xcolor_entries): Use g_strcasecmp. * pango/pango-utils.c (pango_get_sysconf_subdirectory): Use second fallback location if there is no pango subdir in the Windows directory. * pango/pangowin32-fontmap.c (pango_win32_font_entry_get_coverage): Check if fopen succeeded. * pango/pangowin32-private.h (DEBUGGING): Turn off. * pango/pangowin32.c (pango_win32_unicode_classify): We can in fact get out of the loop. Return invalid value in that case. (subfont_has_glyph): Improve performance a bit. * pango/querymodules.c: Small change for MSVC build. * modules/basic/basic-win32.c (basic_engine_get_coverage): Performance improvement. * examples/viewer-win32.c (main): Disable double buffering on the layout widget.
Diffstat (limited to 'pango')
-rw-r--r--pango/makefile.mingw.in2
-rw-r--r--pango/pango-layout.c4
-rw-r--r--pango/pango-markup.c2
-rw-r--r--pango/pango-utils.c34
-rw-r--r--pango/pangowin32-fontmap.c15
-rw-r--r--pango/pangowin32-private.h2
-rw-r--r--pango/pangowin32.c23
-rw-r--r--pango/querymodules.c8
8 files changed, 78 insertions, 12 deletions
diff --git a/pango/makefile.mingw.in b/pango/makefile.mingw.in
index aa9b3a2f..b27ed386 100644
--- a/pango/makefile.mingw.in
+++ b/pango/makefile.mingw.in
@@ -8,7 +8,7 @@ PANGO_VER = @VERSION@
OPTIMIZE = -g -Wall
INCLUDES = -I .. -I .
-DEFINES =
+DEFINES = -DPANGO_VERSION=\"$(PANGO_VER)\"
DEPCFLAGS = $(GLIB_CFLAGS) $(LIBICONV_CFLAGS) $(FRIBIDI_CFLAGS) $(FREETYPE2_CFLAGS)
all : \
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 838c9830..4edb2da4 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -2100,6 +2100,10 @@ shape_tab (PangoLayoutLine *line,
glyphs->log_clusters[0] = 0;
+ /* FIXME: this is making an endless loop under certain continditions.
+ * It happens with get_tab_pos () returning 0, cause there are no tabs.
+ * HB: condition (i < line->layout->length) seems *not* to fix it.
+ */
for (i=0;;i++)
{
int tab_pos = get_tab_pos (line->layout, i);
diff --git a/pango/pango-markup.c b/pango/pango-markup.c
index 9677b6b5..b6cbe2e7 100644
--- a/pango/pango-markup.c
+++ b/pango/pango-markup.c
@@ -2143,7 +2143,7 @@ static ColorEntry xColors[] = {
static int
compare_xcolor_entries (const void *a, const void *b)
{
- return strcasecmp ((const char *) a, ((const ColorEntry *) b)->name);
+ return g_strcasecmp ((const char *) a, ((const ColorEntry *) b)->name);
}
static gboolean
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index b243f7be..91b50d80 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -41,6 +41,12 @@
#ifdef G_OS_WIN32
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifndef S_ISDIR
+#define S_ISDIR(mode) ((mode)&_S_IFDIR)
+#endif
+
#define STRICT
#include <windows.h>
@@ -618,7 +624,12 @@ pango_get_sysconf_subdirectory (void)
/* On Windows we don't hardcode any paths (SYSCONFDIR) in the DLL,
* but rely on an installation program to store the installation
* directory in the registry. If no installation program has been
- * used, punt and assume the Pango directory is %WINDIR%\Pango.
+ * used, assume the Pango directory is %WINDIR%\Pango.
+ *
+ * If the latter doesn't exist either, fall back to the directory
+ * the pango-$PANGO_VERSION.dll comes from, to stop polluting
+ * neither the Registry nor the windows directory (which may be
+ * write protected with Win2K anyway).
*/
static gboolean been_here = FALSE;
@@ -627,6 +638,7 @@ pango_get_sysconf_subdirectory (void)
HKEY reg_key = NULL;
DWORD type;
DWORD nbytes = sizeof (pango_sysconf_dir);
+ struct stat st;
if (been_here)
return pango_sysconf_dir;
@@ -642,6 +654,26 @@ pango_get_sysconf_subdirectory (void)
/* Uh oh. Use %WinDir%\Pango */
GetWindowsDirectory (win_dir, sizeof (win_dir));
sprintf (pango_sysconf_dir, "%s\\pango", win_dir);
+
+ if (!stat (pango_sysconf_dir, &st) || !S_ISDIR (st.st_mode))
+ {
+ /* Oops. %WinDir%\pango does not exist */
+ HMODULE hm = NULL;
+ gchar* libname = g_strdup_printf ("pango-%s.dll", PANGO_VERSION);
+ hm = GetModuleHandle (libname);
+ if (!hm)
+ g_warning ("Can't find myself (%s)", libname);
+ else
+ {
+ GetModuleFileName (hm,
+ pango_sysconf_dir,
+ sizeof(pango_sysconf_dir));
+ /* strip dll name */
+ if (strrchr (pango_sysconf_dir, '\\'))
+ *strrchr (pango_sysconf_dir, '\\') = 0;
+ }
+ g_free (libname);
+ }
}
if (reg_key != NULL)
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index 83ce9454..9ad3999e 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -1397,12 +1397,17 @@ pango_win32_font_entry_get_coverage (PangoWin32FontEntry *entry,
g_hash_table_destroy (coverage_hash);
cache_file = fopen (cache_file_name, "wb");
- pango_coverage_to_bytes (result, &buf, &buflen);
- PING (("saving %d bytes to %s", buflen, cache_file_name));
- fwrite (buf, buflen, 1, cache_file);
- fclose (cache_file);
+ if (cache_file)
+ {
+ pango_coverage_to_bytes (result, &buf, &buflen);
+ PING (("saving %d bytes to %s", buflen, cache_file_name));
+ fwrite (buf, buflen, 1, cache_file);
+ fclose (cache_file);
+ g_free (buf);
+ }
+ else
+ g_warning ("Unable to open %s for writing", cache_file_name);
g_free (cache_file_name);
- g_free (buf);
}
entry->coverage = result;
diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h
index 596f7a92..0fc0dd94 100644
--- a/pango/pangowin32-private.h
+++ b/pango/pangowin32-private.h
@@ -23,7 +23,7 @@
#ifndef __PANGOWIN32_PRIVATE_H__
#define __PANGOWIN32_PRIVATE_H__
-#define DEBUGGING 1
+#define DEBUGGING 0
#if defined(DEBUGGING) && DEBUGGING
#ifdef __GNUC__
diff --git a/pango/pangowin32.c b/pango/pangowin32.c
index 2b457f4c..5c434a7a 100644
--- a/pango/pangowin32.c
+++ b/pango/pangowin32.c
@@ -557,8 +557,7 @@ pango_win32_unicode_classify (wchar_t wc)
else
return -1;
}
- /* NOTREACHED */
- return 0;
+ return PANGO_WIN32_U_LAST_PLUS_ONE;
}
static void
@@ -989,13 +988,18 @@ subfont_has_glyph (PangoFont *font,
{
TEXTMETRIC tm;
PangoWin32Font *win32font = (PangoWin32Font *) font;
+ PangoWin32UnicodeSubrange subrange;
wchar_t default_wc;
#ifdef HEAVY_DEBUGGING
static int dispx = 5, dispy = 0;
#endif
+ subrange = pango_win32_unicode_classify (wc);
+ if (PANGO_WIN32_U_LAST_PLUS_ONE == subrange)
+ return FALSE;
+
if (!pango_win32_logfont_has_subrange (win32font->fontmap, &info->logfont,
- pango_win32_unicode_classify (wc)))
+ subrange))
return FALSE;
if (info->buf_hbm == NULL)
@@ -1044,6 +1048,19 @@ subfont_has_glyph (PangoFont *font,
SelectObject (info->buf_hdc, info->buf_hbm);
}
+
+#if 0 /* This doesn't work either */
+ /* GetTextMetricsW unsupported on Win9x, questionable results
+ * on NT 4.0
+ */
+ if (GetTextMetricsW (info->buf_hdc, &tmw)
+ && ((tmw.tmLastChar < wc) || (wc < tmw.tmFirstChar)))
+ {
+ //g_print("ShortCut %d %d %d\n", wc, tmw.tmFirstChar, tmw.tmLastChar);
+ return FALSE;
+ }
+#endif
+
/* Draw character into our bitmap; compare with the bitmap for
* the default character. If they are identical, this character
* does not exist in the font.
diff --git a/pango/querymodules.c b/pango/querymodules.c
index 6d8b3210..7ce2feb5 100644
--- a/pango/querymodules.c
+++ b/pango/querymodules.c
@@ -38,6 +38,14 @@
#ifdef G_OS_WIN32
#define SOEXT ".dll"
+#ifndef PATH_MAX
+#include <stdlib.h>
+#define PATH_MAX _MAX_PATH
+#endif /* PATH_MAX */
+#ifdef _MSC_VER
+#include <direct.h>
+#define getcwd _getcwd
+#endif
#else
#define SOEXT ".so"
#endif