From b81e6b15ed1c5bccd7a07fa7633d9cc1acdea364 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 27 Jul 2007 17:05:58 +0000 Subject: [PATCH] cleaned up and removed some old functions from SystemStats --- .../juce_linux_SystemStats.cpp | 142 +--------------- .../juce_linux_Threads.cpp | 2 +- .../juce_mac_SystemStats.cpp | 24 +-- .../juce_mac_Threads.cpp | 2 +- .../juce_win32_Files.cpp | 2 +- .../juce_win32_SystemStats.cpp | 159 +++--------------- .../juce_win32_Threads.cpp | 2 +- extras/juce demo/src/ApplicationStartup.cpp | 4 +- .../components/jucer_TabbedComponentHandler.h | 2 +- .../gui/components/juce_Component.cpp | 55 +++--- .../components/special/juce_DropShadower.cpp | 24 +-- .../components/special/juce_DropShadower.h | 2 +- .../windows/juce_ResizableWindow.cpp | 62 +++---- .../gui/graphics/contexts/juce_Graphics.cpp | 8 +- src/juce_core/basics/juce_SystemStats.h | 26 +-- src/juce_core/basics/juce_Time.cpp | 2 +- src/juce_core/basics/juce_Time.h | 2 +- src/juce_core/io/files/juce_File.h | 2 +- src/juce_core/text/juce_String.cpp | 8 +- src/juce_core/threads/juce_Thread.h | 4 +- 20 files changed, 129 insertions(+), 405 deletions(-) diff --git a/build/linux/platform_specific_code/juce_linux_SystemStats.cpp b/build/linux/platform_specific_code/juce_linux_SystemStats.cpp index d986af6fbe..153e74e4e5 100644 --- a/build/linux/platform_specific_code/juce_linux_SystemStats.cpp +++ b/build/linux/platform_specific_code/juce_linux_SystemStats.cpp @@ -47,14 +47,6 @@ BEGIN_JUCE_NAMESPACE #include "../../../src/juce_appframework/events/juce_Timer.h" #include "../../../src/juce_core/misc/juce_PlatformUtilities.h" -static struct _LogicalCpuInfo -{ - bool htSupported; - bool htAvailable; - int numPackages; - int numLogicalPerPackage; - uint32 physicalAffinityMask; -} logicalCpuInfo; //============================================================================== static juce_noinline unsigned int getCPUIDWord (int* familyModel, int* extFeatures) throw() @@ -82,110 +74,6 @@ static juce_noinline unsigned int getCPUIDWord (int* familyModel, int* extFeatur return cpu; } -void juce_initLogicalCpuInfo() throw() -{ - int familyModelWord, extFeaturesWord; - int featuresWord = getCPUIDWord (&familyModelWord, &extFeaturesWord); - - logicalCpuInfo.htSupported = false; - logicalCpuInfo.htAvailable = false; - logicalCpuInfo.numLogicalPerPackage = 1; - logicalCpuInfo.numPackages = 0; - logicalCpuInfo.physicalAffinityMask = 0; - -#if SUPPORT_AFFINITIES - cpu_set_t processAffinity; - - /* - N.B. If this line causes a compile error, then you've probably not got the latest - version of glibc installed. - - If you don't want to update your copy of glibc and don't care about cpu affinities, - then you can just disable all this stuff by removing the SUPPORT_AFFINITIES macro - from the linuxincludes.h file. - */ - if (sched_getaffinity (getpid(), - sizeof (cpu_set_t), - &processAffinity) != sizeof (cpu_set_t)) - { - return; - } - - // Checks: CPUID supported, model >= Pentium 4, Hyperthreading bit set, logical CPUs per package > 1 - if (featuresWord == 0 - || ((familyModelWord >> 8) & 0xf) < 15 - || (featuresWord & (1 << 28)) == 0 - || ((extFeaturesWord >> 16) & 0xff) < 2) - { - for (int i = 0; i < 64; ++i) - if (CPU_ISSET (i, &processAffinity)) - logicalCpuInfo.physicalAffinityMask |= (1 << i); - - return; - } - - logicalCpuInfo.htSupported = true; - logicalCpuInfo.numLogicalPerPackage = (extFeaturesWord >> 16) & 0xff; - - cpu_set_t affinityMask; - cpu_set_t physAff; - CPU_ZERO (&physAff); - - unsigned char i = 1; - unsigned char physIdMask = 0xFF; - unsigned char physIdShift = 0; - - //unsigned char apicId, logId, physId; - - while (i < logicalCpuInfo.numLogicalPerPackage) - { - i *= 2; - physIdMask <<= 1; - physIdShift++; - } - - CPU_SET (0, &affinityMask); - logicalCpuInfo.numPackages = 0; - -//xxx revisit this at some point.. -/* while ((affinityMask != 0) && (affinityMask <= processAffinity)) - { - int ret; - if (! sched_setaffinity (getpid(), sizeof (cpu_set_t), &affinityMask)) - { - sched_yield(); // schedule onto correct CPU - - featuresWord = getCPUIDWord(&familyModelWord, &extFeaturesWord); - apicId = (unsigned char)(extFeaturesWord >> 24); - logId = (unsigned char)(apicId & ~physIdMask); - physId = (unsigned char)(apicId >> physIdShift); - - if (logId != 0) - logicalCpuInfo.htAvailable = true; - - if ((((int)logId) % logicalCpuInfo.numLogicalPerPackage) == 0) - { - // This is a physical CPU - physAff |= affinityMask; - logicalCpuInfo.numPackages++; - } - } - - affinityMask = affinityMask << 1; - } - - sched_setaffinity (getpid(), sizeof(unsigned long), &processAffinity); -*/ - - logicalCpuInfo.physicalAffinityMask = 0; - - for (int i = 0; i < 64; ++i) - if (CPU_ISSET (i, &physAff)) - logicalCpuInfo.physicalAffinityMask |= (1 << i); - -#endif -} - //============================================================================== void Logger::outputDebugString (const String& text) throw() { @@ -280,11 +168,6 @@ int SystemStats::getCpuSpeedInMegaherz() throw() return (int) (speed.getFloatValue() + 0.5f); } -bool SystemStats::hasHyperThreading() throw() -{ - return logicalCpuInfo.htAvailable; -} - int SystemStats::getMemorySizeInMegabytes() throw() { struct sysinfo sysi; @@ -360,34 +243,13 @@ int SystemStats::getPageSize() throw() return systemPageSize; } -int SystemStats::getNumPhysicalCpus() throw() -{ - if (logicalCpuInfo.numPackages) - return logicalCpuInfo.numPackages; - - return getNumLogicalCpus(); -} - -int SystemStats::getNumLogicalCpus() throw() +int SystemStats::getNumCpus() throw() { const int lastCpu = getCpuInfo ("processor", true).getIntValue(); return lastCpu + 1; } -uint32 SystemStats::getPhysicalAffinityMask() throw() -{ -#if SUPPORT_AFFINITIES - return logicalCpuInfo.physicalAffinityMask; -#else - /* affinities aren't supported because either the appropriate header files weren't found, - or the SUPPORT_AFFINITIES macro was turned off in linuxheaders.h - */ - jassertfalse - return 0; -#endif - -} //============================================================================== void SystemStats::initialiseStats() throw() @@ -396,8 +258,6 @@ void SystemStats::initialiseStats() throw() Process::lowerPrivilege(); String s (SystemStats::getJUCEVersion()); - - juce_initLogicalCpuInfo(); } void PlatformUtilities::fpuReset() diff --git a/build/linux/platform_specific_code/juce_linux_Threads.cpp b/build/linux/platform_specific_code/juce_linux_Threads.cpp index 4b292d294b..68536a6b0e 100644 --- a/build/linux/platform_specific_code/juce_linux_Threads.cpp +++ b/build/linux/platform_specific_code/juce_linux_Threads.cpp @@ -167,7 +167,7 @@ void Thread::yield() throw() sched_yield(); } -void Thread::sleep (int millisecs) throw() +void JUCE_CALLTYPE Thread::sleep (int millisecs) throw() { struct timespec time; time.tv_sec = millisecs / 1000; diff --git a/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp b/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp index 1289ed6254..49ccf3b94c 100644 --- a/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp +++ b/build/macosx/platform_specific_code/juce_mac_SystemStats.cpp @@ -83,7 +83,6 @@ struct CPUFlags bool hasSSE : 1; bool hasSSE2 : 1; bool has3DNow : 1; - bool hasHT : 1; }; static CPUFlags cpuFlags; @@ -145,7 +144,6 @@ void SystemStats::initialiseStats() throw() cpuFlags.hasSSE = ((features & (1 << 25)) != 0); cpuFlags.hasSSE2 = ((features & (1 << 26)) != 0); cpuFlags.has3DNow = ((extFeatures & (1 << 31)) != 0); - cpuFlags.hasHT = ((features & (1 << 28)) != 0); } #endif @@ -201,15 +199,6 @@ bool SystemStats::has3DNow() throw() #endif } -bool SystemStats::hasHyperThreading() throw() -{ -#if JUCE_INTEL - return cpuFlags.hasHT; -#else - return false; -#endif -} - const String SystemStats::getCpuVendor() throw() { #if JUCE_INTEL @@ -226,22 +215,11 @@ int SystemStats::getCpuSpeedInMegaherz() throw() return GetCPUSpeed(); } -int SystemStats::getNumPhysicalCpus() throw() +int SystemStats::getNumCpus() throw() { return MPProcessors(); } -int SystemStats::getNumLogicalCpus() throw() -{ - return getNumPhysicalCpus(); -} - -uint32 SystemStats::getPhysicalAffinityMask() throw() -{ - jassertfalse - return 0; -} - //============================================================================== static int64 juce_getMicroseconds() throw() { diff --git a/build/macosx/platform_specific_code/juce_mac_Threads.cpp b/build/macosx/platform_specific_code/juce_mac_Threads.cpp index 8558b736d8..8502ae843d 100644 --- a/build/macosx/platform_specific_code/juce_mac_Threads.cpp +++ b/build/macosx/platform_specific_code/juce_mac_Threads.cpp @@ -213,7 +213,7 @@ void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw() jassertfalse } -void Thread::sleep (int millisecs) throw() +void JUCE_CALLTYPE Thread::sleep (int millisecs) throw() { struct timespec time; time.tv_sec = millisecs / 1000; diff --git a/build/win32/platform_specific_code/juce_win32_Files.cpp b/build/win32/platform_specific_code/juce_win32_Files.cpp index f93142e9a7..534d096722 100644 --- a/build/win32/platform_specific_code/juce_win32_Files.cpp +++ b/build/win32/platform_specific_code/juce_win32_Files.cpp @@ -567,7 +567,7 @@ static const File juce_getSpecialFolderPath (int type) throw() return File::nonexistent; } -const File File::getSpecialLocation (const SpecialLocationType type) +const File JUCE_CALLTYPE File::getSpecialLocation (const SpecialLocationType type) { switch (type) { diff --git a/build/win32/platform_specific_code/juce_win32_SystemStats.cpp b/build/win32/platform_specific_code/juce_win32_SystemStats.cpp index ee800c6366..cbc6d07c7a 100644 --- a/build/win32/platform_specific_code/juce_win32_SystemStats.cpp +++ b/build/win32/platform_specific_code/juce_win32_SystemStats.cpp @@ -63,6 +63,11 @@ BEGIN_JUCE_NAMESPACE #include "../../../src/juce_core/basics/juce_SystemStats.h" extern void juce_updateMultiMonitorInfo() throw(); +extern void juce_initialiseThreadEvents() throw(); + +#if JUCE_ENABLE_WIN98_COMPATIBILITY + extern void juce_initialiseUnicodeFileFunctions() throw(); +#endif //============================================================================== @@ -83,16 +88,8 @@ void Logger::outputDebugPrintf (const tchar* format, ...) throw() //============================================================================== static int64 hiResTicksPerSecond; static double hiResTicksScaleFactor; -static SYSTEM_INFO systemInfo; -static struct _LogicalCpuInfo -{ - bool htSupported; - bool htAvailable; - int numPackages; - int numLogicalPerPackage; - unsigned long physicalAffinityMask; -} logicalCpuInfo; +static SYSTEM_INFO systemInfo; //============================================================================== @@ -103,7 +100,7 @@ static struct _LogicalCpuInfo #pragma intrinsic (__cpuid) #pragma intrinsic (__rdtsc) -static unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) throw() +/*static unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) throw() { int info [4]; __cpuid (info, 1); @@ -115,7 +112,7 @@ static unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) th *extFeatures = info[1]; return info[3]; -} +}*/ const String SystemStats::getCpuVendor() throw() { @@ -135,7 +132,7 @@ const String SystemStats::getCpuVendor() throw() //============================================================================== // CPU info functions using old fashioned inline asm... -static juce_noinline unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) +/*static juce_noinline unsigned int getCPUIDWord (int* familyModel = 0, int* extFeatures = 0) { unsigned int cpu = 0; unsigned int ext = 0; @@ -177,7 +174,7 @@ static juce_noinline unsigned int getCPUIDWord (int* familyModel = 0, int* extFe *extFeatures = ext; return cpu; -} +}*/ static void juce_getCpuVendor (char* const v) { @@ -223,117 +220,36 @@ const String SystemStats::getCpuVendor() throw() } #endif -static void initLogicalCpuInfo() throw() -{ - int familyModelWord, extFeaturesWord; - int featuresWord = getCPUIDWord (&familyModelWord, &extFeaturesWord); - HANDLE hCurrentProcessHandle = GetCurrentProcess(); - - logicalCpuInfo.htSupported = false; - logicalCpuInfo.htAvailable = false; - logicalCpuInfo.numLogicalPerPackage = 1; - logicalCpuInfo.numPackages = 0; - logicalCpuInfo.physicalAffinityMask = 0; - - DWORD_PTR processAffinity, systemAffinity; - - if (! GetProcessAffinityMask (hCurrentProcessHandle, &processAffinity, &systemAffinity)) - return; - - // Checks: CPUID supported, model >= Pentium 4, Hyperthreading bit set, logical CPUs per package > 1 - if (featuresWord == 0 - || ((familyModelWord >> 8) & 0xf) < 15 - || (featuresWord & (1 << 28)) == 0 - || ((extFeaturesWord >> 16) & 0xff) < 2) - { - logicalCpuInfo.physicalAffinityMask = static_cast (processAffinity); - return; - } - - logicalCpuInfo.htSupported = true; - logicalCpuInfo.numLogicalPerPackage = (extFeaturesWord >> 16) & 0xff; - - unsigned int affinityMask; - unsigned int physAff = 0; - - unsigned char i = 1; - unsigned char physIdMask = 0xFF; - unsigned char physIdShift = 0; - - unsigned char apicId; - unsigned char logId; - unsigned char physId; - - while (i < logicalCpuInfo.numLogicalPerPackage) - { - i *= 2; - physIdMask <<= 1; - physIdShift++; - } - - affinityMask = 1; - logicalCpuInfo.numPackages = 0; - - while ((affinityMask != 0) && (affinityMask <= processAffinity)) - { - if (SetProcessAffinityMask (hCurrentProcessHandle, affinityMask)) - { - Sleep(0); // schedule onto correct CPU - - featuresWord = getCPUIDWord (&familyModelWord, &extFeaturesWord); - apicId = (unsigned char) (extFeaturesWord >> 24); - logId = (unsigned char) (apicId & ~physIdMask); - physId = (unsigned char) (apicId >> physIdShift); - - if (logId != 0) - logicalCpuInfo.htAvailable = true; - - if ((((int) logId) % logicalCpuInfo.numLogicalPerPackage) == 0) - { - // This is a physical CPU - physAff |= affinityMask; - logicalCpuInfo.numPackages++; - } - } - - affinityMask = affinityMask << 1; - } - - logicalCpuInfo.physicalAffinityMask = physAff; - - SetProcessAffinityMask(hCurrentProcessHandle, processAffinity); -} //============================================================================== -void juce_initialiseThreadEvents() throw(); - -#if JUCE_ENABLE_WIN98_COMPATIBILITY - void juce_initialiseUnicodeFileFunctions() throw(); -#endif - -static struct JuceCpuProps +struct CPUFlags { - bool hasMMX : 1, hasSSE : 1, hasSSE2 : 1, has3DNow : 1; -} juce_CpuProps; + bool hasMMX : 1; + bool hasSSE : 1; + bool hasSSE2 : 1; + bool has3DNow : 1; +}; + +static CPUFlags cpuFlags; bool SystemStats::hasMMX() throw() { - return juce_CpuProps.hasMMX; + return cpuFlags.hasMMX; } bool SystemStats::hasSSE() throw() { - return juce_CpuProps.hasSSE; + return cpuFlags.hasSSE; } bool SystemStats::hasSSE2() throw() { - return juce_CpuProps.hasSSE2; + return cpuFlags.hasSSE2; } bool SystemStats::has3DNow() throw() { - return juce_CpuProps.has3DNow; + return cpuFlags.has3DNow; } void SystemStats::initialiseStats() throw() @@ -344,13 +260,13 @@ void SystemStats::initialiseStats() throw() juce_initialiseThreadEvents(); - juce_CpuProps.hasMMX = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE) != 0; - juce_CpuProps.hasSSE = IsProcessorFeaturePresent (PF_XMMI_INSTRUCTIONS_AVAILABLE) != 0; - juce_CpuProps.hasSSE2 = IsProcessorFeaturePresent (PF_XMMI64_INSTRUCTIONS_AVAILABLE) != 0; + cpuFlags.hasMMX = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE) != 0; + cpuFlags.hasSSE = IsProcessorFeaturePresent (PF_XMMI_INSTRUCTIONS_AVAILABLE) != 0; + cpuFlags.hasSSE2 = IsProcessorFeaturePresent (PF_XMMI64_INSTRUCTIONS_AVAILABLE) != 0; #ifdef PF_AMD3D_INSTRUCTIONS_AVAILABLE - juce_CpuProps.has3DNow = IsProcessorFeaturePresent (PF_AMD3D_INSTRUCTIONS_AVAILABLE) != 0; + cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_AMD3D_INSTRUCTIONS_AVAILABLE) != 0; #else - juce_CpuProps.has3DNow = IsProcessorFeaturePresent (PF_3DNOW_INSTRUCTIONS_AVAILABLE) != 0; + cpuFlags.has3DNow = IsProcessorFeaturePresent (PF_3DNOW_INSTRUCTIONS_AVAILABLE) != 0; #endif LARGE_INTEGER f; @@ -361,7 +277,6 @@ void SystemStats::initialiseStats() throw() String s (SystemStats::getJUCEVersion()); GetSystemInfo (&systemInfo); - initLogicalCpuInfo(); #ifdef JUCE_DEBUG const MMRESULT res = timeBeginPeriod (1); @@ -445,29 +360,11 @@ int SystemStats::getMemorySizeInMegabytes() throw() return (int) (mem.dwTotalPhys / (1024 * 1024)) + 1; } -bool SystemStats::hasHyperThreading() throw() -{ - return logicalCpuInfo.htAvailable; -} - -int SystemStats::getNumPhysicalCpus() throw() -{ - if (logicalCpuInfo.numPackages) - return logicalCpuInfo.numPackages; - - return getNumLogicalCpus(); -} - -int SystemStats::getNumLogicalCpus() throw() +int SystemStats::getNumCpus() throw() { return systemInfo.dwNumberOfProcessors; } -uint32 SystemStats::getPhysicalAffinityMask() throw() -{ - return logicalCpuInfo.physicalAffinityMask; -} - //============================================================================== uint32 juce_millisecondsSinceStartup() throw() { diff --git a/build/win32/platform_specific_code/juce_win32_Threads.cpp b/build/win32/platform_specific_code/juce_win32_Threads.cpp index d63c76404d..c7c47315e9 100644 --- a/build/win32/platform_specific_code/juce_win32_Threads.cpp +++ b/build/win32/platform_specific_code/juce_win32_Threads.cpp @@ -225,7 +225,7 @@ void Thread::yield() throw() Sleep (0); } -void Thread::sleep (const int millisecs) throw() +void JUCE_CALLTYPE Thread::sleep (const int millisecs) throw() { if (millisecs >= 10) { diff --git a/extras/juce demo/src/ApplicationStartup.cpp b/extras/juce demo/src/ApplicationStartup.cpp index 3ed10034bd..3a014f809e 100644 --- a/extras/juce demo/src/ApplicationStartup.cpp +++ b/extras/juce demo/src/ApplicationStartup.cpp @@ -124,13 +124,11 @@ private: << T("\nOperating system: ") << SystemStats::getOperatingSystemName() << T("\nCPU vendor: ") << SystemStats::getCpuVendor() << T("\nCPU speed: ") << SystemStats::getCpuSpeedInMegaherz() << T("MHz\n") - << T("\nNumber of physical CPUs: ") << SystemStats::getNumPhysicalCpus() - << T("\nNumber of logical CPUs: ") << SystemStats::getNumLogicalCpus() + << T("\nNumber of CPUs: ") << SystemStats::getNumCpus() << T("\nCPU has MMX: ") << (SystemStats::hasMMX() ? T("yes") : T("no")) << T("\nCPU has SSE: ") << (SystemStats::hasSSE() ? T("yes") : T("no")) << T("\nCPU has SSE2: ") << (SystemStats::hasSSE2() ? T("yes") : T("no")) << T("\nCPU has 3DNOW: ") << (SystemStats::has3DNow() ? T("yes") : T("no")) - << T("\nCPU has hyperthreading: ") << (SystemStats::hasHyperThreading() ? T("yes") : T("no")) << T("\nMemory size: ") << SystemStats::getMemorySizeInMegabytes() << T("MB\n"); int64 macAddresses[8]; diff --git a/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h b/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h index 6ab2c32252..d33ed88b5f 100644 --- a/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h +++ b/extras/the jucer/src/model/components/jucer_TabbedComponentHandler.h @@ -1169,7 +1169,7 @@ private: public: TabMoveProperty (TabbedComponent* comp, JucerDocument& document_, const int tabIndex_, const int totalNumTabs_) - : ButtonPropertyComponent (T("add tab"), false), + : ButtonPropertyComponent (T("move tab"), false), component (comp), document (document_), tabIndex (tabIndex_), diff --git a/src/juce_appframework/gui/components/juce_Component.cpp b/src/juce_appframework/gui/components/juce_Component.cpp index ad19afcfb2..a37255331a 100644 --- a/src/juce_appframework/gui/components/juce_Component.cpp +++ b/src/juce_appframework/gui/components/juce_Component.cpp @@ -429,30 +429,25 @@ void* Component::getWindowHandle() const throw() } //============================================================================== -void Component::addToDesktop (int desktopWindowStyleFlags, void* nativeWindowToAttachTo) +void Component::addToDesktop (int styleWanted, void* nativeWindowToAttachTo) { // if component methods are being called from threads other than the message // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. checkMessageManagerIsLocked if (! isOpaque()) - desktopWindowStyleFlags |= juce_windowIsSemiTransparentFlag; + styleWanted |= juce_windowIsSemiTransparentFlag; int currentStyleFlags = 0; - ComponentBoundsConstrainer* currentConstainer = 0; - if (isOnDesktop()) - { - const ComponentPeer* const peer = getPeer(); + // don't use getPeer(), so that we only get the peer that's specifically + // for this comp, and not for one of its parents. + ComponentPeer* peer = ComponentPeer::getPeerFor (this); - if (peer != 0) - { - currentStyleFlags = peer->getStyleFlags(); - currentConstainer = peer->getConstrainer(); - } - } + if (peer != 0) + currentStyleFlags = peer->getStyleFlags(); - if ((! isOnDesktop()) || desktopWindowStyleFlags != currentStyleFlags) + if (styleWanted != currentStyleFlags || ! flags.hasHeavyweightPeerFlag) { const ComponentDeletionWatcher deletionChecker (this); @@ -467,14 +462,16 @@ void Component::addToDesktop (int desktopWindowStyleFlags, void* nativeWindowToA int x = 0, y = 0; relativePositionToGlobal (x, y); - ComponentPeer* peer = getPeer(); bool wasFullscreen = false; bool wasMinimised = false; + ComponentBoundsConstrainer* currentConstainer = 0; if (peer != 0) { wasFullscreen = peer->isFullScreen(); wasMinimised = peer->isMinimised(); + currentConstainer = peer->getConstrainer(); + removeFromDesktop(); } @@ -485,7 +482,7 @@ void Component::addToDesktop (int desktopWindowStyleFlags, void* nativeWindowToA { flags.hasHeavyweightPeerFlag = true; - peer = createNewPeer (desktopWindowStyleFlags, nativeWindowToAttachTo); + peer = createNewPeer (styleWanted, nativeWindowToAttachTo); Desktop::getInstance().addDesktopComponent (this); @@ -518,7 +515,7 @@ void Component::removeFromDesktop() // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. checkMessageManagerIsLocked - if (isOnDesktop()) + if (flags.hasHeavyweightPeerFlag) { ComponentPeer* const peer = ComponentPeer::getPeerFor (this); @@ -559,9 +556,9 @@ void Component::setOpaque (const bool shouldBeOpaque) throw() { flags.opaqueFlag = shouldBeOpaque; - if (isOnDesktop()) + if (flags.hasHeavyweightPeerFlag) { - const ComponentPeer* const peer = getPeer(); + const ComponentPeer* const peer = ComponentPeer::getPeerFor (this); if (peer != 0) { @@ -880,7 +877,7 @@ void Component::setBounds (int x, int y, int w, int h) // send a fake mouse move to trigger enter/exit messages if needed.. sendFakeMouseMove(); - if (! isOnDesktop()) + if (! flags.hasHeavyweightPeerFlag) repaintParent(); } @@ -888,7 +885,7 @@ void Component::setBounds (int x, int y, int w, int h) if (wasResized) repaint(); - else if (! isOnDesktop()) + else if (! flags.hasHeavyweightPeerFlag) repaintParent(); if (flags.hasHeavyweightPeerFlag) @@ -1859,9 +1856,17 @@ void Component::sendLookAndFeelChange() } } +static const String getColourPropertyName (const int colourId) throw() +{ + String s; + s.preallocateStorage (18); + s << T("jcclr_") << colourId; + return s; +} + const Colour Component::findColour (const int colourId, const bool inheritFromParent) const throw() { - const String customColour (getComponentProperty (T("jucecol_") + String::toHexString (colourId), + const String customColour (getComponentProperty (getColourPropertyName (colourId), inheritFromParent, String::empty)); @@ -1873,7 +1878,7 @@ const Colour Component::findColour (const int colourId, const bool inheritFromPa bool Component::isColourSpecified (const int colourId) const throw() { - return getComponentProperty (T("jucecol_") + String::toHexString (colourId), + return getComponentProperty (getColourPropertyName (colourId), false, String::empty).isNotEmpty(); } @@ -1882,14 +1887,14 @@ void Component::removeColour (const int colourId) { if (isColourSpecified (colourId)) { - removeComponentProperty (T("jucecol_") + String::toHexString (colourId)); + removeComponentProperty (getColourPropertyName (colourId)); colourChanged(); } } void Component::setColour (const int colourId, const Colour& colour) { - const String colourName (T("jucecol_") + String::toHexString (colourId)); + const String colourName (getColourPropertyName (colourId)); const String customColour (getComponentProperty (colourName, false, String::empty)); if (customColour.isEmpty() || Colour (customColour.getIntValue()) != colour) @@ -1908,7 +1913,7 @@ void Component::copyAllExplicitColoursTo (Component& target) const throw() for (int i = 0; i < keys.size(); ++i) { - if (keys[i].startsWith (T("jucecol_"))) + if (keys[i].startsWith (T("jcclr_"))) { target.setComponentProperty (keys[i], props.getAllValues() [i]); diff --git a/src/juce_appframework/gui/components/special/juce_DropShadower.cpp b/src/juce_appframework/gui/components/special/juce_DropShadower.cpp index e9bfece980..d52751730a 100644 --- a/src/juce_appframework/gui/components/special/juce_DropShadower.cpp +++ b/src/juce_appframework/gui/components/special/juce_DropShadower.cpp @@ -156,12 +156,12 @@ DropShadower::~DropShadower() void DropShadower::deleteShadowWindows() { - int i; - for (i = numShadows; --i >= 0;) - delete shadowWindows[i]; - if (numShadows > 0) { + int i; + for (i = numShadows; --i >= 0;) + delete shadowWindows[i]; + for (i = 12; --i >= 0;) delete shadowImageSections[i]; @@ -305,22 +305,22 @@ void DropShadower::updateShadows() } const int x = owner->getX(); - const int y = owner->getY(); + const int y = owner->getY() - shadowEdge; const int w = owner->getWidth(); - const int h = owner->getHeight(); + const int h = owner->getHeight() + shadowEdge + shadowEdge; shadowWindows[0]->setBounds (x - shadowEdge, - y - shadowEdge, + y, shadowEdge, - h + shadowEdge + shadowEdge); + h); shadowWindows[1]->setBounds (x + w, - y - shadowEdge, + y, shadowEdge, - h + shadowEdge + shadowEdge); + h); shadowWindows[2]->setBounds (x, - y - shadowEdge, + y, w, shadowEdge); @@ -341,7 +341,7 @@ void DropShadower::setShadowImage (Image* const src, const int w, const int h, const int sx, - const int sy) + const int sy) throw() { shadowImageSections[num] = new Image (Image::ARGB, w, h, true); diff --git a/src/juce_appframework/gui/components/special/juce_DropShadower.h b/src/juce_appframework/gui/components/special/juce_DropShadower.h index 0a5b989f31..a4d351edd7 100644 --- a/src/juce_appframework/gui/components/special/juce_DropShadower.h +++ b/src/juce_appframework/gui/components/special/juce_DropShadower.h @@ -101,7 +101,7 @@ private: void setShadowImage (Image* const src, const int num, const int w, const int h, - const int sx, const int sy); + const int sx, const int sy) throw(); void bringShadowWindowsToFront(); void deleteShadowWindows(); diff --git a/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp b/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp index 4e6f197cb4..16a1c514a3 100644 --- a/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp +++ b/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp @@ -57,9 +57,11 @@ ResizableWindow::ResizableWindow (const String& name, { setBackgroundColour (backgroundColour_); + const Rectangle mainMonArea (Desktop::getInstance().getMainMonitorArea()); + defaultConstrainer.setSizeLimits (200, 200, - Desktop::getInstance().getMainMonitorArea().getWidth(), - Desktop::getInstance().getMainMonitorArea().getHeight()); + mainMonArea.getWidth(), + mainMonArea.getHeight()); defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16); @@ -101,13 +103,10 @@ void ResizableWindow::setContentComponent (Component* const newContentComponent, if (contentComponent != newContentComponent) { - if (contentComponent != 0) - { - if (deleteOldOne) - delete contentComponent; - else - removeChildComponent (contentComponent); - } + if (deleteOldOne) + delete contentComponent; + else + removeChildComponent (contentComponent); contentComponent = newContentComponent; @@ -269,18 +268,22 @@ void ResizableWindow::setResizeLimits (const int newMinimumWidth, void ResizableWindow::setConstrainer (ComponentBoundsConstrainer* newConstrainer) { - constrainer = newConstrainer; + if (constrainer != newConstrainer) + { + constrainer = newConstrainer; - const bool shouldBeResizable = resizableCorner != 0 || resizableBorder != 0; - const bool useBottomRightCornerResizer = resizableCorner != 0; + const bool useBottomRightCornerResizer = resizableCorner != 0; + const bool shouldBeResizable = useBottomRightCornerResizer || resizableBorder != 0; - deleteAndZero (resizableCorner); - deleteAndZero (resizableBorder); + deleteAndZero (resizableCorner); + deleteAndZero (resizableBorder); - setResizable (shouldBeResizable, useBottomRightCornerResizer); + setResizable (shouldBeResizable, useBottomRightCornerResizer); - if (getPeer() != 0) - getPeer()->setConstrainer (newConstrainer); + ComponentPeer* const peer = getPeer(); + if (peer != 0) + peer->setConstrainer (newConstrainer); + } } void ResizableWindow::setBoundsConstrained (int x, int y, int w, int h) @@ -326,8 +329,9 @@ void ResizableWindow::lookAndFeelChanged() { Component::addToDesktop (getDesktopWindowStyleFlags()); - if (getPeer() != 0) - getPeer()->setConstrainer (constrainer); + ComponentPeer* const peer = getPeer(); + if (peer != 0) + peer->setConstrainer (constrainer); } } @@ -394,21 +398,21 @@ void ResizableWindow::setFullScreen (const bool shouldBeFullScreen) bool ResizableWindow::isMinimised() const { - ComponentPeer* const nw = getPeer(); + ComponentPeer* const peer = getPeer(); - return (nw != 0) && nw->isMinimised(); + return (peer != 0) && peer->isMinimised(); } void ResizableWindow::setMinimised (const bool shouldMinimise) { if (shouldMinimise != isMinimised()) { - ComponentPeer* const nw = getPeer(); + ComponentPeer* const peer = getPeer(); - if (nw != 0) + if (peer != 0) { updateLastPos(); - nw->setMinimised (shouldMinimise); + peer->setMinimised (shouldMinimise); } else { @@ -441,7 +445,7 @@ const String ResizableWindow::getWindowStateAsString() String s; if (isFullScreen()) - s << T("fs "); + s << "fs "; s << lastNonFullScreenPos.getX() << T(' ') << lastNonFullScreenPos.getY() << T(' ') @@ -464,10 +468,10 @@ bool ResizableWindow::restoreWindowStateFromString (const String& s) if (tokens.size() != 4 + n) return false; - Rectangle r (tokens[n].getIntValue(), - tokens[n + 1].getIntValue(), - tokens[n + 2].getIntValue(), - tokens[n + 3].getIntValue()); + const Rectangle r (tokens[n].getIntValue(), + tokens[n + 1].getIntValue(), + tokens[n + 2].getIntValue(), + tokens[n + 3].getIntValue()); if (r.isEmpty()) return false; diff --git a/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp b/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp index 75fcadbcfe..ebe83fa812 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp +++ b/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp @@ -51,10 +51,10 @@ static const Graphics::ResamplingQuality defaultQuality = Graphics::mediumResamp && (int) x <= MAXIMUM_COORD \ && (int) y >= MINIMUM_COORD \ && (int) y <= MAXIMUM_COORD \ - && (int) w >= 0 \ - && (int) w < MAXIMUM_COORD \ - && (int) h >= 0 \ - && (int) h < MAXIMUM_COORD); + && (int) w >= MINIMUM_COORD \ + && (int) w <= MAXIMUM_COORD \ + && (int) h >= MINIMUM_COORD \ + && (int) h <= MAXIMUM_COORD); //============================================================================== diff --git a/src/juce_core/basics/juce_SystemStats.h b/src/juce_core/basics/juce_SystemStats.h index 6fa6dcf227..6291c11f75 100644 --- a/src/juce_core/basics/juce_SystemStats.h +++ b/src/juce_core/basics/juce_SystemStats.h @@ -115,31 +115,9 @@ public: /** Checks whether AMD 3DNOW instructions are available. */ static bool has3DNow() throw(); - /** True if the chip has hyperthreading. - - Probably only uber-geeks will care less about this. - */ - static bool hasHyperThreading() throw(); - - /** Checks whether there are multiple processors in the box. - - @see getNumLogicalCpus - */ - static int getNumPhysicalCpus() throw(); - - /** Counts the number of logical processors. - - May give a different result to getNumPhysicalCpus()... - */ - static int getNumLogicalCpus() throw(); - - /** Returns a bitmask for the physical processors. - - This mask shows which of the logical processors are actually physical. - - @see Thread::setAffinityMask + /** Returns the number of CPUs. */ - static uint32 getPhysicalAffinityMask() throw(); + static int getNumCpus() throw(); /** Returns a clock-cycle tick counter, if available. diff --git a/src/juce_core/basics/juce_Time.cpp b/src/juce_core/basics/juce_Time.cpp index 835222479a..2977b3feb2 100644 --- a/src/juce_core/basics/juce_Time.cpp +++ b/src/juce_core/basics/juce_Time.cpp @@ -241,7 +241,7 @@ int64 Time::secondsToHighResolutionTicks (const double seconds) throw() //============================================================================== -const Time Time::getCurrentTime() throw() +const Time JUCE_CALLTYPE Time::getCurrentTime() throw() { return Time (currentTimeMillis()); } diff --git a/src/juce_core/basics/juce_Time.h b/src/juce_core/basics/juce_Time.h index 663d19b34c..def44a21b1 100644 --- a/src/juce_core/basics/juce_Time.h +++ b/src/juce_core/basics/juce_Time.h @@ -103,7 +103,7 @@ public: @see currentTimeMillis */ - static const Time getCurrentTime() throw(); + static const Time JUCE_CALLTYPE getCurrentTime() throw(); /** Returns the time as a number of milliseconds. diff --git a/src/juce_core/io/files/juce_File.h b/src/juce_core/io/files/juce_File.h index 299d4e1d0d..8168e44f18 100644 --- a/src/juce_core/io/files/juce_File.h +++ b/src/juce_core/io/files/juce_File.h @@ -767,7 +767,7 @@ public: @see SpecialLocationType */ - static const File getSpecialLocation (const SpecialLocationType type); + static const File JUCE_CALLTYPE getSpecialLocation (const SpecialLocationType type); //============================================================================== /** Returns a temporary file in the system's temp directory. diff --git a/src/juce_core/text/juce_String.cpp b/src/juce_core/text/juce_String.cpp index 657efc82db..ab60e0683a 100644 --- a/src/juce_core/text/juce_String.cpp +++ b/src/juce_core/text/juce_String.cpp @@ -769,13 +769,17 @@ const String String::operator+ (const tchar characterToAppend) const throw() const String JUCE_PUBLIC_FUNCTION operator+ (const char* const string1, const String& string2) throw() { - return String (string1) + string2; + String s (string1); + s += string2; + return s; } const String JUCE_PUBLIC_FUNCTION operator+ (const juce_wchar* const string1, const String& string2) throw() { - return String (string1) + string2; + String s (string1); + s += string2; + return s; } //============================================================================== diff --git a/src/juce_core/threads/juce_Thread.h b/src/juce_core/threads/juce_Thread.h index eb9a5ab1bc..0b4e5d2139 100644 --- a/src/juce_core/threads/juce_Thread.h +++ b/src/juce_core/threads/juce_Thread.h @@ -192,10 +192,10 @@ public: //============================================================================== // this can be called from any thread that needs to pause.. - static void sleep (int milliseconds) throw(); + static void JUCE_CALLTYPE sleep (int milliseconds) throw(); /** Yields the calling thread's current time-slot. */ - static void yield() throw(); + static void JUCE_CALLTYPE yield() throw(); //============================================================================== /** Makes the thread wait for a notification.