diff --git a/firefox-1.0-pango-cairo.patch b/firefox-1.0-pango-cairo.patch deleted file mode 100644 index c4243cc..0000000 --- a/firefox-1.0-pango-cairo.patch +++ /dev/null @@ -1,152 +0,0 @@ ---- mozilla/gfx/src/gtk/nsFontMetricsPango.cpp.foo2 2005-06-20 13:12:24.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsFontMetricsPango.cpp 2005-06-20 10:16:59.000000000 -0400 -@@ -53,7 +53,6 @@ - #include "nsUnicharUtils.h" - #include "nsQuickSort.h" - --#include - #include - #include - #include -@@ -301,12 +300,11 @@ - - // Get our font face - FT_Face face; -+ face = pango_fc_font_lock_face(fcfont); -+ if (!face) -+ return NS_ERROR_NOT_AVAILABLE; -+ - TT_OS2 *os2; -- XftFont *xftFont = pango_xft_font_get_font(PANGO_FONT(fcfont)); -- if (!xftFont) -- return NS_ERROR_NOT_AVAILABLE; -- -- face = XftLockFace(xftFont); - os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); - - // mEmHeight (size in pixels of EM height) -@@ -318,10 +316,12 @@ - mEmHeight = PR_MAX(1, nscoord(size * f)); - - // mMaxAscent -- mMaxAscent = nscoord(xftFont->ascent * f); -+ val = MOZ_FT_TRUNC(face->size->metrics.ascender); -+ mMaxAscent = NSToIntRound(val * f); - - // mMaxDescent -- mMaxDescent = nscoord(xftFont->descent * f); -+ val = -MOZ_FT_TRUNC(face->size->metrics.descender); -+ mMaxDescent = NSToIntRound(val * f); - - nscoord lineHeight = mMaxAscent + mMaxDescent; - -@@ -341,7 +341,8 @@ - mEmDescent = mEmHeight - mEmAscent; - - // mMaxAdvance -- mMaxAdvance = nscoord(xftFont->max_advance_width * f); -+ val = MOZ_FT_TRUNC(face->size->metrics.max_advance); -+ mMaxAdvance = NSToIntRound(val * f); - - // mPangoSpaceWidth - PangoLayout *layout = pango_layout_new(mPangoContext); -@@ -364,17 +365,16 @@ - mAveCharWidth = tmpWidth; - - // mXHeight (height of an 'x' character) -- PRUnichar xUnichar('x'); -- XGlyphInfo extents; -- if (FcCharSetHasChar(xftFont->charset, xUnichar)) { -- XftTextExtents16(GDK_DISPLAY(), xftFont, &xUnichar, 1, &extents); -- mXHeight = extents.height; -+ if (pango_fc_font_has_char(fcfont, 'x')) { -+ PangoRectangle rect; -+ PangoGlyph glyph = pango_fc_font_get_glyph (fcfont, 'x'); -+ pango_font_get_glyph_extents (PANGO_FONT (fcfont), glyph, &rect, NULL); -+ mXHeight = NSToIntRound(rect.height * f / PANGO_SCALE); - } - else { - // 56% of ascent, best guess for non-true type or asian fonts -- mXHeight = nscoord(((float)mMaxAscent) * 0.56); -+ mXHeight = nscoord(((float)mMaxAscent) * 0.56 * f); - } -- mXHeight = nscoord(mXHeight * f); - - // mUnderlineOffset (offset for underlines) - val = CONVERT_DESIGN_UNITS_TO_PIXELS(face->underline_position, -@@ -384,7 +394,8 @@ - } - else { - mUnderlineOffset = -- -NSToIntRound(PR_MAX(1, floor(0.1 * xftFont->height + 0.5)) * f); -+ -NSToIntRound(PR_MAX(1, floor(0.1 * -+ MOZ_FT_TRUNC(face->size->metrics.height) + 0.5)) * f); - } - - // mUnderlineSize (thickness of an underline) -@@ -395,7 +406,8 @@ - } - else { - mUnderlineSize = -- NSToIntRound(PR_MAX(1, floor(0.05 * xftFont->height + 0.5)) * f); -+ NSToIntRound(PR_MAX(1, -+ floor(0.05 * MOZ_FT_TRUNC(face->size->metrics.height) + 0.5)) * f); - } - - // mSuperscriptOffset -@@ -426,7 +438,7 @@ - // mStrikeoutSize - mStrikeoutSize = mUnderlineSize; - -- XftUnlockFace(xftFont); -+ pango_fc_font_unlock_face(fcfont); - - /* - printf("%i\n", mXHeight); -@@ -893,7 +905,7 @@ - { - if (aIsRTL) { - if (!mRTLPangoContext) { -- mRTLPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); -+ mRTLPangoContext = gdk_pango_context_get(); - pango_context_set_base_dir(mRTLPangoContext, PANGO_DIRECTION_RTL); - - gdk_pango_context_set_colormap(mRTLPangoContext, gdk_rgb_get_cmap()); -@@ -1163,7 +1175,7 @@ - NS_ConvertUCS2toUTF8 name(aName); - - nsresult rv = NS_ERROR_FAILURE; -- PangoContext *context = pango_xft_get_context(GDK_DISPLAY(), 0); -+ PangoContext *context = gdk_pango_context_get(); - PangoFontFamily **familyList; - int n; - -@@ -1262,7 +1274,7 @@ - - // Now that we have the font description set up, create the - // context. -- mLTRPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); -+ mLTRPangoContext = gdk_pango_context_get(); - mPangoContext = mLTRPangoContext; - - // Make sure to set the base direction to LTR - if layout needs to ---- mozilla/gfx/src/gtk/mozilla-decoder.cpp.noxft 2005-08-18 22:41:26.000000000 -0400 -+++ mozilla/gfx/src/gtk/mozilla-decoder.cpp 2005-08-18 22:38:01.000000000 -0400 -@@ -40,7 +40,7 @@ - #define PANGO_ENABLE_ENGINE - - #include "mozilla-decoder.h" --#include -+#include - #include - #include - #include -@@ -208,7 +208,7 @@ - } - } - -- pango_fc_font_map_add_decoder_find_func(PANGO_FC_FONT_MAP(pango_xft_get_font_map(GDK_DISPLAY(),gdk_x11_get_default_screen())), -+ pango_fc_font_map_add_decoder_find_func(PANGO_FC_FONT_MAP(pango_cairo_font_map_get_default()), - mozilla_find_decoder, - NULL, - NULL); diff --git a/firefox-1.1-modal-filechooser.patch b/firefox-1.1-modal-filechooser.patch deleted file mode 100644 index c4f7f5f..0000000 --- a/firefox-1.1-modal-filechooser.patch +++ /dev/null @@ -1,66 +0,0 @@ -Index: widget/src/gtk2/nsFilePicker.cpp -=================================================================== -RCS file: /cvsroot/mozilla/widget/src/gtk2/nsFilePicker.cpp,v -retrieving revision 1.10 -diff -p -u -u -p -U10 -r1.10 nsFilePicker.cpp ---- widget/src/gtk2/nsFilePicker.cpp 1 Jul 2005 04:40:30 -0000 1.10 -+++ widget/src/gtk2/nsFilePicker.cpp 16 Jul 2005 08:39:26 -0000 -@@ -457,28 +457,32 @@ confirm_overwrite_file (GtkWidget *paren - leafName.get() - }; - - nsXPIDLString title, message; - bundle->GetStringFromName(NS_LITERAL_STRING("confirmTitle").get(), - getter_Copies(title)); - bundle->FormatStringFromName(NS_LITERAL_STRING("confirmFileReplacing").get(), - formatStrings, NS_ARRAY_LENGTH(formatStrings), - getter_Copies(message)); - -+ GtkWindow *parent_window = GTK_WINDOW(parent); - GtkWidget *dialog; - -- dialog = gtk_message_dialog_new(GTK_WINDOW(parent), -+ dialog = gtk_message_dialog_new(parent_window, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - NS_ConvertUTF16toUTF8(message).get()); - gtk_window_set_title(GTK_WINDOW(dialog), NS_ConvertUTF16toUTF8(title).get()); -+ if (parent_window && parent_window->group) { -+ gtk_window_group_add_window(parent_window->group, GTK_WINDOW(dialog)); -+ } - - PRBool result = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES); - gtk_widget_destroy (dialog); - - return result; - } - - NS_IMETHODIMP - nsFilePicker::Show(PRInt16 *aReturn) - { -@@ -491,20 +495,24 @@ nsFilePicker::Show(PRInt16 *aReturn) - - GtkFileChooserAction action = GetGtkFileChooserAction(mMode); - const gchar *accept_button = (mMode == GTK_FILE_CHOOSER_ACTION_SAVE) - ? GTK_STOCK_SAVE : GTK_STOCK_OPEN; - GtkWidget *file_chooser = - _gtk_file_chooser_dialog_new(title, parent_widget, action, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - accept_button, GTK_RESPONSE_ACCEPT, - NULL); - -+ if (parent_widget && parent_widget->group) { -+ gtk_window_group_add_window(parent_widget->group, GTK_WINDOW(file_chooser)); -+ } -+ - if (mMode == nsIFilePicker::modeOpenMultiple) { - _gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(file_chooser), TRUE); - } else if (mMode == nsIFilePicker::modeSave) { - char *default_filename = ToNewUTF8String(mDefault); - _gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(file_chooser), - NS_STATIC_CAST(const gchar*, default_filename)); - nsMemory::Free(default_filename); - } - - gtk_dialog_set_default_response(GTK_DIALOG(file_chooser), GTK_RESPONSE_ACCEPT); diff --git a/firefox-1.1-visibility.patch b/firefox-1.1-visibility.patch deleted file mode 100755 index e0665fe..0000000 --- a/firefox-1.1-visibility.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: configure -=================================================================== -RCS file: /cvsroot/mozilla/configure,v -retrieving revision 1.1443 -diff -u -p -6 -r1.1443 configure ---- configure 2 Jun 2005 04:00:20 -0000 1.1443 -+++ configure 6 Jun 2005 07:34:06 -0000 -@@ -7303,13 +7303,13 @@ else - int foo_default = 1; - EOF - ac_cv_visibility_pragma=no - if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then - if grep '\.hidden.*foo_hidden' conftest.s >/dev/null; then - if ! grep '\.hidden.*foo_default' conftest.s > /dev/null; then -- ac_cv_visibility_pragma=yes -+ ac_cv_visibility_pragma=no - fi - fi - fi - rm -f conftest.cs - - fi diff --git a/firefox-1.5-dnd-nograb.patch b/firefox-1.5-dnd-nograb.patch deleted file mode 100644 index ebced04..0000000 --- a/firefox-1.5-dnd-nograb.patch +++ /dev/null @@ -1,25 +0,0 @@ -See https://bugzilla.mozilla.org/show_bug.cgi?id=367203 - -Index: mozilla/widget/src/gtk2/nsDragService.cpp -=================================================================== -RCS file: /cvsroot/mozilla/widget/src/gtk2/nsDragService.cpp,v -retrieving revision 1.9.10.1 -diff -d -u -p -r1.9.10.1 nsDragService.cpp ---- mozilla/widget/src/gtk2/nsDragService.cpp 22 Jun 2006 21:37:45 -0000 1.9.10.1 -+++ mozilla/widget/src/gtk2/nsDragService.cpp 31 Jan 2007 04:27:43 -0000 -@@ -799,7 +799,6 @@ nsDragService::IsTargetContextList(void) - void - nsDragService::GetTargetDragData(GdkAtom aFlavor) - { -- gtk_grab_add(mHiddenWidget); - PR_LOG(sDragLm, PR_LOG_DEBUG, ("getting data flavor %d\n", aFlavor)); - PR_LOG(sDragLm, PR_LOG_DEBUG, ("mLastWidget is %p and mLastContext is %p\n", - mTargetWidget, mTargetDragContext)); -@@ -817,7 +816,6 @@ nsDragService::GetTargetDragData(GdkAtom - gtk_main_iteration(); - } - PR_LOG(sDragLm, PR_LOG_DEBUG, ("finished inner iteration\n")); -- gtk_grab_remove(mHiddenWidget); - } - - void diff --git a/firefox-1.5-gtk-key-theme-crash.patch b/firefox-1.5-gtk-key-theme-crash.patch deleted file mode 100644 index a9175cd..0000000 --- a/firefox-1.5-gtk-key-theme-crash.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: widget/src/gtk2/nsWindow.cpp -=================================================================== -RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.cpp,v -retrieving revision 1.185 -diff -u -8 -p -r1.185 nsWindow.cpp ---- widget/src/gtk2/nsWindow.cpp 20 Sep 2006 19:16:19 -0000 1.185 -+++ widget/src/gtk2/nsWindow.cpp 22 Sep 2006 05:07:04 -0000 -@@ -2859,19 +2859,16 @@ nsWindow::NativeCreate(nsIWidget - g_signal_connect(G_OBJECT(mShell), "window_state_event", - G_CALLBACK(window_state_event_cb), NULL); - - GtkSettings* default_settings = gtk_settings_get_default(); - g_signal_connect_after(default_settings, - "notify::gtk-theme-name", - G_CALLBACK(theme_changed_cb), this); - g_signal_connect_after(default_settings, -- "notify::gtk-key-theme-name", -- G_CALLBACK(theme_changed_cb), this); -- g_signal_connect_after(default_settings, - "notify::gtk-font-name", - G_CALLBACK(theme_changed_cb), this); - } - - if (mContainer) { - g_signal_connect_after(G_OBJECT(mContainer), "size_allocate", - G_CALLBACK(size_allocate_cb), NULL); - g_signal_connect(G_OBJECT(mContainer), "expose_event", diff --git a/firefox-1.5.0.10-nss-system-nspr.patch b/firefox-1.5.0.10-nss-system-nspr.patch deleted file mode 100644 index 8a2023e..0000000 --- a/firefox-1.5.0.10-nss-system-nspr.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- mozilla/security/coreconf/location.mk.old 2007-02-13 21:41:48.000000000 +0100 -+++ mozilla/security/coreconf/location.mk 2007-02-15 16:52:03.000000000 +0100 -@@ -61,6 +61,8 @@ - - DIST = $(SOURCE_PREFIX)/$(PLATFORM) - -+NSPR_LIBDIR = $(DIST)/lib -+ - ifdef BUILD_DEBUG_GC - DEFINES += -DDEBUG_GC - endif ---- mozilla/security/manager/Makefile.in.old 2007-02-13 21:43:11.000000000 +0100 -+++ mozilla/security/manager/Makefile.in 2007-02-16 13:58:31.000000000 +0100 -@@ -115,12 +115,23 @@ - FREEBL_64FPU_CHK = libfreebl_64fpu_3.chk - endif - -+ABS_DIST := $(shell cd $(DIST) && pwd) -+ifeq ($(OS_ARCH),WINNT) -+ABS_DIST := $(shell cygpath -w $(ABS_DIST) | sed -e 's|\\\\|/|g') -+endif -+NSPR_LIBDIR = $(firstword $(filter -L%,$(NSPR_LIBS))) -+ifneq (,$(strip $(NSPR_LIBDIR))) -+NSPR_LIBDIR := $(subst -L,,$(subst -L$(DIST),-L$(ABS_DIST),$(NSPR_LIBDIR))) -+else -+NSPR_LIBDIR = $(ABS_DIST)/lib -+endif - # NSS makefiles are not safe for parallel execution. - DEFAULT_GMAKE_FLAGS = MAKE="$(MAKE) -j1" -j1 - DEFAULT_GMAKE_FLAGS += CC="$(CC)" --DEFAULT_GMAKE_FLAGS += MOZILLA_INCLUDES="-I$(MOZ_BUILD_ROOT)/dist/include/nspr -I$(MOZ_BUILD_ROOT)/dist/include/dbm" --DEFAULT_GMAKE_FLAGS += SOURCE_MD_DIR=$(MOZ_BUILD_ROOT)/dist --DEFAULT_GMAKE_FLAGS += DIST=$(MOZ_BUILD_ROOT)/dist -+DEFAULT_GMAKE_FLAGS += MOZILLA_INCLUDES="$(subst -I$(DIST),-I$(ABS_DIST),$(NSPR_CFLAGS) -I$(DIST)/include/dbm)" -+DEFAULT_GMAKE_FLAGS += SOURCE_MD_DIR=$(ABS_DIST) -+DEFAULT_GMAKE_FLAGS += DIST=$(ABS_DIST) -+DEFAULT_GMAKE_FLAGS += NSPR_LIBDIR=$(NSPR_LIBDIR) - DEFAULT_GMAKE_FLAGS += MOZILLA_CLIENT=1 - DEFAULT_GMAKE_FLAGS += NO_MDUPDATE=1 - ABS_topsrcdir := $(shell cd $(topsrcdir); pwd) diff --git a/firefox-1.5.0.10-with-system-nss.patch b/firefox-1.5.0.10-with-system-nss.patch deleted file mode 100644 index f210469..0000000 --- a/firefox-1.5.0.10-with-system-nss.patch +++ /dev/null @@ -1,583 +0,0 @@ ---- mozilla/configure.in.ccc 2006-08-31 17:37:23.000000000 +0200 -+++ mozilla/configure.in 2007-02-22 14:42:15.000000000 +0100 -@@ -86,6 +86,7 @@ - MOZPNG=10207 - MOZZLIB=1.2.3 - NSPR_VERSION=4 -+NSS_VERSION=3 - - dnl Set the minimum version of toolkit libs used by mozilla - dnl ======================================================== -@@ -3537,6 +3538,19 @@ - fi - fi - -+dnl ======================================================== -+dnl = If NSS was not detected in the system, -+dnl = use the one in the source tree (mozilla/security/nss) -+dnl ======================================================== -+ -+MOZ_ARG_WITH_BOOL(system-nss, -+[ --with-system-nss Use system installed NSS], -+ _USE_SYSTEM_NSS=1 ) -+ -+if test -n "$_USE_SYSTEM_NSS"; then -+ AM_PATH_NSS(3.0.0, [MOZ_NATIVE_NSS=1], [MOZ_NATIVE_NSS=]) -+fi -+ - if test -z "$SKIP_LIBRARY_CHECKS"; then - dnl system JPEG support - dnl ======================================================== -@@ -6783,6 +6797,10 @@ - AC_SUBST(NSPR_LIBS) - AC_SUBST(MOZ_NATIVE_NSPR) - -+AC_SUBST(NSS_CFLAGS) -+AC_SUBST(NSS_LIBS) -+AC_SUBST(MOZ_NATIVE_NSS) -+ - AC_SUBST(CFLAGS) - AC_SUBST(CXXFLAGS) - AC_SUBST(CPPFLAGS) ---- mozilla/config/autoconf.mk.in.ccc 2006-04-21 22:50:30.000000000 +0200 -+++ mozilla/config/autoconf.mk.in 2007-02-22 14:42:14.000000000 +0100 -@@ -231,6 +231,7 @@ - MOZ_INSURE_EXCLUDE_DIRS = @MOZ_INSURE_EXCLUDE_DIRS@ - - MOZ_NATIVE_NSPR = @MOZ_NATIVE_NSPR@ -+MOZ_NATIVE_NSS = @MOZ_NATIVE_NSS@ - - CROSS_COMPILE = @CROSS_COMPILE@ - -@@ -386,6 +387,48 @@ - NSPR_CFLAGS = @NSPR_CFLAGS@ - NSPR_LIBS = @NSPR_LIBS@ - -+NSS_CONFIG = @NSS_CONFIG@ -+NSS_CFLAGS = @NSS_CFLAGS@ -+NSS_LIBS = @NSS_LIBS@ -+ -+ifdef MOZ_NATIVE_NSS -+NSS_DEP_LIBS = \ -+ $(NULL) -+NSS_LIBS += \ -+ -lcrmf \ -+ $(NULL) -+else -+NSS_DEP_LIBS = \ -+ $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -+ $(DIST)/lib/$(DLL_PREFIX)smime3$(DLL_SUFFIX) \ -+ $(DIST)/lib/$(DLL_PREFIX)ssl3$(DLL_SUFFIX) \ -+ $(DIST)/lib/$(DLL_PREFIX)nss3$(DLL_SUFFIX) \ -+ $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX) \ -+ $(NULL) -+NSS_LIBS = \ -+ $(LIBS_DIR) \ -+ $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -+ -lsmime3 \ -+ -lssl3 \ -+ -lnss3 \ -+ -lsoftokn3 \ -+ $(NULL) -+endif -+ -+ifneq (,$(filter OS2 WINNT WINCE, $(OS_ARCH))) -+ifndef GNU_CC -+ifndef MOZ_NATIVE_NSS -+NSS_LIBS = \ -+ $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -+ $(DIST)/lib/$(LIB_PREFIX)smime3.$(IMPORT_LIB_SUFFIX) \ -+ $(DIST)/lib/$(LIB_PREFIX)ssl3.$(IMPORT_LIB_SUFFIX) \ -+ $(DIST)/lib/$(LIB_PREFIX)nss3.$(IMPORT_LIB_SUFFIX) \ -+ $(DIST)/lib/$(LIB_PREFIX)softokn3.$(IMPORT_LIB_SUFFIX) \ -+ $(NULL) -+endif -+endif -+endif -+ - LDAP_CFLAGS = @LDAP_CFLAGS@ - LDAP_LIBS = @LDAP_LIBS@ - XPCOM_GLUE_LDOPTS = @XPCOM_GLUE_LDOPTS@ ---- mozilla/config/config.mk.ccc 2006-04-06 18:28:13.000000000 +0200 -+++ mozilla/config/config.mk 2007-02-22 14:42:14.000000000 +0100 -@@ -138,39 +138,6 @@ - FINAL_LINK_COMPS = $(DEPTH)/config/final-link-comps - FINAL_LINK_COMP_NAMES = $(DEPTH)/config/final-link-comp-names - --# --# NSS libs needed for final link in static build --# -- --NSS_LIBS = \ -- $(LIBS_DIR) \ -- $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -- -lsmime3 \ -- -lssl3 \ -- -lnss3 \ -- -lsoftokn3 \ -- $(NULL) -- --ifneq (,$(filter OS2 WINNT WINCE, $(OS_ARCH))) --ifndef GNU_CC --NSS_LIBS = \ -- $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -- $(DIST)/lib/$(LIB_PREFIX)smime3.$(IMPORT_LIB_SUFFIX) \ -- $(DIST)/lib/$(LIB_PREFIX)ssl3.$(IMPORT_LIB_SUFFIX) \ -- $(DIST)/lib/$(LIB_PREFIX)nss3.$(IMPORT_LIB_SUFFIX) \ -- $(DIST)/lib/$(LIB_PREFIX)softokn3.$(IMPORT_LIB_SUFFIX) \ -- $(NULL) --endif --endif -- --NSS_DEP_LIBS = \ -- $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \ -- $(DIST)/lib/$(DLL_PREFIX)smime3$(DLL_SUFFIX) \ -- $(DIST)/lib/$(DLL_PREFIX)ssl3$(DLL_SUFFIX) \ -- $(DIST)/lib/$(DLL_PREFIX)nss3$(DLL_SUFFIX) \ -- $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX) \ -- $(NULL) -- - MOZ_UNICHARUTIL_LIBS = $(DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX) - MOZ_REGISTRY_LIBS = $(DIST)/lib/$(LIB_PREFIX)mozreg_s.$(LIB_SUFFIX) - MOZ_WIDGET_SUPPORT_LIBS = $(DIST)/lib/$(LIB_PREFIX)widgetsupport_s.$(LIB_SUFFIX) ---- mozilla/aclocal.m4.ccc 2004-05-13 05:12:47.000000000 +0200 -+++ mozilla/aclocal.m4 2007-02-22 14:42:14.000000000 +0100 -@@ -8,6 +8,7 @@ - builtin(include, build/autoconf/libIDL.m4)dnl - builtin(include, build/autoconf/libIDL-2.m4)dnl - builtin(include, build/autoconf/nspr.m4)dnl -+builtin(include, build/autoconf/nss.m4)dnl - builtin(include, build/autoconf/libart.m4)dnl - builtin(include, build/autoconf/pkg.m4)dnl - builtin(include, build/autoconf/freetype2.m4)dnl ---- /dev/null 2007-02-21 10:09:45.647705500 +0100 -+++ mozilla/build/autoconf/nss.m4 2007-02-22 14:42:15.000000000 +0100 -@@ -0,0 +1,67 @@ -+# -*- tab-width: 4; -*- -+# Configure paths for NSS -+# Public domain - Chris Seawood 2001-04-05 -+# Based upon gtk.m4 (also PD) by Owen Taylor -+ -+dnl AM_PATH_NSS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) -+dnl Test for NSS, and define NSS_CFLAGS and NSS_LIBS -+AC_DEFUN(AM_PATH_NSS, -+[dnl -+ -+AC_ARG_WITH(nss-prefix, -+ [ --with-nss-prefix=PFX Prefix where NSS is installed], -+ nss_config_prefix="$withval", -+ nss_config_prefix="") -+ -+AC_ARG_WITH(nss-exec-prefix, -+ [ --with-nss-exec-prefix=PFX -+ Exec prefix where NSS is installed], -+ nss_config_exec_prefix="$withval", -+ nss_config_exec_prefix="") -+ -+ if test -n "$nss_config_exec_prefix"; then -+ nss_config_args="$nss_config_args --exec-prefix=$nss_config_exec_prefix" -+ if test -z "$NSS_CONFIG"; then -+ NSS_CONFIG=$nss_config_exec_prefix/bin/nss-config -+ fi -+ fi -+ if test -n "$nss_config_prefix"; then -+ nss_config_args="$nss_config_args --prefix=$nss_config_prefix" -+ if test -z "$NSS_CONFIG"; then -+ NSS_CONFIG=$nss_config_prefix/bin/nss-config -+ fi -+ fi -+ -+ unset ac_cv_path_NSS_CONFIG -+ AC_PATH_PROG(NSS_CONFIG, nss-config, no) -+ min_nss_version=ifelse([$1], ,3.0.0,$1) -+ AC_MSG_CHECKING(for NSS - version >= $min_nss_version (skipping)) -+ -+ no_nss="" -+ if test "$NSS_CONFIG" = "no"; then -+ no_nss="yes" -+ else -+ NSS_CFLAGS=`$NSS_CONFIG $nss_config_args --cflags` -+ NSS_LIBS=`$NSS_CONFIG $nss_config_args --libs` -+ -+ dnl Skip version check for now -+ nss_config_major_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` -+ nss_config_minor_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` -+ nss_config_micro_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` -+ fi -+ -+ if test -z "$no_nss"; then -+ AC_MSG_RESULT(yes) -+ ifelse([$2], , :, [$2]) -+ else -+ AC_MSG_RESULT(no) -+ fi -+ -+ -+ AC_SUBST(NSS_CFLAGS) -+ AC_SUBST(NSS_LIBS) -+ -+]) ---- mozilla/configure.ccc 2006-08-31 17:37:23.000000000 +0200 -+++ mozilla/configure 2007-02-22 14:42:15.000000000 +0100 -@@ -44,6 +44,13 @@ - --with-nspr-exec-prefix=PFX - Exec prefix where NSPR is installed" - ac_help="$ac_help -+ --with-system-nss Use system installed NSS" -+ac_help="$ac_help -+ --with-nss-prefix=PFX Prefix where NSS is installed" -+ac_help="$ac_help -+ --with-nss-exec-prefix=PFX -+ Exec prefix where NSS is installed" -+ac_help="$ac_help - --with-system-jpeg[=PFX] - Use system libjpeg [installed at prefix PFX]" - ac_help="$ac_help -@@ -1023,6 +1030,7 @@ - MOZPNG=10207 - MOZZLIB=1.2.3 - NSPR_VERSION=4 -+NSS_VERSION=3 - - GLIB_VERSION=1.2.0 - GTK_VERSION=1.2.0 -@@ -11399,6 +11407,123 @@ - fi - fi - -+ -+# Check whether --with-system-nss or --without-system-nss was given. -+if test "${with_system_nss+set}" = set; then -+ withval="$with_system_nss" -+ if test "$withval" = "yes"; then -+ _USE_SYSTEM_NSS=1 -+ elif test "$withval" = "no"; then -+ : -+ else -+ { echo "configure: error: Option, system-nss, does not take an argument ($withval)." 1>&2; exit 1; } -+ fi -+fi -+ -+ -+if test -n "$_USE_SYSTEM_NSS"; then -+ -+# Check whether --with-nss-prefix or --without-nss-prefix was given. -+if test "${with_nss_prefix+set}" = set; then -+ withval="$with_nss_prefix" -+ nss_config_prefix="$withval" -+else -+ nss_config_prefix="" -+fi -+ -+ -+# Check whether --with-nss-exec-prefix or --without-nss-exec-prefix was given. -+if test "${with_nss_exec_prefix+set}" = set; then -+ withval="$with_nss_exec_prefix" -+ nss_config_exec_prefix="$withval" -+else -+ nss_config_exec_prefix="" -+fi -+ -+ -+ if test -n "$nss_config_exec_prefix"; then -+ nss_config_args="$nss_config_args --exec-prefix=$nss_config_exec_prefix" -+ if test -z "$NSS_CONFIG"; then -+ NSS_CONFIG=$nss_config_exec_prefix/bin/nss-config -+ fi -+ fi -+ if test -n "$nss_config_prefix"; then -+ nss_config_args="$nss_config_args --prefix=$nss_config_prefix" -+ if test -z "$NSS_CONFIG"; then -+ NSS_CONFIG=$nss_config_prefix/bin/nss-config -+ fi -+ fi -+ -+ unset ac_cv_path_NSS_CONFIG -+ # Extract the first word of "nss-config", so it can be a program name with args. -+set dummy nss-config; ac_word=$2 -+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -+echo "configure:11363: checking for $ac_word" >&5 -+if eval "test \"`echo '$''{'ac_cv_path_NSS_CONFIG'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ case "$NSS_CONFIG" in -+ /*) -+ ac_cv_path_NSS_CONFIG="$NSS_CONFIG" # Let the user override the test with a path. -+ ;; -+ ?:/*) -+ ac_cv_path_NSS_CONFIG="$NSS_CONFIG" # Let the user override the test with a dos path. -+ ;; -+ *) -+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -+ ac_dummy="$PATH" -+ for ac_dir in $ac_dummy; do -+ test -z "$ac_dir" && ac_dir=. -+ if test -f $ac_dir/$ac_word; then -+ ac_cv_path_NSS_CONFIG="$ac_dir/$ac_word" -+ break -+ fi -+ done -+ IFS="$ac_save_ifs" -+ test -z "$ac_cv_path_NSS_CONFIG" && ac_cv_path_NSS_CONFIG="no" -+ ;; -+esac -+fi -+NSS_CONFIG="$ac_cv_path_NSS_CONFIG" -+if test -n "$NSS_CONFIG"; then -+ echo "$ac_t""$NSS_CONFIG" 1>&6 -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ -+ min_nss_version=3.0.0 -+ echo $ac_n "checking for NSS - version >= $min_nss_version (skipping)""... $ac_c" 1>&6 -+echo "configure:11398: checking for NSS - version >= $min_nss_version (skipping)" >&5 -+ -+ no_nss="" -+ if test "$NSS_CONFIG" = "no"; then -+ no_nss="yes" -+ else -+ NSS_CFLAGS=`$NSS_CONFIG $nss_config_args --cflags` -+ NSS_LIBS=`$NSS_CONFIG $nss_config_args --libs` -+ -+ nss_config_major_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` -+ nss_config_minor_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` -+ nss_config_micro_version=`$NSS_CONFIG $nss_config_args --version | \ -+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` -+ fi -+ -+ if test -z "$no_nss"; then -+ echo "$ac_t""yes" 1>&6 -+ MOZ_NATIVE_NSS=1 -+ else -+ echo "$ac_t""no" 1>&6 -+ fi -+ -+ -+ -+ -+ -+ -+fi -+ - if test -z "$SKIP_LIBRARY_CHECKS"; then - # Check whether --with-system-jpeg or --without-system-jpeg was given. - if test "${with_system_jpeg+set}" = set; then -@@ -19598,6 +19723,9 @@ - s%@NSPR_CONFIG@%$NSPR_CONFIG%g - s%@NSPR_CFLAGS@%$NSPR_CFLAGS%g - s%@NSPR_LIBS@%$NSPR_LIBS%g -+s%@NSS_CONFIG@%$NSS_CONFIG%g -+s%@NSS_CFLAGS@%$NSS_CFLAGS%g -+s%@NSS_LIBS@%$NSS_LIBS%g - s%@GTK_CONFIG@%$GTK_CONFIG%g - s%@GTK_CFLAGS@%$GTK_CFLAGS%g - s%@GTK_LIBS@%$GTK_LIBS%g -@@ -19879,6 +20007,7 @@ - s%@MOZ_PNG_CFLAGS@%$MOZ_PNG_CFLAGS%g - s%@MOZ_PNG_LIBS@%$MOZ_PNG_LIBS%g - s%@MOZ_NATIVE_NSPR@%$MOZ_NATIVE_NSPR%g -+s%@MOZ_NATIVE_NSS@%$MOZ_NATIVE_NSS%g - s%@COMPILE_CFLAGS@%$COMPILE_CFLAGS%g - s%@COMPILE_CXXFLAGS@%$COMPILE_CXXFLAGS%g - s%@CROSS_COMPILE@%$CROSS_COMPILE%g ---- mozilla/security/manager/ssl/src/nsNSSComponent.cpp.ccc 2005-08-26 08:41:50.000000000 +0200 -+++ mozilla/security/manager/ssl/src/nsNSSComponent.cpp 2007-02-22 14:42:15.000000000 +0100 -@@ -488,14 +488,6 @@ - } - - --#ifdef XP_MAC --#ifdef DEBUG --#define LOADABLE_CERTS_MODULE NS_LITERAL_CSTRING("NSSckbiDebug.shlb") --#else --#define LOADABLE_CERTS_MODULE NS_LITERAL_CSTRING("NSSckbi.shlb") --#endif /*DEBUG*/ --#endif /*XP_MAC*/ -- - static void setOCSPOptions(nsIPrefBranch * pref); - - NS_IMETHODIMP -@@ -689,40 +681,40 @@ - - const char *possible_ckbi_locations[] = { - NS_GRE_DIR, -- NS_XPCOM_CURRENT_PROCESS_DIR -+ NS_XPCOM_CURRENT_PROCESS_DIR, -+ 0 - }; -- -+ - for (size_t il = 0; il < sizeof(possible_ckbi_locations)/sizeof(const char*); ++il) { - nsCOMPtr mozFile; -- directoryService->Get( possible_ckbi_locations[il], -- NS_GET_IID(nsILocalFile), -- getter_AddRefs(mozFile)); -+ char *fullModuleName = nsnull; -+ -+ if (!possible_ckbi_locations[il]) -+ { -+ fullModuleName = PR_GetLibraryName(nsnull, "nssckbi"); -+ } -+ else -+ { -+ directoryService->Get( possible_ckbi_locations[il], -+ NS_GET_IID(nsILocalFile), -+ getter_AddRefs(mozFile)); - -- if (!mozFile) { -- continue; -+ if (!mozFile) { -+ continue; -+ } -+ -+ nsCAutoString processDir; -+ mozFile->GetNativePath(processDir); -+ fullModuleName = PR_GetLibraryName(processDir.get(), "nssckbi"); - } - -- char *fullModuleName = nsnull; --#ifdef XP_MAC -- nsCAutoString nativePath; -- mozFile->AppendNative(NS_LITERAL_CSTRING("Essential Files")); -- mozFile->AppendNative(LOADABLE_CERTS_MODULE); -- mozFile->GetNativePath(nativePath); -- fullModuleName = (char *) nativePath.get(); --#else -- nsCAutoString processDir; -- mozFile->GetNativePath(processDir); -- fullModuleName = PR_GetLibraryName(processDir.get(), "nssckbi"); --#endif - /* If a module exists with the same name, delete it. */ - NS_ConvertUCS2toUTF8 modNameUTF8(modName); - int modType; - SECMOD_DeleteModule(NS_CONST_CAST(char*, modNameUTF8.get()), &modType); - SECStatus rv_add = - SECMOD_AddNewModule(NS_CONST_CAST(char*, modNameUTF8.get()), fullModuleName, 0, 0); --#ifndef XP_MAC -- PR_Free(fullModuleName); // allocated by NSPR --#endif -+ PR_FreeLibraryName(fullModuleName); // allocated by NSPR - if (SECSuccess == rv_add) { - // found a module, no need to try other directories - break; ---- mozilla/security/manager/ssl/src/Makefile.in.ccc 2005-08-03 07:24:18.000000000 +0200 -+++ mozilla/security/manager/ssl/src/Makefile.in 2007-02-22 14:42:15.000000000 +0100 -@@ -123,8 +123,13 @@ - - # Use local includes because they are inserted before INCLUDES - # so that Mozilla's nss.h is used, not glibc's -+ifdef MOZ_NATIVE_NSS -+LOCAL_INCLUDES += $(NSS_CFLAGS) \ -+ $(NULL) -+else - LOCAL_INCLUDES += -I$(DIST)/public/nss \ - $(NULL) -+endif - - EXTRA_DSO_LDOPTS += \ - $(MOZ_UNICHARUTIL_LIBS) \ ---- mozilla/security/manager/Makefile.in.ccc 2007-02-22 14:42:14.000000000 +0100 -+++ mozilla/security/manager/Makefile.in 2007-02-22 14:45:44.000000000 +0100 -@@ -46,6 +46,8 @@ - MODULE = psm - - PACKAGE_FILE = psm.pkg -+ -+ifndef MOZ_NATIVE_NSS - PACKAGE_VARS += \ - NSS3_LIB \ - SMIME3_LIB \ -@@ -60,6 +62,7 @@ - $(NULL) - - LOADABLE_ROOT_MODULE = $(DLL_PREFIX)nssckbi$(DLL_SUFFIX) -+endif - - NSS3_LIB = $(DLL_PREFIX)nss3$(DLL_SUFFIX) - SMIME3_LIB = $(DLL_PREFIX)smime3$(DLL_SUFFIX) -@@ -200,6 +203,7 @@ - export:: .nss.cleaned - - .nss.cleaned: .nss.checkout -+ifndef MOZ_NATIVE_NSS - $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean - $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean - ifndef SKIP_CHK -@@ -207,9 +211,12 @@ - $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean - endif - touch $@ -+endif - - .nss.checkout: -+ifndef MOZ_NATIVE_NSS - touch $(srcdir)/$@ -+endif - - dependclean export packages chrome:: - $(MAKE) -C boot $@ -@@ -220,12 +227,15 @@ - endif - - libs:: -+ifndef MOZ_NATIVE_NSS - $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) -+endif - ifeq ($(OS_ARCH),WINNT) - cd $(DIST)/lib; cp -f $(LIB_PREFIX)dbm$(MOZ_BITS).$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX) - else - cd $(DIST)/lib; cp -f $(LIB_PREFIX)mozdbm_s.$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX); $(RANLIB) $(LIB_PREFIX)dbm.$(LIB_SUFFIX) - endif -+ifndef MOZ_NATIVE_NSS - $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) - ifndef SKIP_CHK - $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) -@@ -307,6 +317,7 @@ - $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_64FPU_LIB) $(DIST)/bin - endif - endif -+endif - $(MAKE) -C boot $@ - $(MAKE) -C ssl $@ - $(MAKE) -C locales $@ -@@ -315,6 +326,7 @@ - endif - - install:: -+ifndef MOZ_NATIVE_NSS - $(SYSINSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(DESTDIR)$(mozappdir) - ifndef SKIP_CHK - $(SYSINSTALL) -m 644 $(DIST)/lib/$(SOFTOKEN3_CHK) $(DESTDIR)$(mozappdir) -@@ -351,6 +363,7 @@ - $(SYSINSTALL) -m 755 $(DIST)/lib/$(FREEBL_64INT_LIB) $(DESTDIR)$(mozappdir) - $(SYSINSTALL) -m 755 $(DIST)/lib/$(FREEBL_64FPU_LIB) $(DESTDIR)$(mozappdir) - endif -+endif - $(MAKE) -C boot $@ - $(MAKE) -C ssl $@ - $(MAKE) -C locales $@ -@@ -365,15 +378,18 @@ - ifdef MOZ_XUL - $(MAKE) -C pki $@ - endif -+ifndef MOZ_NATIVE_NSS - $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean - $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean - ifndef SKIP_CHK - $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) clean - $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean - endif -+endif - - echo-requires-recursive:: - $(MAKE) -C boot $@ - $(MAKE) -C ssl $@ - $(MAKE) -C pki $@ - $(MAKE) -C locales $@ -+ diff --git a/firefox-PR1-gnome-vfs-default-app.patch b/firefox-PR1-gnome-vfs-default-app.patch deleted file mode 100644 index 3ea029c..0000000 --- a/firefox-PR1-gnome-vfs-default-app.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp.foo 2004-03-06 09:41:00.000000000 -0500 -+++ mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp 2004-10-18 18:55:55.000000000 -0400 -@@ -283,6 +283,11 @@ - - gchar *nativeCommand = g_filename_from_utf8(handlerApp->command, - -1, NULL, NULL, NULL); -+ -+ // Some versions of the mime stuff will add whitespace to the end or -+ // beginning of the command -+ nativeCommand = g_strstrip(nativeCommand); -+ - if (!nativeCommand) { - NS_ERROR("Could not convert helper app command to filesystem encoding"); - _gnome_vfs_mime_application_free(handlerApp); diff --git a/mozilla-1.7.3-pango-render.patch b/mozilla-1.7.3-pango-render.patch deleted file mode 100644 index 74ce51e..0000000 --- a/mozilla-1.7.3-pango-render.patch +++ /dev/null @@ -1,3085 +0,0 @@ ---- mozilla/config/autoconf.mk.in.foo 2004-11-22 12:55:08.000000000 -0500 -+++ mozilla/config/autoconf.mk.in 2004-11-22 12:56:21.000000000 -0500 -@@ -394,6 +394,10 @@ - MOZ_XFT_LIBS = @MOZ_XFT_LIBS@ - MOZ_ENABLE_COREXFONTS = @MOZ_ENABLE_COREXFONTS@ - -+MOZ_ENABLE_PANGO = @MOZ_ENABLE_PANGO@ -+MOZ_PANGO_CFLAGS = @MOZ_PANGO_CFLAGS@ -+MOZ_PANGO_LIBS = @MOZ_PANGO_LIBS@ -+ - MOZ_EXTRA_X11CONVERTERS = @MOZ_EXTRA_X11CONVERTERS@ - - MOZ_ENABLE_XINERAMA = @MOZ_ENABLE_XINERAMA@ ---- mozilla/gfx/src/gtk/nsGfxFactoryGTK.cpp.foo 2003-09-07 18:20:38.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsGfxFactoryGTK.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -62,6 +62,9 @@ - #ifdef NATIVE_THEME_SUPPORT - #include "nsNativeThemeGTK.h" - #endif -+#ifdef MOZ_ENABLE_PANGO -+#include "nsFontMetricsPango.h" -+#endif - #ifdef MOZ_ENABLE_XFT - #include "nsFontMetricsXft.h" - #endif -@@ -112,6 +115,13 @@ - if (aOuter) - return NS_ERROR_NO_AGGREGATION; - -+#ifdef MOZ_ENABLE_PANGO -+ if (NS_IsPangoEnabled()) { -+ result = new nsFontMetricsPango(); -+ if (!result) -+ return NS_ERROR_OUT_OF_MEMORY; -+ } else { -+#endif - #ifdef MOZ_ENABLE_XFT - if (NS_IsXftEnabled()) { - result = new nsFontMetricsXft(); -@@ -127,6 +137,9 @@ - #ifdef MOZ_ENABLE_XFT - } - #endif -+#ifdef MOZ_ENABLE_PANGO -+ } -+#endif - - NS_ADDREF(result); - nsresult rv = result->QueryInterface(aIID, aResult); -@@ -148,6 +161,13 @@ - if (aOuter) - return NS_ERROR_NO_AGGREGATION; - -+#ifdef MOZ_ENABLE_PANGO -+ if (NS_IsPangoEnabled()) { -+ result = new nsFontEnumeratorPango(); -+ if (!result) -+ return NS_ERROR_OUT_OF_MEMORY; -+ } else { -+#endif - #ifdef MOZ_ENABLE_XFT - if (NS_IsXftEnabled()) { - result = new nsFontEnumeratorXft(); -@@ -163,6 +183,9 @@ - #ifdef MOZ_ENABLE_XFT - } - #endif -+#ifdef MOZ_ENABLE_PANGO -+ } -+#endif - - NS_ADDREF(result); - nsresult rv = result->QueryInterface(aIID, aResult); ---- mozilla/gfx/src/gtk/mozilla-decoder.h.foo 2004-11-22 12:56:21.000000000 -0500 -+++ mozilla/gfx/src/gtk/mozilla-decoder.h 2004-11-22 12:56:21.000000000 -0500 -@@ -0,0 +1,72 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* vim:expandtab:shiftwidth=4:tabstop=4: -+ */ -+/* ***** BEGIN LICENSE BLOCK ***** -+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Mozilla Public License Version -+ * 1.1 (the "License"); you may not use this file except in compliance with -+ * the License. You may obtain a copy of the License at -+ * http://www.mozilla.org/MPL/ -+ * -+ * Software distributed under the License is distributed on an "AS IS" basis, -+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -+ * for the specific language governing rights and limitations under the -+ * License. -+ * -+ * The Original Code is mozilla.org code. -+ * -+ * The Initial Developer of the Original Code is Christopher Blizzard -+ * . Portions created by the Initial Developer -+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. -+ * -+ * Contributor(s): -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either the GNU General Public License Version 2 or later (the "GPL"), or -+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the MPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the MPL, the GPL or the LGPL. -+ * -+ * ***** END LICENSE BLOCK ***** */ -+ -+#ifndef _MOZILLA_DECODER_H -+#define _MOZILLA_DECODER_H -+ -+#include -+ -+G_BEGIN_DECLS -+ -+#define MOZILLA_TYPE_DECODER (mozilla_decoder_get_type()) -+#define MOZILLA_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOZILLA_TYPE_DECODER, MozillaDecoder)) -+#define MOZILLA_IS_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOZILLA_TYPE_DECODER)) -+ -+typedef struct _MozillaDecoder MozillaDecoder; -+typedef struct _MozillaDecoderClass MozillaDecoderClass; -+ -+#define MOZILLA_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOZILLA_TYPE_DECODER, MozillaDecoderClass)) -+#define MOZILLA_IS_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOZILLA_TYPE_DECODER)) -+#define MOZILLA_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOZILLA_TYPE_DECODER, MozillaDecoderClass)) -+ -+struct _MozillaDecoder -+{ -+ PangoFcDecoder parent_instance; -+}; -+ -+struct _MozillaDecoderClass -+{ -+ PangoFcDecoderClass parent_class; -+}; -+ -+GType mozilla_decoder_get_type (void); -+int mozilla_decoders_init (void); -+ -+G_END_DECLS -+ -+#endif /*_MOZILLA_DECODER_H */ ---- mozilla/gfx/src/gtk/mozilla-decoder.cpp.foo 2004-11-22 12:56:21.000000000 -0500 -+++ mozilla/gfx/src/gtk/mozilla-decoder.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -0,0 +1,376 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* vim:expandtab:shiftwidth=4:tabstop=4: -+ */ -+/* ***** BEGIN LICENSE BLOCK ***** -+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Mozilla Public License Version -+ * 1.1 (the "License"); you may not use this file except in compliance with -+ * the License. You may obtain a copy of the License at -+ * http://www.mozilla.org/MPL/ -+ * -+ * Software distributed under the License is distributed on an "AS IS" basis, -+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -+ * for the specific language governing rights and limitations under the -+ * License. -+ * -+ * The Original Code is mozilla.org code. -+ * -+ * The Initial Developer of the Original Code is Christopher Blizzard -+ * . Portions created by the Initial Developer -+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. -+ * -+ * Contributor(s): -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either the GNU General Public License Version 2 or later (the "GPL"), or -+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the MPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the MPL, the GPL or the LGPL. -+ * -+ * ***** END LICENSE BLOCK ***** */ -+ -+#define PANGO_ENABLE_BACKEND -+#define PANGO_ENABLE_ENGINE -+ -+#include "mozilla-decoder.h" -+#include -+#include -+#include -+#include -+ -+#include "nsString.h" -+#include "nsIPersistentProperties2.h" -+#include "nsNetUtil.h" -+#include "nsReadableUtils.h" -+#include "nsICharsetConverterManager.h" -+#include "nsICharRepresentable.h" -+#include "nsCompressedCharMap.h" -+ -+#undef DEBUG_CUSTOM_ENCODER -+ -+G_DEFINE_TYPE (MozillaDecoder, mozilla_decoder, PANGO_TYPE_FC_DECODER) -+ -+MozillaDecoder *mozilla_decoder_new (void); -+ -+static FcCharSet *mozilla_decoder_get_charset (PangoFcDecoder *decoder, -+ PangoFcFont *fcfont); -+static PangoGlyph mozilla_decoder_get_glyph (PangoFcDecoder *decoder, -+ PangoFcFont *fcfont, -+ guint32 wc); -+ -+static PangoFcDecoder *mozilla_find_decoder (FcPattern *pattern, -+ gpointer user_data); -+ -+typedef struct _MozillaDecoderPrivate MozillaDecoderPrivate; -+ -+#define MOZILLA_DECODER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MOZILLA_TYPE_DECODER, MozillaDecoderPrivate)) -+ -+struct _MozillaDecoderPrivate { -+ char *family; -+ char *encoder; -+ char *cmap; -+ gboolean is_wide; -+ FcCharSet *charset; -+ nsCOMPtr uEncoder; -+}; -+ -+static nsICharsetConverterManager *gCharsetManager = NULL; -+ -+static NS_DEFINE_CID(kCharsetConverterManagerCID, -+ NS_ICHARSETCONVERTERMANAGER_CID); -+ -+// Hash tables that hold the custom encodings and custom cmaps used in -+// various fonts. -+GHashTable *encoder_hash = NULL; -+GHashTable *cmap_hash = NULL; -+GHashTable *wide_hash = NULL; -+ -+void -+mozilla_decoder_init (MozillaDecoder *decoder) -+{ -+} -+ -+void -+mozilla_decoder_class_init (MozillaDecoderClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS(klass); -+ PangoFcDecoderClass *parent_class = PANGO_FC_DECODER_CLASS (klass); -+ -+ /* object_class->finalize = test_finalize; */ -+ -+ parent_class->get_charset = mozilla_decoder_get_charset; -+ parent_class->get_glyph = mozilla_decoder_get_glyph; -+ -+ g_type_class_add_private (object_class, sizeof (MozillaDecoderPrivate)); -+} -+ -+MozillaDecoder * -+mozilla_decoder_new(void) -+{ -+ return (MozillaDecoder *)g_object_new(MOZILLA_TYPE_DECODER, NULL); -+} -+ -+#ifdef DEBUG_CUSTOM_ENCODER -+void -+dump_hash(char *key, char *val, void *arg) -+{ -+ printf("%s -> %s\n", key, val); -+} -+#endif -+ -+/** -+ * mozilla_decoders_init: -+ * -+ * #mozilla_decoders_init: -+ * -+ * This initializes all of the application-specific custom decoders -+ * that Mozilla uses. This should only be called once during the -+ * lifetime of the application. -+ * -+ * Return value: zero on success, not zero on failure. -+ * -+ **/ -+ -+int -+mozilla_decoders_init(void) -+{ -+ static PRBool initialized = PR_FALSE; -+ if (initialized) -+ return 0; -+ -+ encoder_hash = g_hash_table_new(g_str_hash, g_str_equal); -+ cmap_hash = g_hash_table_new(g_str_hash, g_str_equal); -+ wide_hash = g_hash_table_new(g_str_hash, g_str_equal); -+ -+ PRBool dumb = PR_FALSE; -+ nsCOMPtr props; -+ nsCOMPtr encodeEnum; -+ -+ NS_LoadPersistentPropertiesFromURISpec(getter_AddRefs(props), -+ NS_LITERAL_CSTRING("resource://gre/res/fonts/pangoFontEncoding.properties")); -+ -+ if (!props) -+ goto loser; -+ -+ // Enumerate the properties in this file and figure out all of the -+ // fonts for which we have custom encodings. -+ props->Enumerate(getter_AddRefs(encodeEnum)); -+ if (!encodeEnum) -+ goto loser; -+ -+ while (encodeEnum->HasMoreElements(&dumb), dumb) { -+ nsCOMPtr prop; -+ encodeEnum->GetNext(getter_AddRefs(prop)); -+ if (!prop) -+ goto loser; -+ -+ nsCAutoString name; -+ prop->GetKey(name); -+ nsAutoString value; -+ prop->GetValue(value); -+ -+ if (!StringBeginsWith(name, NS_LITERAL_CSTRING("encoding."))) { -+ printf("string doesn't begin with encoding?\n"); -+ continue; -+ } -+ -+ name = Substring(name, 9); -+ -+ if (StringEndsWith(name, NS_LITERAL_CSTRING(".ttf"))) { -+ name = Substring(name, 0, name.Length() - 4); -+ -+ // Strip off a .wide if it's there. -+ if (StringEndsWith(value, NS_LITERAL_STRING(".wide"))) { -+ g_hash_table_insert(wide_hash, g_strdup(name.get()), -+ g_strdup("wide")); -+ value = Substring(value, 0, name.Length() - 5); -+ } -+ -+ g_hash_table_insert(encoder_hash, -+ g_strdup(name.get()), -+ g_strdup(NS_ConvertUTF16toUTF8(value).get())); -+ } -+ else if (StringEndsWith(name, NS_LITERAL_CSTRING(".ftcmap"))) { -+ name = Substring(name, 0, name.Length() - 7); -+ g_hash_table_insert(cmap_hash, -+ g_strdup(name.get()), -+ g_strdup(NS_ConvertUTF16toUTF8(value).get())); -+ } -+ else { -+ printf("unknown suffix used for mapping\n"); -+ } -+ } -+ -+ pango_fc_font_map_add_decoder_find_func(PANGO_FC_FONT_MAP(pango_xft_get_font_map(GDK_DISPLAY(),gdk_x11_get_default_screen())), -+ mozilla_find_decoder, -+ NULL, -+ NULL); -+ -+ initialized = PR_TRUE; -+ -+#ifdef DEBUG_CUSTOM_ENCODER -+ printf("*** encoders\n"); -+ g_hash_table_foreach(encoder_hash, (GHFunc)dump_hash, NULL); -+ -+ printf("*** cmaps\n"); -+ g_hash_table_foreach(cmap_hash, (GHFunc)dump_hash, NULL); -+#endif -+ -+ return 0; -+ -+ loser: -+ return -1; -+} -+ -+FcCharSet * -+mozilla_decoder_get_charset (PangoFcDecoder *decoder, -+ PangoFcFont *fcfont) -+{ -+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); -+ -+ if (priv->charset) -+ return priv->charset; -+ -+ // First time this has been accessed. Populate the charset. -+ priv->charset = FcCharSetCreate(); -+ -+ if (!gCharsetManager) { -+ nsServiceManager::GetService(kCharsetConverterManagerCID, -+ NS_GET_IID(nsICharsetConverterManager), (nsISupports**)&gCharsetManager); -+ } -+ -+ nsCOMPtr encoder; -+ nsCOMPtr represent; -+ -+ if (!gCharsetManager) -+ goto end; -+ -+ gCharsetManager->GetUnicodeEncoderRaw(priv->encoder, getter_AddRefs(encoder)); -+ if (!encoder) -+ goto end; -+ -+ encoder->SetOutputErrorBehavior(encoder->kOnError_Replace, nsnull, '?'); -+ -+ priv->uEncoder = encoder; -+ -+ represent = do_QueryInterface(encoder); -+ if (!represent) -+ goto end; -+ -+ PRUint32 map[UCS2_MAP_LEN]; -+ memset(map, 0, sizeof(map)); -+ -+ represent->FillInfo(map); -+ -+ for (int i = 0; i < NUM_UNICODE_CHARS; i++) { -+ if (IS_REPRESENTABLE(map, i)) -+ FcCharSetAddChar(priv->charset, i); -+ } -+ -+ end: -+ return priv->charset; -+} -+ -+PangoGlyph -+mozilla_decoder_get_glyph (PangoFcDecoder *decoder, -+ PangoFcFont *fcfont, -+ guint32 wc) -+{ -+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); -+ -+ PangoGlyph retval = 0; -+ PRUnichar inchar = wc; -+ PRInt32 inlen = 1; -+ char outchar[2] = {0,0}; -+ PRInt32 outlen = 2; -+ -+ priv->uEncoder->Convert(&inchar, &inlen, outchar, &outlen); -+ if (outlen != 1) { -+ printf("Warning: mozilla_decoder_get_glyph doesn't support more than one character conversions.\n"); -+ return 0; -+ } -+ -+ FT_Face face = pango_fc_font_lock_face(fcfont); -+ -+#ifdef DEBUG_CUSTOM_ENCODER -+ char *filename; -+ FcPatternGetString(fcfont->font_pattern, FC_FILE, 0, (FcChar8 **)&filename); -+ printf("filename is %s\n", filename); -+#endif -+ -+ // Make sure to set the right charmap before trying to get the -+ // glyph -+ if (priv->cmap) { -+ if (!strcmp(priv->cmap, "mac_roman")) { -+ FT_Select_Charmap(face, ft_encoding_apple_roman); -+ } -+ else if (!strcmp(priv->cmap, "unicode")) { -+ FT_Select_Charmap(face, ft_encoding_unicode); -+ } -+ else { -+ printf("Warning: Invalid charmap entry for family %s\n", -+ priv->family); -+ } -+ } -+ -+ // Standard 8 bit to glyph translation -+ if (!priv->is_wide) { -+ FcChar32 blah = PRUint8(outchar[0]); -+ retval = FT_Get_Char_Index(face, blah); -+#ifdef DEBUG_CUSTOM_ENCODER -+ printf("wc 0x%x outchar[0] 0x%x index 0x%x retval 0x%x face %p\n", -+ wc, outchar[0], blah, retval, (void *)face); -+#endif -+ } -+ else { -+ printf("Warning: We don't support .wide fonts!\n"); -+ retval = 0; -+ } -+ -+ pango_fc_font_unlock_face(fcfont); -+ -+ return retval; -+} -+ -+PangoFcDecoder * -+mozilla_find_decoder (FcPattern *pattern, gpointer user_data) -+{ -+ // Compare the family name of the font that's been opened to see -+ // if we have a custom decoder. -+ const char *orig = NULL; -+ FcPatternGetString(pattern, FC_FAMILY, 0, (FcChar8 **)&orig); -+ -+ nsCAutoString family; -+ family.Assign(orig); -+ -+ family.StripWhitespace(); -+ ToLowerCase(family); -+ -+ char *encoder = (char *)g_hash_table_lookup(encoder_hash, family.get()); -+ if (!encoder) -+ return NULL; -+ -+ MozillaDecoder *decoder = mozilla_decoder_new(); -+ -+ MozillaDecoderPrivate *priv = MOZILLA_DECODER_GET_PRIVATE(decoder); -+ -+ priv->family = g_strdup(family.get()); -+ priv->encoder = g_strdup(encoder); -+ -+ char *cmap = (char *)g_hash_table_lookup(cmap_hash, family.get()); -+ if (cmap) -+ priv->cmap = g_strdup(cmap); -+ -+ char *wide = (char *)g_hash_table_lookup(wide_hash, family.get()); -+ if (wide) -+ priv->is_wide = TRUE; -+ -+ return PANGO_FC_DECODER(decoder); -+} ---- mozilla/gfx/src/gtk/gfxgtk.pkg.foo 2004-01-06 20:21:35.000000000 -0500 -+++ mozilla/gfx/src/gtk/gfxgtk.pkg 2004-11-22 12:56:21.000000000 -0500 -@@ -7,3 +7,6 @@ - #if MOZ_ENABLE_XFT - dist/bin/res/fonts/fontEncoding.properties - #endif -+#if MOZ_ENABLE_PANGO -+dist/bin/res/fonts/pangoFontEncoding.properties -+#endif ---- mozilla/gfx/src/gtk/nsFontMetricsXft.cpp.foo 2004-10-14 16:36:14.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsFontMetricsXft.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -238,7 +238,7 @@ - - static int CalculateSlant (PRUint8 aStyle); - static int CalculateWeight (PRUint16 aWeight); --static void AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); -+/* static */ void AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); - static void AddFFRE (FcPattern *aPattern, nsCString *aFamily, - PRBool aWeak); - static void FFREToFamily (nsACString &aFFREName, nsACString &oFamily); -@@ -449,7 +449,7 @@ - // Make sure that the pixel size is at least greater than zero - if (mPixelSize < 1) { - #ifdef DEBUG -- printf("*** Warning: nsFontMetricsXft was passed a pixel size of %d\n", -+ printf("*** Warning: nsFontMetricsXft was passed a pixel size of %f\n", - mPixelSize); - #endif - mPixelSize = 1; -@@ -474,6 +474,26 @@ - if (NS_FAILED(RealizeFont())) - return NS_ERROR_FAILURE; - -+#ifdef DEBUG_foo -+ printf("%i\n", mXHeight); -+ printf("%i\n", mSuperscriptOffset); -+ printf("%i\n", mSubscriptOffset); -+ printf("%i\n", mStrikeoutOffset); -+ printf("%i\n", mStrikeoutSize); -+ printf("%i\n", mUnderlineOffset); -+ printf("%i\n", mUnderlineSize); -+ printf("%i\n", mMaxHeight); -+ printf("%i\n", mLeading); -+ printf("%i\n", mEmHeight); -+ printf("%i\n", mEmAscent); -+ printf("%i\n", mEmDescent); -+ printf("%i\n", mMaxAscent); -+ printf("%i\n", mMaxDescent); -+ printf("%i\n", mMaxAdvance); -+ printf("%i\n", mSpaceWidth); -+ printf("%i\n", mAveCharWidth); -+#endif /* DEBUG_foo */ -+ - return NS_OK; - } - -@@ -530,6 +550,10 @@ - f = mDeviceContext->DevUnitsToAppUnits(); - aWidth = NSToCoordRound(glyphInfo.xOff * f); - -+#ifdef DEBUG_foo -+ printf("GetWidth (char *) %d\n", aWidth); -+#endif -+ - return NS_OK; - } - -@@ -553,6 +577,10 @@ - if (aFontID) - *aFontID = 0; - -+#ifdef DEBUG_foo -+ printf("GetWidth %d\n", aWidth); -+#endif -+ - return NS_OK; - } - -@@ -586,6 +614,11 @@ - if (nsnull != aFontID) - *aFontID = 0; - -+#ifdef DEBUG_foo -+ printf("GetTextDimensions %d %d %d\n", aDimensions.width, -+ aDimensions.ascent, aDimensions.descent); -+#endif -+ - return NS_OK; - } - -@@ -645,6 +678,10 @@ - nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); - data.drawBuffer = &drawBuffer; - -+#ifdef DEBUG_foo -+ printf("DrawString (char *)\n"); -+#endif -+ - return EnumerateGlyphs(aString, aLength, - &nsFontMetricsXft::DrawStringCallback, &data); - } -@@ -675,6 +712,10 @@ - nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); - data.drawBuffer = &drawBuffer; - -+#ifdef DEBUG_foo -+ printf("DrawString\n"); -+#endif -+ - return EnumerateGlyphs(aString, aLength, - &nsFontMetricsXft::DrawStringCallback, &data); - } -@@ -714,6 +755,15 @@ - aBoundingMetrics.ascent = NSToCoordRound(aBoundingMetrics.ascent * P2T); - aBoundingMetrics.descent = NSToCoordRound(aBoundingMetrics.descent * P2T); - -+#ifdef DEBUG_foo -+ printf("GetBoundingMetrics (char *)%d %d %d %d %d\n", -+ aBoundingMetrics.leftBearing, -+ aBoundingMetrics.rightBearing, -+ aBoundingMetrics.width, -+ aBoundingMetrics.ascent, -+ aBoundingMetrics.descent); -+#endif -+ - return NS_OK; - } - -@@ -755,6 +805,15 @@ - if (nsnull != aFontID) - *aFontID = 0; - -+#ifdef DEBUG_foo -+ printf("GetBoundingMetrics %d %d %d %d %d\n", -+ aBoundingMetrics.leftBearing, -+ aBoundingMetrics.rightBearing, -+ aBoundingMetrics.width, -+ aBoundingMetrics.ascent, -+ aBoundingMetrics.descent); -+#endif -+ - return NS_OK; - } - -@@ -766,6 +825,12 @@ - return nsnull; - } - -+nsresult -+nsFontMetricsXft::SetRightToLeftText(PRBool aIsRTL) -+{ -+ return NS_OK; -+} -+ - PRUint32 - nsFontMetricsXft::GetHints(void) - { ---- mozilla/gfx/src/gtk/Makefile.in.foo 2003-11-10 07:24:51.000000000 -0500 -+++ mozilla/gfx/src/gtk/Makefile.in 2004-11-22 12:56:21.000000000 -0500 -@@ -102,6 +102,12 @@ - nsFontMetricsXft.cpp - endif - -+ifdef MOZ_ENABLE_PANGO -+CPPSRCS += \ -+ nsFontMetricsPango.cpp \ -+ mozilla-decoder.cpp -+endif -+ - ifdef MOZ_ENABLE_GTK - CPPSRCS += \ - nsRegionGTK.cpp \ -@@ -155,10 +161,10 @@ - endif - - ifdef MOZ_ENABLE_XFT --libs:: fontEncoding.properties -+libs:: fontEncoding.properties pangoFontEncoding.properties - $(INSTALL) $^ $(DIST)/bin/res/fonts - --install:: fontEncoding.properties -+install:: fontEncoding.properties pangoFontEncoding.properties - $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)/res/fonts - endif - ---- mozilla/gfx/src/gtk/pangoFontEncoding.properties.foo 2004-11-22 12:56:21.000000000 -0500 -+++ mozilla/gfx/src/gtk/pangoFontEncoding.properties 2004-11-22 12:56:21.000000000 -0500 -@@ -0,0 +1,120 @@ -+# ***** BEGIN LICENSE BLOCK ***** -+# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -+# -+# The contents of this file are subject to the Mozilla Public License Version -+# 1.1 (the "License"); you may not use this file except in compliance with -+# the License. You may obtain a copy of the License at -+# http://www.mozilla.org/MPL/ -+# -+# Software distributed under the License is distributed on an "AS IS" basis, -+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -+# for the specific language governing rights and limitations under the -+# License. -+# -+# The Original Code is Mozilla MathML Project. -+# -+# The Initial Developer of the Original Code is -+# The University of Queensland. -+# Portions created by the Initial Developer are Copyright (C) 2001 -+# the Initial Developer. All Rights Reserved. -+# -+# Contributor(s): -+# Roger B. Sidje -+# Jungshik Shin -+# Christopher Blizzard -+# -+# Alternatively, the contents of this file may be used under the terms of -+# either the GNU General Public License Version 2 or later (the "GPL"), or -+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+# in which case the provisions of the GPL or the LGPL are applicable instead -+# of those above. If you wish to allow use of your version of this file only -+# under the terms of either the GPL or the LGPL, and not to allow others to -+# use your version of this file under the terms of the MPL, indicate your -+# decision by deleting the provisions above and replace them with the notice -+# and other provisions required by the GPL or the LGPL. If you do not delete -+# the provisions above, a recipient may use your version of this file under -+# the terms of any one of the MPL, the GPL or the LGPL. -+# -+# ***** END LICENSE BLOCK ***** -+ -+# LOCALIZATION NOTE: FILE -+# Do not translate anything in this file -+ -+# This file contains supported custom encodings for pango font -+# rendering. For information about the specific encodings, look at -+# fontEncoding.properties. It contains a lot more verbiage than you -+# will find here. There are a lot of encodings supported in the old -+# encoding file that pango supports directly, so there should be -+# little reason to use those custom encodings. The pango custom code -+# doesn't support .wide fonts, so consider yourself warned! -+# -+ -+# To be honest, we basically support mathml and that's about it. -+ -+encoding.cmr10.ttf = x-ttf-cmr -+encoding.cmmi10.ttf = x-ttf-cmmi -+encoding.cmsy10.ttf = x-ttf-cmsy -+encoding.cmex10.ttf = x-ttf-cmex -+ -+encoding.cmr10.ftcmap = unicode -+encoding.cmmi10.ftcmap = unicode -+encoding.cmsy10.ftcmap = unicode -+encoding.cmex10.ftcmap = unicode -+ -+encoding.math1.ttf = x-mathematica1 -+encoding.math1-bold.ttf = x-mathematica1 -+encoding.math1mono.ttf = x-mathematica1 -+encoding.math1mono-bold.ttf = x-mathematica1 -+ -+encoding.math2.ttf = x-mathematica2 -+encoding.math2-bold.ttf = x-mathematica2 -+encoding.math2mono.ttf = x-mathematica2 -+encoding.math2mono-bold.ttf = x-mathematica2 -+ -+encoding.math3.ttf = x-mathematica3 -+encoding.math3-bold.ttf = x-mathematica3 -+encoding.math3mono.ttf = x-mathematica3 -+encoding.math3mono-bold.ttf = x-mathematica3 -+ -+encoding.math4.ttf = x-mathematica4 -+encoding.math4-bold.ttf = x-mathematica4 -+encoding.math4mono.ttf = x-mathematica4 -+encoding.math4mono-bold.ttf = x-mathematica4 -+ -+encoding.math5.ttf = x-mathematica5 -+encoding.math5-bold.ttf = x-mathematica5 -+encoding.math5bold.ttf = x-mathematica5 -+encoding.math5mono.ttf = x-mathematica5 -+encoding.math5mono-bold.ttf = x-mathematica5 -+encoding.math5monobold.ttf = x-mathematica5 -+ -+encoding.math1.ftcmap = mac_roman -+encoding.math1-bold.ftcmap = mac_roman -+encoding.math1mono.ftcmap = mac_roman -+encoding.math1mono-bold.ftcmap = mac_roman -+ -+encoding.math2.ftcmap = mac_roman -+encoding.math2-bold.ftcmap = mac_roman -+encoding.math2mono.ftcmap = mac_roman -+encoding.math2mono-bold.ftcmap = mac_roman -+ -+encoding.math3.ftcmap = mac_roman -+encoding.math3-bold.ftcmap = mac_roman -+encoding.math3mono.ftcmap = mac_roman -+encoding.math3mono-bold.ftcmap = mac_roman -+ -+encoding.math4.ftcmap = mac_roman -+encoding.math4-bold.ftcmap = mac_roman -+encoding.math4mono.ftcmap = mac_roman -+encoding.math4mono-bold.ftcmap = mac_roman -+ -+encoding.math5.ftcmap = mac_roman -+encoding.math5-bold.ftcmap = mac_roman -+encoding.math5bold.ftcmap = mac_roman -+encoding.math5mono.ftcmap = mac_roman -+encoding.math5mono-bold.ftcmap = mac_roman -+encoding.math5monobold.ftcmap = mac_roman -+ -+encoding.mtextra.ttf = x-mtextra -+encoding.mtextra.ftcmap = mac_roman -+ ---- mozilla/gfx/src/gtk/nsFontMetricsUtils.cpp.foo 2002-10-11 22:03:32.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsFontMetricsUtils.cpp 2004-11-22 12:57:33.000000000 -0500 -@@ -50,11 +50,20 @@ - #include "nsFontMetricsGTK.h" - #endif - -+#ifdef MOZ_ENABLE_PANGO -+#include "nsFontMetricsPango.h" -+#endif -+ - #include "nsFontMetricsUtils.h" - - PRUint32 - NS_FontMetricsGetHints(void) - { -+#ifdef MOZ_ENABLE_PANGO -+ if (NS_IsPangoEnabled()) { -+ return nsFontMetricsPango::GetHints(); -+ } -+#endif - #ifdef MOZ_ENABLE_XFT - if (NS_IsXftEnabled()) { - return nsFontMetricsXft::GetHints(); -@@ -69,6 +78,11 @@ - nsresult - NS_FontMetricsFamilyExists(nsIDeviceContext *aDevice, const nsString &aName) - { -+#ifdef MOZ_ENABLE_PANGO -+ if (NS_IsPangoEnabled()) { -+ return nsFontMetricsPango::FamilyExists(aDevice, aName); -+ } -+#endif - #ifdef MOZ_ENABLE_XFT - // try to fall through to the core fonts if xft fails - if (NS_IsXftEnabled()) { -@@ -121,3 +135,17 @@ - } - - #endif /* MOZ_ENABLE_XFT */ -+ -+#ifdef MOZ_ENABLE_PANGO -+ -+PRBool -+NS_IsPangoEnabled(void) -+{ -+ char *val = PR_GetEnv("MOZ_DISABLE_PANGO"); -+ if (val) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+#endif ---- mozilla/gfx/src/gtk/nsFontMetricsPango.cpp.foo 2004-11-22 12:56:21.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsFontMetricsPango.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -0,0 +1,1662 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* vim:expandtab:shiftwidth=4:tabstop=4: -+ */ -+/* ***** BEGIN LICENSE BLOCK ***** -+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Mozilla Public License Version -+ * 1.1 (the "License"); you may not use this file except in compliance with -+ * the License. You may obtain a copy of the License at -+ * http://www.mozilla.org/MPL/ -+ * -+ * Software distributed under the License is distributed on an "AS IS" basis, -+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -+ * for the specific language governing rights and limitations under the -+ * License. -+ * -+ * The Original Code is mozilla.org code. -+ * -+ * The Initial Developer of the Original Code is Christopher Blizzard -+ * . Portions created by the Initial Developer -+ * are Copyright (C) 2004 the Initial Developer. All Rights Reserved. -+ * -+ * Contributor(s): -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either the GNU General Public License Version 2 or later (the "GPL"), or -+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the MPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the MPL, the GPL or the LGPL. -+ * -+ * ***** END LICENSE BLOCK ***** */ -+ -+#include "nsFont.h" -+#include "nsIDeviceContext.h" -+#include "nsICharsetConverterManager.h" -+#include "nsIPref.h" -+#include "nsIServiceManagerUtils.h" -+ -+#define PANGO_ENABLE_BACKEND -+#define PANGO_ENABLE_ENGINE -+ -+#include "nsFontMetricsPango.h" -+#include "nsRenderingContextGTK.h" -+#include "nsDeviceContextGTK.h" -+ -+#include "nsUnicharUtils.h" -+#include "nsQuickSort.h" -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "mozilla-decoder.h" -+ -+#define FORCE_PR_LOG -+#include "prlog.h" -+ -+// Globals -+ -+static PRLogModuleInfo *gPangoFontLog; -+static int gNumInstances; -+ -+// Defines -+ -+// This is the scaling factor that we keep fonts limited to against -+// the display size. If a pixel size is requested that is more than -+// this factor larger than the height of the display, it's clamped to -+// that value instead of the requested size. -+#define FONT_MAX_FONT_SCALE 2 -+ -+static NS_DEFINE_CID(kCharsetConverterManagerCID, -+ NS_ICHARSETCONVERTERMANAGER_CID); -+ -+struct MozPangoLangGroup { -+ const char *mozLangGroup; -+ const char *PangoLang; -+}; -+ -+static const MozPangoLangGroup MozPangoLangGroups[] = { -+ { "x-western", "en" }, -+ { "x-central-euro", "pl" }, -+ { "x-cyrillic", "ru" }, -+ { "x-baltic", "lv" }, -+ { "x-devanagari", "hi" }, -+ { "x-tamil", "ta" }, -+ { "x-unicode", 0 }, -+ { "x-user-def", 0 }, -+}; -+ -+#define NUM_PANGO_LANG_GROUPS (sizeof (MozPangoLangGroups) / \ -+ sizeof (MozPangoLangGroups[0])) -+ -+#ifdef DEBUG -+#define DUMP_PRUNICHAR(ustr, ulen) for (PRUint32 llen=0;llen> 6) -+#define CONVERT_DESIGN_UNITS_TO_PIXELS(v, s) \ -+ MOZ_FT_TRUNC(MOZ_FT_ROUND(FT_MulFix((v) , (s)))) -+ -+// Static function decls -+ -+static PRBool IsASCIIFontName (const nsString& aName); -+static int FFRECountHyphens (nsACString &aFFREName); -+ -+static PangoLanguage *GetPangoLanguage(nsIAtom *aLangGroup); -+static const MozPangoLangGroup* FindPangoLangGroup (nsACString &aLangGroup); -+ -+static void FreeGlobals (void); -+ -+static PangoStyle CalculateStyle (PRUint8 aStyle); -+static PangoWeight CalculateWeight (PRUint16 aWeight); -+ -+static nsresult EnumFontsPango (nsIAtom* aLangGroup, const char* aGeneric, -+ PRUint32* aCount, PRUnichar*** aResult); -+static int CompareFontNames (const void* aArg1, const void* aArg2, -+ void* aClosure); -+ -+extern void AddLangGroup (FcPattern *aPattern, nsIAtom *aLangGroup); -+ -+nsFontMetricsPango::nsFontMetricsPango() -+{ -+ if (!gPangoFontLog) -+ gPangoFontLog = PR_NewLogModule("PangoFont"); -+ -+ gNumInstances++; -+ -+ mPangoFontDesc = nsnull; -+ mPangoContext = nsnull; -+ mLTRPangoContext = nsnull; -+ mRTLPangoContext = nsnull; -+ mPangoAttrList = nsnull; -+ mIsRTL = PR_FALSE; -+ -+ static PRBool initialized = PR_FALSE; -+ if (initialized) -+ return; -+ -+ // Initialized the custom decoders -+ if (!mozilla_decoders_init()) -+ initialized = PR_TRUE; -+} -+ -+nsFontMetricsPango::~nsFontMetricsPango() -+{ -+ delete mFont; -+ -+ if (mDeviceContext) -+ mDeviceContext->FontMetricsDeleted(this); -+ -+ if (mPangoFontDesc) -+ pango_font_description_free(mPangoFontDesc); -+ -+ if (mLTRPangoContext) -+ g_object_unref(mLTRPangoContext); -+ -+ if (mRTLPangoContext) -+ g_object_unref(mRTLPangoContext); -+ -+ if (mPangoAttrList) -+ pango_attr_list_unref(mPangoAttrList); -+ -+ // XXX clean up all the pango objects -+ -+ if (--gNumInstances == 0) -+ FreeGlobals(); -+} -+ -+ -+NS_IMPL_ISUPPORTS1(nsFontMetricsPango, nsIFontMetrics) -+ -+// nsIFontMetrics impl -+ -+NS_IMETHODIMP -+nsFontMetricsPango::Init(const nsFont& aFont, nsIAtom* aLangGroup, -+ nsIDeviceContext *aContext) -+{ -+ mFont = new nsFont(aFont); -+ mLangGroup = aLangGroup; -+ -+ // Hang on to the device context -+ mDeviceContext = aContext; -+ -+ mPointSize = NSTwipsToFloatPoints(mFont->size); -+ -+ // Make sure to clamp the pixel size to something reasonable so we -+ // don't make the X server blow up. -+ nscoord screenPixels = gdk_screen_height(); -+ mPointSize = PR_MIN(screenPixels * FONT_MAX_FONT_SCALE, mPointSize); -+ -+ // enumerate over the font names passed in -+ mFont->EnumerateFamilies(nsFontMetricsPango::EnumFontCallback, this); -+ -+ nsCOMPtr prefService; -+ prefService = do_GetService(NS_PREF_CONTRACTID); -+ if (!prefService) -+ return NS_ERROR_FAILURE; -+ -+ nsXPIDLCString value; -+ -+ // Set up the default font name if it's not set -+ if (!mGenericFont) { -+ prefService->CopyCharPref("font.default", getter_Copies(value)); -+ -+ if (value.get()) -+ mDefaultFont = value.get(); -+ else -+ mDefaultFont = "serif"; -+ -+ mGenericFont = &mDefaultFont; -+ } -+ -+ // set up the minimum sizes for fonts -+ if (mLangGroup) { -+ nsCAutoString name("font.min-size."); -+ -+ if (mGenericFont->Equals("monospace")) -+ name.Append("fixed"); -+ else -+ name.Append("variable"); -+ -+ name.Append(char('.')); -+ -+ const char* langGroup; -+ mLangGroup->GetUTF8String(&langGroup); -+ -+ name.Append(langGroup); -+ -+ PRInt32 minimumInt = 0; -+ float minimum; -+ nsresult res; -+ res = prefService->GetIntPref(name.get(), &minimumInt); -+ if (NS_FAILED(res)) -+ prefService->GetDefaultIntPref(name.get(), &minimumInt); -+ -+ if (minimumInt < 0) -+ minimumInt = 0; -+ -+ minimum = minimumInt; -+ -+ // The minimum size is specified in pixels, not in points. -+ // Convert the size from pixels to points. -+ minimum = NSTwipsToFloatPoints(NSFloatPixelsToTwips(minimum, mDeviceContext->DevUnitsToAppUnits())); -+ if (mPointSize < minimum) -+ mPointSize = minimum; -+ } -+ -+ // Make sure that the pixel size is at least greater than zero -+ if (mPointSize < 1) { -+#ifdef DEBUG -+ printf("*** Warning: nsFontMetricsPango created with point size %f\n", -+ mPointSize); -+#endif -+ mPointSize = 1; -+ } -+ -+ nsresult rv = RealizeFont(); -+ if (NS_FAILED(rv)) -+ return rv; -+ -+ // Cache font metrics for the 'x' character -+ return CacheFontMetrics(); -+} -+ -+nsresult -+nsFontMetricsPango::CacheFontMetrics(void) -+{ -+ // Get our scale factor -+ float f; -+ float val; -+ f = mDeviceContext->DevUnitsToAppUnits(); -+ -+ mPangoAttrList = pango_attr_list_new(); -+ -+ GList *items = pango_itemize(mPangoContext, -+ "a", 0, 1, mPangoAttrList, NULL); -+ -+ if (!items) -+ return NS_ERROR_FAILURE; -+ -+ guint nitems = g_list_length(items); -+ if (nitems != 1) -+ return NS_ERROR_FAILURE; -+ -+ PangoItem *item = (PangoItem *)items->data; -+ PangoFcFont *fcfont = PANGO_FC_FONT(item->analysis.font); -+ if (!fcfont) -+ return NS_ERROR_FAILURE; -+ -+ // Get our font face -+ FT_Face face; -+ TT_OS2 *os2; -+ XftFont *xftFont = pango_xft_font_get_font(PANGO_FONT(fcfont)); -+ if (!xftFont) -+ return NS_ERROR_NOT_AVAILABLE; -+ -+ face = XftLockFace(xftFont); -+ os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2); -+ -+ // mEmHeight (size in pixels of EM height) -+ int size; -+ if (FcPatternGetInteger(fcfont->font_pattern, FC_PIXEL_SIZE, 0, &size) != -+ FcResultMatch) { -+ size = 12; -+ } -+ mEmHeight = PR_MAX(1, nscoord(size * f)); -+ -+ // mMaxAscent -+ mMaxAscent = nscoord(xftFont->ascent * f); -+ -+ // mMaxDescent -+ mMaxDescent = nscoord(xftFont->descent * f); -+ -+ nscoord lineHeight = mMaxAscent + mMaxDescent; -+ -+ // mLeading (needs ascent and descent and EM height) -+ if (lineHeight > mEmHeight) -+ mLeading = lineHeight - mEmHeight; -+ else -+ mLeading = 0; -+ -+ // mMaxHeight (needs ascent and descent) -+ mMaxHeight = lineHeight; -+ -+ // mEmAscent (needs maxascent, EM height, ascent and descent) -+ mEmAscent = nscoord(mMaxAscent * mEmHeight / lineHeight); -+ -+ // mEmDescent (needs EM height and EM ascent -+ mEmDescent = mEmHeight - mEmAscent; -+ -+ // mMaxAdvance -+ mMaxAdvance = nscoord(xftFont->max_advance_width * f); -+ -+ // mSpaceWidth (width of a space) -+ nscoord tmpWidth; -+ GetWidth(" ", 1, tmpWidth, NULL); -+ mSpaceWidth = tmpWidth; -+ -+ // mAveCharWidth (width of an 'average' char) -+ // XftTextExtents16(GDK_DISPLAY(), xftFont, &xUnichar, 1, &extents); -+ //rawWidth = extents.width; -+ //mAveCharWidth = NSToCoordRound(rawWidth * f); -+ GetWidth("x", 1, tmpWidth, NULL); -+ mAveCharWidth = tmpWidth; -+ -+ // mXHeight (height of an 'x' character) -+ PRUnichar xUnichar('x'); -+ XGlyphInfo extents; -+ if (FcCharSetHasChar(xftFont->charset, xUnichar)) { -+ XftTextExtents16(GDK_DISPLAY(), xftFont, &xUnichar, 1, &extents); -+ mXHeight = extents.height; -+ } -+ else { -+ // 56% of ascent, best guess for non-true type or asian fonts -+ mXHeight = nscoord(((float)mMaxAscent) * 0.56); -+ } -+ mXHeight = nscoord(mXHeight * f); -+ -+ // mUnderlineOffset (offset for underlines) -+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(face->underline_position, -+ face->size->metrics.y_scale); -+ if (val) { -+ mUnderlineOffset = NSToIntRound(val * f); -+ } -+ else { -+ mUnderlineOffset = -+ -NSToIntRound(PR_MAX(1, floor(0.1 * xftFont->height + 0.5)) * f); -+ } -+ -+ // mUnderlineSize (thickness of an underline) -+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(face->underline_thickness, -+ face->size->metrics.y_scale); -+ if (val) { -+ mUnderlineSize = nscoord(PR_MAX(f, NSToIntRound(val * f))); -+ } -+ else { -+ mUnderlineSize = -+ NSToIntRound(PR_MAX(1, floor(0.05 * xftFont->height + 0.5)) * f); -+ } -+ -+ // mSuperscriptOffset -+ if (os2 && os2->ySuperscriptYOffset) { -+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(os2->ySuperscriptYOffset, -+ face->size->metrics.y_scale); -+ mSuperscriptOffset = nscoord(PR_MAX(f, NSToIntRound(val * f))); -+ } -+ else { -+ mSuperscriptOffset = mXHeight; -+ } -+ -+ // mSubscriptOffset -+ if (os2 && os2->ySubscriptYOffset) { -+ val = CONVERT_DESIGN_UNITS_TO_PIXELS(os2->ySubscriptYOffset, -+ face->size->metrics.y_scale); -+ // some fonts have the incorrect sign. -+ val = (val < 0) ? -val : val; -+ mSubscriptOffset = nscoord(PR_MAX(f, NSToIntRound(val * f))); -+ } -+ else { -+ mSubscriptOffset = mXHeight; -+ } -+ -+ // mStrikeoutOffset -+ mStrikeoutOffset = NSToCoordRound(mXHeight / 2.0); -+ -+ // mStrikeoutSize -+ mStrikeoutSize = mUnderlineSize; -+ -+ XftUnlockFace(xftFont); -+ -+ /* -+ printf("%i\n", mXHeight); -+ printf("%i\n", mSuperscriptOffset); -+ printf("%i\n", mSubscriptOffset); -+ printf("%i\n", mStrikeoutOffset); -+ printf("%i\n", mStrikeoutSize); -+ printf("%i\n", mUnderlineOffset); -+ printf("%i\n", mUnderlineSize); -+ printf("%i\n", mMaxHeight); -+ printf("%i\n", mLeading); -+ printf("%i\n", mEmHeight); -+ printf("%i\n", mEmAscent); -+ printf("%i\n", mEmDescent); -+ printf("%i\n", mMaxAscent); -+ printf("%i\n", mMaxDescent); -+ printf("%i\n", mMaxAdvance); -+ printf("%i\n", mSpaceWidth); -+ printf("%i\n", mAveCharWidth); -+ */ -+ -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontMetricsPango::Destroy() -+{ -+ mDeviceContext = nsnull; -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontMetricsPango::GetFont(const nsFont *&aFont) -+{ -+ aFont = mFont; -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontMetricsPango::GetLangGroup(nsIAtom** aLangGroup) -+{ -+ *aLangGroup = mLangGroup; -+ NS_IF_ADDREF(*aLangGroup); -+ -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontMetricsPango::GetFontHandle(nsFontHandle &aHandle) -+{ -+ return NS_ERROR_NOT_IMPLEMENTED; -+} -+ -+// nsIFontMetricsPango impl -+ -+nsresult -+nsFontMetricsPango::GetWidth(const char* aString, PRUint32 aLength, -+ nscoord& aWidth, -+ nsRenderingContextGTK *aContext) -+{ -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ pango_layout_set_text(layout, aString, aLength); -+ -+ int width, height; -+ -+ pango_layout_get_size(layout, &width, &height); -+ -+ width /= PANGO_SCALE; -+ -+ g_object_unref(layout); -+ -+ float f; -+ f = mDeviceContext->DevUnitsToAppUnits(); -+ aWidth = NSToCoordRound(width * f); -+ -+ // printf("GetWidth (char *) %d\n", aWidth); -+ -+ return NS_OK; -+} -+ -+nsresult -+nsFontMetricsPango::GetWidth(const PRUnichar* aString, PRUint32 aLength, -+ nscoord& aWidth, PRInt32 *aFontID, -+ nsRenderingContextGTK *aContext) -+{ -+ nsresult rv = NS_OK; -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ gchar *text = g_utf16_to_utf8(aString, aLength, -+ NULL, NULL, NULL); -+ -+ if (!text) { -+ aWidth = 0; -+#ifdef DEBUG -+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); -+ DUMP_PRUNICHAR(aString, aLength) -+#endif -+ rv = NS_ERROR_FAILURE; -+ goto loser; -+ } -+ -+ gint width, height; -+ -+ pango_layout_set_text(layout, text, strlen(text)); -+ pango_layout_get_size(layout, &width, &height); -+ -+ width /= PANGO_SCALE; -+ -+ float f; -+ f = mDeviceContext->DevUnitsToAppUnits(); -+ aWidth = NSToCoordRound(width * f); -+ -+ // printf("GetWidth %d\n", aWidth); -+ -+ loser: -+ g_free(text); -+ g_object_unref(layout); -+ -+ return rv; -+} -+ -+ -+nsresult -+nsFontMetricsPango::GetTextDimensions(const PRUnichar* aString, -+ PRUint32 aLength, -+ nsTextDimensions& aDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext) -+{ -+ nsresult rv = NS_OK; -+ -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ gchar *text = g_utf16_to_utf8(aString, aLength, -+ NULL, NULL, NULL); -+ -+ if (!text) { -+#ifdef DEBUG -+ NS_WARNING("nsFontMetricsPango::GetTextDimensions invalid unicode to follow"); -+ DUMP_PRUNICHAR(aString, aLength) -+#endif -+ aDimensions.width = 0; -+ aDimensions.ascent = 0; -+ aDimensions.descent = 0; -+ -+ rv = NS_ERROR_FAILURE; -+ goto loser; -+ } -+ -+ -+ pango_layout_set_text(layout, text, strlen(text)); -+ -+ // Get the logical extents -+ PangoLayoutLine *line; -+ if (pango_layout_get_line_count(layout) != 1) { -+ printf("Warning: more than one line!\n"); -+ } -+ line = pango_layout_get_line(layout, 0); -+ -+ PangoRectangle rect; -+ pango_layout_line_get_extents(line, NULL, &rect); -+ -+ float P2T; -+ P2T = mDeviceContext->DevUnitsToAppUnits(); -+ -+ aDimensions.width = NSToCoordRound(rect.width / PANGO_SCALE * P2T); -+ aDimensions.ascent = NSToCoordRound(PANGO_ASCENT(rect) / PANGO_SCALE * P2T); -+ aDimensions.descent = NSToCoordRound(PANGO_DESCENT(rect) / PANGO_SCALE * P2T); -+ -+ // printf("GetTextDimensions %d %d %d\n", aDimensions.width, -+ //aDimensions.ascent, aDimensions.descent); -+ -+ loser: -+ g_free(text); -+ g_object_unref(layout); -+ -+ return rv; -+} -+ -+nsresult -+nsFontMetricsPango::GetTextDimensions(const char* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext) -+{ -+ -+ return GetTextDimensionsInternal(aString, aLength, aAvailWidth, aBreaks, -+ aNumBreaks, aDimensions, aNumCharsFit, -+ aLastWordDimensions, aContext); -+ -+} -+ -+nsresult -+nsFontMetricsPango::GetTextDimensions(const PRUnichar* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext) -+{ -+ nsresult rv = NS_OK; -+ PRInt32 curBreak = 0; -+ gchar *curChar; -+ -+ PRInt32 *utf8Breaks = new PRInt32[aNumBreaks]; -+ -+ gchar *text = g_utf16_to_utf8(aString, (PRInt32)aLength, -+ NULL, NULL, NULL); -+ -+ curChar = text; -+ -+ if (!text) { -+#ifdef DEBUG -+ NS_WARNING("nsFontMetricsPango::GetWidth invalid unicode to follow"); -+ DUMP_PRUNICHAR(aString, (PRUint32)aLength) -+#endif -+ rv = NS_ERROR_FAILURE; -+ goto loser; -+ } -+ -+ // Covert the utf16 break offsets to utf8 break offsets -+ for (PRInt32 curOffset=0; curOffset < aLength; -+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { -+ if (aBreaks[curBreak] == curOffset) { -+ utf8Breaks[curBreak] = curChar - text; -+ curBreak++; -+ } -+ -+ if (IS_HIGH_SURROGATE(aString[curOffset])) -+ curOffset++; -+ } -+ -+ // Always catch the last break -+ utf8Breaks[curBreak] = curChar - text; -+ -+#if 0 -+ if (strlen(text) != aLength) { -+ printf("Different lengths for utf16 %d and utf8 %d\n", aLength, strlen(text)); -+ DUMP_PRUNICHAR(aString, aLength) -+ DUMP_PRUNICHAR(text, strlen(text)) -+ for (PRInt32 i = 0; i < aNumBreaks; ++i) { -+ printf(" break %d utf16 %d utf8 %d\n", i, aBreaks[i], utf8Breaks[i]); -+ } -+ } -+#endif -+ -+ // We'll use curBreak to indicate which of the breaks end up being -+ // used for the break point for this line. -+ curBreak = 0; -+ rv = GetTextDimensionsInternal(text, strlen(text), aAvailWidth, utf8Breaks, -+ aNumBreaks, aDimensions, aNumCharsFit, -+ aLastWordDimensions, aContext); -+ -+ // Figure out which of the breaks we ended up using to convert -+ // back to utf16 - start from the end. -+ for (PRInt32 i = aNumBreaks - 1; i >= 0; --i) { -+ if (utf8Breaks[i] == aNumCharsFit) { -+ // if (aNumCharsFit != aBreaks[i]) -+ // printf("Fixing utf8 -> utf16 %d -> %d\n", aNumCharsFit, aBreaks[i]); -+ aNumCharsFit = aBreaks[i]; -+ break; -+ } -+ } -+ -+ loser: -+ if (text) -+ g_free(text); -+ -+ delete[] utf8Breaks; -+ -+ return rv; -+} -+ -+nsresult -+nsFontMetricsPango::DrawString(const char *aString, PRUint32 aLength, -+ nscoord aX, nscoord aY, -+ const nscoord* aSpacing, -+ nsRenderingContextGTK *aContext, -+ nsDrawingSurfaceGTK *aSurface) -+{ -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ pango_layout_set_text(layout, aString, aLength); -+ -+ int x = aX; -+ int y = aY; -+ -+ aContext->GetTranMatrix()->TransformCoord(&x, &y); -+ -+ PangoLayoutLine *line; -+ if (pango_layout_get_line_count(layout) != 1) { -+ printf("Warning: more than one line!\n"); -+ } -+ line = pango_layout_get_line(layout, 0); -+ -+ aContext->UpdateGC(); -+ GdkGC *gc = aContext->GetGC(); -+ -+ if (aSpacing && *aSpacing) { -+ DrawStringSlowly(aString, NULL, aLength, aSurface->GetDrawable(), -+ gc, x, y, line, aSpacing); -+ } -+ else { -+ gdk_draw_layout_line(aSurface->GetDrawable(), gc, -+ x, y, -+ line); -+ } -+ -+ g_object_unref(gc); -+ g_object_unref(layout); -+ -+ // printf("DrawString (char *)\n"); -+ -+ return NS_OK; -+} -+ -+nsresult -+nsFontMetricsPango::DrawString(const PRUnichar* aString, PRUint32 aLength, -+ nscoord aX, nscoord aY, -+ PRInt32 aFontID, -+ const nscoord* aSpacing, -+ nsRenderingContextGTK *aContext, -+ nsDrawingSurfaceGTK *aSurface) -+{ -+ nsresult rv = NS_OK; -+ int x = aX; -+ int y = aY; -+ -+ aContext->UpdateGC(); -+ GdkGC *gc = aContext->GetGC(); -+ -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ gchar *text = g_utf16_to_utf8(aString, aLength, -+ NULL, NULL, NULL); -+ -+ if (!text) { -+#ifdef DEBUG -+ NS_WARNING("nsFontMetricsPango::DrawString invalid unicode to follow"); -+ DUMP_PRUNICHAR(aString, aLength) -+#endif -+ rv = NS_ERROR_FAILURE; -+ goto loser; -+ } -+ -+ pango_layout_set_text(layout, text, strlen(text)); -+ -+ aContext->GetTranMatrix()->TransformCoord(&x, &y); -+ -+ PangoLayoutLine *line; -+ if (pango_layout_get_line_count(layout) != 1) { -+ printf("Warning: more than one line!\n"); -+ } -+ line = pango_layout_get_line(layout, 0); -+ -+ if (aSpacing && *aSpacing) { -+ DrawStringSlowly(text, aString, aLength, aSurface->GetDrawable(), -+ gc, x, y, line, aSpacing); -+ } -+ else { -+ gdk_draw_layout_line(aSurface->GetDrawable(), gc, -+ x, y, -+ line); -+ } -+ -+ loser: -+ -+ g_free(text); -+ g_object_unref(gc); -+ g_object_unref(layout); -+ -+ // printf("DrawString\n"); -+ -+ return rv; -+} -+ -+#ifdef MOZ_MATHML -+nsresult -+nsFontMetricsPango::GetBoundingMetrics(const char *aString, PRUint32 aLength, -+ nsBoundingMetrics &aBoundingMetrics, -+ nsRenderingContextGTK *aContext) -+{ -+ printf("GetBoundingMetrics (char *)\n"); -+ return NS_ERROR_FAILURE; -+} -+ -+nsresult -+nsFontMetricsPango::GetBoundingMetrics(const PRUnichar *aString, -+ PRUint32 aLength, -+ nsBoundingMetrics &aBoundingMetrics, -+ PRInt32 *aFontID, -+ nsRenderingContextGTK *aContext) -+{ -+ nsresult rv = NS_OK; -+ PangoLayout *layout = pango_layout_new(mPangoContext); -+ -+ gchar *text = g_utf16_to_utf8(aString, aLength, -+ NULL, NULL, NULL); -+ -+ if (!text) { -+#ifdef DEBUG -+ NS_WARNING("nsFontMetricsPango::GetBoundingMetrics invalid unicode to follow"); -+ DUMP_PRUNICHAR(aString, aLength) -+#endif -+ aBoundingMetrics.leftBearing = 0; -+ aBoundingMetrics.rightBearing = 0; -+ aBoundingMetrics.width = 0; -+ aBoundingMetrics.ascent = 0; -+ aBoundingMetrics.descent = 0; -+ -+ rv = NS_ERROR_FAILURE; -+ goto loser; -+ } -+ -+ pango_layout_set_text(layout, text, strlen(text)); -+ -+ // Get the logical extents -+ PangoLayoutLine *line; -+ if (pango_layout_get_line_count(layout) != 1) { -+ printf("Warning: more than one line!\n"); -+ } -+ line = pango_layout_get_line(layout, 0); -+ -+ // Get the ink extents -+ PangoRectangle rect; -+ pango_layout_line_get_extents(line, NULL, &rect); -+ -+ float P2T; -+ P2T = mDeviceContext->DevUnitsToAppUnits(); -+ -+ aBoundingMetrics.leftBearing = -+ NSToCoordRound(rect.x / PANGO_SCALE * P2T); -+ aBoundingMetrics.rightBearing = -+ NSToCoordRound(rect.width / PANGO_SCALE * P2T); -+ aBoundingMetrics.width = NSToCoordRound((rect.x + rect.width) / PANGO_SCALE * P2T); -+ aBoundingMetrics.ascent = NSToCoordRound(rect.y / PANGO_SCALE * P2T); -+ aBoundingMetrics.descent = NSToCoordRound(rect.height / PANGO_SCALE * P2T); -+ -+ loser: -+ g_free(text); -+ g_object_unref(layout); -+ -+ return rv; -+} -+ -+#endif /* MOZ_MATHML */ -+ -+GdkFont* -+nsFontMetricsPango::GetCurrentGDKFont(void) -+{ -+ return nsnull; -+} -+ -+nsresult -+nsFontMetricsPango::SetRightToLeftText(PRBool aIsRTL) -+{ -+ if (aIsRTL) { -+ if (!mRTLPangoContext) { -+ mRTLPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); -+ pango_context_set_base_dir(mRTLPangoContext, PANGO_DIRECTION_RTL); -+ -+ gdk_pango_context_set_colormap(mRTLPangoContext, gdk_rgb_get_cmap()); -+ pango_context_set_language(mRTLPangoContext, GetPangoLanguage(mLangGroup)); -+ pango_context_set_font_description(mRTLPangoContext, mPangoFontDesc); -+ } -+ mPangoContext = mRTLPangoContext; -+ } -+ else { -+ mPangoContext = mLTRPangoContext; -+ } -+ -+ mIsRTL = aIsRTL; -+ return NS_OK; -+} -+ -+/* static */ -+PRUint32 -+nsFontMetricsPango::GetHints(void) -+{ -+ return (NS_RENDERING_HINT_BIDI_REORDERING | -+ NS_RENDERING_HINT_ARABIC_SHAPING | -+ NS_RENDERING_HINT_FAST_MEASURE); -+} -+ -+/* static */ -+nsresult -+nsFontMetricsPango::FamilyExists(nsIDeviceContext *aDevice, -+ const nsString &aName) -+{ -+ if (!IsASCIIFontName(aName)) -+ return NS_ERROR_FAILURE; -+ -+ NS_ConvertUCS2toUTF8 name(aName); -+ -+ nsresult rv = NS_ERROR_FAILURE; -+ PangoContext *context = pango_xft_get_context(GDK_DISPLAY(), 0); -+ PangoFontFamily **familyList; -+ int n; -+ -+ pango_context_list_families(context, &familyList, &n); -+ -+ for (int i=0; i < n; i++) { -+ const char *tmpname = pango_font_family_get_name(familyList[i]); -+ if (!Compare(nsDependentCString(tmpname), name, -+ nsCaseInsensitiveCStringComparator())) { -+ rv = NS_OK; -+ break; -+ } -+ } -+ -+ g_free(familyList); -+ g_object_unref(context); -+ -+ return rv; -+} -+ -+// Private Methods -+ -+nsresult -+nsFontMetricsPango::RealizeFont(void) -+{ -+ nsCString familyList; -+ // Create and fill out the font description. -+ mPangoFontDesc = pango_font_description_new(); -+ -+ // Add CSS names - walk the list of fonts, adding the generic as -+ // the last font -+ for (int i=0; i < mFontList.Count(); ++i) { -+ // if this was a generic name, break out of the loop since we -+ // don't want to add it to the pattern yet -+ if (mFontIsGeneric[i]) -+ break;; -+ -+ nsCString *familyName = mFontList.CStringAt(i); -+ familyList.Append(familyName->get()); -+ familyList.Append(','); -+ } -+ -+ // If there's a generic add a pref for the generic if there's one -+ // set. -+ if (mGenericFont && !mFont->systemFont) { -+ nsCString name; -+ name += "font.name."; -+ name += mGenericFont->get(); -+ name += "."; -+ -+ nsString langGroup; -+ mLangGroup->ToString(langGroup); -+ -+ name.AppendWithConversion(langGroup); -+ -+ nsCOMPtr pref; -+ pref = do_GetService(NS_PREF_CONTRACTID); -+ if (pref) { -+ nsresult rv; -+ nsXPIDLCString value; -+ rv = pref->GetCharPref(name.get(), getter_Copies(value)); -+ -+ // we ignore prefs that have three hypens since they are X -+ // style prefs. -+ if (FFRECountHyphens(value) < 3) { -+ nsCString tmpstr; -+ tmpstr.Append(value); -+ -+ familyList.Append(tmpstr); -+ familyList.Append(','); -+ } -+ } -+ } -+ -+ // Add the generic if there is one. -+ if (mGenericFont && !mFont->systemFont) { -+ familyList.Append(mGenericFont->get()); -+ familyList.Append(','); -+ } -+ -+ // Set the family -+ pango_font_description_set_family(mPangoFontDesc, -+ familyList.get()); -+ -+ // Set the point size -+ pango_font_description_set_size(mPangoFontDesc, -+ (gint)(mPointSize * PANGO_SCALE)); -+ -+ // Set the style -+ pango_font_description_set_style(mPangoFontDesc, -+ CalculateStyle(mFont->style)); -+ -+ // Set the weight -+ pango_font_description_set_weight(mPangoFontDesc, -+ CalculateWeight(mFont->weight)); -+ -+ // Now that we have the font description set up, create the -+ // context. -+ mLTRPangoContext = pango_xft_get_context(GDK_DISPLAY(), 0); -+ mPangoContext = mLTRPangoContext; -+ -+ // Set the color map so we can draw later. -+ gdk_pango_context_set_colormap(mPangoContext, gdk_rgb_get_cmap()); -+ -+ // Set the pango language now that we have a context -+ pango_context_set_language(mPangoContext, GetPangoLanguage(mLangGroup)); -+ -+ // And attach the font description to this context -+ pango_context_set_font_description(mPangoContext, mPangoFontDesc); -+ -+ return NS_OK; -+} -+ -+/* static */ -+PRBool -+nsFontMetricsPango::EnumFontCallback(const nsString &aFamily, -+ PRBool aIsGeneric, void *aData) -+{ -+ // make sure it's an ascii name, if not then return and continue -+ // enumerating -+ if (!IsASCIIFontName(aFamily)) -+ return PR_TRUE; -+ -+ nsCAutoString name; -+ name.AssignWithConversion(aFamily.get()); -+ ToLowerCase(name); -+ nsFontMetricsPango *metrics = (nsFontMetricsPango *)aData; -+ metrics->mFontList.AppendCString(name); -+ metrics->mFontIsGeneric.AppendElement((void *)aIsGeneric); -+ if (aIsGeneric) { -+ metrics->mGenericFont = -+ metrics->mFontList.CStringAt(metrics->mFontList.Count() - 1); -+ return PR_FALSE; // stop processing -+ } -+ -+ return PR_TRUE; // keep processing -+} -+ -+/* -+ * This is only used when there's per-character spacing happening. -+ * Well, really it can be either line or character spacing but it's -+ * just turtles all the way down! -+ */ -+ -+void -+nsFontMetricsPango::DrawStringSlowly(const gchar *aText, -+ const PRUnichar *aOrigString, -+ PRUint32 aLength, -+ GdkDrawable *aDrawable, -+ GdkGC *aGC, gint aX, gint aY, -+ PangoLayoutLine *aLine, -+ const nscoord *aSpacing) -+{ -+ float app2dev; -+ app2dev = mDeviceContext->AppUnitsToDevUnits(); -+ gint offset = 0; -+ -+ /* -+ * We walk the list of glyphs returned in each layout run, -+ * matching up the glyphs with the characters in the source text. -+ * We use the aSpacing argument to figure out where to place those -+ * glyphs. It's important to note that since the string we're -+ * working with is in UTF-8 while the spacing argument assumes -+ * that offset will be part of the UTF-16 string. Logical -+ * attributes in pango are in byte offsets in the UTF-8 string, so -+ * we need to store the offsets based on the UTF-8 string. -+ */ -+ nscoord *utf8spacing = new nscoord[strlen(aText)]; -+ -+ if (aOrigString) { -+ const gchar *curChar = aText; -+ bzero(utf8spacing, sizeof(nscoord) * strlen(aText)); -+ -+ // Covert the utf16 spacing offsets to utf8 spacing offsets -+ for (PRUint32 curOffset=0; curOffset < aLength; -+ curOffset++, curChar = g_utf8_find_next_char(curChar, NULL)) { -+ utf8spacing[curChar - aText] = aSpacing[curOffset]; -+ -+ if (IS_HIGH_SURROGATE(aOrigString[curOffset])) -+ curOffset++; -+ } -+ } -+ else { -+ memcpy(utf8spacing, aSpacing, (sizeof(nscoord *) * aLength)); -+ } -+ -+ gint curRun = 0; -+ -+ for (GSList *tmpList = aLine->runs; tmpList && tmpList->data; -+ tmpList = tmpList->next, curRun++) { -+ PangoLayoutRun *layoutRun = (PangoLayoutRun *)tmpList->data; -+ gint tmpOffset = 0; -+ -+ /* printf(" Rendering run %d: \"%s\"\n", curRun, -+ &aText[layoutRun->item->offset]); */ -+ -+ for (gint i=0; i < layoutRun->glyphs->num_glyphs; i++) { -+ /* printf("glyph %d offset %d orig width %d new width %d\n", i, -+ * layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset, -+ * layoutRun->glyphs->glyphs[i].geometry.width, -+ * (gint)(utf8spacing[layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset] * app2dev * PANGO_SCALE)); -+ */ -+ gint thisOffset = (gint)(utf8spacing[layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset] -+ * app2dev * PANGO_SCALE); -+ layoutRun->glyphs->glyphs[i].geometry.width = thisOffset; -+ tmpOffset += thisOffset; -+ } -+ -+ /* printf(" rendering at X coord %d\n", aX + offset); */ -+ -+ gdk_draw_glyphs(aDrawable, aGC, layoutRun->item->analysis.font, -+ aX + (gint)(offset / PANGO_SCALE), aY, layoutRun->glyphs); -+ -+ offset += tmpOffset; -+ } -+ -+ delete[] utf8spacing; -+} -+ -+nsresult -+nsFontMetricsPango::GetTextDimensionsInternal(const gchar* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ nsRenderingContextGTK *aContext) -+{ -+ NS_PRECONDITION(aBreaks[aNumBreaks - 1] == aLength, "invalid break array"); -+ -+ // If we need to back up this state represents the last place -+ // we could break. We can use this to avoid remeasuring text -+ PRInt32 prevBreakState_BreakIndex = -1; // not known -+ // (hasn't been computed) -+ nscoord prevBreakState_Width = 0; // accumulated width to this point -+ -+ // Initialize OUT parameters -+ GetMaxAscent(aLastWordDimensions.ascent); -+ GetMaxDescent(aLastWordDimensions.descent); -+ aLastWordDimensions.width = -1; -+ aNumCharsFit = 0; -+ -+ // Iterate each character in the string and determine which font to use -+ nscoord width = 0; -+ PRInt32 start = 0; -+ nscoord aveCharWidth; -+ GetAveCharWidth(aveCharWidth); -+ -+ while (start < aLength) { -+ // Estimate how many characters will fit. Do that by -+ // diving the available space by the average character -+ // width. Make sure the estimated number of characters is -+ // at least 1 -+ PRInt32 estimatedNumChars = 0; -+ -+ if (aveCharWidth > 0) -+ estimatedNumChars = (aAvailWidth - width) / aveCharWidth; -+ -+ if (estimatedNumChars < 1) -+ estimatedNumChars = 1; -+ -+ // Find the nearest break offset -+ PRInt32 estimatedBreakOffset = start + estimatedNumChars; -+ PRInt32 breakIndex; -+ nscoord numChars; -+ -+ // Find the nearest place to break that is less than or equal to -+ // the estimated break offset -+ if (aLength <= estimatedBreakOffset) { -+ // All the characters should fit -+ numChars = aLength - start; -+ breakIndex = aNumBreaks - 1; -+ } -+ else { -+ breakIndex = prevBreakState_BreakIndex; -+ while (((breakIndex + 1) < aNumBreaks) && -+ (aBreaks[breakIndex + 1] <= estimatedBreakOffset)) { -+ ++breakIndex; -+ } -+ -+ if (breakIndex == prevBreakState_BreakIndex) { -+ ++breakIndex; // make sure we advanced past the -+ // previous break index -+ } -+ -+ numChars = aBreaks[breakIndex] - start; -+ } -+ -+ // Measure the text -+ nscoord twWidth = 0; -+ if ((1 == numChars) && (aString[start] == ' ')) -+ GetSpaceWidth(twWidth); -+ else if (numChars > 0) -+ GetWidth(&aString[start], numChars, twWidth, aContext); -+ -+ // See if the text fits -+ PRBool textFits = (twWidth + width) <= aAvailWidth; -+ -+ // If the text fits then update the width and the number of -+ // characters that fit -+ if (textFits) { -+ aNumCharsFit += numChars; -+ width += twWidth; -+ start += numChars; -+ -+ // This is a good spot to back up to if we need to so remember -+ // this state -+ prevBreakState_BreakIndex = breakIndex; -+ prevBreakState_Width = width; -+ } -+ else { -+ // See if we can just back up to the previous saved -+ // state and not have to measure any text -+ if (prevBreakState_BreakIndex > 0) { -+ // If the previous break index is just before the -+ // current break index then we can use it -+ if (prevBreakState_BreakIndex == (breakIndex - 1)) { -+ aNumCharsFit = aBreaks[prevBreakState_BreakIndex]; -+ width = prevBreakState_Width; -+ break; -+ } -+ } -+ -+ // We can't just revert to the previous break state -+ if (0 == breakIndex) { -+ // There's no place to back up to, so even though -+ // the text doesn't fit return it anyway -+ aNumCharsFit += numChars; -+ width += twWidth; -+ break; -+ } -+ -+ // Repeatedly back up until we get to where the text -+ // fits or we're all the way back to the first word -+ width += twWidth; -+ while ((breakIndex >= 1) && (width > aAvailWidth)) { -+ twWidth = 0; -+ start = aBreaks[breakIndex - 1]; -+ numChars = aBreaks[breakIndex] - start; -+ -+ if ((1 == numChars) && (aString[start] == ' ')) -+ GetSpaceWidth(twWidth); -+ else if (numChars > 0) -+ GetWidth(&aString[start], numChars, twWidth, -+ aContext); -+ width -= twWidth; -+ aNumCharsFit = start; -+ breakIndex--; -+ } -+ break; -+ } -+ } -+ -+ aDimensions.width = width; -+ GetMaxAscent(aDimensions.ascent); -+ GetMaxDescent(aDimensions.descent); -+ -+ /* printf("aDimensions %d %d %d aLastWordDimensions %d %d %d aNumCharsFit %d\n", -+ aDimensions.width, aDimensions.ascent, aDimensions.descent, -+ aLastWordDimensions.width, aLastWordDimensions.ascent, aLastWordDimensions.descent, -+ aNumCharsFit); */ -+ -+ return NS_OK; -+} -+ -+/* static */ -+PRBool -+IsASCIIFontName(const nsString& aName) -+{ -+ PRUint32 len = aName.Length(); -+ const PRUnichar* str = aName.get(); -+ for (PRUint32 i = 0; i < len; i++) { -+ /* -+ * X font names are printable ASCII, ignore others (for now) -+ */ -+ if ((str[i] < 0x20) || (str[i] > 0x7E)) { -+ return PR_FALSE; -+ } -+ } -+ -+ return PR_TRUE; -+} -+ -+/* static */ -+int -+FFRECountHyphens (nsACString &aFFREName) -+{ -+ int h = 0; -+ PRInt32 hyphen = 0; -+ while ((hyphen = aFFREName.FindChar('-', hyphen)) >= 0) { -+ ++h; -+ ++hyphen; -+ } -+ return h; -+} -+ -+/* static */ -+PangoLanguage * -+GetPangoLanguage(nsIAtom *aLangGroup) -+{ -+ // Find the FC lang group for this lang group -+ nsCAutoString cname; -+ aLangGroup->ToUTF8String(cname); -+ -+ // see if the lang group needs to be translated from mozilla's -+ // internal mapping into fontconfig's -+ const struct MozPangoLangGroup *langGroup; -+ langGroup = FindPangoLangGroup(cname); -+ -+ // if there's no lang group, just use the lang group as it was -+ // passed to us -+ // -+ // we're casting away the const here for the strings - should be -+ // safe. -+ if (!langGroup) -+ return pango_language_from_string(cname.get()); -+ else if (langGroup->PangoLang) -+ return pango_language_from_string(langGroup->PangoLang); -+ -+ return pango_language_from_string("en"); -+} -+ -+/* static */ -+const MozPangoLangGroup* -+FindPangoLangGroup (nsACString &aLangGroup) -+{ -+ for (unsigned int i=0; i < NUM_PANGO_LANG_GROUPS; ++i) { -+ if (aLangGroup.Equals(MozPangoLangGroups[i].mozLangGroup, -+ nsCaseInsensitiveCStringComparator())) { -+ return &MozPangoLangGroups[i]; -+ } -+ } -+ -+ return nsnull; -+} -+ -+/* static */ -+void -+FreeGlobals(void) -+{ -+} -+ -+/* static */ -+PangoStyle -+CalculateStyle(PRUint8 aStyle) -+{ -+ switch(aStyle) { -+ case NS_FONT_STYLE_ITALIC: -+ return PANGO_STYLE_OBLIQUE; -+ break; -+ case NS_FONT_STYLE_OBLIQUE: -+ return PANGO_STYLE_OBLIQUE; -+ break; -+ } -+ -+ return PANGO_STYLE_NORMAL; -+} -+ -+/* static */ -+PangoWeight -+CalculateWeight (PRUint16 aWeight) -+{ -+ /* -+ * weights come in two parts crammed into one -+ * integer -- the "base" weight is weight / 100, -+ * the rest of the value is the "offset" from that -+ * weight -- the number of steps to move to adjust -+ * the weight in the list of supported font weights, -+ * this value can be negative or positive. -+ */ -+ PRInt32 baseWeight = (aWeight + 50) / 100; -+ PRInt32 offset = aWeight - baseWeight * 100; -+ -+ /* clip weights to range 0 to 9 */ -+ if (baseWeight < 0) -+ baseWeight = 0; -+ if (baseWeight > 9) -+ baseWeight = 9; -+ -+ /* Map from weight value to fcWeights index */ -+ static int fcWeightLookup[10] = { -+ 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, -+ }; -+ -+ PRInt32 fcWeight = fcWeightLookup[baseWeight]; -+ -+ /* -+ * adjust by the offset value, make sure we stay inside the -+ * fcWeights table -+ */ -+ fcWeight += offset; -+ -+ if (fcWeight < 0) -+ fcWeight = 0; -+ if (fcWeight > 4) -+ fcWeight = 4; -+ -+ /* Map to final PANGO_WEIGHT value */ -+ static int fcWeights[5] = { -+ 349, -+ 499, -+ 649, -+ 749, -+ 999 -+ }; -+ -+ return (PangoWeight)fcWeights[fcWeight]; -+} -+ -+/* static */ -+nsresult -+EnumFontsPango(nsIAtom* aLangGroup, const char* aGeneric, -+ PRUint32* aCount, PRUnichar*** aResult) -+{ -+ FcPattern *pat = NULL; -+ FcObjectSet *os = NULL; -+ FcFontSet *fs = NULL; -+ nsresult rv = NS_ERROR_FAILURE; -+ -+ PRUnichar **array = NULL; -+ PRUint32 narray = 0; -+ PRInt32 serif = 0, sansSerif = 0, monospace = 0, nGenerics; -+ -+ *aCount = 0; -+ *aResult = nsnull; -+ -+ pat = FcPatternCreate(); -+ if (!pat) -+ goto end; -+ -+ os = FcObjectSetBuild(FC_FAMILY, FC_FOUNDRY, 0); -+ if (!os) -+ goto end; -+ -+ // take the pattern and add the lang group to it -+ if (aLangGroup) -+ AddLangGroup(pat, aLangGroup); -+ -+ // get the font list -+ fs = FcFontList(0, pat, os); -+ -+ if (!fs) -+ goto end; -+ -+ if (!fs->nfont) { -+ rv = NS_OK; -+ goto end; -+ } -+ -+ // Fontconfig supports 3 generic fonts, "serif", "sans-serif", and -+ // "monospace", slightly different from CSS's 5. -+ if (!aGeneric) -+ serif = sansSerif = monospace = 1; -+ else if (!strcmp(aGeneric, "serif")) -+ serif = 1; -+ else if (!strcmp(aGeneric, "sans-serif")) -+ sansSerif = 1; -+ else if (!strcmp(aGeneric, "monospace")) -+ monospace = 1; -+ else if (!strcmp(aGeneric, "cursive") || !strcmp(aGeneric, "fantasy")) -+ serif = sansSerif = 1; -+ else -+ NS_NOTREACHED("unexpected generic family"); -+ nGenerics = serif + sansSerif + monospace; -+ -+ array = NS_STATIC_CAST(PRUnichar **, -+ nsMemory::Alloc((fs->nfont + nGenerics) * sizeof(PRUnichar *))); -+ if (!array) -+ goto end; -+ -+ if (serif) { -+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("serif")); -+ if (!name) -+ goto end; -+ array[narray++] = name; -+ } -+ -+ if (sansSerif) { -+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("sans-serif")); -+ if (!name) -+ goto end; -+ array[narray++] = name; -+ } -+ -+ if (monospace) { -+ PRUnichar *name = ToNewUnicode(NS_LITERAL_STRING("monospace")); -+ if (!name) -+ goto end; -+ array[narray++] = name; -+ } -+ -+ for (int i=0; i < fs->nfont; ++i) { -+ char *family; -+ PRUnichar *name; -+ -+ // if there's no family, just move to the next iteration -+ if (FcPatternGetString (fs->fonts[i], FC_FAMILY, 0, -+ (FcChar8 **) &family) != FcResultMatch) { -+ continue; -+ } -+ -+ name = NS_STATIC_CAST(PRUnichar *, -+ nsMemory::Alloc ((strlen (family) + 1) -+ * sizeof (PRUnichar))); -+ -+ if (!name) -+ goto end; -+ -+ PRUnichar *r = name; -+ for (char *f = family; *f; ++f) -+ *r++ = *f; -+ *r = '\0'; -+ -+ array[narray++] = name; -+ } -+ -+ NS_QuickSort(array + nGenerics, narray - nGenerics, sizeof (PRUnichar*), -+ CompareFontNames, nsnull); -+ -+ *aCount = narray; -+ if (narray) -+ *aResult = array; -+ else -+ nsMemory::Free(array); -+ -+ rv = NS_OK; -+ -+ end: -+ if (NS_FAILED(rv) && array) { -+ while (narray) -+ nsMemory::Free (array[--narray]); -+ nsMemory::Free (array); -+ } -+ if (pat) -+ FcPatternDestroy(pat); -+ if (os) -+ FcObjectSetDestroy(os); -+ if (fs) -+ FcFontSetDestroy(fs); -+ -+ return rv; -+} -+ -+/* static */ -+int -+CompareFontNames (const void* aArg1, const void* aArg2, void* aClosure) -+{ -+ const PRUnichar* str1 = *((const PRUnichar**) aArg1); -+ const PRUnichar* str2 = *((const PRUnichar**) aArg2); -+ -+ return nsCRT::strcmp(str1, str2); -+} -+ -+ -+// nsFontEnumeratorPango class -+ -+nsFontEnumeratorPango::nsFontEnumeratorPango() -+{ -+} -+ -+NS_IMPL_ISUPPORTS1(nsFontEnumeratorPango, nsIFontEnumerator) -+ -+NS_IMETHODIMP -+nsFontEnumeratorPango::EnumerateAllFonts(PRUint32 *aCount, -+ PRUnichar ***aResult) -+{ -+ NS_ENSURE_ARG_POINTER(aResult); -+ *aResult = nsnull; -+ NS_ENSURE_ARG_POINTER(aCount); -+ *aCount = 0; -+ -+ return EnumFontsPango(nsnull, nsnull, aCount, aResult); -+} -+ -+NS_IMETHODIMP -+nsFontEnumeratorPango::EnumerateFonts(const char *aLangGroup, -+ const char *aGeneric, -+ PRUint32 *aCount, -+ PRUnichar ***aResult) -+{ -+ NS_ENSURE_ARG_POINTER(aResult); -+ *aResult = nsnull; -+ NS_ENSURE_ARG_POINTER(aCount); -+ *aCount = 0; -+ -+ // aLangGroup=null or "" means any (i.e., don't care) -+ // aGeneric=null or "" means any (i.e, don't care) -+ nsCOMPtr langGroup; -+ if (aLangGroup && *aLangGroup) -+ langGroup = do_GetAtom(aLangGroup); -+ const char* generic = nsnull; -+ if (aGeneric && *aGeneric) -+ generic = aGeneric; -+ -+ return EnumFontsPango(langGroup, generic, aCount, aResult); -+} -+ -+NS_IMETHODIMP -+nsFontEnumeratorPango::HaveFontFor(const char *aLangGroup, -+ PRBool *aResult) -+{ -+ NS_ENSURE_ARG_POINTER(aResult); -+ *aResult = PR_FALSE; -+ NS_ENSURE_ARG_POINTER(aLangGroup); -+ -+ *aResult = PR_TRUE; // always return true for now. -+ // Finish me - ftang -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontEnumeratorPango::GetDefaultFont(const char *aLangGroup, -+ const char *aGeneric, -+ PRUnichar **aResult) -+{ -+ NS_ENSURE_ARG_POINTER(aResult); -+ *aResult = nsnull; -+ -+ // Have a look at nsFontEnumeratorXft::GetDefaultFont for some -+ // possible code for this function. -+ -+ return NS_OK; -+} -+ -+NS_IMETHODIMP -+nsFontEnumeratorPango::UpdateFontList(PRBool *_retval) -+{ -+ *_retval = PR_FALSE; // always return false for now -+ return NS_OK; -+} ---- mozilla/gfx/src/gtk/nsRenderingContextGTK.h.foo 2003-02-24 21:38:34.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsRenderingContextGTK.h 2004-11-22 12:56:21.000000000 -0500 -@@ -194,6 +194,8 @@ - const nsRect &aDestBounds, PRUint32 aCopyFlags); - NS_IMETHOD RetrieveCurrentNativeGraphicData(PRUint32 * ngd); - -+ NS_IMETHOD SetRightToLeftText(PRBool aIsRTL); -+ - NS_IMETHOD DrawImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsPoint * aDestPoint); - NS_IMETHOD DrawScaledImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsRect * aDestRect); - ---- mozilla/gfx/src/gtk/nsFontMetricsPango.h.foo 2004-11-22 12:56:21.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsFontMetricsPango.h 2004-11-22 12:56:21.000000000 -0500 -@@ -0,0 +1,278 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* vim:expandtab:shiftwidth=4:tabstop=4: -+ */ -+/* ***** BEGIN LICENSE BLOCK ***** -+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Mozilla Public License Version -+ * 1.1 (the "License"); you may not use this file except in compliance with -+ * the License. You may obtain a copy of the License at -+ * http://www.mozilla.org/MPL/ -+ * -+ * Software distributed under the License is distributed on an "AS IS" basis, -+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -+ * for the specific language governing rights and limitations under the -+ * License. -+ * -+ * The Original Code is mozilla.org code. -+ * -+ * The Initial Developer of the Original Code Christopher Blizzard -+ * . Portions created by the Initial Developer -+ * are Copyright (C) 2002 the Initial Developer. All Rights Reserved. -+ * -+ * Contributor(s): -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either the GNU General Public License Version 2 or later (the "GPL"), or -+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the MPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the MPL, the GPL or the LGPL. -+ * -+ * ***** END LICENSE BLOCK ***** */ -+ -+#include "nsIFontMetrics.h" -+#include "nsIFontEnumerator.h" -+#include "nsCRT.h" -+#include "nsIAtom.h" -+#include "nsString.h" -+#include "nsVoidArray.h" -+#include "nsIFontMetricsGTK.h" -+ -+#include -+ -+class nsFontMetricsPango : public nsIFontMetricsGTK -+{ -+public: -+ nsFontMetricsPango(); -+ virtual ~nsFontMetricsPango(); -+ -+ NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW -+ -+ // nsISupports -+ NS_DECL_ISUPPORTS -+ -+ // nsIFontMetrics -+ NS_IMETHOD Init (const nsFont& aFont, nsIAtom* aLangGroup, -+ nsIDeviceContext *aContext); -+ NS_IMETHOD Destroy(); -+ NS_IMETHOD GetFont (const nsFont *&aFont); -+ NS_IMETHOD GetLangGroup (nsIAtom** aLangGroup); -+ NS_IMETHOD GetFontHandle (nsFontHandle &aHandle); -+ -+ NS_IMETHOD GetXHeight (nscoord& aResult) -+ { aResult = mXHeight; return NS_OK; }; -+ -+ NS_IMETHOD GetSuperscriptOffset (nscoord& aResult) -+ { aResult = mSuperscriptOffset; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetSubscriptOffset (nscoord& aResult) -+ { aResult = mSubscriptOffset; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetStrikeout (nscoord& aOffset, nscoord& aSize) -+ { aOffset = mStrikeoutOffset; -+ aSize = mStrikeoutSize; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetUnderline (nscoord& aOffset, nscoord& aSize) -+ { aOffset = mUnderlineOffset; -+ aSize = mUnderlineSize; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetHeight (nscoord &aHeight) -+ { aHeight = mMaxHeight; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetNormalLineHeight (nscoord &aHeight) -+ { aHeight = mEmHeight + mLeading; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetLeading (nscoord &aLeading) -+ { aLeading = mLeading; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetEmHeight (nscoord &aHeight) -+ { aHeight = mEmHeight; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetEmAscent (nscoord &aAscent) -+ { aAscent = mEmAscent; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetEmDescent (nscoord &aDescent) -+ { aDescent = mEmDescent; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetMaxHeight (nscoord &aHeight) -+ { aHeight = mMaxHeight; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetMaxAscent (nscoord &aAscent) -+ { aAscent = mMaxAscent; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetMaxDescent (nscoord &aDescent) -+ { aDescent = mMaxDescent; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetMaxAdvance (nscoord &aAdvance) -+ { aAdvance = mMaxAdvance; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetSpaceWidth (nscoord &aSpaceCharWidth) -+ { aSpaceCharWidth = mSpaceWidth; -+ return NS_OK; }; -+ -+ NS_IMETHOD GetAveCharWidth (nscoord &aAveCharWidth) -+ { aAveCharWidth = mAveCharWidth; -+ return NS_OK; }; -+ -+ // nsIFontMetricsGTK (calls from the font rendering layer) -+ virtual nsresult GetWidth(const char* aString, PRUint32 aLength, -+ nscoord& aWidth, -+ nsRenderingContextGTK *aContext); -+ virtual nsresult GetWidth(const PRUnichar* aString, PRUint32 aLength, -+ nscoord& aWidth, PRInt32 *aFontID, -+ nsRenderingContextGTK *aContext); -+ -+ virtual nsresult GetTextDimensions(const PRUnichar* aString, -+ PRUint32 aLength, -+ nsTextDimensions& aDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext); -+ virtual nsresult GetTextDimensions(const char* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext); -+ virtual nsresult GetTextDimensions(const PRUnichar* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ PRInt32* aFontID, -+ nsRenderingContextGTK *aContext); -+ -+ virtual nsresult DrawString(const char *aString, PRUint32 aLength, -+ nscoord aX, nscoord aY, -+ const nscoord* aSpacing, -+ nsRenderingContextGTK *aContext, -+ nsDrawingSurfaceGTK *aSurface); -+ virtual nsresult DrawString(const PRUnichar* aString, PRUint32 aLength, -+ nscoord aX, nscoord aY, -+ PRInt32 aFontID, -+ const nscoord* aSpacing, -+ nsRenderingContextGTK *aContext, -+ nsDrawingSurfaceGTK *aSurface); -+ -+#ifdef MOZ_MATHML -+ virtual nsresult GetBoundingMetrics(const char *aString, PRUint32 aLength, -+ nsBoundingMetrics &aBoundingMetrics, -+ nsRenderingContextGTK *aContext); -+ virtual nsresult GetBoundingMetrics(const PRUnichar *aString, -+ PRUint32 aLength, -+ nsBoundingMetrics &aBoundingMetrics, -+ PRInt32 *aFontID, -+ nsRenderingContextGTK *aContext); -+#endif /* MOZ_MATHML */ -+ -+ virtual GdkFont* GetCurrentGDKFont(void); -+ -+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); -+ -+ // get hints for the font -+ static PRUint32 GetHints (void); -+ -+ // drawing surface methods -+ static nsresult FamilyExists (nsIDeviceContext *aDevice, -+ const nsString &aName); -+ -+private: -+ -+ // generic font metrics class bits -+ nsCStringArray mFontList; -+ nsAutoVoidArray mFontIsGeneric; -+ -+ nsIDeviceContext *mDeviceContext; -+ nsCOMPtr mLangGroup; -+ nsCString *mGenericFont; -+ nsFont *mFont; -+ float mPointSize; -+ -+ nsCAutoString mDefaultFont; -+ -+ // Pango-related items -+ PangoFontDescription *mPangoFontDesc; -+ PangoContext *mPangoContext; -+ PangoContext *mLTRPangoContext; -+ PangoContext *mRTLPangoContext; -+ PangoAttrList *mPangoAttrList; -+ PRBool mIsRTL; -+ -+ // Cached font metrics -+ nscoord mXHeight; -+ nscoord mSuperscriptOffset; -+ nscoord mSubscriptOffset; -+ nscoord mStrikeoutOffset; -+ nscoord mStrikeoutSize; -+ nscoord mUnderlineOffset; -+ nscoord mUnderlineSize; -+ nscoord mMaxHeight; -+ nscoord mLeading; -+ nscoord mEmHeight; -+ nscoord mEmAscent; -+ nscoord mEmDescent; -+ nscoord mMaxAscent; -+ nscoord mMaxDescent; -+ nscoord mMaxAdvance; -+ nscoord mSpaceWidth; -+ nscoord mAveCharWidth; -+ -+ // Private methods -+ nsresult RealizeFont(void); -+ nsresult CacheFontMetrics(void); -+ -+ static PRBool EnumFontCallback(const nsString &aFamily, -+ PRBool aIsGeneric, void *aData); -+ -+ void DrawStringSlowly(const gchar *aText, -+ const PRUnichar *aOrigString, -+ PRUint32 aLength, -+ GdkDrawable *aDrawable, -+ GdkGC *aGC, gint aX, gint aY, -+ PangoLayoutLine *aLine, -+ const nscoord *aSpacing); -+ -+ nsresult GetTextDimensionsInternal(const gchar* aString, -+ PRInt32 aLength, -+ PRInt32 aAvailWidth, -+ PRInt32* aBreaks, -+ PRInt32 aNumBreaks, -+ nsTextDimensions& aDimensions, -+ PRInt32& aNumCharsFit, -+ nsTextDimensions& aLastWordDimensions, -+ nsRenderingContextGTK *aContext); -+}; -+ -+class nsFontEnumeratorPango : public nsIFontEnumerator -+{ -+public: -+ nsFontEnumeratorPango(); -+ NS_DECL_ISUPPORTS -+ NS_DECL_NSIFONTENUMERATOR -+}; ---- mozilla/gfx/src/gtk/nsFontMetricsUtils.h.foo 2002-10-11 22:03:32.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsFontMetricsUtils.h 2004-11-22 12:56:21.000000000 -0500 -@@ -42,9 +42,12 @@ - extern PRUint32 NS_FontMetricsGetHints (void); - extern nsresult NS_FontMetricsFamilyExists(nsIDeviceContext *aDevice, - const nsString &aName); -- - #ifdef MOZ_ENABLE_XFT - extern PRBool NS_IsXftEnabled(void); - #endif - -+#ifdef MOZ_ENABLE_PANGO -+extern PRBool NS_IsPangoEnabled(void); -+#endif -+ - #endif /* __nsFontMetricsUtils_h */ ---- mozilla/gfx/src/gtk/nsIFontMetricsGTK.h.foo 2002-10-11 23:00:17.000000000 -0400 -+++ mozilla/gfx/src/gtk/nsIFontMetricsGTK.h 2004-11-22 12:56:21.000000000 -0500 -@@ -121,6 +121,9 @@ - // particular handle. - virtual GdkFont* GetCurrentGDKFont(void) = 0; - -+ // Set the direction of the text rendering -+ virtual nsresult SetRightToLeftText(PRBool aIsRTL) = 0; -+ - }; - - #endif /* __nsIFontMetricsGTK_h */ ---- mozilla/gfx/src/gtk/nsRenderingContextGTK.cpp.foo 2004-02-12 11:52:22.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsRenderingContextGTK.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -524,6 +524,9 @@ - - values.foreground.pixel = - gdk_rgb_xpixel_from_rgb(NS_TO_GDK_RGB(mCurrentColor)); -+ values.foreground.red = (NS_GET_R(mCurrentColor) << 8) | NS_GET_R(mCurrentColor); -+ values.foreground.green = (NS_GET_G(mCurrentColor) << 8) | NS_GET_G(mCurrentColor); -+ values.foreground.blue = (NS_GET_B(mCurrentColor) << 8) | NS_GET_B(mCurrentColor); - valuesMask = GDK_GC_FOREGROUND; - - #ifdef MOZ_ENABLE_COREXFONTS -@@ -1438,6 +1441,11 @@ - - #endif /* MOZ_MATHML */ - -+NS_IMETHODIMP nsRenderingContextGTK::SetRightToLeftText(PRBool aIsRTL) -+{ -+ return mFontMetrics->SetRightToLeftText(aIsRTL); -+} -+ - NS_IMETHODIMP nsRenderingContextGTK::DrawImage(imgIContainer *aImage, const nsRect * aSrcRect, const nsPoint * aDestPoint) - { - UpdateGC(); ---- mozilla/gfx/src/gtk/nsGCCache.cpp.foo 2002-02-02 22:47:15.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsGCCache.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -232,98 +232,42 @@ - // We have old GC, reuse it and check what - // we have to change - -- XGCValues xvalues; -- unsigned long xvalues_mask=0; -+ GdkGCValues xvalues; -+ int xvalues_mask = 0; - - if (entry->clipRegion) { - // set it to none here and then set the clip region with - // gdk_gc_set_clip_region in GetGC() - xvalues.clip_mask = None; -- xvalues_mask |= GCClipMask; -+ xvalues_mask |= GDK_GC_CLIP_MASK; - gdk_region_destroy(entry->clipRegion); - entry->clipRegion = NULL; - } - - if (entry->gcv.foreground.pixel != gcv->foreground.pixel) { -- xvalues.foreground = gcv->foreground.pixel; -- xvalues_mask |= GCForeground; -+ xvalues.foreground.pixel = gcv->foreground.pixel; -+ xvalues_mask |= GDK_GC_FOREGROUND; - } - - if (entry->gcv.function != gcv->function) { -- switch (gcv->function) { -- case GDK_COPY: -- xvalues.function = GXcopy; -- break; -- case GDK_INVERT: -- xvalues.function = GXinvert; -- break; -- case GDK_XOR: -- xvalues.function = GXxor; -- break; -- case GDK_CLEAR: -- xvalues.function = GXclear; -- break; -- case GDK_AND: -- xvalues.function = GXand; -- break; -- case GDK_AND_REVERSE: -- xvalues.function = GXandReverse; -- break; -- case GDK_AND_INVERT: -- xvalues.function = GXandInverted; -- break; -- case GDK_NOOP: -- xvalues.function = GXnoop; -- break; -- case GDK_OR: -- xvalues.function = GXor; -- break; -- case GDK_EQUIV: -- xvalues.function = GXequiv; -- break; -- case GDK_OR_REVERSE: -- xvalues.function = GXorReverse; -- break; -- case GDK_COPY_INVERT: -- xvalues.function = GXcopyInverted; -- break; -- case GDK_OR_INVERT: -- xvalues.function = GXorInverted; -- break; -- case GDK_NAND: -- xvalues.function = GXnand; -- break; -- case GDK_SET: -- xvalues.function = GXset; -- break; -- } -- xvalues_mask |= GCFunction; -+ xvalues.function = gcv->function; -+ xvalues_mask |= GDK_GC_FUNCTION; - } - - if(entry->gcv.font != gcv->font && flags & GDK_GC_FONT) { -- xvalues.font = ((XFontStruct *)GDK_FONT_XFONT(gcv->font))->fid; -- xvalues_mask |= GCFont; -+ xvalues.font = gcv->font; -+ xvalues_mask |= GDK_GC_FONT; - } - - if (entry->gcv.line_style != gcv->line_style) { -- switch (gcv->line_style) { -- case GDK_LINE_SOLID: -- xvalues.line_style = LineSolid; -- break; -- case GDK_LINE_ON_OFF_DASH: -- xvalues.line_style = LineOnOffDash; -- break; -- case GDK_LINE_DOUBLE_DASH: -- xvalues.line_style = LineDoubleDash; -- break; -- } -- xvalues_mask |= GCLineStyle; -+ xvalues.line_style = gcv->line_style; -+ xvalues_mask |= GDK_GC_LINE_STYLE; - } - - if (xvalues_mask != 0) { -- XChangeGC(GDK_GC_XDISPLAY(entry->gc), GDK_GC_XGC(entry->gc), -- xvalues_mask, &xvalues); -+ gdk_gc_set_values(entry->gc, &xvalues, (GdkGCValuesMask)xvalues_mask); - } -+ - entry->flags = flags; - entry->gcv = *gcv; - } ---- mozilla/gfx/src/gtk/nsFontMetricsGTK.cpp.foo 2004-03-09 09:14:54.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsFontMetricsGTK.cpp 2004-11-22 12:56:21.000000000 -0500 -@@ -4600,6 +4600,12 @@ - return mCurrentFont->GetGDKFont(); - } - -+nsresult -+nsFontMetricsGTK::SetRightToLeftText(PRBool aIsRTL) -+{ -+ return NS_OK; -+} -+ - PR_BEGIN_EXTERN_C - static int - CompareSizes(const void* aArg1, const void* aArg2, void *data) ---- mozilla/gfx/src/gtk/nsFontMetricsXft.h.foo 2004-02-23 16:38:52.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsFontMetricsXft.h 2004-11-22 12:56:21.000000000 -0500 -@@ -202,6 +202,8 @@ - - virtual GdkFont* GetCurrentGDKFont(void); - -+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); -+ - // get hints for the font - static PRUint32 GetHints (void); - ---- mozilla/gfx/src/gtk/nsFontMetricsGTK.h.foo 2004-02-04 20:57:03.000000000 -0500 -+++ mozilla/gfx/src/gtk/nsFontMetricsGTK.h 2004-11-22 12:56:21.000000000 -0500 -@@ -344,6 +344,8 @@ - - virtual GdkFont* GetCurrentGDKFont(void); - -+ virtual nsresult SetRightToLeftText(PRBool aIsRTL); -+ - static nsresult FamilyExists(nsIDeviceContext *aDevice, const nsString& aName); - static PRUint32 GetHints(void); - ---- mozilla/configure.in.foo 2004-11-22 12:55:08.000000000 -0500 -+++ mozilla/configure.in 2004-11-22 12:56:21.000000000 -0500 -@@ -3476,6 +3476,34 @@ - AC_SUBST(MOZ_XFT_LIBS) - - dnl ======================================================== -+dnl = pango font rendering -+dnl ======================================================== -+MOZ_ARG_ENABLE_BOOL(pango, -+[ --enable-pango Enable Pango font rendering support], -+ MOZ_ENABLE_PANGO=1, -+ MOZ_ENABLE_PANGO=) -+ -+if test "$MOZ_ENABLE_PANGO" -+then -+ AC_DEFINE(MOZ_ENABLE_PANGO) -+ PKG_CHECK_MODULES(MOZ_PANGO, pango >= 1.5.0) -+ -+ dnl Make sure that the pango version is _actually_ new enough -+ _SAVE_CFLAGS=$CFLAGS -+ _SAVE_LDFLAGS=$LDFLAGS -+ CFLAGS="$MOZ_PANGO_CFLAGS $CFLAGS" -+ LDFLAGS="$MOZ_PANGO_LIBS $LDFLAGS" -+ AC_CHECK_LIB(pangoft2-1.0, pango_fc_font_map_add_decoder_find_func,, -+ AC_MSG_ERROR([Your Pango is too old. Sorry.])) -+ CFLAGS=$_SAVE_CFLAGS -+ LDFLAGS=$_SAVE_LDFLAGS -+ -+ AC_SUBST(MOZ_ENABLE_PANGO) -+ AC_SUBST(MOZ_PANGO_CFLAGS) -+ AC_SUBST(MOZ_PANGO_LIBS) -+fi -+ -+dnl ======================================================== - dnl = disabling x11 core support, enabled by default - dnl ======================================================== - MOZ_ENABLE_COREXFONTS=${MOZ_ENABLE_COREXFONTS-1} diff --git a/thunderbird-1.5-visibility.patch b/thunderbird-1.5-visibility.patch deleted file mode 100644 index 61b0efb..0000000 --- a/thunderbird-1.5-visibility.patch +++ /dev/null @@ -1,591 +0,0 @@ -Mostly the same as firefox-1.5-visibility.patch with the addition of lber.h - ---- mozilla/config/system-headers.visibility 2005-06-17 17:03:42.000000000 -0400 -+++ mozilla/config/system-headers 2006-09-05 00:03:12.000000000 -0400 -@@ -66,6 +66,7 @@ - Button.h - byteswap.h - cairo.h -+cairo-xlib.h - callconv.h - Carbon/Carbon.h - CarbonEvents.h -@@ -176,7 +177,7 @@ - freetype/freetype.h - freetype/ftcache.h - freetype/ftglyph.h --freetype/ftoutlin.h -+freetype/ftoutln.h - freetype/ttnameid.h - freetype/tttables.h - fribidi/fribidi.h -@@ -192,6 +193,8 @@ - gdk/gdkregion.h - gdk/gdkwindow.h - gdk/gdkx.h -+gdk/gdkpango.h -+gdk/gdkalias.h - gdk-pixbuf/gdk-pixbuf.h - Gestalt.h - getopt.h -@@ -212,7 +215,11 @@ - gtk/gtkcontainer.h - gtk/gtkdialog.h - gtk/gtkentry.h -+gtk/gtkfilechooser.h -+gtk/gtkfixed.h - gtk/gtk.h -+gtk/gtkiconfactory.h -+gtk/gtkimage.h - gtk/gtkimmulticontext.h - gtk/gtkinvisible.h - gtk/gtkmain.h -@@ -279,6 +286,7 @@ - LaunchServices.h - LBroadcaster.h - LButton.h -+lber.h - lcache.h - LCaption.h - LCheckBox.h -@@ -500,6 +508,7 @@ - PLStringFuncs.h - PMApplication.h - pmddim.h -+png.h - poll.h - Polygon.h - portable.h -@@ -874,6 +883,7 @@ - X11/Xutil.h - xpt_struct.h - xpt_xdr.h -+zlib.h - zmouse.h - sslt.h - smime.h ---- mozilla/xpcom/base/nscore.h.visibility 2006-02-21 22:19:38.000000000 -0500 -+++ mozilla/xpcom/base/nscore.h 2006-09-04 23:26:15.000000000 -0400 -@@ -105,7 +105,7 @@ - #define NS_VISIBILITY_HIDDEN - #endif - --#if defined(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) && defined(HAVE_VISIBILITY_PRAGMA) -+#if defined(HAVE_VISIBILITY_ATTRIBUTE) - #define NS_VISIBILITY_DEFAULT __attribute__ ((visibility ("default"))) - #else - #define NS_VISIBILITY_DEFAULT ---- mozilla/configure.visibility 2006-09-04 23:26:15.000000000 -0400 -+++ mozilla/configure 2006-09-04 23:26:15.000000000 -0400 -@@ -5331,9 +5331,9 @@ - OS_CONFIG="${OS_TARGET}${OS_RELEASE}" - - if test "$GNU_CC"; then -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- DSO_LDOPTS='-shared -Wl,-h -Wl,$@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' -+ DSO_LDOPTS='-shared' - DSO_CFLAGS='' - DSO_PIC_CFLAGS='-fPIC' - _MOZ_RTTI_FLAGS_ON=${_COMPILER_PREFIX}-frtti -@@ -5357,9 +5357,9 @@ - _DEFINES_CFLAGS='-include $(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT' - _USE_CPP_INCLUDE_FLAG=1 - else -- MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- DSO_LDOPTS='-shared -h $@' -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@' -+ DSO_LDOPTS='-shared' - DSO_CFLAGS='' - DSO_PIC_CFLAGS='-KPIC' - _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' -@@ -5703,9 +5703,9 @@ - - *-beos*) - no_x=yes -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' - _PLATFORM_DEFAULT_TOOLKIT="beos" -- DSO_LDOPTS='-nostart -Wl,-h -Wl,$@' -+ DSO_LDOPTS='-nostart' - TK_LIBS='-lbe -lroot' - LIBS="$LIBS -lbe" - if test "$COMPILE_ENVIRONMENT"; then -@@ -5871,16 +5871,16 @@ - *-hpux*) - DLL_SUFFIX=".sl" - if test ! "$GNU_CC"; then -- DSO_LDOPTS='-b -Wl,+s -L$(DIST)/bin' -+ DSO_LDOPTS='-b -Wl,+s' - DSO_CFLAGS="" - DSO_PIC_CFLAGS="+Z" -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -L$(DIST)/bin -o $@' - MKCSHLIB='$(LD) -b +s -L$(DIST)/bin -o $@' - CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on" - else -- DSO_LDOPTS='-b -E +s -L$(DIST)/bin -L$(DIST)/lib' -- MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -+ DSO_LDOPTS='-b -E +s' -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@' - fi - MOZ_POST_PROGRAM_COMMAND='chatr +s enable' - cat >> confdefs.h <<\EOF -@@ -5895,11 +5895,16 @@ - EOF - - DSO_LDOPTS='-elf -shared' -+ - if test "$GNU_CC"; then -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' - MKSHLIB_FORCE_ALL='-Wl,-all' - MKSHLIB_UNFORCE_ALL='-Wl,-none' - CXXFLAGS="$CXXFLAGS -D_LANGUAGE_C_PLUS_PLUS" - else -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' - MKSHLIB_FORCE_ALL='-all' - MKSHLIB_UNFORCE_ALL='-none' - fi -@@ -6338,7 +6343,7 @@ - if $CC -E - -dM /dev/null; then - DLL_SUFFIX=".so" - DSO_PIC_CFLAGS='-fPIC -DPIC' -- DSO_LDOPTS='-shared -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX)' -+ DSO_LDOPTS='-shared' - BIN_FLAGS='-Wl,--export-dynamic' - else - DSO_PIC_CFLAGS='-fPIC -DPIC' -@@ -6351,6 +6356,8 @@ - if test "$LIBRUNPATH"; then - DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS" - fi -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@' - ;; - - *-nto*) -@@ -6571,17 +6578,19 @@ - - alpha*-*-osf*) - if test "$GNU_CC"; then -- DSO_LDOPTS='-shared -Wl,-soname -Wl,$@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@' -+ - else - MOZ_DEBUG_FLAGS='-g' - ASFLAGS='-I$(topsrcdir)/xpcom/reflect/xptcall/public -g' - CFLAGS="$CFLAGS -ieee" - CXXFLAGS="$CXXFLAGS "'-noexceptions -ieee -ptr $(DIST)/cxx_repository' -- DSO_LDOPTS='-shared -msym -expect_unresolved \* -soname $@ -update_registry $(DIST)/so_locations' -+ DSO_LDOPTS='-shared -msym -expect_unresolved \* -update_registry $(DIST)/so_locations' - DSO_CFLAGS= - DSO_PIC_CFLAGS= -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@' - MKSHLIB_FORCE_ALL='-all' - MKSHLIB_UNFORCE_ALL='-none' - cat >> confdefs.h <<\EOF -@@ -6634,7 +6643,7 @@ - - CXXFLAGS="$CXXFLAGS -I/usr/include/CC" - if test ! "$GNU_CC"; then -- DSO_LDOPTS='-G -h $@' -+ DSO_LDOPTS='-G' - fi - ;; - -@@ -6655,11 +6664,11 @@ - CXXFLAGS="$CXXFLAGS -xbuiltin=%all -features=tmplife" - LDFLAGS="-xildoff -zlazyload -zcombreloc $LDFLAGS" - MOZ_OPTIMIZE_FLAGS="-xO4" -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -Wl,-z -Wl,muldefs -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $@ -o $@' -+ KCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -Wl,-z -Wl,muldefs -h $@ -o $@' - MKSHLIB_FORCE_ALL='-Qoption ld -z,allextract' - MKSHLIB_UNFORCE_ALL='' -- DSO_LDOPTS='-G -Qoption ld -z,muldefs -h $@' -+ DSO_LDOPTS='-G -Qoption ld -z,muldefs' - AR_LIST="$AR t" - AR_EXTRACT="$AR x" - AR_DELETE="$AR d" -@@ -6717,7 +6726,7 @@ - - else - ASFLAGS="$ASFLAGS -fPIC" -- DSO_LDOPTS='-G -h $@' -+ DSO_LDOPTS='-G' - _WARNINGS_CFLAGS='' - _WARNINGS_CXXFLAGS='' - if test "$OS_RELEASE" = "5.3"; then -@@ -7708,13 +7717,39 @@ - fi - - echo "$ac_t""$ac_cv_visibility_hidden" 1>&6 -- if test "$ac_cv_visibility_hidden" = "yes"; then -- cat >> confdefs.h <<\EOF -+ if test "$ac_cv_visibility_hidden" = "yes"; then -+ cat >> confdefs.h <<\EOF - #define HAVE_VISIBILITY_HIDDEN_ATTRIBUTE 1 - EOF - -+ -+ echo $ac_n "checking for visibility(default) attribute""... $ac_c" 1>&6 -+echo "configure:7728: checking for visibility(default) attribute" >&5 -+if eval "test \"`echo '$''{'ac_cv_visibility_default'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ cat > conftest.c </dev/null 2>&1; then -+ if ! grep '\.hidden.*foo' conftest.s >/dev/null; then -+ ac_cv_visibility_default=yes -+ fi -+ fi -+ rm -f conftest.cs -+ -+fi -+ -+echo "$ac_t""$ac_cv_visibility_default" 1>&6 -+ if test "$ac_cv_visibility_default" = "yes"; then -+ cat >> confdefs.h <<\EOF -+#define HAVE_VISIBILITY_ATTRIBUTE 1 -+EOF -+ -+ - echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6 --echo "configure:7710: checking for visibility pragma support" >&5 -+echo "configure:7753: checking for visibility pragma support" >&5 - if eval "test \"`echo '$''{'ac_cv_visibility_pragma'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -7738,15 +7773,41 @@ - - echo "$ac_t""$ac_cv_visibility_pragma" 1>&6 - if test "$ac_cv_visibility_pragma" = "yes"; then -- cat >> confdefs.h <<\EOF --#define HAVE_VISIBILITY_PRAGMA 1 -+ echo $ac_n "checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)""... $ac_c" 1>&6 -+echo "configure:7778: checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)" >&5 -+if eval "test \"`echo '$''{'ac_cv_have_visibility_builtin_bug'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ cat > conftest.c < -+#pragma GCC visibility pop -+ -+__attribute__ ((visibility ("default"))) void Func() { -+ char c[100]; -+ memset(c, 0, sizeof(c)); -+} - EOF -+ ac_cv_have_visibility_builtin_bug=no -+ if ! ${CC-cc} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -o conftest.so conftest.c >/dev/null 2>&1; then -+ ac_cv_have_visibility_builtin_bug=yes -+ fi -+ rm -f conftest.{c,so} -+ -+fi - -- VISIBILITY_FLAGS='-I$(DIST)/include/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -- WRAP_SYSTEM_INCLUDES=1 -- fi -- fi --fi # GNU_CC -+echo "$ac_t""$ac_cv_have_visibility_builtin_bug" 1>&6 -+ if test "$ac_cv_have_visibility_builtin_bug" = "no"; then -+ VISIBILITY_FLAGS='-I$(DIST)/include/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 -+ else -+ VISIBILITY_FLAGS='-fvisibility=hidden' -+ fi # have visibility pragma bug -+ fi # have visibility pragma -+ fi # have visibility(default) attribute -+ fi # have visibility(hidden) attribute -+fi # GNU_CC - - - ---- mozilla/configure.in.visibility 2006-09-04 23:26:15.000000000 -0400 -+++ mozilla/configure.in 2006-09-04 23:26:15.000000000 -0400 -@@ -1103,9 +1103,9 @@ - dnl GNU specific defaults - dnl ======================================================== - if test "$GNU_CC"; then -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- DSO_LDOPTS='-shared -Wl,-h -Wl,$@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' -+ DSO_LDOPTS='-shared' - DSO_CFLAGS='' - DSO_PIC_CFLAGS='-fPIC' - _MOZ_RTTI_FLAGS_ON=${_COMPILER_PREFIX}-frtti -@@ -1130,9 +1130,9 @@ - _DEFINES_CFLAGS='-include $(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT' - _USE_CPP_INCLUDE_FLAG=1 - else -- MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- DSO_LDOPTS='-shared -h $@' -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $@ -o $@' -+ DSO_LDOPTS='-shared' - DSO_CFLAGS='' - DSO_PIC_CFLAGS='-KPIC' - _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' -@@ -1360,9 +1360,9 @@ - - *-beos*) - no_x=yes -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@' - _PLATFORM_DEFAULT_TOOLKIT="beos" -- DSO_LDOPTS='-nostart -Wl,-h -Wl,$@' -+ DSO_LDOPTS='-nostart' - TK_LIBS='-lbe -lroot' - LIBS="$LIBS -lbe" - if test "$COMPILE_ENVIRONMENT"; then -@@ -1442,16 +1442,16 @@ - *-hpux*) - DLL_SUFFIX=".sl" - if test ! "$GNU_CC"; then -- DSO_LDOPTS='-b -Wl,+s -L$(DIST)/bin' -+ DSO_LDOPTS='-b -Wl,+s' - DSO_CFLAGS="" - DSO_PIC_CFLAGS="+Z" -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -L$(DIST)/bin -o $@' - MKCSHLIB='$(LD) -b +s -L$(DIST)/bin -o $@' - CXXFLAGS="$CXXFLAGS -Wc,-ansi_for_scope,on" - else -- DSO_LDOPTS='-b -E +s -L$(DIST)/bin -L$(DIST)/lib' -- MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -+ DSO_LDOPTS='-b -E +s' -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -L$(DIST)/bin -L$(DIST)/lib -o $@' - fi - MOZ_POST_PROGRAM_COMMAND='chatr +s enable' - AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES) -@@ -1460,11 +1460,16 @@ - *-irix5*) - AC_DEFINE(IRIX) - DSO_LDOPTS='-elf -shared' -+ - if test "$GNU_CC"; then -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' - MKSHLIB_FORCE_ALL='-Wl,-all' - MKSHLIB_UNFORCE_ALL='-Wl,-none' - CXXFLAGS="$CXXFLAGS -D_LANGUAGE_C_PLUS_PLUS" - else -+ MKSHLIB='$(LD) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(LD) $(DSO_LDOPTS) -o $@' - MKSHLIB_FORCE_ALL='-all' - MKSHLIB_UNFORCE_ALL='-none' - fi -@@ -1818,7 +1823,7 @@ - if $CC -E - -dM /dev/null; then - DLL_SUFFIX=".so" - DSO_PIC_CFLAGS='-fPIC -DPIC' -- DSO_LDOPTS='-shared -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX)' -+ DSO_LDOPTS='-shared' - BIN_FLAGS='-Wl,--export-dynamic' - else - DSO_PIC_CFLAGS='-fPIC -DPIC' -@@ -1831,6 +1836,8 @@ - if test "$LIBRUNPATH"; then - DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS" - fi -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,lib$(LIBRARY_NAME)$(DLL_SUFFIX) -o $@' - ;; - - *-nto*) -@@ -1994,17 +2001,19 @@ - - alpha*-*-osf*) - if test "$GNU_CC"; then -- DSO_LDOPTS='-shared -Wl,-soname -Wl,$@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-soname,$@ -o $@' -+ - else - MOZ_DEBUG_FLAGS='-g' - ASFLAGS='-I$(topsrcdir)/xpcom/reflect/xptcall/public -g' - CFLAGS="$CFLAGS -ieee" - CXXFLAGS="$CXXFLAGS "'-noexceptions -ieee -ptr $(DIST)/cxx_repository' -- DSO_LDOPTS='-shared -msym -expect_unresolved \* -soname $@ -update_registry $(DIST)/so_locations' -+ DSO_LDOPTS='-shared -msym -expect_unresolved \* -update_registry $(DIST)/so_locations' - DSO_CFLAGS= - DSO_PIC_CFLAGS= -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -o $@' -+ MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -soname $@ -o $@' - MKSHLIB_FORCE_ALL='-all' - MKSHLIB_UNFORCE_ALL='-none' - dnl Might fix the libxpcom.so breakage on this platform as well.... -@@ -2036,7 +2045,7 @@ - AC_DEFINE(NSCAP_DISABLE_DEBUG_PTR_TYPES) - CXXFLAGS="$CXXFLAGS -I/usr/include/CC" - if test ! "$GNU_CC"; then -- DSO_LDOPTS='-G -h $@' -+ DSO_LDOPTS='-G' - fi - ;; - -@@ -2052,11 +2061,11 @@ - CXXFLAGS="$CXXFLAGS -xbuiltin=%all -features=tmplife" - LDFLAGS="-xildoff -zlazyload -zcombreloc $LDFLAGS" - MOZ_OPTIMIZE_FLAGS="-xO4" -- MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -o $@' -- MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -Wl,-z -Wl,muldefs -o $@' -+ MKSHLIB='$(CXX) $(CXXFLAGS) $(DSO_PIC_FLAGS) $(DSO_LDOPTS) -h $@ -o $@' -+ KCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_FLAGS) -G -Wl,-z -Wl,muldefs -h $@ -o $@' - MKSHLIB_FORCE_ALL='-Qoption ld -z,allextract' - MKSHLIB_UNFORCE_ALL='' -- DSO_LDOPTS='-G -Qoption ld -z,muldefs -h $@' -+ DSO_LDOPTS='-G -Qoption ld -z,muldefs' - AR_LIST="$AR t" - AR_EXTRACT="$AR x" - AR_DELETE="$AR d" -@@ -2086,7 +2095,7 @@ - AC_LANG_RESTORE - else - ASFLAGS="$ASFLAGS -fPIC" -- DSO_LDOPTS='-G -h $@' -+ DSO_LDOPTS='-G' - _WARNINGS_CFLAGS='' - _WARNINGS_CXXFLAGS='' - if test "$OS_RELEASE" = "5.3"; then -@@ -2444,8 +2453,25 @@ - fi - rm -f conftest.[cs] - ]) -- if test "$ac_cv_visibility_hidden" = "yes"; then -- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ if test "$ac_cv_visibility_hidden" = "yes"; then -+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE) -+ -+ AC_CACHE_CHECK(for visibility(default) attribute, -+ ac_cv_visibility_default, -+ [cat > conftest.c </dev/null 2>&1; then -+ if ! grep '\.hidden.*foo' conftest.s >/dev/null; then -+ ac_cv_visibility_default=yes -+ fi -+ fi -+ rm -f conftest.[cs] -+ ]) -+ if test "$ac_cv_visibility_default" = "yes"; then -+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE) -+ - AC_CACHE_CHECK(for visibility pragma support, - ac_cv_visibility_pragma, - [cat > conftest.c < conftest.c < -+#pragma GCC visibility pop -+ -+__attribute__ ((visibility ("default"))) void Func() { -+ char c[[100]]; -+ memset(c, 0, sizeof(c)); -+} -+EOF -+ ac_cv_have_visibility_builtin_bug=no -+ if ! ${CC-cc} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -o conftest.so conftest.c >/dev/null 2>&1; then -+ ac_cv_have_visibility_builtin_bug=yes -+ fi -+ rm -f conftest.{c,so} -+ ]) -+ if test "$ac_cv_have_visibility_builtin_bug" = "no"; then -+ VISIBILITY_FLAGS='-I$(DIST)/include/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h' -+ WRAP_SYSTEM_INCLUDES=1 -+ else -+ VISIBILITY_FLAGS='-fvisibility=hidden' -+ fi # have visibility pragma bug -+ fi # have visibility pragma -+ fi # have visibility(default) attribute -+ fi # have visibility(hidden) attribute -+fi # GNU_CC - - AC_SUBST(WRAP_SYSTEM_INCLUDES) - AC_SUBST(VISIBILITY_FLAGS) ---- mozilla/js/src/jstypes.h.visibility 2005-09-18 00:35:05.000000000 -0400 -+++ mozilla/js/src/jstypes.h 2006-09-04 23:26:15.000000000 -0400 -@@ -109,7 +109,7 @@ - - #else /* Unix */ - --#ifdef HAVE_VISIBILITY_PRAGMA -+#ifdef HAVE_VISIBILITY_ATTRIBUTE - #define JS_EXTERNAL_VIS __attribute__((visibility ("default"))) - #else - #define JS_EXTERNAL_VIS ---- mozilla/modules/zlib/src/mozzconf.h.visibility 2005-08-04 15:14:14.000000000 -0400 -+++ mozilla/modules/zlib/src/mozzconf.h 2006-09-04 23:26:15.000000000 -0400 -@@ -41,7 +41,7 @@ - #undef ZLIB_DLL - #endif - --#ifdef HAVE_VISIBILITY_PRAGMA -+#ifdef HAVE_VISIBILITY_ATTRIBUTE - #define ZEXTERN __attribute__((visibility ("default"))) extern - #endif - ---- mozilla/modules/oji/src/nsJVMManager.cpp.visibility 2005-08-22 10:09:59.000000000 -0400 -+++ mozilla/modules/oji/src/nsJVMManager.cpp 2006-09-04 23:26:15.000000000 -0400 -@@ -845,7 +845,7 @@ - return fStatus; - } - --extern "C" nsresult JSJ_RegisterLiveConnectFactory(void); -+extern "C" NS_VISIBILITY_DEFAULT nsresult JSJ_RegisterLiveConnectFactory(void); - - PRBool - nsJVMManager::MaybeStartupLiveConnect(void) ---- mozilla/modules/libreg/include/NSReg.h.visibility 2004-12-15 00:52:38.000000000 -0500 -+++ mozilla/modules/libreg/include/NSReg.h 2006-09-04 23:26:15.000000000 -0400 -@@ -129,7 +129,7 @@ - #endif - #elif defined XP_MAC - #define VR_INTERFACE(__x) __declspec(export) __x --#elif defined (HAVE_VISIBILITY_PRAGMA) -+#elif defined (HAVE_VISIBILITY_ATTRIBUTE) - #define VR_INTERFACE(type) __attribute__ ((visibility ("default"))) type - #else - #define VR_INTERFACE(type) type diff --git a/thunderbird.spec b/thunderbird.spec index 19475aa..34aa153 100644 --- a/thunderbird.spec +++ b/thunderbird.spec @@ -31,9 +31,6 @@ Source100: find-external-requires # Build patches Patch1: firefox-2.0-link-layout.patch Patch2: firefox-1.0-prdtoa.patch -Patch4: firefox-1.5.0.10-with-system-nss.patch -Patch5: thunderbird-1.5-visibility.patch -Patch6: firefox-1.5.0.10-nss-system-nspr.patch Patch10: thunderbird-0.7.3-psfonts.patch Patch11: thunderbird-0.7.3-gnome-uriloader.patch @@ -61,7 +58,6 @@ Patch89: firefox-2.0-pango-ligatures.patch # Other Patch102: firefox-1.5-theme-change.patch Patch103: thunderbird-1.5-profile-migrator.patch -Patch104: firefox-1.5-dnd-nograb.patch Patch106: firefox-2.0-indicator-crash.patch Patch111: thunderbird-path.patch Patch112: thunderbird-2.0-enable-debug.patch @@ -112,10 +108,7 @@ Mozilla Thunderbird is a standalone mail and newsgroup client. %setup -q -n mozilla %patch1 -p1 -b .link-layout %patch2 -p0 -#%patch4 -p1 -#%patch5 -p1 -b .visibility -#%patch6 -p1 %patch10 -p1 -b .psfonts %patch11 -p1 -b .gnome-uriloader %patch24 -p1 -b .default-applications @@ -145,7 +138,6 @@ popd %patch102 -p0 -b .theme-change %patch103 -p1 -b .profile-migrator -#%patch104 -p1 -b .dnd-nograb %patch106 -p1 -b .indicator-crash %patch111 -p1 -b .path %patch112 -p1 -b .debug