| @@ -25,7 +25,7 @@ elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQU | |||
| -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare | |||
| -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion | |||
| -Wsign-conversion -Wbool-conversion -Wextra-semi -Wunreachable-code | |||
| -Wcast-align -Wshift-sign-overflow | |||
| -Wcast-align -Wshift-sign-overflow -Wmissing-prototypes | |||
| -Wnullable-to-nonnull-conversion -Wno-ignored-qualifiers -Wswitch-enum | |||
| -Wpedantic -Wdeprecated | |||
| $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>: | |||
| @@ -856,7 +856,8 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value | |||
| "-Wshorten-64-to-32", "-Wconversion", "-Wint-conversion", | |||
| "-Wconditional-uninitialized", "-Wconstant-conversion", "-Wbool-conversion", | |||
| "-Wextra-semi", "-Wshift-sign-overflow", | |||
| "-Wshadow-all", "-Wnullable-to-nonnull-conversion" | |||
| "-Wshadow-all", "-Wnullable-to-nonnull-conversion", | |||
| "-Wmissing-prototypes" | |||
| }); | |||
| llvmFlags.cpp.addArray ({ | |||
| "-Wunused-private-field", "-Winconsistent-missing-destructor-override" | |||
| @@ -25,7 +25,7 @@ namespace juce | |||
| namespace SampleRateHelpers | |||
| { | |||
| const auto& getAllSampleRates() | |||
| static inline const std::vector<double>& getAllSampleRates() | |||
| { | |||
| static auto sampleRates = [] | |||
| { | |||
| @@ -1416,6 +1416,7 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr); | |||
| pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr) | |||
| { | |||
| auto thread = std::make_unique<OboeRealtimeThread>(); | |||
| @@ -1273,6 +1273,7 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr); | |||
| pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr) | |||
| { | |||
| auto thread = std::make_unique<SLRealtimeThread>(); | |||
| @@ -1287,12 +1287,12 @@ private: | |||
| } | |||
| //============================================================================== | |||
| AudioIODeviceType* createAudioIODeviceType_ALSA_Soundcards() | |||
| static inline AudioIODeviceType* createAudioIODeviceType_ALSA_Soundcards() | |||
| { | |||
| return new ALSAAudioIODeviceType (true, "ALSA HW"); | |||
| } | |||
| AudioIODeviceType* createAudioIODeviceType_ALSA_PCMDevices() | |||
| static inline AudioIODeviceType* createAudioIODeviceType_ALSA_PCMDevices() | |||
| { | |||
| return new ALSAAudioIODeviceType (false, "ALSA"); | |||
| } | |||
| @@ -130,7 +130,7 @@ namespace juce | |||
| //============================================================================== | |||
| namespace DSoundLogging | |||
| { | |||
| String getErrorMessage (HRESULT hr) | |||
| static String getErrorMessage (HRESULT hr) | |||
| { | |||
| const char* result = nullptr; | |||
| @@ -33,7 +33,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token") | |||
| namespace WasapiClasses | |||
| { | |||
| void logFailure (HRESULT hr) | |||
| static void logFailure (HRESULT hr) | |||
| { | |||
| ignoreUnused (hr); | |||
| jassert (hr != (HRESULT) 0x800401f0); // If you hit this, it means you're trying to call from | |||
| @@ -89,7 +89,7 @@ void logFailure (HRESULT hr) | |||
| #undef check | |||
| bool check (HRESULT hr) | |||
| static bool check (HRESULT hr) | |||
| { | |||
| logFailure (hr); | |||
| return SUCCEEDED (hr); | |||
| @@ -361,7 +361,7 @@ namespace juce | |||
| namespace WasapiClasses | |||
| { | |||
| String getDeviceID (IMMDevice* device) | |||
| static String getDeviceID (IMMDevice* device) | |||
| { | |||
| String s; | |||
| WCHAR* deviceId = nullptr; | |||
| @@ -2046,9 +2046,13 @@ private: | |||
| //============================================================================== | |||
| #if JUCE_IOS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| bool JUCE_CALLTYPE juce_isInterAppAudioConnected() { return false; } | |||
| void JUCE_CALLTYPE juce_switchToHostApplication() {} | |||
| Image JUCE_CALLTYPE juce_getIAAHostIcon (int) { return {}; } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| @@ -60,7 +60,10 @@ | |||
| #else | |||
| #if _MSC_VER | |||
| short __stdcall NewPlugIn (void*); | |||
| short __stdcall NewPlugIn (void*) { return 0; } | |||
| short __stdcall _PI_GetRoutineDescriptor (long, void*); | |||
| short __stdcall _PI_GetRoutineDescriptor (long, void*) { return 0; } | |||
| #endif | |||
| @@ -132,6 +132,8 @@ protected: | |||
| #if JucePlugin_Build_Standalone && JUCE_IOS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| using namespace juce; | |||
| bool JUCE_CALLTYPE juce_isInterAppAudioConnected() | |||
| @@ -155,6 +157,9 @@ Image JUCE_CALLTYPE juce_getIAAHostIcon (int size) | |||
| return Image(); | |||
| } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| #endif | |||
| @@ -279,7 +279,7 @@ private: | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UnityPeer) | |||
| }; | |||
| ComponentPeer* createUnityPeer (Component& c) { return new UnityPeer (c); } | |||
| static ComponentPeer* createUnityPeer (Component& c) { return new UnityPeer (c); } | |||
| //============================================================================== | |||
| class AudioProcessorUnityWrapper | |||
| @@ -486,7 +486,7 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| HashMap<int, AudioProcessorUnityWrapper*>& getWrapperMap() | |||
| static HashMap<int, AudioProcessorUnityWrapper*>& getWrapperMap() | |||
| { | |||
| static HashMap<int, AudioProcessorUnityWrapper*> wrapperMap; | |||
| return wrapperMap; | |||
| @@ -505,7 +505,7 @@ static void onWrapperDeletion (AudioProcessorUnityWrapper* wrapperToRemove) | |||
| //============================================================================== | |||
| namespace UnityCallbacks | |||
| { | |||
| int UNITY_INTERFACE_API createCallback (UnityAudioEffectState* state) | |||
| static int UNITY_INTERFACE_API createCallback (UnityAudioEffectState* state) | |||
| { | |||
| auto* pluginInstance = new AudioProcessorUnityWrapper (false); | |||
| pluginInstance->create (state); | |||
| @@ -517,7 +517,7 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API releaseCallback (UnityAudioEffectState* state) | |||
| static int UNITY_INTERFACE_API releaseCallback (UnityAudioEffectState* state) | |||
| { | |||
| auto* pluginInstance = state->getEffectData<AudioProcessorUnityWrapper>(); | |||
| pluginInstance->release(); | |||
| @@ -531,7 +531,7 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API resetCallback (UnityAudioEffectState* state) | |||
| static int UNITY_INTERFACE_API resetCallback (UnityAudioEffectState* state) | |||
| { | |||
| auto* pluginInstance = state->getEffectData<AudioProcessorUnityWrapper>(); | |||
| pluginInstance->reset(); | |||
| @@ -539,14 +539,14 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API setPositionCallback (UnityAudioEffectState* state, unsigned int pos) | |||
| static int UNITY_INTERFACE_API setPositionCallback (UnityAudioEffectState* state, unsigned int pos) | |||
| { | |||
| ignoreUnused (state, pos); | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API setFloatParameterCallback (UnityAudioEffectState* state, int index, float value) | |||
| static int UNITY_INTERFACE_API setFloatParameterCallback (UnityAudioEffectState* state, int index, float value) | |||
| { | |||
| auto* pluginInstance = state->getEffectData<AudioProcessorUnityWrapper>(); | |||
| pluginInstance->setParameter (index, value); | |||
| @@ -554,7 +554,7 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API getFloatParameterCallback (UnityAudioEffectState* state, int index, float* value, char* valueStr) | |||
| static int UNITY_INTERFACE_API getFloatParameterCallback (UnityAudioEffectState* state, int index, float* value, char* valueStr) | |||
| { | |||
| auto* pluginInstance = state->getEffectData<AudioProcessorUnityWrapper>(); | |||
| *value = pluginInstance->getParameter (index); | |||
| @@ -564,7 +564,7 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API getFloatBufferCallback (UnityAudioEffectState* state, const char* name, float* buffer, int numSamples) | |||
| static int UNITY_INTERFACE_API getFloatBufferCallback (UnityAudioEffectState* state, const char* name, float* buffer, int numSamples) | |||
| { | |||
| ignoreUnused (numSamples); | |||
| @@ -608,8 +608,8 @@ namespace UnityCallbacks | |||
| return 0; | |||
| } | |||
| int UNITY_INTERFACE_API processCallback (UnityAudioEffectState* state, float* inBuffer, float* outBuffer, | |||
| unsigned int bufferSize, int numInChannels, int numOutChannels) | |||
| static int UNITY_INTERFACE_API processCallback (UnityAudioEffectState* state, float* inBuffer, float* outBuffer, | |||
| unsigned int bufferSize, int numInChannels, int numOutChannels) | |||
| { | |||
| auto* pluginInstance = state->getEffectData<AudioProcessorUnityWrapper>(); | |||
| @@ -769,6 +769,8 @@ UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unitySetScreenBounds (int id, fl | |||
| //============================================================================== | |||
| #if JUCE_WINDOWS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| extern "C" BOOL WINAPI DllMain (HINSTANCE instance, DWORD reason, LPVOID) | |||
| { | |||
| if (reason == DLL_PROCESS_ATTACH) | |||
| @@ -776,6 +778,8 @@ UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unitySetScreenBounds (int id, fl | |||
| return true; | |||
| } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| #endif | |||
| @@ -2146,6 +2146,8 @@ namespace | |||
| #define JUCE_EXPORTED_FUNCTION extern "C" __attribute__ ((visibility("default"))) | |||
| #endif | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| //============================================================================== | |||
| // Mac startup code.. | |||
| #if JUCE_MAC | |||
| @@ -2221,6 +2223,8 @@ namespace | |||
| } | |||
| #endif | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| JUCE_END_IGNORE_WARNINGS_MSVC | |||
| #endif | |||
| @@ -285,9 +285,9 @@ static QueryInterfaceResult queryAdditionalInterfaces (AudioProcessor* processor | |||
| return {}; | |||
| } | |||
| tresult extractResult (const QueryInterfaceResult& userInterface, | |||
| const InterfaceResultWithDeferredAddRef& juceInterface, | |||
| void** obj) | |||
| static tresult extractResult (const QueryInterfaceResult& userInterface, | |||
| const InterfaceResultWithDeferredAddRef& juceInterface, | |||
| void** obj) | |||
| { | |||
| if (userInterface.isOk() && juceInterface.isOk()) | |||
| { | |||
| @@ -3481,8 +3481,12 @@ bool shutdownModule() | |||
| #endif | |||
| #if JUCE_WINDOWS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| extern "C" __declspec (dllexport) bool InitDll() { return initModule(); } | |||
| extern "C" __declspec (dllexport) bool ExitDll() { return shutdownModule(); } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #elif JUCE_LINUX || JUCE_BSD | |||
| void* moduleHandle = nullptr; | |||
| int moduleEntryCounter = 0; | |||
| @@ -3859,7 +3863,11 @@ extern "C" SMTG_EXPORT_SYMBOL IPluginFactory* PLUGIN_API GetPluginFactory() | |||
| //============================================================================== | |||
| #if JUCE_WINDOWS | |||
| JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") | |||
| extern "C" BOOL WINAPI DllMain (HINSTANCE instance, DWORD reason, LPVOID) { if (reason == DLL_PROCESS_ATTACH) Process::setCurrentModuleInstanceHandle (instance); return true; } | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| #endif | |||
| JUCE_END_NO_SANITIZE | |||
| @@ -18,11 +18,6 @@ | |||
| #pragma once | |||
| /** Somewhere in the codebase of your plugin, you need to implement this function | |||
| and make it return a new instance of the filter subclass that you're building. | |||
| */ | |||
| juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | |||
| namespace juce | |||
| { | |||
| @@ -28,6 +28,7 @@ namespace juce | |||
| { | |||
| #if JucePlugin_Build_Unity | |||
| bool juce_isRunningInUnity(); | |||
| bool juce_isRunningInUnity() { return PluginHostType::getPluginLoadedAs() == AudioProcessor::wrapperType_Unity; } | |||
| #endif | |||
| @@ -124,6 +125,7 @@ namespace juce | |||
| #endif | |||
| #if JucePlugin_Build_VST | |||
| bool JUCE_API handleManufacturerSpecificVST2Opcode (int32 index, pointer_sized_int value, void* ptr, float); | |||
| bool JUCE_API handleManufacturerSpecificVST2Opcode (int32 index, pointer_sized_int value, void* ptr, float) | |||
| { | |||
| #if VST3_REPLACEMENT_AVAILABLE | |||
| @@ -137,7 +137,7 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| std::array<uint32, 4> getNormalisedTUID (const TUID& tuid) noexcept | |||
| static std::array<uint32, 4> getNormalisedTUID (const TUID& tuid) noexcept | |||
| { | |||
| const FUID fuid { tuid }; | |||
| return { { fuid.getLong1(), fuid.getLong2(), fuid.getLong3(), fuid.getLong4() } }; | |||
| @@ -142,3 +142,8 @@ | |||
| #include "utilities/juce_ParameterAttachments.h" | |||
| #include "utilities/juce_AudioProcessorValueTreeState.h" | |||
| #include "utilities/juce_PluginHostType.h" | |||
| // This is here to avoid missing-prototype warnings in user code. | |||
| // If you're implementing a plugin, you should supply a body for | |||
| // this function in your own code. | |||
| juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | |||
| @@ -479,7 +479,7 @@ struct AndroidContentUriOutputStream : public OutputStream | |||
| int64 pos = 0; | |||
| }; | |||
| OutputStream* juce_CreateContentURIOutputStream (const URL& url) | |||
| static OutputStream* juce_CreateContentURIOutputStream (const URL& url) | |||
| { | |||
| auto stream = AndroidContentUriResolver::getStreamForContentUri (url, false); | |||
| @@ -246,6 +246,7 @@ static LocalRef<jobject> getMulticastLock() | |||
| return multicastLock; | |||
| } | |||
| JUCE_API void JUCE_CALLTYPE acquireMulticastLock(); | |||
| JUCE_API void JUCE_CALLTYPE acquireMulticastLock() | |||
| { | |||
| auto multicastLock = getMulticastLock(); | |||
| @@ -254,6 +255,7 @@ JUCE_API void JUCE_CALLTYPE acquireMulticastLock() | |||
| getEnv()->CallVoidMethod (multicastLock.get(), AndroidMulticastLock.acquire); | |||
| } | |||
| JUCE_API void JUCE_CALLTYPE releaseMulticastLock(); | |||
| JUCE_API void JUCE_CALLTYPE releaseMulticastLock() | |||
| { | |||
| auto multicastLock = getMulticastLock(); | |||
| @@ -56,7 +56,7 @@ JNIEnv* getEnv() noexcept | |||
| return nullptr; | |||
| } | |||
| void JNICALL juce_JavainitialiseJUCE (JNIEnv* env, jobject /*jclass*/, jobject context) | |||
| static void JNICALL juce_JavainitialiseJUCE (JNIEnv* env, jobject /*jclass*/, jobject context) | |||
| { | |||
| Thread::initialiseJUCE (env, context); | |||
| } | |||
| @@ -64,12 +64,12 @@ namespace WindowsFileHelpers | |||
| #endif | |||
| //============================================================================== | |||
| DWORD getAtts (const String& path) noexcept | |||
| static DWORD getAtts (const String& path) noexcept | |||
| { | |||
| return GetFileAttributes (path.toWideCharPointer()); | |||
| } | |||
| bool changeAtts (const String& path, DWORD bitsToSet, DWORD bitsToClear) noexcept | |||
| static bool changeAtts (const String& path, DWORD bitsToSet, DWORD bitsToClear) noexcept | |||
| { | |||
| auto oldAtts = getAtts (path); | |||
| @@ -82,7 +82,7 @@ namespace WindowsFileHelpers | |||
| || SetFileAttributes (path.toWideCharPointer(), newAtts) != FALSE; | |||
| } | |||
| int64 fileTimeToTime (const FILETIME* const ft) noexcept | |||
| static int64 fileTimeToTime (const FILETIME* const ft) noexcept | |||
| { | |||
| static_assert (sizeof (ULARGE_INTEGER) == sizeof (FILETIME), | |||
| "ULARGE_INTEGER is too small to hold FILETIME: please report!"); | |||
| @@ -90,7 +90,7 @@ namespace WindowsFileHelpers | |||
| return (int64) ((reinterpret_cast<const ULARGE_INTEGER*> (ft)->QuadPart - 116444736000000000LL) / 10000); | |||
| } | |||
| FILETIME* timeToFileTime (const int64 time, FILETIME* const ft) noexcept | |||
| static FILETIME* timeToFileTime (const int64 time, FILETIME* const ft) noexcept | |||
| { | |||
| if (time <= 0) | |||
| return nullptr; | |||
| @@ -99,7 +99,7 @@ namespace WindowsFileHelpers | |||
| return ft; | |||
| } | |||
| String getDriveFromPath (String path) | |||
| static String getDriveFromPath (String path) | |||
| { | |||
| if (path.isNotEmpty() && path[1] == ':' && path[2] == 0) | |||
| path << '\\'; | |||
| @@ -115,7 +115,7 @@ namespace WindowsFileHelpers | |||
| return path; | |||
| } | |||
| int64 getDiskSpaceInfo (const String& path, const bool total) | |||
| static int64 getDiskSpaceInfo (const String& path, const bool total) | |||
| { | |||
| ULARGE_INTEGER spc, tot, totFree; | |||
| @@ -126,12 +126,12 @@ namespace WindowsFileHelpers | |||
| return 0; | |||
| } | |||
| unsigned int getWindowsDriveType (const String& path) | |||
| static unsigned int getWindowsDriveType (const String& path) | |||
| { | |||
| return GetDriveType (getDriveFromPath (path).toWideCharPointer()); | |||
| } | |||
| File getSpecialFolderPath (int type) | |||
| static File getSpecialFolderPath (int type) | |||
| { | |||
| WCHAR path[MAX_PATH + 256]; | |||
| @@ -141,7 +141,7 @@ namespace WindowsFileHelpers | |||
| return {}; | |||
| } | |||
| File getModuleFileName (HINSTANCE moduleHandle) | |||
| static File getModuleFileName (HINSTANCE moduleHandle) | |||
| { | |||
| WCHAR dest[MAX_PATH + 256]; | |||
| dest[0] = 0; | |||
| @@ -149,7 +149,7 @@ namespace WindowsFileHelpers | |||
| return File (String (dest)); | |||
| } | |||
| Result getResultForLastError() | |||
| static Result getResultForLastError() | |||
| { | |||
| TCHAR messageBuffer[256] = {}; | |||
| @@ -159,7 +159,7 @@ namespace WindowsFileHelpers | |||
| return Result::fail (String (messageBuffer)); | |||
| } | |||
| } | |||
| } // namespace WindowsFileHelpers | |||
| //============================================================================== | |||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||
| @@ -214,6 +214,7 @@ static DebugFlagsInitialiser debugFlagsInitialiser; | |||
| return 0; | |||
| } | |||
| #else | |||
| RTL_OSVERSIONINFOW getWindowsVersionInfo(); | |||
| RTL_OSVERSIONINFOW getWindowsVersionInfo() | |||
| { | |||
| RTL_OSVERSIONINFOW versionInfo = {}; | |||
| @@ -197,6 +197,7 @@ static int lastProcessPriority = -1; | |||
| // called when the app gains focus because Windows does weird things to process priority | |||
| // when you swap apps, and this forces an update when the app is brought to the front. | |||
| void juce_repeatLastProcessPriority(); | |||
| void juce_repeatLastProcessPriority() | |||
| { | |||
| if (lastProcessPriority >= 0) // (avoid changing this if it's not been explicitly set by the app..) | |||
| @@ -265,6 +266,7 @@ void JUCE_CALLTYPE Process::terminate() | |||
| ExitProcess (1); | |||
| } | |||
| bool juce_isRunningInWine(); | |||
| bool juce_isRunningInWine() | |||
| { | |||
| HMODULE ntdll = GetModuleHandleA ("ntdll"); | |||
| @@ -790,10 +790,6 @@ std::unique_ptr<InputStream> URL::createInputStream (const InputStreamOptions& o | |||
| JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
| } | |||
| #if JUCE_ANDROID | |||
| OutputStream* juce_CreateContentURIOutputStream (const URL&); | |||
| #endif | |||
| std::unique_ptr<OutputStream> URL::createOutputStream() const | |||
| { | |||
| if (isLocalFile()) | |||
| @@ -288,6 +288,7 @@ private: | |||
| //============================================================================== | |||
| File juce_getExecutableFile(); | |||
| void juce_juceEventsAndroidStartApp(); | |||
| void juce_juceEventsAndroidStartApp() | |||
| { | |||
| auto dllPath = juce_getExecutableFile().getFullPathName(); | |||
| @@ -236,13 +236,13 @@ namespace LinuxErrorHandling | |||
| { | |||
| static bool keyboardBreakOccurred = false; | |||
| void keyboardBreakSignalHandler (int sig) | |||
| static void keyboardBreakSignalHandler (int sig) | |||
| { | |||
| if (sig == SIGINT) | |||
| keyboardBreakOccurred = true; | |||
| } | |||
| void installKeyboardBreakHandler() | |||
| static void installKeyboardBreakHandler() | |||
| { | |||
| struct sigaction saction; | |||
| sigset_t maskSet; | |||
| @@ -324,6 +324,7 @@ void LinuxEventLoop::unregisterFdCallback (int fd) | |||
| } // namespace juce | |||
| JUCE_API std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks(); | |||
| JUCE_API std::vector<std::pair<int, std::function<void (int)>>> getFdReadCallbacks() | |||
| { | |||
| using namespace juce; | |||
| @@ -21,7 +21,7 @@ namespace juce | |||
| namespace GraphicsHelpers | |||
| { | |||
| LocalRef<jobject> createPaint (Graphics::ResamplingQuality quality) | |||
| static LocalRef<jobject> createPaint (Graphics::ResamplingQuality quality) | |||
| { | |||
| jint constructorFlags = 1 /*ANTI_ALIAS_FLAG*/ | |||
| | 4 /*DITHER_FLAG*/ | |||
| @@ -33,7 +33,7 @@ namespace GraphicsHelpers | |||
| return LocalRef<jobject>(getEnv()->NewObject (AndroidPaint, AndroidPaint.constructor, constructorFlags)); | |||
| } | |||
| const LocalRef<jobject> createMatrix (JNIEnv* env, const AffineTransform& t) | |||
| static LocalRef<jobject> createMatrix (JNIEnv* env, const AffineTransform& t) | |||
| { | |||
| auto m = LocalRef<jobject>(env->NewObject (AndroidMatrix, AndroidMatrix.constructor)); | |||
| @@ -49,7 +49,7 @@ namespace GraphicsHelpers | |||
| return m; | |||
| } | |||
| } | |||
| } // namespace GraphicsHelpers | |||
| ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const | |||
| { | |||
| @@ -18,5 +18,6 @@ | |||
| namespace juce | |||
| { | |||
| Image JUCE_API getIconFromApplication (const String&, int); | |||
| Image JUCE_API getIconFromApplication (const String&, int) { return {}; } | |||
| } | |||
| @@ -18,5 +18,6 @@ | |||
| namespace juce | |||
| { | |||
| Image JUCE_API getIconFromApplication (const String&, int); | |||
| Image JUCE_API getIconFromApplication (const String&, int) { return {}; } | |||
| } | |||
| @@ -222,7 +222,7 @@ namespace DirectWriteTypeLayout | |||
| return dwFontMetrics.designUnitsPerEm / totalHeight; | |||
| } | |||
| void setTextFormatProperties (const AttributedString& text, IDWriteTextFormat& format) | |||
| static void setTextFormatProperties (const AttributedString& text, IDWriteTextFormat& format) | |||
| { | |||
| DWRITE_TEXT_ALIGNMENT alignment = DWRITE_TEXT_ALIGNMENT_LEADING; | |||
| DWRITE_WORD_WRAPPING wrapType = DWRITE_WORD_WRAPPING_WRAP; | |||
| @@ -264,13 +264,13 @@ namespace DirectWriteTypeLayout | |||
| format.SetWordWrapping (wrapType); | |||
| } | |||
| void addAttributedRange (const AttributedString::Attribute& attr, | |||
| IDWriteTextLayout& textLayout, | |||
| CharPointer_UTF16 begin, | |||
| CharPointer_UTF16 textPointer, | |||
| const UINT32 textLen, | |||
| ID2D1RenderTarget& renderTarget, | |||
| IDWriteFontCollection& fontCollection) | |||
| static void addAttributedRange (const AttributedString::Attribute& attr, | |||
| IDWriteTextLayout& textLayout, | |||
| CharPointer_UTF16 begin, | |||
| CharPointer_UTF16 textPointer, | |||
| const UINT32 textLen, | |||
| ID2D1RenderTarget& renderTarget, | |||
| IDWriteFontCollection& fontCollection) | |||
| { | |||
| DWRITE_TEXT_RANGE range; | |||
| range.startPosition = (UINT32) (textPointer.getAddress() - begin.getAddress()); | |||
| @@ -330,9 +330,13 @@ namespace DirectWriteTypeLayout | |||
| } | |||
| } | |||
| bool setupLayout (const AttributedString& text, float maxWidth, float maxHeight, | |||
| ID2D1RenderTarget& renderTarget, IDWriteFactory& directWriteFactory, | |||
| IDWriteFontCollection& fontCollection, ComSmartPtr<IDWriteTextLayout>& textLayout) | |||
| static bool setupLayout (const AttributedString& text, | |||
| float maxWidth, | |||
| float maxHeight, | |||
| ID2D1RenderTarget& renderTarget, | |||
| IDWriteFactory& directWriteFactory, | |||
| IDWriteFontCollection& fontCollection, | |||
| ComSmartPtr<IDWriteTextLayout>& textLayout) | |||
| { | |||
| // To add color to text, we need to create a D2D render target | |||
| // Since we are not actually rendering to a D2D context we create a temporary GDI render target | |||
| @@ -396,10 +400,11 @@ namespace DirectWriteTypeLayout | |||
| return true; | |||
| } | |||
| void createLayout (TextLayout& layout, const AttributedString& text, | |||
| IDWriteFactory& directWriteFactory, | |||
| IDWriteFontCollection& fontCollection, | |||
| ID2D1DCRenderTarget& renderTarget) | |||
| static void createLayout (TextLayout& layout, | |||
| const AttributedString& text, | |||
| IDWriteFactory& directWriteFactory, | |||
| IDWriteFontCollection& fontCollection, | |||
| ID2D1DCRenderTarget& renderTarget) | |||
| { | |||
| ComSmartPtr<IDWriteTextLayout> dwTextLayout; | |||
| @@ -435,8 +440,11 @@ namespace DirectWriteTypeLayout | |||
| } | |||
| } | |||
| void drawToD2DContext (const AttributedString& text, const Rectangle<float>& area, ID2D1RenderTarget& renderTarget, | |||
| IDWriteFactory& directWriteFactory, IDWriteFontCollection& fontCollection) | |||
| static inline void drawToD2DContext (const AttributedString& text, | |||
| const Rectangle<float>& area, | |||
| ID2D1RenderTarget& renderTarget, | |||
| IDWriteFactory& directWriteFactory, | |||
| IDWriteFontCollection& fontCollection) | |||
| { | |||
| ComSmartPtr<IDWriteTextLayout> dwTextLayout; | |||
| @@ -18,5 +18,6 @@ | |||
| namespace juce | |||
| { | |||
| Image JUCE_API getIconFromApplication (const String&, int); | |||
| Image JUCE_API getIconFromApplication (const String&, int) { return {}; } | |||
| } | |||
| @@ -277,12 +277,12 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
| //============================================================================== | |||
| namespace WindowsAccessibility | |||
| { | |||
| long getUiaRootObjectId() | |||
| static long getUiaRootObjectId() | |||
| { | |||
| return static_cast<long> (UiaRootObjectId); | |||
| } | |||
| bool handleWmGetObject (AccessibilityHandler* handler, WPARAM wParam, LPARAM lParam, LRESULT* res) | |||
| static bool handleWmGetObject (AccessibilityHandler* handler, WPARAM wParam, LPARAM lParam, LRESULT* res) | |||
| { | |||
| if (isStartingUpOrShuttingDown() || (handler == nullptr || ! isHandlerValid (*handler))) | |||
| return false; | |||
| @@ -301,7 +301,7 @@ namespace WindowsAccessibility | |||
| return false; | |||
| } | |||
| void revokeUIAMapEntriesForWindow (HWND hwnd) | |||
| static void revokeUIAMapEntriesForWindow (HWND hwnd) | |||
| { | |||
| if (auto* uiaWrapper = WindowsUIAWrapper::getInstanceWithoutCreating()) | |||
| uiaWrapper->returnRawElementProvider (hwnd, 0, 0, nullptr); | |||
| @@ -892,12 +892,14 @@ Image juce_createIconForFile (const File&) | |||
| return {}; | |||
| } | |||
| void juce_LinuxAddRepaintListener (ComponentPeer* peer, Component* dummy); | |||
| void juce_LinuxAddRepaintListener (ComponentPeer* peer, Component* dummy) | |||
| { | |||
| if (auto* linuxPeer = dynamic_cast<LinuxComponentPeer*> (peer)) | |||
| linuxPeer->addOpenGLRepaintListener (dummy); | |||
| } | |||
| void juce_LinuxRemoveRepaintListener (ComponentPeer* peer, Component* dummy); | |||
| void juce_LinuxRemoveRepaintListener (ComponentPeer* peer, Component* dummy) | |||
| { | |||
| if (auto* linuxPeer = dynamic_cast<LinuxComponentPeer*> (peer)) | |||
| @@ -205,7 +205,7 @@ namespace DragAndDropHelpers | |||
| }; | |||
| //============================================================================== | |||
| HDROP createHDrop (const StringArray& fileNames) | |||
| static HDROP createHDrop (const StringArray& fileNames) | |||
| { | |||
| size_t totalBytes = 0; | |||
| for (int i = fileNames.size(); --i >= 0;) | |||
| @@ -54,7 +54,7 @@ void* getUser32Function (const char*); | |||
| #if JUCE_DEBUG | |||
| int numActiveScopedDpiAwarenessDisablers = 0; | |||
| bool isInScopedDPIAwarenessDisabler() { return numActiveScopedDpiAwarenessDisablers > 0; } | |||
| static bool isInScopedDPIAwarenessDisabler() { return numActiveScopedDpiAwarenessDisablers > 0; } | |||
| extern HWND juce_messageWindowHandle; | |||
| #endif | |||
| @@ -642,6 +642,7 @@ static Point<int> convertLogicalScreenPointToPhysical (Point<int> p, HWND h) noe | |||
| return p; | |||
| } | |||
| JUCE_API double getScaleFactorForWindow (HWND h); | |||
| JUCE_API double getScaleFactorForWindow (HWND h) | |||
| { | |||
| // NB. Using a local function here because we need to call this method from the plug-in wrappers | |||
| @@ -823,6 +824,7 @@ Desktop::DisplayOrientation Desktop::getCurrentOrientation() const | |||
| return upright; | |||
| } | |||
| int64 getMouseEventTime(); | |||
| int64 getMouseEventTime() | |||
| { | |||
| static int64 eventTimeOffset = 0; | |||
| @@ -1095,7 +1097,7 @@ Image createSnapshotOfNativeWindow (void* nativeWindowHandle) | |||
| //============================================================================== | |||
| namespace IconConverters | |||
| { | |||
| Image createImageFromHICON (HICON icon) | |||
| static Image createImageFromHICON (HICON icon) | |||
| { | |||
| if (icon == nullptr) | |||
| return {}; | |||
| @@ -1203,6 +1205,7 @@ namespace IconConverters | |||
| return {}; | |||
| } | |||
| HICON createHICONFromImage (const Image& image, const BOOL isIcon, int hotspotX, int hotspotY); | |||
| HICON createHICONFromImage (const Image& image, const BOOL isIcon, int hotspotX, int hotspotY) | |||
| { | |||
| auto nativeBitmap = new WindowsBitmapImage (Image::ARGB, image.getWidth(), image.getHeight(), true); | |||
| @@ -1226,7 +1229,7 @@ namespace IconConverters | |||
| DeleteObject (mask); | |||
| return hi; | |||
| } | |||
| } | |||
| } // namespace IconConverters | |||
| //============================================================================== | |||
| JUCE_IUNKNOWNCLASS (ITipInvocation, "37c994e7-432b-4834-a2f7-dce1f13b834b") | |||
| @@ -4403,6 +4406,7 @@ ComponentPeer* Component::createNewPeer (int styleFlags, void* parentHWND) | |||
| return new HWNDComponentPeer (*this, styleFlags, (HWND) parentHWND, false); | |||
| } | |||
| JUCE_API ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component& component, void* parentHWND); | |||
| JUCE_API ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component& component, void* parentHWND) | |||
| { | |||
| return new HWNDComponentPeer (component, ComponentPeer::windowIgnoresMouseClicks, | |||
| @@ -4442,6 +4446,7 @@ bool KeyPress::isKeyCurrentlyDown (const int keyCode) | |||
| } | |||
| // (This internal function is used by the plugin client module) | |||
| bool offerKeyMessageToJUCEWindow (MSG& m); | |||
| bool offerKeyMessageToJUCEWindow (MSG& m) { return HWNDComponentPeer::offerKeyMessageToJUCEWindow (m); } | |||
| //============================================================================== | |||
| @@ -559,6 +559,7 @@ enum | |||
| { | |||
| static int trappedErrorCode = 0; | |||
| extern "C" int errorTrapHandler (Display*, XErrorEvent* err); | |||
| extern "C" int errorTrapHandler (Display*, XErrorEvent* err) | |||
| { | |||
| trappedErrorCode = err->error_code; | |||
| @@ -3213,11 +3214,13 @@ void XWindowSystem::destroyXDisplay() | |||
| } | |||
| //============================================================================== | |||
| ::Window juce_createKeyProxyWindow (ComponentPeer* peer); | |||
| ::Window juce_createKeyProxyWindow (ComponentPeer* peer) | |||
| { | |||
| return XWindowSystem::getInstance()->createKeyProxy ((::Window) peer->getNativeHandle()); | |||
| } | |||
| void juce_deleteKeyProxyWindow (::Window keyProxy); | |||
| void juce_deleteKeyProxyWindow (::Window keyProxy) | |||
| { | |||
| XWindowSystem::getInstance()->deleteKeyProxy (keyProxy); | |||
| @@ -478,6 +478,7 @@ intptr_t ActiveXControlComponent::offerEventToActiveXControlStatic (void* ptr) | |||
| return S_FALSE; | |||
| } | |||
| LRESULT juce_offerEventToActiveXControl (::MSG& msg); | |||
| LRESULT juce_offerEventToActiveXControl (::MSG& msg) | |||
| { | |||
| if (msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST) | |||