summaryrefslogtreecommitdiff
path: root/vcl/generic/print
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2011-09-29 14:45:58 +0100
committerMichael Meeks <michael.meeks@suse.com>2011-10-25 13:41:47 +0100
commit6ff506e6e92719049c6f42c8e5327ac16954ecb0 (patch)
tree2aac58f86b553ad5d9af5c32c3eb1cb30f429460 /vcl/generic/print
parent08fb22932015cc0d57fa1dbe422e4109cf8be071 (diff)
generic: merge me with last commit please ... - more work
Diffstat (limited to 'vcl/generic/print')
-rw-r--r--vcl/generic/print/fontsubst.cxx227
-rw-r--r--vcl/generic/print/genprnpsp.cxx28
-rw-r--r--vcl/generic/print/pspgraphics.cxx2
3 files changed, 15 insertions, 242 deletions
diff --git a/vcl/generic/print/fontsubst.cxx b/vcl/generic/print/fontsubst.cxx
deleted file mode 100644
index 5c0dff6f25be..000000000000
--- a/vcl/generic/print/fontsubst.cxx
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_vcl.hxx"
-#include "generic/geninst.h"
-#include "generic/pspgraphics.h"
-#include "generic/glyphcache.hxx"
-
-#include "vcl/sysdata.hxx"
-#include "outfont.hxx"
-#include <i18npool/mslangid.hxx>
-
-#include "generic/printergfx.hxx"
-#include "salbmp.hxx"
-#include "impfont.hxx"
-#include "outfont.hxx"
-#include "outdev.h"
-#include "fontsubset.hxx"
-#include "salprn.hxx"
-#include "region.h"
-
-// ===========================================================================
-// platform specific font substitution hooks
-// ===========================================================================
-
-class FcPreMatchSubstititution
-: public ImplPreMatchFontSubstitution
-{
-public:
- bool FindFontSubstitute( ImplFontSelectData& ) const;
-};
-
-class FcGlyphFallbackSubstititution
-: public ImplGlyphFallbackFontSubstitution
-{
- // TODO: add a cache
-public:
- bool FindFontSubstitute( ImplFontSelectData&, OUString& rMissingCodes ) const;
-};
-
-void RegisterFontSubstitutors( ImplDevFontList* pList )
-{
- // init font substitution defaults
- int nDisableBits = 0;
-#ifdef SOLARIS
- nDisableBits = 1; // disable "font fallback" here on default
-#endif
- // apply the environment variable if any
- const char* pEnvStr = ::getenv( "SAL_DISABLE_FC_SUBST" );
- if( pEnvStr )
- {
- if( (*pEnvStr >= '0') && (*pEnvStr <= '9') )
- nDisableBits = (*pEnvStr - '0');
- else
- nDisableBits = ~0U; // no specific bits set: disable all
- }
-
- // register font fallback substitutions (unless disabled by bit0)
- if( (nDisableBits & 1) == 0 )
- {
- static FcPreMatchSubstititution aSubstPreMatch;
- pList->SetPreMatchHook( &aSubstPreMatch );
- }
-
- // register glyph fallback substitutions (unless disabled by bit1)
- if( (nDisableBits & 2) == 0 )
- {
- static FcGlyphFallbackSubstititution aSubstFallback;
- pList->SetFallbackHook( &aSubstFallback );
- }
-}
-
-// -----------------------------------------------------------------------
-
-static ImplFontSelectData GetFcSubstitute(const ImplFontSelectData &rFontSelData, OUString& rMissingCodes )
-{
- ImplFontSelectData aRet(rFontSelData);
-
- const rtl::OString aLangAttrib = MsLangId::convertLanguageToIsoByteString( rFontSelData.meLanguage );
-
- FontItalic eItalic = rFontSelData.GetSlant();
- FontWeight eWeight = rFontSelData.GetWeight();
- FontWidth eWidth = rFontSelData.GetWidthType();
- FontPitch ePitch = rFontSelData.GetPitch();
-
- const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- aRet.maSearchName = rMgr.Substitute( rFontSelData.maTargetName, rMissingCodes, aLangAttrib, eItalic, eWeight, eWidth, ePitch);
-
- aRet.meItalic = eItalic;
- aRet.meWeight = eWeight;
- aRet.meWidthType = eWidth;
- aRet.mePitch = ePitch;
-
- return aRet;
-}
-
-namespace
-{
- bool uselessmatch(const ImplFontSelectData &rOrig, const ImplFontSelectData &rNew)
- {
- return
- (
- rOrig.maTargetName == rNew.maSearchName &&
- rOrig.meWeight == rNew.meWeight &&
- rOrig.meItalic == rNew.meItalic &&
- rOrig.mePitch == rNew.mePitch &&
- rOrig.meWidthType == rNew.meWidthType
- );
- }
-}
-
-//--------------------------------------------------------------------------
-
-bool FcPreMatchSubstititution::FindFontSubstitute( ImplFontSelectData &rFontSelData ) const
-{
- // We dont' actually want to talk to Fontconfig at all for symbol fonts
- if( rFontSelData.IsSymbolFont() )
- return false;
- // StarSymbol is a unicode font, but it still deserves the symbol flag
- if( 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "starsymbol", 10)
- || 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
- return false;
-
- //Note: see fdo#41556 if you feel compelled to cache the results here,
- //remember that fontconfig can return e.g. an italic font for a non-italic
- //input and/or different fonts depending on fontsize, bold, etc settings so
- //don't cache just on the name, cache on all the input and be don't just
- //return the original selection data with the fontname updated
- rtl::OUString aDummy;
- const ImplFontSelectData aOut = GetFcSubstitute( rFontSelData, aDummy );
-
- if( !aOut.maSearchName.Len() )
- return false;
-
- const bool bHaveSubstitute = !uselessmatch( rFontSelData, aOut );
-
-#ifdef DEBUG
- const ByteString aOrigName( rFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
- const ByteString aSubstName( aOut.maSearchName, RTL_TEXTENCODING_UTF8 );
- printf( "FcPreMatchSubstititution \"%s\" bipw=%d%d%d%d -> ",
- aOrigName.GetBuffer(), rFontSelData.meWeight, rFontSelData.meItalic,
- rFontSelData.mePitch, rFontSelData.meWidthType );
- if( !bHaveSubstitute )
- printf( "no substitute available\n" );
- else
- printf( "\"%s\" bipw=%d%d%d%d\n", aSubstName.GetBuffer(),
- aOut.meWeight, aOut.meItalic, aOut.mePitch, aOut.meWidthType );
-#endif
-
- if( bHaveSubstitute )
- rFontSelData = aOut;
-
- return bHaveSubstitute;
-}
-
-// -----------------------------------------------------------------------
-
-bool FcGlyphFallbackSubstititution::FindFontSubstitute( ImplFontSelectData& rFontSelData,
- rtl::OUString& rMissingCodes ) const
-{
- // We dont' actually want to talk to Fontconfig at all for symbol fonts
- if( rFontSelData.IsSymbolFont() )
- return false;
- // StarSymbol is a unicode font, but it still deserves the symbol flag
- if( 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "starsymbol", 10)
- || 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
- return false;
-
- const ImplFontSelectData aOut = GetFcSubstitute( rFontSelData, rMissingCodes );
- // TODO: cache the unicode + srcfont specific result
- // FC doing it would be preferable because it knows the invariables
- // e.g. FC knows the FC rule that all Arial gets replaced by LiberationSans
- // whereas we would have to check for every size or attribute
- if( !aOut.maSearchName.Len() )
- return false;
-
- const bool bHaveSubstitute = !uselessmatch( rFontSelData, aOut );
-
-#ifdef DEBUG
- const ByteString aOrigName( rFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
- const ByteString aSubstName( aOut.maSearchName, RTL_TEXTENCODING_UTF8 );
- printf( "FcGFSubstititution \"%s\" bipw=%d%d%d%d ->",
- aOrigName.GetBuffer(), rFontSelData.meWeight, rFontSelData.meItalic,
- rFontSelData.mePitch, rFontSelData.meWidthType );
- if( !bHaveSubstitute )
- printf( "no substitute available\n" );
- else
- printf( "\"%s\" bipw=%d%d%d%d\n", aSubstName.GetBuffer(),
- aOut.meWeight, aOut.meItalic, aOut.mePitch, aOut.meWidthType );
-#endif
-
- if( bHaveSubstitute )
- rFontSelData = aOut;
-
- return bHaveSubstitute;
-}
-
-// ===========================================================================
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/generic/print/genprnpsp.cxx b/vcl/generic/print/genprnpsp.cxx
index c0b88fe001b7..06e29a4d74c6 100644
--- a/vcl/generic/print/genprnpsp.cxx
+++ b/vcl/generic/print/genprnpsp.cxx
@@ -382,7 +382,7 @@ static bool createPdf( const String& rToFile, const String& rFromFile, const Str
* SalInstance
*/
-SalInfoPrinter* GenericInstance::CreateInfoPrinter( SalPrinterQueueInfo* pQueueInfo,
+SalInfoPrinter* SalGenericInstance::CreateInfoPrinter( SalPrinterQueueInfo* pQueueInfo,
ImplJobSetup* pJobSetup )
{
mbPrinterInit = true;
@@ -421,12 +421,12 @@ SalInfoPrinter* GenericInstance::CreateInfoPrinter( SalPrinterQueueInfo* pQueueI
return pPrinter;
}
-void GenericInstance::DestroyInfoPrinter( SalInfoPrinter* pPrinter )
+void SalGenericInstance::DestroyInfoPrinter( SalInfoPrinter* pPrinter )
{
delete pPrinter;
}
-SalPrinter* GenericInstance::CreatePrinter( SalInfoPrinter* pInfoPrinter )
+SalPrinter* SalGenericInstance::CreatePrinter( SalInfoPrinter* pInfoPrinter )
{
mbPrinterInit = true;
// create and initialize SalPrinter
@@ -436,12 +436,12 @@ SalPrinter* GenericInstance::CreatePrinter( SalInfoPrinter* pInfoPrinter )
return pPrinter;
}
-void GenericInstance::DestroyPrinter( SalPrinter* pPrinter )
+void SalGenericInstance::DestroyPrinter( SalPrinter* pPrinter )
{
delete pPrinter;
}
-void GenericInstance::GetPrinterQueueInfo( ImplPrnQueueList* pList )
+void SalGenericInstance::GetPrinterQueueInfo( ImplPrnQueueList* pList )
{
mbPrinterInit = true;
PrinterInfoManager& rManager( PrinterInfoManager::get() );
@@ -480,17 +480,17 @@ void GenericInstance::GetPrinterQueueInfo( ImplPrnQueueList* pList )
}
}
-void GenericInstance::DeletePrinterQueueInfo( SalPrinterQueueInfo* pInfo )
+void SalGenericInstance::DeletePrinterQueueInfo( SalPrinterQueueInfo* pInfo )
{
delete pInfo;
}
-void GenericInstance::GetPrinterQueueState( SalPrinterQueueInfo* )
+void SalGenericInstance::GetPrinterQueueState( SalPrinterQueueInfo* )
{
mbPrinterInit = true;
}
-String GenericInstance::GetDefaultPrinter()
+String SalGenericInstance::GetDefaultPrinter()
{
mbPrinterInit = true;
PrinterInfoManager& rManager( PrinterInfoManager::get() );
@@ -1330,7 +1330,7 @@ class PrinterUpdate
static void doUpdate();
DECL_STATIC_LINK( PrinterUpdate, UpdateTimerHdl, void* );
public:
- static void update(GenericInstance &rInstance);
+ static void update(SalGenericInstance &rInstance);
static void jobStarted() { nActiveJobs++; }
static void jobEnded();
};
@@ -1341,7 +1341,7 @@ int PrinterUpdate::nActiveJobs = 0;
void PrinterUpdate::doUpdate()
{
::psp::PrinterInfoManager& rManager( ::psp::PrinterInfoManager::get() );
- GenericInstance *pInst = static_cast<GenericInstance *>( GetSalData()->m_pInstance );
+ SalGenericInstance *pInst = static_cast<SalGenericInstance *>( GetSalData()->m_pInstance );
if( pInst && rManager.checkPrintersChanged( false ) )
pInst->PostPrintersChanged();
}
@@ -1362,7 +1362,7 @@ IMPL_STATIC_LINK_NOINSTANCE( PrinterUpdate, UpdateTimerHdl, void*, EMPTYARG )
return 0;
}
-void PrinterUpdate::update(GenericInstance &rInstance)
+void PrinterUpdate::update(SalGenericInstance &rInstance)
{
if( Application::GetSettings().GetMiscSettings().GetDisablePrinting() )
return;
@@ -1385,12 +1385,12 @@ void PrinterUpdate::update(GenericInstance &rInstance)
}
}
-void GenericInstance::updatePrinterUpdate()
+void SalGenericInstance::updatePrinterUpdate()
{
PrinterUpdate::update(*this);
}
-void GenericInstance::jobStartedPrinterUpdate()
+void SalGenericInstance::jobStartedPrinterUpdate()
{
PrinterUpdate::jobStarted();
}
@@ -1410,7 +1410,7 @@ void PrinterUpdate::jobEnded()
}
}
-void GenericInstance::jobEndedPrinterUpdate()
+void SalGenericInstance::jobEndedPrinterUpdate()
{
PrinterUpdate::jobEnded();
}
diff --git a/vcl/generic/print/pspgraphics.cxx b/vcl/generic/print/pspgraphics.cxx
index c99ae54b4ed5..7e11aeea616d 100644
--- a/vcl/generic/print/pspgraphics.cxx
+++ b/vcl/generic/print/pspgraphics.cxx
@@ -877,7 +877,7 @@ void PspGraphics::GetDevFontList( ImplDevFontList *pList )
// register platform specific font substitutions if available
if( rMgr.hasFontconfig() )
- GenericInstance::RegisterFontSubstitutors( pList );
+ SalGenericInstance::RegisterFontSubstitutors( pList );
}
void PspGraphics::GetDevFontSubstList( OutputDevice* pOutDev )