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