[PATCH] Reduced duplicate code (simian) / vcl/generic/print/glyphset.cxx
Christina Rossmanith
ChrRossmanith at web.de
Tue Feb 28 02:04:12 PST 2012
---
vcl/generic/print/glyphset.cxx | 76 +++++++---------------------------------
vcl/generic/print/glyphset.hxx | 3 +-
2 files changed, 15 insertions(+), 64 deletions(-)
diff --git a/vcl/generic/print/glyphset.cxx b/vcl/generic/print/glyphset.cxx
index 5b03666..6d4cfde 100644
--- a/vcl/generic/print/glyphset.cxx
+++ b/vcl/generic/print/glyphset.cxx
@@ -479,7 +479,8 @@ void GlyphSet::DrawGlyphs(
const sal_uInt32* pGlyphIds,
const sal_Unicode* pUnicodes,
sal_Int16 nLen,
- const sal_Int32* pDeltaArray )
+ const sal_Int32* pDeltaArray,
+ const sal_Bool bUseGlyphs)
{
sal_uChar *pGlyphID = (sal_uChar*)alloca (nLen * sizeof(sal_uChar));
sal_Int32 *pGlyphSetID = (sal_Int32*)alloca (nLen * sizeof(sal_Int32));
@@ -488,7 +489,10 @@ void GlyphSet::DrawGlyphs(
// convert unicode to font glyph id and font subset
for (int nChar = 0; nChar < nLen; nChar++)
{
- GetGlyphID (pGlyphIds[nChar], pUnicodes[nChar], pGlyphID + nChar, pGlyphSetID + nChar);
+ if (bUseGlyphs)
+ GetGlyphID (pGlyphIds[nChar], pUnicodes[nChar], pGlyphID + nChar, pGlyphSetID + nChar);
+ else
+ GetCharID (pUnicodes[nChar], pGlyphID + nChar, pGlyphSetID + nChar);
aGlyphSet.insert (pGlyphSetID[nChar]);
}
@@ -536,7 +540,12 @@ void GlyphSet::DrawGlyphs(
// show the text using the PrinterGfx text api
aPoint.Move (nOffset, 0);
- OString aGlyphSetName(GetGlyphSetName(*aSet));
+ OString aGlyphSetName;
+ if (bUseGlyphs)
+ aGlyphSetName = GetGlyphSetName(*aSet);
+ else
+ aGlyphSetName = GetCharSetName(*aSet);
+
rGfx.PSSetFont (aGlyphSetName, GetGlyphSetEncoding(*aSet));
rGfx.PSMoveTo (aPoint);
rGfx.PSShowText (pGlyphSubset, nGlyphs, nGlyphs, nGlyphs > 1 ? pDeltaSubset : NULL);
@@ -614,66 +623,7 @@ GlyphSet::ImplDrawText (PrinterGfx &rGfx, const Point& rPoint,
return;
}
- sal_uChar *pGlyphID = (sal_uChar*)alloca (nLen * sizeof(sal_uChar));
- sal_Int32 *pGlyphSetID = (sal_Int32*)alloca (nLen * sizeof(sal_Int32));
- std::set< sal_Int32 > aGlyphSet;
-
- // convert unicode to font glyph id and font subset
- for (int nChar = 0; nChar < nLen; nChar++)
- {
- GetCharID (pStr[nChar], pGlyphID + nChar, pGlyphSetID + nChar);
- aGlyphSet.insert (pGlyphSetID[nChar]);
- }
-
- // loop over all glyph sets to detect substrings that can be xshown together
- // without changing the postscript font
- sal_Int32 *pDeltaSubset = (sal_Int32*)alloca (nLen * sizeof(sal_Int32));
- sal_uChar *pGlyphSubset = (sal_uChar*)alloca (nLen * sizeof(sal_uChar));
-
- std::set< sal_Int32 >::iterator aSet;
- for (aSet = aGlyphSet.begin(); aSet != aGlyphSet.end(); ++aSet)
- {
- Point aPoint = rPoint;
- sal_Int32 nOffset = 0;
- sal_Int32 nGlyphs = 0;
- sal_Int32 nChar;
-
- // get offset to first glyph
- for (nChar = 0; (nChar < nLen) && (pGlyphSetID[nChar] != *aSet); nChar++)
- {
- nOffset = pDeltaArray [nChar];
- }
-
- // loop over all chars to extract those that share the current glyph set
- for (nChar = 0; nChar < nLen; nChar++)
- {
- if (pGlyphSetID[nChar] == *aSet)
- {
- pGlyphSubset [nGlyphs] = pGlyphID [nChar];
- // the offset to the next glyph is determined by the glyph in
- // front of the next glyph with the same glyphset id
- // most often, this will be the current glyph
- while ((nChar + 1) < nLen)
- {
- if (pGlyphSetID[nChar + 1] == *aSet)
- break;
- else
- nChar += 1;
- }
- pDeltaSubset [nGlyphs] = pDeltaArray[nChar] - nOffset;
-
- nGlyphs += 1;
- }
- }
-
- // show the text using the PrinterGfx text api
- aPoint.Move (nOffset, 0);
-
- OString aGlyphSetName(GetCharSetName(*aSet));
- rGfx.PSSetFont (aGlyphSetName, GetGlyphSetEncoding(*aSet));
- rGfx.PSMoveTo (aPoint);
- rGfx.PSShowText (pGlyphSubset, nGlyphs, nGlyphs, nGlyphs > 1 ? pDeltaSubset : NULL);
- }
+ DrawGlyphs( rGfx, rPoint, NULL, pStr, nLen, pDeltaArray, sal_False);
}
sal_Bool
diff --git a/vcl/generic/print/glyphset.hxx b/vcl/generic/print/glyphset.hxx
index d2d5a3f..1d6eb6f 100644
--- a/vcl/generic/print/glyphset.hxx
+++ b/vcl/generic/print/glyphset.hxx
@@ -121,7 +121,8 @@ public:
const sal_uInt32* pGlyphIds,
const sal_Unicode* pUnicodes,
sal_Int16 nLen,
- const sal_Int32* pDeltaArray );
+ const sal_Int32* pDeltaArray,
+ sal_Bool bUseGlyphs=sal_True);
sal_Bool PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx);
sal_Bool PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, std::list< rtl::OString >& rSuppliedFonts );
};
--
1.7.4.1
--------------070507070509010506090603--
More information about the LibreOffice
mailing list