From 6f000a35a5b109d66aa3f9e691f5dd31fa73f5b3 Mon Sep 17 00:00:00 2001 From: "jshin%mailaps.org" Date: Thu, 23 Feb 2006 02:37:47 +0000 Subject: [PATCH] bug 205387 : need to exclude truly invisible default_ignorable_code_points' from draw_string and measurement : patch by YAMASHITA Makoto (makotoy%ms.u-tokyo.ac.jp), r=me, sr=rbs git-svn-id: svn://10.0.0.236/trunk@190967 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/gfx/src/mac/nsFontMetricsMac.cpp | 2 -- mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp | 12 +++++++++--- mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h | 4 ++++ mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp | 3 +-- mozilla/gfx/src/mac/nsUnicodeRenderingToolkit.cpp | 8 +++----- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/mozilla/gfx/src/mac/nsFontMetricsMac.cpp b/mozilla/gfx/src/mac/nsFontMetricsMac.cpp index 53b33532001..a69699309b8 100644 --- a/mozilla/gfx/src/mac/nsFontMetricsMac.cpp +++ b/mozilla/gfx/src/mac/nsFontMetricsMac.cpp @@ -44,8 +44,6 @@ #include "nsGfxUtils.h" #include "nsFontUtils.h" -#define BAD_FONT_NUM -1 - nsFontMetricsMac :: nsFontMetricsMac() { diff --git a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp index 0673cfab955..91a9454e380 100644 --- a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp +++ b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.cpp @@ -47,11 +47,12 @@ #include "nsCompressedCharMap.h" #include "nsMacUnicodeFontInfo.h" -#define BAD_FONT_NUM -1 -#define BAD_SCRIPT 0x7f - #include +//------------------------------------------------------------------------ +#include "ignorable.x-ccmap" +DEFINE_X_CCMAP(gIgnorableCCMapExt, /* nothing */); + //------------------------------------------------------------------------ static UnicodeToTextInfo gConverters[32] = { nsnull, nsnull, nsnull, nsnull, nsnull, nsnull, nsnull, nsnull, @@ -502,6 +503,11 @@ short nsUnicodeFontMappingMac::GetFontID(PRUnichar aChar) { short firstSymbolicFont = BAD_FONT_NUM, firstNonSymbolicFont = BAD_FONT_NUM; PRInt32 firstSymbolicFontIndex = -1; + // Trap invisible chars + if (CCMAP_HAS_CHAR_EXT(gIgnorableCCMapExt, aChar)) { + return IGNORABLE_FONT_NUM; + } + // find the first symbolic font that has a glyph for aChar // and if there is one, remember it's index in the font list for(PRInt32 i = 0; i < mFontList.Count(); i++) diff --git a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h index c02204a71af..89a6dd2d515 100644 --- a/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h +++ b/mozilla/gfx/src/mac/nsUnicodeFontMappingMac.h @@ -43,6 +43,10 @@ #include "nsFont.h" #include "nsVoidArray.h" +#define BAD_FONT_NUM -1 +#define IGNORABLE_FONT_NUM -2 +#define BAD_SCRIPT 0x7f + class nsUnicodeMappingUtil; class nsUnicodeFontMappingCache; diff --git a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp index 9460fda5c45..db1de20cf80 100644 --- a/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp +++ b/mozilla/gfx/src/mac/nsUnicodeMappingUtil.cpp @@ -39,6 +39,7 @@ #include "nsIServiceManager.h" #include "nsTextFormatter.h" #include "nsUnicodeMappingUtil.h" +#include "nsUnicodeFontMappingMac.h" #include "nsDeviceContextMac.h" #include "nsReadableUtils.h" #include "nsString.h" @@ -46,8 +47,6 @@ static NS_DEFINE_CID(kPrefCID, NS_PREF_CID); -#define BAD_FONT_NUM -1 - //-------------------------------------------------------------------------- nsUnicodeMappingUtil *nsUnicodeMappingUtil::gSingleton = nsnull; diff --git a/mozilla/gfx/src/mac/nsUnicodeRenderingToolkit.cpp b/mozilla/gfx/src/mac/nsUnicodeRenderingToolkit.cpp index 07edf905266..e790b805fa0 100644 --- a/mozilla/gfx/src/mac/nsUnicodeRenderingToolkit.cpp +++ b/mozilla/gfx/src/mac/nsUnicodeRenderingToolkit.cpp @@ -54,8 +54,6 @@ #include -#define BAD_FONT_NUM -1 -#define BAD_SCRIPT 0x7F #define STACK_TRESHOLD 1000 static NS_DEFINE_CID(kSaveAsCharsetCID, NS_SAVEASCHARSET_CID); @@ -1236,7 +1234,7 @@ nsUnicodeRenderingToolkit::GetTextSegmentDimensions( nsTextDimensions& oDim) { oDim.Clear(); - if(aLength == 0) + if(aLength == 0 || fontNum == IGNORABLE_FONT_NUM) return NS_OK; NS_PRECONDITION(BAD_FONT_NUM != fontNum, "illegal font num"); PRUint32 processLen = 0; @@ -1422,7 +1420,7 @@ nsUnicodeRenderingToolkit::GetTextSegmentBoundingMetrics( nsBoundingMetrics& oBoundingMetrics) { oBoundingMetrics.Clear(); - if(aLength == 0) + if(aLength == 0 || fontNum == IGNORABLE_FONT_NUM) return NS_OK; NS_PRECONDITION(BAD_FONT_NUM != fontNum, "illegal font num"); PRBool firstTime = PR_TRUE; @@ -1567,7 +1565,7 @@ nsresult nsUnicodeRenderingToolkit :: DrawTextSegment( short fontNum, nsUnicodeFontMappingMac& fontMapping, PRInt32 x, PRInt32 y, PRUint32& oWidth) { - if(aLength == 0) { + if(aLength == 0 || fontNum == IGNORABLE_FONT_NUM) { oWidth = 0; return NS_OK; }