fix pref to turn off cg metrics. bug 149427, r=ccarlen/sr=hyatt

This commit is contained in:
pinkerton%netscape.com 2002-06-14 17:50:24 +00:00
parent f239acc984
commit 14ed261e2d
2 changed files with 54 additions and 20 deletions

View File

@ -51,12 +51,19 @@
#include "nsGfxCIID.h"
#include "nsIPref.h"
// Class IDs...
static NS_DEFINE_CID(kEventQueueCID, NS_EVENTQUEUE_CID);
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static nsMacNSPREventQueueHandler* gEventQueueHandler = nsnull;
//
// Static thread local storage index of the Toolkit
// object associated with a given thread...
//
static PRUintn gToolkitTLSIndex = 0;
static CFBundleRef getBundle(CFStringRef frameworkPath)
{
@ -83,13 +90,6 @@ static void* getQDFunction(CFStringRef functionName)
return NULL;
}
//
// Static thread local storage index of the Toolkit
// object associated with a given thread...
//
static PRUintn gToolkitTLSIndex = 0;
//-------------------------------------------------------------------------
//
//-------------------------------------------------------------------------
@ -188,6 +188,7 @@ NS_IMPL_THREADSAFE_ISUPPORTS1(nsToolkit, nsIToolkit);
// assume we begin as the fg app
bool nsToolkit::sInForeground = true;
static const char* gQuartzRenderingPref = "browser.quartz.enable";
//-------------------------------------------------------------------------
//
@ -235,6 +236,37 @@ NS_IMETHODIMP nsToolkit::Init(PRThread */*aThread*/)
mInited = true;
#if TARGET_CARBON
SetupQuartzRendering();
nsCOMPtr<nsIPref> prefs = do_GetService(NS_PREF_CONTRACTID);
if ( prefs )
prefs->RegisterCallback(gQuartzRenderingPref, QuartzChangedCallback, nsnull);
#endif
return NS_OK;
}
#if TARGET_CARBON
//
// QuartzChangedCallback
//
// The pref changed, reset the app to use quartz rendering as dictated by the pref
//
int nsToolkit::QuartzChangedCallback(const char* pref, void* data)
{
SetupQuartzRendering();
return NS_OK;
}
//
// SetupQuartzRendering
//
// Use apple's technote for 10.1.5 to turn on quartz rendering with CG metrics. This
// slows us down about 12% when turned on.
//
void nsToolkit::SetupQuartzRendering()
{
// from Apple's technote, yet un-numbered.
#if UNIVERSAL_INTERFACES_VERSION <= 0x0400
enum {
@ -252,23 +284,21 @@ NS_IMETHODIMP nsToolkit::Init(PRThread */*aThread*/)
// in a pref to disable it, rather than force everyone who wants it to carry around
// an extra pref.
typedef UInt32 (*qd_procptr)(UInt32);
qd_procptr SwapQDTextFlags = (qd_procptr) getQDFunction(CFSTR("SwapQDTextFlags"));
static qd_procptr SwapQDTextFlags = (qd_procptr) getQDFunction(CFSTR("SwapQDTextFlags"));
if ( SwapQDTextFlags ) {
nsCOMPtr<nsIPref> prefs = do_GetService(NS_PREF_CONTRACTID);
if (!prefs)
return NS_OK;
return;
PRBool enableQuartz = PR_TRUE;
nsresult rv = prefs->GetBoolPref("browser.quartz.enable", &enableQuartz);
if ( NS_FAILED(rv) || enableQuartz ) {
UInt32 oldFlags = SwapQDTextFlags(kQDDontChangeFlags);
SwapQDTextFlags(oldFlags | kQDUseTrueTypeScalerGlyphs | kQDUseCGTextRendering |
kQDUseCGTextMetrics);
}
nsresult rv = prefs->GetBoolPref(gQuartzRenderingPref, &enableQuartz);
UInt32 oldFlags = SwapQDTextFlags(kQDDontChangeFlags);
if ( NS_FAILED(rv) || enableQuartz )
SwapQDTextFlags(oldFlags | kQDUseTrueTypeScalerGlyphs | kQDUseCGTextRendering);
else
SwapQDTextFlags(oldFlags & !kQDUseCGTextRendering);
}
#endif
return NS_OK;
}
#endif
//-------------------------------------------------------------------------
@ -551,5 +581,3 @@ Boolean nsMacMemoryCushion::EnsureMemoryCushion()
return true;
}

View File

@ -110,6 +110,12 @@ public:
static void GetTopWidget ( WindowPtr aWindow, nsIWidget** outWidget ) ;
protected:
#if TARGET_CARBON
static int QuartzChangedCallback(const char* pref, void* data);
static void SetupQuartzRendering();
#endif
bool mInited;
static bool sInForeground;
};