diff options
author | Michael Meeks <michael.meeks@suse.com> | 2011-09-29 14:45:58 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2011-10-25 13:41:47 +0100 |
commit | 6ff506e6e92719049c6f42c8e5327ac16954ecb0 (patch) | |
tree | 2aac58f86b553ad5d9af5c32c3eb1cb30f429460 /vcl/generic/print | |
parent | 08fb22932015cc0d57fa1dbe422e4109cf8be071 (diff) |
generic: merge me with last commit please ... - more work
Diffstat (limited to 'vcl/generic/print')
-rw-r--r-- | vcl/generic/print/fontsubst.cxx | 227 | ||||
-rw-r--r-- | vcl/generic/print/genprnpsp.cxx | 28 | ||||
-rw-r--r-- | vcl/generic/print/pspgraphics.cxx | 2 |
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 ) |