summaryrefslogtreecommitdiff
path: root/vcl/generic
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
parent08fb22932015cc0d57fa1dbe422e4109cf8be071 (diff)
generic: merge me with last commit please ... - more work
Diffstat (limited to 'vcl/generic')
-rw-r--r--vcl/generic/app/geninst.cxx134
-rw-r--r--vcl/generic/fontmanager/fontmanager.cxx23
-rw-r--r--vcl/generic/fontmanager/fontsubst.cxx (renamed from vcl/generic/print/fontsubst.cxx)21
-rw-r--r--vcl/generic/print/genprnpsp.cxx28
-rw-r--r--vcl/generic/print/pspgraphics.cxx2
5 files changed, 171 insertions, 37 deletions
diff --git a/vcl/generic/app/geninst.cxx b/vcl/generic/app/geninst.cxx
new file mode 100644
index 000000000000..a4127d32ba95
--- /dev/null
+++ b/vcl/generic/app/geninst.cxx
@@ -0,0 +1,134 @@
+/* -*- 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 <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "osl/module.hxx"
+#include "tools/solarmutex.hxx"
+
+#include "generic/geninst.h"
+
+// -------------------------------------------------------------------------
+//
+// SalYieldMutex
+//
+// -------------------------------------------------------------------------
+
+SalYieldMutex::SalYieldMutex()
+{
+ mnCount = 0;
+ mnThreadId = 0;
+ ::tools::SolarMutex::SetSolarMutex( this );
+}
+
+void SalYieldMutex::acquire()
+{
+ SolarMutexObject::acquire();
+ mnThreadId = osl::Thread::getCurrentIdentifier();
+ mnCount++;
+}
+
+void SalYieldMutex::release()
+{
+ if ( mnThreadId == osl::Thread::getCurrentIdentifier() )
+ {
+ if ( mnCount == 1 )
+ mnThreadId = 0;
+ mnCount--;
+ }
+ SolarMutexObject::release();
+}
+
+sal_Bool SalYieldMutex::tryToAcquire()
+{
+ if ( SolarMutexObject::tryToAcquire() )
+ {
+ mnThreadId = osl::Thread::getCurrentIdentifier();
+ mnCount++;
+ return sal_True;
+ }
+ else
+ return sal_False;
+}
+
+osl::SolarMutex* SalGenericInstance::GetYieldMutex()
+{
+ return mpSalYieldMutex;
+}
+
+sal_uLong SalGenericInstance::ReleaseYieldMutex()
+{
+ SalYieldMutex* pYieldMutex = mpSalYieldMutex;
+ if ( pYieldMutex->GetThreadId() ==
+ osl::Thread::getCurrentIdentifier() )
+ {
+ sal_uLong nCount = pYieldMutex->GetAcquireCount();
+ sal_uLong n = nCount;
+ while ( n )
+ {
+ pYieldMutex->release();
+ n--;
+ }
+
+ return nCount;
+ }
+ else
+ return 0;
+}
+
+void SalGenericInstance::AcquireYieldMutex( sal_uLong nCount )
+{
+ SalYieldMutex* pYieldMutex = mpSalYieldMutex;
+ while ( nCount )
+ {
+ pYieldMutex->acquire();
+ nCount--;
+ }
+}
+
+bool SalGenericInstance::CheckYieldMutex()
+{
+ bool bRet = true;
+
+ SalYieldMutex* pYieldMutex = mpSalYieldMutex;
+ if ( pYieldMutex->GetThreadId() != osl::Thread::getCurrentIdentifier() )
+ bRet = false;
+
+ return bRet;
+}
+
+SalGenericInstance::~SalGenericInstance()
+{
+ ::tools::SolarMutex::SetSolarMutex( 0 );
+ delete mpSalYieldMutex;
+}
diff --git a/vcl/generic/fontmanager/fontmanager.cxx b/vcl/generic/fontmanager/fontmanager.cxx
index 80cddeec3317..3d95034160e8 100644
--- a/vcl/generic/fontmanager/fontmanager.cxx
+++ b/vcl/generic/fontmanager/fontmanager.cxx
@@ -41,7 +41,7 @@
#include "fontsubset.hxx"
#include "impfont.hxx"
#include "svdata.hxx"
-#include "salinst.hxx"
+#include "generic/geninst.h"
#include "vcl/fontmanager.hxx"
#include "vcl/strhelper.hxx"
#include "vcl/ppdparser.hxx"
@@ -2100,28 +2100,9 @@ void PrintFontManager::initFontsAlias()
}
}
-// code stolen from vcl's RegisterFontSubstitutors()
-// TODO: use that method once psprint gets merged into vcl
static bool AreFCSubstitutionsEnabled()
{
- // init font substitution defaults
- int nDisableBits = 0;
-#ifdef SOLARIS
- // TODO: check the OS version and fc-data maintenance level
- 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
- }
-
- return ((nDisableBits & 3) == 0);
+ return (SalGenericInstance::FetchFontSubstitutionFlags() & 3) == 0;
}
void PrintFontManager::initialize()
diff --git a/vcl/generic/print/fontsubst.cxx b/vcl/generic/fontmanager/fontsubst.cxx
index 5c0dff6f25be..2ddcb5cb835d 100644
--- a/vcl/generic/print/fontsubst.cxx
+++ b/vcl/generic/fontmanager/fontsubst.cxx
@@ -64,7 +64,26 @@ public:
bool FindFontSubstitute( ImplFontSelectData&, OUString& rMissingCodes ) const;
};
-void RegisterFontSubstitutors( ImplDevFontList* pList )
+int SalGenericInstance::FetchFontSubstitutionFlags()
+{
+ // 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
+ }
+ return nDisableBits;
+}
+
+void SalGenericInstance::RegisterFontSubstitutors( ImplDevFontList* pList )
{
// init font substitution defaults
int nDisableBits = 0;
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 )