rpms/xulrunner/OLPC-2 xulrunner-pango-bofa.patch, NONE, 1.1 xulrunner-1.9a6-no-native-theme.patch, 1.7, 1.8 xulrunner.spec, 1.47, 1.48

Simon Schampijer (erikos) fedora-extras-commits at redhat.com
Thu Dec 13 21:52:53 UTC 2007


Author: erikos

Update of /cvs/pkgs/rpms/xulrunner/OLPC-2
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20728

Modified Files:
	xulrunner-1.9a6-no-native-theme.patch xulrunner.spec 
Added Files:
	xulrunner-pango-bofa.patch 
Log Message:
* Thu Dec 13 2007 Simon Schampijer <simon at laptop.org> - 1.9-0.beta1.7
- Pango error described in mozila(#404112, #406635) fixes our bug #5410
- Another no native theme one, fixes #5397, #5398 and likely others
 


xulrunner-pango-bofa.patch:

--- NEW FILE xulrunner-pango-bofa.patch ---
Index: gfx/thebes/src/gfxPangoFonts.cpp
===================================================================
RCS file: /cvsroot/mozilla/gfx/thebes/src/gfxPangoFonts.cpp,v
retrieving revision 1.117
diff -p -u -1 -2 -r1.117 gfxPangoFonts.cpp
--- gfx/thebes/src/gfxPangoFonts.cpp	21 Nov 2007 22:26:41 -0000	1.117
+++ gfx/thebes/src/gfxPangoFonts.cpp	7 Dec 2007 14:01:11 -0000
@@ -358,24 +358,32 @@ gfxPangoFont::RealizePangoFont(PRBool aF
     if (mPangoFont)
         return;
     mPangoFont = pango_context_load_font(mPangoCtx, mPangoFontDesc);
     if (!mPangoFont)
         return; // Error
     cache->Put(mPangoFontDesc, mPangoFont);
 }
 
 void
 gfxPangoFont::GetCharSize(char aChar, gfxSize& aInkSize, gfxSize& aLogSize,
                           PRUint32 *aGlyphID)
 {
+    if (NS_UNLIKELY(GetStyle()->size == 0.0)) {
+        if (aGlyphID)
+            *aGlyphID = 0;
+        aInkSize.SizeTo(0.0, 0.0);
+        aLogSize.SizeTo(0.0, 0.0);
+        return;
+    }
+
     PangoAnalysis analysis;
     // Initialize new fields, gravity and flags in pango 1.16
     // (or padding in 1.14).
     // Use memset instead of { 0 } aggregate initialization or placement new
     // default initialization so that padding (which may have meaning in other
     // versions) is initialized.
     memset(&analysis, 0, sizeof(analysis));
     analysis.font = GetPangoFont();
     analysis.language = pango_language_from_string("en");
     analysis.shape_engine = pango_font_find_shaper(analysis.font, analysis.language, aChar);
 
     PangoGlyphString *glstr = pango_glyph_string_new();
@@ -409,121 +417,153 @@ gfxPangoFont::GetCharSize(char aChar, gf
 #define MOZ_FT_ROUND(x) (((x) + 32) & ~63) // 63 = 2^6 - 1
 #define MOZ_FT_TRUNC(x) ((x) >> 6)
 #define CONVERT_DESIGN_UNITS_TO_PIXELS(v, s) \
         MOZ_FT_TRUNC(MOZ_FT_ROUND(FT_MulFix((v) , (s))))
 
 const gfxFont::Metrics&
 gfxPangoFont::GetMetrics()
 {
     if (mHasMetrics)
         return mMetrics;
 
     /* pango_cairo case; try to get all the metrics from pango itself */
-    PangoFont *font = GetPangoFont(); // RealizeFont is called here.
+    PangoFont *font;
+    PangoFontMetrics *pfm;
+    if (NS_LIKELY(GetStyle()->size > 0.0)) {
+        font = GetPangoFont(); // RealizeFont is called here.
+        PangoLanguage *lang = GetPangoLanguage(GetStyle()->langGroup);
+
+        // XXX
+        // 1.18 null is fine
+        // 1.16 might want to use pango_language_get_default if lang is null here.
+        // earlier we want to use something other than null where possible.
+        //
+        pfm = pango_font_get_metrics(font, lang);
+    } else {
+        // Don't ask pango when the font-size is zero since it causes
+        // some versions of libpango to crash (bug 404112).
+        font = NULL;
+        pfm = NULL;
+    }
 
-    PangoLanguage *lang = GetPangoLanguage(GetStyle()->langGroup);
-    // XXX
-    // 1.18 null is fine
-    // 1.16 might want to use pango_language_get_default if lang is null here.
-    // earlier we want to use something other than null where possible
-    PangoFontMetrics *pfm = pango_font_get_metrics (font, lang);
+    if (NS_LIKELY(pfm)) {
+        mMetrics.maxAscent =
+            pango_font_metrics_get_ascent(pfm) / FLOAT_PANGO_SCALE;
+
+        mMetrics.maxDescent =
+            pango_font_metrics_get_descent(pfm) / FLOAT_PANGO_SCALE;
+
+        mMetrics.aveCharWidth =
+            pango_font_metrics_get_approximate_char_width(pfm) / FLOAT_PANGO_SCALE;
+
+        gfxFloat temp =
+            pango_font_metrics_get_underline_position(pfm) / FLOAT_PANGO_SCALE;
+        mMetrics.underlineOffset = PR_MIN(temp, -1.0);
+        
+        mMetrics.underlineSize =
+            pango_font_metrics_get_underline_thickness(pfm) / FLOAT_PANGO_SCALE;
+        
+        mMetrics.strikeoutOffset =
+            pango_font_metrics_get_strikethrough_position(pfm) / FLOAT_PANGO_SCALE;
+        
+        mMetrics.strikeoutSize =
+            pango_font_metrics_get_strikethrough_thickness(pfm) / FLOAT_PANGO_SCALE;
+
+        // We're going to overwrite this below if we have a FT_Face
+        // (which we normally should have...).
+        mMetrics.maxAdvance =
+            pango_font_metrics_get_approximate_char_width(pfm) / FLOAT_PANGO_SCALE;
+    } else {
+        mMetrics.maxAscent = 0.0;
+        mMetrics.maxDescent = 0.0;
+        mMetrics.aveCharWidth = 0.0;
+        mMetrics.underlineOffset = -1.0;
+        mMetrics.underlineSize = 0.0;
+        mMetrics.strikeoutOffset = 0.0;
+        mMetrics.strikeoutSize = 0.0;
+        mMetrics.maxAdvance = 0.0;
+    }
 
     // ??
     mMetrics.emHeight = mAdjustedSize ? mAdjustedSize : GetStyle()->size;
 
-    mMetrics.maxAscent = pango_font_metrics_get_ascent(pfm) / FLOAT_PANGO_SCALE;
-    mMetrics.maxDescent = pango_font_metrics_get_descent(pfm) / FLOAT_PANGO_SCALE;
-
     gfxFloat lineHeight = mMetrics.maxAscent + mMetrics.maxDescent;
-
     if (lineHeight > mMetrics.emHeight)
         mMetrics.externalLeading = lineHeight - mMetrics.emHeight;
     else
         mMetrics.externalLeading = 0;
     mMetrics.internalLeading = 0;
 
     mMetrics.maxHeight = lineHeight;
 
-    mMetrics.emAscent = mMetrics.maxAscent * mMetrics.emHeight / lineHeight;
+    mMetrics.emAscent = lineHeight > 0.0 ?
+        mMetrics.maxAscent * mMetrics.emHeight / lineHeight : 0.0;
     mMetrics.emDescent = mMetrics.emHeight - mMetrics.emAscent;
 
-    // we're going to overwrite this below if we have a FT_Face (which we should...)
-    mMetrics.maxAdvance = pango_font_metrics_get_approximate_char_width(pfm) / FLOAT_PANGO_SCALE;
-
     gfxSize isz, lsz;
     GetCharSize(' ', isz, lsz, &mSpaceGlyph);
     mMetrics.spaceWidth = lsz.width;
     GetCharSize('x', isz, lsz);
     mMetrics.xHeight = isz.height;
 
-    mMetrics.aveCharWidth = pango_font_metrics_get_approximate_char_width(pfm) / FLOAT_PANGO_SCALE;
-
-    //    printf("font name: %s %f %f\n", NS_ConvertUTF16toUTF8(mName).get(), GetStyle()->size, mAdjustedSize);
-    //    printf ("pango font %s\n", pango_font_description_to_string (pango_font_describe (font)));
-
-    mMetrics.underlineOffset = pango_font_metrics_get_underline_position(pfm) / FLOAT_PANGO_SCALE;
-    mMetrics.underlineSize = pango_font_metrics_get_underline_thickness(pfm) / FLOAT_PANGO_SCALE;
-
-    mMetrics.underlineOffset = PR_MIN(mMetrics.underlineOffset, -1.0);
-
-    mMetrics.strikeoutOffset = pango_font_metrics_get_strikethrough_position(pfm) / FLOAT_PANGO_SCALE;
-    mMetrics.strikeoutSize = pango_font_metrics_get_strikethrough_thickness(pfm) / FLOAT_PANGO_SCALE;
-
     FT_Face face = NULL;
-    if (PANGO_IS_FC_FONT (font))
-        face = pango_fc_font_lock_face (PANGO_FC_FONT (font));
+    if (pfm && PANGO_IS_FC_FONT(font))
+        face = pango_fc_font_lock_face(PANGO_FC_FONT(font));
 
     if (face) {
         mMetrics.maxAdvance = face->size->metrics.max_advance / 64.0; // 26.6
 
         float val;
 
         TT_OS2 *os2 = (TT_OS2 *) FT_Get_Sfnt_Table(face, ft_sfnt_os2);
     
         if (os2 && os2->ySuperscriptYOffset) {
             val = CONVERT_DESIGN_UNITS_TO_PIXELS(os2->ySuperscriptYOffset,
                                                  face->size->metrics.y_scale);
             mMetrics.superscriptOffset = PR_MAX(1, val);
         } else {
             mMetrics.superscriptOffset = mMetrics.xHeight;
         }
     
-        // 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;
             mMetrics.subscriptOffset = PR_MAX(1, val);
         } else {
             mMetrics.subscriptOffset = mMetrics.xHeight;
         }
 
         pango_fc_font_unlock_face(PANGO_FC_FONT(font));
     } else {
         mMetrics.superscriptOffset = mMetrics.xHeight;
         mMetrics.subscriptOffset = mMetrics.xHeight;
     }
 
-    pango_font_metrics_unref (pfm);
-
 #if 0
+    //    printf("font name: %s %f %f\n", NS_ConvertUTF16toUTF8(mName).get(), GetStyle()->size, mAdjustedSize);
+    //    printf ("pango font %s\n", pango_font_description_to_string (pango_font_describe (font)));
+
     fprintf (stderr, "Font: %s\n", NS_ConvertUTF16toUTF8(mName).get());
     fprintf (stderr, "    emHeight: %f emAscent: %f emDescent: %f\n", mMetrics.emHeight, mMetrics.emAscent, mMetrics.emDescent);
     fprintf (stderr, "    maxAscent: %f maxDescent: %f\n", mMetrics.maxAscent, mMetrics.maxDescent);
     fprintf (stderr, "    internalLeading: %f externalLeading: %f\n", mMetrics.externalLeading, mMetrics.internalLeading);
     fprintf (stderr, "    spaceWidth: %f aveCharWidth: %f xHeight: %f\n", mMetrics.spaceWidth, mMetrics.aveCharWidth, mMetrics.xHeight);
     fprintf (stderr, "    uOff: %f uSize: %f stOff: %f stSize: %f suOff: %f suSize: %f\n", mMetrics.underlineOffset, mMetrics.underlineSize, mMetrics.strikeoutOffset, mMetrics.strikeoutSize, mMetrics.superscriptOffset, mMetrics.subscriptOffset);
 #endif
 
+    if (pfm)
+        pango_font_metrics_unref(pfm);
+
     mHasMetrics = PR_TRUE;
     return mMetrics;
 }
 
 PRUint32
 gfxPangoFont::GetGlyph(const PRUint32 aChar)
 {
     // Ensure that null character should be missing.
     if (aChar == 0)
         return 0;
     return pango_fc_font_get_glyph(PANGO_FC_FONT(GetPangoFont()), aChar);
 }


xulrunner-1.9a6-no-native-theme.patch:

Index: xulrunner-1.9a6-no-native-theme.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xulrunner/OLPC-2/xulrunner-1.9a6-no-native-theme.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- xulrunner-1.9a6-no-native-theme.patch	1 Dec 2007 15:14:56 -0000	1.7
+++ xulrunner-1.9a6-no-native-theme.patch	13 Dec 2007 21:52:47 -0000	1.8
@@ -1,41 +1,92 @@
---- widget/src/gtk2/nsLookAndFeel.cpp.old	2007-11-29 14:21:09.000000000 +0100
-+++ widget/src/gtk2/nsLookAndFeel.cpp	2007-11-29 14:22:37.000000000 +0100
-@@ -83,6 +83,7 @@
- 
- nsresult nsLookAndFeel::NativeGetColor(const nsColorID aID, nscolor& aColor)
- {
-+#if 0
-     nsresult res = NS_OK;
- 
-     switch (aID) {
-@@ -308,6 +309,8 @@
-     }
- 
-     return res;
-+#endif
-+    return NS_ERROR_FAILURE;
- }
- 
- static PRInt32 CheckWidgetStyle(GtkWidget* aWidget, const char* aStyle, PRInt32 aMetric) {
---- widget/src/gtk2/Makefile.in.no-native-theme	2007-10-06 14:08:46.000000000 +0200
-+++ widget/src/gtk2/Makefile.in	2007-12-01 16:04:12.000000000 +0100
-@@ -52,8 +52,6 @@
- 
- PACKAGE_FILE = widget_gtk2.pkg
- 
--NATIVE_THEME_SUPPORT = 1
+--- /tmp/nsNativeThemeGTK.cpp	2007-12-13 20:18:32.000000000 +0100
++++ widget/src/gtk2/nsNativeThemeGTK.cpp	2007-12-13 20:19:01.000000000 +0100
+@@ -983,48 +983,6 @@
+     return PR_FALSE;
+ 
+   switch (aWidgetType) {
+-  case NS_THEME_BUTTON:
+-  case NS_THEME_BUTTON_FOCUS:
+-  case NS_THEME_RADIO:
+-  case NS_THEME_RADIO_SMALL:
+-  case NS_THEME_CHECKBOX:
+-  case NS_THEME_CHECKBOX_SMALL:
+-  case NS_THEME_TOOLBOX: // N/A
+-  case NS_THEME_TOOLBAR:
+-  case NS_THEME_TOOLBAR_BUTTON:
+-  case NS_THEME_TOOLBAR_DUAL_BUTTON: // so we can override the border with 0
+-    // case NS_THEME_TOOLBAR_DUAL_BUTTON_DROPDOWN:
+-    // case NS_THEME_TOOLBAR_SEPARATOR:
+-  case NS_THEME_TOOLBAR_GRIPPER:
+-  case NS_THEME_STATUSBAR:
+-  case NS_THEME_STATUSBAR_PANEL:
+-  case NS_THEME_STATUSBAR_RESIZER_PANEL:
+-  case NS_THEME_RESIZER:
+-  case NS_THEME_LISTBOX:
+-    // case NS_THEME_LISTBOX_LISTITEM:
+-  case NS_THEME_TREEVIEW:
+-    // case NS_THEME_TREEVIEW_TREEITEM:
+-  case NS_THEME_TREEVIEW_TWISTY:
+-    // case NS_THEME_TREEVIEW_LINE:
+-    // case NS_THEME_TREEVIEW_HEADER:
+-  case NS_THEME_TREEVIEW_HEADER_CELL:
+-  case NS_THEME_TREEVIEW_HEADER_SORTARROW:
+-  case NS_THEME_TREEVIEW_TWISTY_OPEN:
+-    case NS_THEME_PROGRESSBAR:
+-    case NS_THEME_PROGRESSBAR_CHUNK:
+-    case NS_THEME_PROGRESSBAR_VERTICAL:
+-    case NS_THEME_PROGRESSBAR_CHUNK_VERTICAL:
+-    case NS_THEME_TAB:
+-    // case NS_THEME_TAB_PANEL:
+-    case NS_THEME_TAB_LEFT_EDGE:
+-    case NS_THEME_TAB_RIGHT_EDGE:
+-    case NS_THEME_TAB_PANELS:
+-  case NS_THEME_TOOLTIP:
+-    // case NS_THEME_SPINNER:
+-  case NS_THEME_SPINNER_UP_BUTTON:
+-  case NS_THEME_SPINNER_DOWN_BUTTON:
+-    // case NS_THEME_SCROLLBAR:  (n/a for gtk)
+-    // case NS_THEME_SCROLLBAR_SMALL: (n/a for gtk)
+   case NS_THEME_SCROLLBAR_BUTTON_UP:
+   case NS_THEME_SCROLLBAR_BUTTON_DOWN:
+   case NS_THEME_SCROLLBAR_BUTTON_LEFT:
+@@ -1033,40 +991,7 @@
+   case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
+   case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
+   case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
+-    // case NS_THEME_SCROLLBAR_GRIPPER_HORIZONTAL:  (n/a for gtk)
+-    // case NS_THEME_SCROLLBAR_GRIPPER_VERTICAL:  (n/a for gtk)
+-  case NS_THEME_TEXTFIELD:
+-  case NS_THEME_TEXTFIELD_MULTILINE:
+-    // case NS_THEME_TEXTFIELD_CARET:
+-  case NS_THEME_DROPDOWN_TEXTFIELD:
+-  case NS_THEME_SCALE_HORIZONTAL:
+-  case NS_THEME_SCALE_THUMB_HORIZONTAL:
+-  case NS_THEME_SCALE_VERTICAL:
+-  case NS_THEME_SCALE_THUMB_VERTICAL:
+-    // case NS_THEME_SCALE_THUMB_START:
+-    // case NS_THEME_SCALE_THUMB_END:
+-    // case NS_THEME_SCALE_TICK:
+-  case NS_THEME_CHECKBOX_CONTAINER:
+-  case NS_THEME_RADIO_CONTAINER:
+-  case NS_THEME_CHECKBOX_LABEL:
+-  case NS_THEME_RADIO_LABEL:
+-  case NS_THEME_MENUBAR:
+-  case NS_THEME_MENUPOPUP:
+-  case NS_THEME_MENUITEM:
+-  case NS_THEME_CHECKMENUITEM:
+-  case NS_THEME_RADIOMENUITEM:
+-  case NS_THEME_WINDOW:
+-  case NS_THEME_DIALOG:
+-  case NS_THEME_DROPDOWN:
+-  case NS_THEME_DROPDOWN_TEXT:
+     return !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
+-
+-  case NS_THEME_DROPDOWN_BUTTON:
+-    // "Native" dropdown buttons cause padding and margin problems, but only
+-    // in HTML so allow them in XUL.
+-    return (!aFrame || aFrame->GetContent()->IsNodeOfType(nsINode::eXUL)) &&
+-           !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
 -
- REQUIRES	= xpcom \
- 		  string \
- 		  gfx \
-@@ -139,8 +137,9 @@
- 		mozcontainer.h \
- 		$(NULL)
+   }
  
--ifdef NATIVE_THEME_SUPPORT
- CSRCS		+= gtk2drawing.c
-+
-+ifdef NATIVE_THEME_SUPPORT
- CPPSRCS		+= nsNativeThemeGTK.cpp
- DEFINES		+= -DNATIVE_THEME_SUPPORT
- endif
+   return PR_FALSE;


Index: xulrunner.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xulrunner/OLPC-2/xulrunner.spec,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- xulrunner.spec	1 Dec 2007 14:07:35 -0000	1.47
+++ xulrunner.spec	13 Dec 2007 21:52:47 -0000	1.48
@@ -11,7 +11,7 @@
 Summary:        XUL Runtime for Gecko Applications
 Name:           xulrunner
 Version:        1.9
-Release:        0.beta1.6%{?dist}
+Release:        0.beta1.7%{?dist}
 URL:            http://www.mozilla.org/projects/xulrunner/
 License:        MPLv1.1 or GPLv2+ or LGPLv2+
 Group:          Applications/Internet
@@ -55,6 +55,7 @@
 Patch202:       xulrunner-1.9a3pre-dpi.patch
 Patch203:       xulrunner-1.9a5pre-build.patch
 Patch204:       xulrunner-1.9a6-xds.patch
+Patch205:	xulrunner-pango-bofa.patch
 
 %if %{official_branding}
 # Required by Mozilla Corporation
@@ -142,6 +143,7 @@
 %patch202 -p0 -b .dpi
 %patch203 -p0 -b .build
 %patch204 -p0 -b .xds
+%patch205 -p0 -b .pango-bofa
 
 # Install missing *.pc files
 pushd xulrunner/installer
@@ -400,6 +402,10 @@
 #---------------------------------------------------------------------
 
 %changelog
+* Thu Dec 13 2007 Simon Schampijer <simon at laptop.org> - 1.9-0.beta1.7
+- Pango error described in mozila(#404112, #406635) fixes our bug #5410
+- Another no native theme one, fixes #5397, #5398 and likely others
+ 
 * Sat Dec  1 2007 Marco Pesenti Gritti <mpg at redhat.com> - 1.9-0.beta1.6
 - Another native theme fix
 




More information about the fedora-extras-commits mailing list