| @@ -78,10 +78,12 @@ BEGIN_JUCE_NAMESPACE | |||
| #undef Point | |||
| //============================================================================== | |||
| #define ObjCExtraSuffix 1 | |||
| #ifndef JUCE_ObjCExtraSuffix | |||
| #define JUCE_ObjCExtraSuffix 2 | |||
| #endif | |||
| #define appendMacro1(a, b, c, d) a ## _ ## b ## _ ## c ## _ ## d | |||
| #define appendMacro2(a, b, c, d) appendMacro1(a, b, c, d) | |||
| #define MakeObjCClassName(rootName) appendMacro2 (rootName, JUCE_MAJOR_VERSION, JUCE_MINOR_VERSION, ObjCExtraSuffix) | |||
| #define MakeObjCClassName(rootName) appendMacro2 (rootName, JUCE_MAJOR_VERSION, JUCE_MINOR_VERSION, JUCE_ObjCExtraSuffix) | |||
| //============================================================================== | |||
| #define JUCE_INCLUDED_FILE 1 | |||
| @@ -159,9 +159,9 @@ void PlatformUtilities::deleteRegistryKey (const String& regKeyPath) | |||
| } | |||
| } | |||
| void PlatformUtilities::registerFileAssociation (const String& fileExtension, | |||
| const String& symbolicDescription, | |||
| const String& fullDescription, | |||
| void PlatformUtilities::registerFileAssociation (const String& fileExtension, | |||
| const String& symbolicDescription, | |||
| const String& fullDescription, | |||
| const File& targetExecutable, | |||
| int iconResourceNumber) | |||
| { | |||
| @@ -175,7 +175,7 @@ void PlatformUtilities::registerFileAssociation (const String& fileExtension, | |||
| setRegistryValue (key + "\\", fullDescription); | |||
| setRegistryValue (key + "\\shell\\open\\command\\", | |||
| setRegistryValue (key + "\\shell\\open\\command\\", | |||
| targetExecutable.getFullPathName() + " %1"); | |||
| } | |||
| @@ -1,285 +1,285 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_PLUGIN_CHARACTERISTICS_H__ | |||
| #define __JUCE_PLUGIN_CHARACTERISTICS_H__ | |||
| //============================================================================== | |||
| /* All of the following settings need to be defined for your plugin. | |||
| Go through each of these definitions and check that it's correctly | |||
| set-up before trying to do a build. | |||
| */ | |||
| //============================================================================== | |||
| /* Plugin Formats to build */ | |||
| #define JucePlugin_Build_VST 1 | |||
| #define JucePlugin_Build_RTAS 0 | |||
| #define JucePlugin_Build_AU 1 | |||
| //============================================================================== | |||
| /* Generic settings */ | |||
| /** The name of your plugin. (Try to keep this as short as possible) | |||
| */ | |||
| #define JucePlugin_Name "Juce Demo Plugin" | |||
| /** A longer decription of your plugin. | |||
| */ | |||
| #define JucePlugin_Desc "A Demo Plugin demonstrating Juce" | |||
| /** The name of your company. (Try to keep this as short as possible) | |||
| */ | |||
| #define JucePlugin_Manufacturer "Raw Material Software" | |||
| /** A four-character code for your company. | |||
| Use single quotes - this isn't a string! | |||
| */ | |||
| #define JucePlugin_ManufacturerCode 'RawM' | |||
| /** A unique four-character code for your plugin. | |||
| Use single quotes - this isn't a string! | |||
| Note that for AU compatibility, this must contain at least one | |||
| upper-case letter. | |||
| */ | |||
| #define JucePlugin_PluginCode 'JcDm' | |||
| //============================================================================== | |||
| /** The maximum number of channels of audio input that the plugin can handle. | |||
| The actual number of channels supplied may be less than this, depending on the host. | |||
| For VSTs, you specify a maximum number of channels, for AUs and RTAS a set | |||
| of channel configurations is specified in JucePlugin_PreferredChannelConfigurations | |||
| and the host will choose one of these, but you should still set the max number of | |||
| channels correctly. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that will be used with the AudioProcessor::getNumInputChannels() | |||
| method. | |||
| */ | |||
| #define JucePlugin_MaxNumInputChannels 2 | |||
| /** The maximum number of channels of audio output that the plugin can handle. | |||
| The actual number of channels supplied may be less than this, depending on the host. | |||
| For VSTs, you specify a maximum number of channels, for AUs and RTAS a set | |||
| of channel configurations is specified in JucePlugin_PreferredChannelConfigurations | |||
| and the host will choose one of these, but you should still set the max number of | |||
| channels correctly. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that will be used with the AudioProcessor::getNumOutputChannels() | |||
| method. | |||
| */ | |||
| #define JucePlugin_MaxNumOutputChannels 2 | |||
| /** This allows the plugin to specify the configurations of input/output channels that | |||
| they can support. | |||
| AU and RTAS hosts will use this information, although VSTs only have a concept of | |||
| a maximum number of channels. | |||
| The list is a set of pairs of values in the form { numInputs, numOutputs }, and each | |||
| pair indicates a valid configuration that the plugin can handle. | |||
| So for example, {1, 1}, {2, 2} means that the plugin can be used in just two | |||
| configurations: either with 1 input and 1 output, or with 2 inputs and 2 outputs. If | |||
| you used this in Pro-Tools, the plugin could be placed on a mono or stereo track. | |||
| If the list was just {1, 1}, then Pro-Tools would only allow it to be used as a mono | |||
| plugin. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that the host has connected to the plugin by using the | |||
| AudioProcessor::getNumOutputChannels() and AudioFilterBase::getNumInputChannels() | |||
| methods. | |||
| */ | |||
| #define JucePlugin_PreferredChannelConfigurations { 1, 1 }, { 2, 2 } | |||
| //============================================================================== | |||
| /** Set this value to 1 if your plugin is a synth, or 0 if it isn't. | |||
| */ | |||
| #define JucePlugin_IsSynth 0 | |||
| /** Set this to 1 if your plugin needs to receive midi messages, or 0 if | |||
| it doesn't. | |||
| */ | |||
| #define JucePlugin_WantsMidiInput 1 | |||
| /** Set this to 1 if your plugin wants to output midi messages, or 0 if | |||
| it doesn't. | |||
| */ | |||
| #define JucePlugin_ProducesMidiOutput 1 | |||
| /** If this is 1, it means that when the plugins input buffers are | |||
| silent, it's output will be too. | |||
| Some hosts may use this to avoid calling the plugin when no audio | |||
| would be produced. | |||
| */ | |||
| #define JucePlugin_SilenceInProducesSilenceOut 0 | |||
| /** If set to 1, this hints that the host should ignore any keys that are pressed | |||
| when the plugin has keyboard focus. If 0, then the host should still execute | |||
| any shortcut keys that are pressed, even if the plugin does have focus. | |||
| Various hosts/platforms may deal with this differently, or ignore it. | |||
| */ | |||
| #define JucePlugin_EditorRequiresKeyboardFocus 1 | |||
| //============================================================================== | |||
| /** A version number | |||
| */ | |||
| #define JucePlugin_VersionCode 0x00010100 | |||
| #define JucePlugin_VersionString "1.1" | |||
| //============================================================================== | |||
| /* VST settings */ | |||
| /** For VSTs, if you're compiling against the V2.3 SDK, set this to zero. If | |||
| you're using V2.4 or later, make sure it's set to 1. | |||
| */ | |||
| #define JUCE_USE_VSTSDK_2_4 1 | |||
| /** Defines a UID for your VST plugin. | |||
| The default setting here is probably fine, unless you specifically need | |||
| a custom value. It's passed to the setUniqueID() method of the plugin class. | |||
| */ | |||
| #define JucePlugin_VSTUniqueID JucePlugin_PluginCode | |||
| /** Defines the type of plugin. For most pursposes, you don't need to change this | |||
| setting. | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_VSTCategory kPlugCategSynth | |||
| #else | |||
| #define JucePlugin_VSTCategory kPlugCategEffect | |||
| #endif | |||
| //============================================================================== | |||
| /* AudioUnit settings */ | |||
| /** Defines the major type of plugin - see AUComponent.h for the available options. | |||
| If it's an effect, you should use kAudioUnitType_Effect. For a synth, you'll | |||
| need to use kAudioUnitType_MusicEffect or kAudioUnitType_MusicDevice. | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_AUMainType kAudioUnitType_MusicDevice | |||
| #else | |||
| #define JucePlugin_AUMainType kAudioUnitType_Effect | |||
| #endif | |||
| /** A 4-character plugin ID code that should be unique. | |||
| You can leave this using the generic value JucePlugin_PluginCode, or | |||
| override it if necessary. | |||
| Note that for AU, this must contain at least one upper-case letter. | |||
| */ | |||
| #define JucePlugin_AUSubType JucePlugin_PluginCode | |||
| /** A prefix for the names of exported entry-point functions that the component exposes. | |||
| It's very important that your plugin's .exp file contains two entries that correspond to | |||
| this name. So for example if you set the prefix to "abc" then your exports | |||
| file must contain: | |||
| _abcEntry | |||
| _abcViewEntry | |||
| */ | |||
| #define JucePlugin_AUExportPrefix JuceDemoAU | |||
| /** This is the same as JucePlugin_AUExportPrefix, but in quotes | |||
| (needed for the resource compiler...) | |||
| */ | |||
| #define JucePlugin_AUExportPrefixQuoted "JuceDemoAU" | |||
| /** A 4-character manufacturer code - this is your company name. | |||
| You can leave this using the generic value JucePlugin_ManufacturerCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode | |||
| /** If you define this value to be the same as the CFBundleIdentifier in your | |||
| plugin's plist, it allows the plugin to work out its own path, which is | |||
| needed if you want to use File::getSpecialLocation (currentExecutableFile) | |||
| */ | |||
| #define JucePlugin_CFBundleIdentifier "com.rawmaterialsoftware.JuceDemo" | |||
| //============================================================================== | |||
| /* RTAS settings */ | |||
| /** How to categorise this plugin. | |||
| For a synth you probably want to set this to ePlugInCategory_SWGenerators. | |||
| For an effect, you could choose one of: | |||
| ePlugInCategory_None, ePlugInCategory_EQ, ePlugInCategory_Dynamics, | |||
| ePlugInCategory_PitchShift, ePlugInCategory_Reverb, ePlugInCategory_Delay, | |||
| ePlugInCategory_Modulation, ePlugInCategory_Harmonic, ePlugInCategory_NoiseReduction, | |||
| ePlugInCategory_Dither, ePlugInCategory_SoundField | |||
| (All values are listed in FicPluginEnums.h) | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_RTASCategory ePlugInCategory_SWGenerators | |||
| #else | |||
| #define JucePlugin_RTASCategory ePlugInCategory_None | |||
| #endif | |||
| /** A 4-character manufacturer code - this is your company name. | |||
| You can leave this using the generic value JucePlugin_ManufacturerCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode | |||
| /** A 4-character plugin ID code that should be unique. | |||
| You can leave this using the generic value JucePlugin_PluginCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_RTASProductId JucePlugin_PluginCode | |||
| /** You need to set this path to point to the location of the Digidesign WinBag | |||
| directory on your machine. (Only needed for Windows builds). Make sure you | |||
| don't put a slash on the end. | |||
| */ | |||
| #define JucePlugin_WinBag_path "C:\\essentials\\PT_73_SDK\\WinBag" | |||
| //============================================================================== | |||
| #endif | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_PLUGIN_CHARACTERISTICS_H__ | |||
| #define __JUCE_PLUGIN_CHARACTERISTICS_H__ | |||
| //============================================================================== | |||
| /* All of the following settings need to be defined for your plugin. | |||
| Go through each of these definitions and check that it's correctly | |||
| set-up before trying to do a build. | |||
| */ | |||
| //============================================================================== | |||
| /* Plugin Formats to build */ | |||
| #define JucePlugin_Build_VST 1 | |||
| #define JucePlugin_Build_RTAS 0 | |||
| #define JucePlugin_Build_AU 1 | |||
| //============================================================================== | |||
| /* Generic settings */ | |||
| /** The name of your plugin. (Try to keep this as short as possible) | |||
| */ | |||
| #define JucePlugin_Name "Juce Demo Plugin" | |||
| /** A longer decription of your plugin. | |||
| */ | |||
| #define JucePlugin_Desc "A Demo Plugin demonstrating Juce" | |||
| /** The name of your company. (Try to keep this as short as possible) | |||
| */ | |||
| #define JucePlugin_Manufacturer "Raw Material Software" | |||
| /** A four-character code for your company. | |||
| Use single quotes - this isn't a string! | |||
| */ | |||
| #define JucePlugin_ManufacturerCode 'RawM' | |||
| /** A unique four-character code for your plugin. | |||
| Use single quotes - this isn't a string! | |||
| Note that for AU compatibility, this must contain at least one | |||
| upper-case letter. | |||
| */ | |||
| #define JucePlugin_PluginCode 'JcDm' | |||
| //============================================================================== | |||
| /** The maximum number of channels of audio input that the plugin can handle. | |||
| The actual number of channels supplied may be less than this, depending on the host. | |||
| For VSTs, you specify a maximum number of channels, for AUs and RTAS a set | |||
| of channel configurations is specified in JucePlugin_PreferredChannelConfigurations | |||
| and the host will choose one of these, but you should still set the max number of | |||
| channels correctly. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that will be used with the AudioProcessor::getNumInputChannels() | |||
| method. | |||
| */ | |||
| #define JucePlugin_MaxNumInputChannels 2 | |||
| /** The maximum number of channels of audio output that the plugin can handle. | |||
| The actual number of channels supplied may be less than this, depending on the host. | |||
| For VSTs, you specify a maximum number of channels, for AUs and RTAS a set | |||
| of channel configurations is specified in JucePlugin_PreferredChannelConfigurations | |||
| and the host will choose one of these, but you should still set the max number of | |||
| channels correctly. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that will be used with the AudioProcessor::getNumOutputChannels() | |||
| method. | |||
| */ | |||
| #define JucePlugin_MaxNumOutputChannels 2 | |||
| /** This allows the plugin to specify the configurations of input/output channels that | |||
| they can support. | |||
| AU and RTAS hosts will use this information, although VSTs only have a concept of | |||
| a maximum number of channels. | |||
| The list is a set of pairs of values in the form { numInputs, numOutputs }, and each | |||
| pair indicates a valid configuration that the plugin can handle. | |||
| So for example, {1, 1}, {2, 2} means that the plugin can be used in just two | |||
| configurations: either with 1 input and 1 output, or with 2 inputs and 2 outputs. If | |||
| you used this in Pro-Tools, the plugin could be placed on a mono or stereo track. | |||
| If the list was just {1, 1}, then Pro-Tools would only allow it to be used as a mono | |||
| plugin. | |||
| As soon as a plugin's prepareToPlay() method is called, you can find out the actual | |||
| number of channels that the host has connected to the plugin by using the | |||
| AudioProcessor::getNumOutputChannels() and AudioFilterBase::getNumInputChannels() | |||
| methods. | |||
| */ | |||
| #define JucePlugin_PreferredChannelConfigurations { 1, 1 }, { 2, 2 } | |||
| //============================================================================== | |||
| /** Set this value to 1 if your plugin is a synth, or 0 if it isn't. | |||
| */ | |||
| #define JucePlugin_IsSynth 0 | |||
| /** Set this to 1 if your plugin needs to receive midi messages, or 0 if | |||
| it doesn't. | |||
| */ | |||
| #define JucePlugin_WantsMidiInput 1 | |||
| /** Set this to 1 if your plugin wants to output midi messages, or 0 if | |||
| it doesn't. | |||
| */ | |||
| #define JucePlugin_ProducesMidiOutput 1 | |||
| /** If this is 1, it means that when the plugins input buffers are | |||
| silent, it's output will be too. | |||
| Some hosts may use this to avoid calling the plugin when no audio | |||
| would be produced. | |||
| */ | |||
| #define JucePlugin_SilenceInProducesSilenceOut 0 | |||
| /** If set to 1, this hints that the host should ignore any keys that are pressed | |||
| when the plugin has keyboard focus. If 0, then the host should still execute | |||
| any shortcut keys that are pressed, even if the plugin does have focus. | |||
| Various hosts/platforms may deal with this differently, or ignore it. | |||
| */ | |||
| #define JucePlugin_EditorRequiresKeyboardFocus 1 | |||
| //============================================================================== | |||
| /** A version number | |||
| */ | |||
| #define JucePlugin_VersionCode 0x00010100 | |||
| #define JucePlugin_VersionString "1.1" | |||
| //============================================================================== | |||
| /* VST settings */ | |||
| /** For VSTs, if you're compiling against the V2.3 SDK, set this to zero. If | |||
| you're using V2.4 or later, make sure it's set to 1. | |||
| */ | |||
| #define JUCE_USE_VSTSDK_2_4 1 | |||
| /** Defines a UID for your VST plugin. | |||
| The default setting here is probably fine, unless you specifically need | |||
| a custom value. It's passed to the setUniqueID() method of the plugin class. | |||
| */ | |||
| #define JucePlugin_VSTUniqueID JucePlugin_PluginCode | |||
| /** Defines the type of plugin. For most pursposes, you don't need to change this | |||
| setting. | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_VSTCategory kPlugCategSynth | |||
| #else | |||
| #define JucePlugin_VSTCategory kPlugCategEffect | |||
| #endif | |||
| //============================================================================== | |||
| /* AudioUnit settings */ | |||
| /** Defines the major type of plugin - see AUComponent.h for the available options. | |||
| If it's an effect, you should use kAudioUnitType_Effect. For a synth, you'll | |||
| need to use kAudioUnitType_MusicEffect or kAudioUnitType_MusicDevice. | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_AUMainType kAudioUnitType_MusicDevice | |||
| #else | |||
| #define JucePlugin_AUMainType kAudioUnitType_Effect | |||
| #endif | |||
| /** A 4-character plugin ID code that should be unique. | |||
| You can leave this using the generic value JucePlugin_PluginCode, or | |||
| override it if necessary. | |||
| Note that for AU, this must contain at least one upper-case letter. | |||
| */ | |||
| #define JucePlugin_AUSubType JucePlugin_PluginCode | |||
| /** A prefix for the names of exported entry-point functions that the component exposes. | |||
| It's very important that your plugin's .exp file contains two entries that correspond to | |||
| this name. So for example if you set the prefix to "abc" then your exports | |||
| file must contain: | |||
| _abcEntry | |||
| _abcViewEntry | |||
| */ | |||
| #define JucePlugin_AUExportPrefix JuceDemoAU | |||
| /** This is the same as JucePlugin_AUExportPrefix, but in quotes | |||
| (needed for the resource compiler...) | |||
| */ | |||
| #define JucePlugin_AUExportPrefixQuoted "JuceDemoAU" | |||
| /** A 4-character manufacturer code - this is your company name. | |||
| You can leave this using the generic value JucePlugin_ManufacturerCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode | |||
| /** If you define this value to be the same as the CFBundleIdentifier in your | |||
| plugin's plist, it allows the plugin to work out its own path, which is | |||
| needed if you want to use File::getSpecialLocation (currentExecutableFile) | |||
| */ | |||
| #define JucePlugin_CFBundleIdentifier "com.rawmaterialsoftware.JuceDemo" | |||
| //============================================================================== | |||
| /* RTAS settings */ | |||
| /** How to categorise this plugin. | |||
| For a synth you probably want to set this to ePlugInCategory_SWGenerators. | |||
| For an effect, you could choose one of: | |||
| ePlugInCategory_None, ePlugInCategory_EQ, ePlugInCategory_Dynamics, | |||
| ePlugInCategory_PitchShift, ePlugInCategory_Reverb, ePlugInCategory_Delay, | |||
| ePlugInCategory_Modulation, ePlugInCategory_Harmonic, ePlugInCategory_NoiseReduction, | |||
| ePlugInCategory_Dither, ePlugInCategory_SoundField | |||
| (All values are listed in FicPluginEnums.h) | |||
| */ | |||
| #if JucePlugin_IsSynth | |||
| #define JucePlugin_RTASCategory ePlugInCategory_SWGenerators | |||
| #else | |||
| #define JucePlugin_RTASCategory ePlugInCategory_None | |||
| #endif | |||
| /** A 4-character manufacturer code - this is your company name. | |||
| You can leave this using the generic value JucePlugin_ManufacturerCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode | |||
| /** A 4-character plugin ID code that should be unique. | |||
| You can leave this using the generic value JucePlugin_PluginCode, or | |||
| override it if necessary. | |||
| */ | |||
| #define JucePlugin_RTASProductId JucePlugin_PluginCode | |||
| /** You need to set this path to point to the location of the Digidesign WinBag | |||
| directory on your machine. (Only needed for Windows builds). Make sure you | |||
| don't put a slash on the end. | |||
| */ | |||
| #define JucePlugin_WinBag_path "C:\\essentials\\PT_73_SDK\\WinBag" | |||
| //============================================================================== | |||
| #endif | |||
| @@ -1,101 +1,101 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| // If you get an error here, you might need to make sure that | |||
| // your build config files don't specify "C++" as one of the | |||
| // flags in OTHER_CFLAGS, because that stops the compiler building | |||
| // obj-c files correctly. | |||
| @class dummyclassname; | |||
| #include <Cocoa/Cocoa.h> | |||
| #include "../juce_PluginHeaders.h" | |||
| #if JucePlugin_Build_RTAS | |||
| //============================================================================== | |||
| void initialiseMacRTAS() | |||
| { | |||
| NSApplicationLoad(); | |||
| } | |||
| void* attachSubWindow (void* hostWindowRef, Component* comp) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef]; | |||
| [hostWindow retain]; | |||
| [hostWindow setCanHide: YES]; | |||
| [hostWindow setReleasedWhenClosed: YES]; | |||
| NSView* content = [hostWindow contentView]; | |||
| NSRect f = [content frame]; | |||
| f.size.width = comp->getWidth(); | |||
| f.size.height = comp->getHeight(); | |||
| [content setFrame: f]; | |||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||
| #else | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||
| #endif | |||
| comp->setVisible (true); | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow addChildWindow: pluginWindow | |||
| ordered: NSWindowAbove]; | |||
| [hostWindow orderFront: nil]; | |||
| [pluginWindow orderFront: nil]; | |||
| return hostWindow; | |||
| } | |||
| void removeSubWindow (void* nsWindow, Component* comp) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow removeChildWindow: pluginWindow]; | |||
| comp->removeFromDesktop(); | |||
| [hostWindow release]; | |||
| } | |||
| #endif | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| // If you get an error here, you might need to make sure that | |||
| // your build config files don't specify "C++" as one of the | |||
| // flags in OTHER_CFLAGS, because that stops the compiler building | |||
| // obj-c files correctly. | |||
| @class dummyclassname; | |||
| #include <Cocoa/Cocoa.h> | |||
| #include "../juce_PluginHeaders.h" | |||
| #if JucePlugin_Build_RTAS | |||
| //============================================================================== | |||
| void initialiseMacRTAS() | |||
| { | |||
| NSApplicationLoad(); | |||
| } | |||
| void* attachSubWindow (void* hostWindowRef, Component* comp) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef]; | |||
| [hostWindow retain]; | |||
| [hostWindow setCanHide: YES]; | |||
| [hostWindow setReleasedWhenClosed: YES]; | |||
| NSView* content = [hostWindow contentView]; | |||
| NSRect f = [content frame]; | |||
| f.size.width = comp->getWidth(); | |||
| f.size.height = comp->getHeight(); | |||
| [content setFrame: f]; | |||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||
| #else | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||
| #endif | |||
| comp->setVisible (true); | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow addChildWindow: pluginWindow | |||
| ordered: NSWindowAbove]; | |||
| [hostWindow orderFront: nil]; | |||
| [pluginWindow orderFront: nil]; | |||
| return hostWindow; | |||
| } | |||
| void removeSubWindow (void* nsWindow, Component* comp) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow removeChildWindow: pluginWindow]; | |||
| comp->removeFromDesktop(); | |||
| [hostWindow release]; | |||
| } | |||
| #endif | |||
| @@ -30,7 +30,7 @@ | |||
| */ | |||
| #include "juce_AudioFilterStreamer.h" | |||
| #include "../../juce_IncludeCharacteristics.h" | |||
| #include "../juce_IncludeCharacteristics.h" | |||
| //============================================================================== | |||
| @@ -1,171 +1,171 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| //============================================================================== | |||
| #include "../juce_IncludeCharacteristics.h" | |||
| #if JucePlugin_Build_VST | |||
| #include <Cocoa/Cocoa.h> | |||
| #define ADD_CARBON_BODGE 1 // see note below.. | |||
| #if ADD_CARBON_BODGE | |||
| #include <Carbon/Carbon.h> | |||
| #endif | |||
| #include "../juce_PluginHeaders.h" | |||
| //============================================================================== | |||
| BEGIN_JUCE_NAMESPACE | |||
| #if ADD_CARBON_BODGE | |||
| /* When you wrap a WindowRef as an NSWindow, it seems to bugger up the HideWindow | |||
| function, so when the host tries (and fails) to hide the window, this catches | |||
| the event and does the job properly. | |||
| */ | |||
| static pascal OSStatus windowVisibilityBodge (EventHandlerCallRef, EventRef e, void* user) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) user; | |||
| switch (GetEventKind (e)) | |||
| { | |||
| case kEventWindowShown: | |||
| [hostWindow orderFront: nil]; | |||
| break; | |||
| case kEventWindowHidden: | |||
| [hostWindow orderOut: nil]; | |||
| break; | |||
| } | |||
| return eventNotHandledErr; | |||
| } | |||
| #endif | |||
| //============================================================================== | |||
| void initialiseMac() | |||
| { | |||
| NSApplicationLoad(); | |||
| } | |||
| void* attachComponentToWindowRef (Component* comp, void* windowRef) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef]; | |||
| [hostWindow retain]; | |||
| [hostWindow setCanHide: YES]; | |||
| [hostWindow setReleasedWhenClosed: YES]; | |||
| NSView* content = [hostWindow contentView]; | |||
| NSRect f = [content frame]; | |||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||
| #else | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||
| #endif | |||
| comp->setVisible (true); | |||
| comp->toFront (false); | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [pluginWindow setExcludedFromWindowsMenu: YES]; | |||
| [pluginWindow setCanHide: YES]; | |||
| [hostWindow addChildWindow: pluginWindow | |||
| ordered: NSWindowAbove]; | |||
| [hostWindow orderFront: nil]; | |||
| [pluginWindow orderFront: nil]; | |||
| #if ADD_CARBON_BODGE | |||
| // Adds a callback bodge to work around some problems with wrapped | |||
| // carbon windows.. | |||
| const EventTypeSpec eventsToCatch[] = { | |||
| { kEventClassWindow, kEventWindowShown }, | |||
| { kEventClassWindow, kEventWindowHidden } | |||
| }; | |||
| InstallWindowEventHandler ((WindowRef) windowRef, | |||
| NewEventHandlerUPP (windowVisibilityBodge), | |||
| GetEventTypeCount (eventsToCatch), eventsToCatch, | |||
| (void*) hostWindow, 0); | |||
| #endif | |||
| return hostWindow; | |||
| } | |||
| void detachComponentFromWindowRef (Component* comp, void* nsWindow) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow removeChildWindow: pluginWindow]; | |||
| comp->removeFromDesktop(); | |||
| [hostWindow release]; | |||
| } | |||
| void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| if (hostWindow != 0) | |||
| { | |||
| ScopedAutoReleasePool pool; | |||
| // Can't use the cocoa NSWindow resizing code, or it messes up in Live. | |||
| Rect r; | |||
| GetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r); | |||
| r.right += newWidth - component->getWidth(); | |||
| r.bottom += newHeight - component->getHeight(); | |||
| SetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r); | |||
| [[hostWindow contentView] setNeedsDisplay: YES]; | |||
| } | |||
| } | |||
| void checkWindowVisibility (void* nsWindow, Component* comp) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| comp->setVisible ([hostWindow isVisible]); | |||
| } | |||
| END_JUCE_NAMESPACE | |||
| #endif | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-7 by Raw Material Software ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the | |||
| GNU General Public License, as published by the Free Software Foundation; | |||
| either version 2 of the License, or (at your option) any later version. | |||
| JUCE 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with JUCE; if not, visit www.gnu.org/licenses or write to the | |||
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, | |||
| Boston, MA 02111-1307 USA | |||
| ------------------------------------------------------------------------------ | |||
| If you'd like to release a closed-source product which uses JUCE, commercial | |||
| licenses are also available: visit www.rawmaterialsoftware.com/juce for | |||
| more information. | |||
| ============================================================================== | |||
| */ | |||
| //============================================================================== | |||
| #include "../juce_IncludeCharacteristics.h" | |||
| #if JucePlugin_Build_VST | |||
| #include <Cocoa/Cocoa.h> | |||
| #define ADD_CARBON_BODGE 1 // see note below.. | |||
| #if ADD_CARBON_BODGE | |||
| #include <Carbon/Carbon.h> | |||
| #endif | |||
| #include "../juce_PluginHeaders.h" | |||
| //============================================================================== | |||
| BEGIN_JUCE_NAMESPACE | |||
| #if ADD_CARBON_BODGE | |||
| /* When you wrap a WindowRef as an NSWindow, it seems to bugger up the HideWindow | |||
| function, so when the host tries (and fails) to hide the window, this catches | |||
| the event and does the job properly. | |||
| */ | |||
| static pascal OSStatus windowVisibilityBodge (EventHandlerCallRef, EventRef e, void* user) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) user; | |||
| switch (GetEventKind (e)) | |||
| { | |||
| case kEventWindowShown: | |||
| [hostWindow orderFront: nil]; | |||
| break; | |||
| case kEventWindowHidden: | |||
| [hostWindow orderOut: nil]; | |||
| break; | |||
| } | |||
| return eventNotHandledErr; | |||
| } | |||
| #endif | |||
| //============================================================================== | |||
| void initialiseMac() | |||
| { | |||
| NSApplicationLoad(); | |||
| } | |||
| void* attachComponentToWindowRef (Component* comp, void* windowRef) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef]; | |||
| [hostWindow retain]; | |||
| [hostWindow setCanHide: YES]; | |||
| [hostWindow setReleasedWhenClosed: YES]; | |||
| NSView* content = [hostWindow contentView]; | |||
| NSRect f = [content frame]; | |||
| NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin]; | |||
| windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height); | |||
| comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y); | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses); | |||
| #else | |||
| comp->addToDesktop (ComponentPeer::windowIsTemporary); | |||
| #endif | |||
| comp->setVisible (true); | |||
| comp->toFront (false); | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [pluginWindow setExcludedFromWindowsMenu: YES]; | |||
| [pluginWindow setCanHide: YES]; | |||
| [hostWindow addChildWindow: pluginWindow | |||
| ordered: NSWindowAbove]; | |||
| [hostWindow orderFront: nil]; | |||
| [pluginWindow orderFront: nil]; | |||
| #if ADD_CARBON_BODGE | |||
| // Adds a callback bodge to work around some problems with wrapped | |||
| // carbon windows.. | |||
| const EventTypeSpec eventsToCatch[] = { | |||
| { kEventClassWindow, kEventWindowShown }, | |||
| { kEventClassWindow, kEventWindowHidden } | |||
| }; | |||
| InstallWindowEventHandler ((WindowRef) windowRef, | |||
| NewEventHandlerUPP (windowVisibilityBodge), | |||
| GetEventTypeCount (eventsToCatch), eventsToCatch, | |||
| (void*) hostWindow, 0); | |||
| #endif | |||
| return hostWindow; | |||
| } | |||
| void detachComponentFromWindowRef (Component* comp, void* nsWindow) | |||
| { | |||
| const ScopedAutoReleasePool pool; | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| NSView* pluginView = (NSView*) comp->getWindowHandle(); | |||
| NSWindow* pluginWindow = [pluginView window]; | |||
| [hostWindow removeChildWindow: pluginWindow]; | |||
| comp->removeFromDesktop(); | |||
| [hostWindow release]; | |||
| } | |||
| void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| if (hostWindow != 0) | |||
| { | |||
| ScopedAutoReleasePool pool; | |||
| // Can't use the cocoa NSWindow resizing code, or it messes up in Live. | |||
| Rect r; | |||
| GetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r); | |||
| r.right += newWidth - component->getWidth(); | |||
| r.bottom += newHeight - component->getHeight(); | |||
| SetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r); | |||
| [[hostWindow contentView] setNeedsDisplay: YES]; | |||
| } | |||
| } | |||
| void checkWindowVisibility (void* nsWindow, Component* comp) | |||
| { | |||
| NSWindow* hostWindow = (NSWindow*) nsWindow; | |||
| comp->setVisible ([hostWindow isVisible]); | |||
| } | |||
| END_JUCE_NAMESPACE | |||
| #endif | |||
| @@ -7974,4 +7974,3 @@ static const unsigned char temp17[] = {47,42,13,10,32,32,61,61,61,61,61,61,61,61 | |||
| 111,109,109,97,110,100,77,97,110,97,103,101,114,41,13,10,123,13,10,32,32,32,32,114,101,116,117,114,110,32,110,101,119,32,87,105,100,103,101,116, | |||
| 115,68,101,109,111,32,40,99,111,109,109,97,110,100,77,97,110,97,103,101,114,41,59,13,10,125,13,10,0,0}; | |||
| const char* BinaryData::widgetsdemo_cpp = (const char*) temp17; | |||
| @@ -911,4 +911,3 @@ static const unsigned char temp4[] = {137,80,78,71,13,10,26,10,0,0,0,13,73,72,68 | |||
| 0,98,28,9,155,95,0,2,104,68,236,11,1,8,160,17,225,73,128,0,3,0,120,52,172,151,198,78,252,63,0,0,0,0,73,69,78,68,174,66, | |||
| 96,130,0,0}; | |||
| const char* BinaryData::prefs_misc_png = (const char*) temp4; | |||
| @@ -262487,10 +262487,12 @@ BEGIN_JUCE_NAMESPACE | |||
| #undef Point | |||
| #define ObjCExtraSuffix 1 | |||
| #ifndef JUCE_ObjCExtraSuffix | |||
| #define JUCE_ObjCExtraSuffix 2 | |||
| #endif | |||
| #define appendMacro1(a, b, c, d) a ## _ ## b ## _ ## c ## _ ## d | |||
| #define appendMacro2(a, b, c, d) appendMacro1(a, b, c, d) | |||
| #define MakeObjCClassName(rootName) appendMacro2 (rootName, JUCE_MAJOR_VERSION, JUCE_MINOR_VERSION, ObjCExtraSuffix) | |||
| #define MakeObjCClassName(rootName) appendMacro2 (rootName, JUCE_MAJOR_VERSION, JUCE_MINOR_VERSION, JUCE_ObjCExtraSuffix) | |||
| #define JUCE_INCLUDED_FILE 1 | |||
| @@ -112,7 +112,7 @@ public: | |||
| /** WIN32 ONLY - Creates a file association in the registry. | |||
| This lets you set the exe that should be launched by a given file extension. | |||
| @param fileExtension the file extension to associate, including the | |||
| @param fileExtension the file extension to associate, including the | |||
| initial dot, e.g. ".txt" | |||
| @param symbolicDescription a space-free short token to identify the file type | |||
| @param fullDescription a human-readable description of the file type | |||
| @@ -121,9 +121,9 @@ public: | |||
| found by looking up this resource number in the | |||
| executable. Pass 0 here to not use an icon | |||
| */ | |||
| static void registerFileAssociation (const String& fileExtension, | |||
| const String& symbolicDescription, | |||
| const String& fullDescription, | |||
| static void registerFileAssociation (const String& fileExtension, | |||
| const String& symbolicDescription, | |||
| const String& fullDescription, | |||
| const File& targetExecutable, | |||
| int iconResourceNumber); | |||
| @@ -42,7 +42,7 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| Uuid::Uuid() | |||
| { | |||
| // Mix up any available MAC addresses with some time-based pseudo-random numbers | |||
| // Mix up any available MAC addresses with some time-based pseudo-random numbers | |||
| // to make it very very unlikely that two UUIDs will ever be the same.. | |||
| static int64 macAddresses[2]; | |||
| @@ -60,7 +60,7 @@ Uuid::Uuid() | |||
| // We'll use both a local RNG that is re-seeded, plus the shared RNG, | |||
| // whose seed will carry over between calls to this method. | |||
| Random r (macAddresses[0] ^ macAddresses[1] | |||
| Random r (macAddresses[0] ^ macAddresses[1] | |||
| ^ Random::getSystemRandom().nextInt64()); | |||
| for (int i = 4; --i >= 0;) | |||