| @@ -8,12 +8,12 @@ | |||||
| #include "BinaryData.h" | #include "BinaryData.h" | ||||
| const char* BinaryData::getNamedResource (const wchar_t* resourceName, int& numBytes) throw() | |||||
| const char* BinaryData::getNamedResource (const char* resourceNameUTF8, int& numBytes) throw() | |||||
| { | { | ||||
| int hash = 0; | int hash = 0; | ||||
| if (resourceName != 0) | |||||
| while (*resourceName != 0) | |||||
| hash = 31 * hash + *resourceName++; | |||||
| if (resourceNameUTF8 != 0) | |||||
| while (*resourceNameUTF8 != 0) | |||||
| hash = 31 * hash + *resourceNameUTF8++; | |||||
| switch (hash) | switch (hash) | ||||
| { | { | ||||
| @@ -45,5 +45,5 @@ namespace BinaryData | |||||
| // If you provide the name of one of the binary resource variables above, this function will | // If you provide the name of one of the binary resource variables above, this function will | ||||
| // return the corresponding data and its size (or a null pointer if the name isn't found). | // return the corresponding data and its size (or a null pointer if the name isn't found). | ||||
| const char* getNamedResource (const wchar_t* resourceName, int& dataSizeInBytes) throw(); | |||||
| const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw(); | |||||
| } | } | ||||
| @@ -845,7 +845,7 @@ void Project::BuildConfiguration::createPropertyEditors (Array <PropertyComponen | |||||
| const StringArray Project::BuildConfiguration::parsePreprocessorDefs() const | const StringArray Project::BuildConfiguration::parsePreprocessorDefs() const | ||||
| { | { | ||||
| StringArray defines; | StringArray defines; | ||||
| defines.addTokens (getPreprocessorDefs().toString(), T(" ,;")); | |||||
| defines.addTokens (getPreprocessorDefs().toString(), T(" ,;"), String::empty); | |||||
| defines.removeEmptyStrings (true); | defines.removeEmptyStrings (true); | ||||
| return defines; | return defines; | ||||
| } | } | ||||
| @@ -853,7 +853,7 @@ const StringArray Project::BuildConfiguration::parsePreprocessorDefs() const | |||||
| const StringArray Project::BuildConfiguration::getHeaderSearchPaths() const | const StringArray Project::BuildConfiguration::getHeaderSearchPaths() const | ||||
| { | { | ||||
| StringArray s; | StringArray s; | ||||
| s.addTokens (getHeaderSearchPath().toString(), T(";")); | |||||
| s.addTokens (getHeaderSearchPath().toString(), T(";"), String::empty); | |||||
| return s; | return s; | ||||
| } | } | ||||
| @@ -919,7 +919,7 @@ void Project::createDefaultExporters() | |||||
| const String Project::getFileTemplate (const String& templateName) | const String Project::getFileTemplate (const String& templateName) | ||||
| { | { | ||||
| int dataSize; | int dataSize; | ||||
| const char* data = BinaryData::getNamedResource (templateName, dataSize); | |||||
| const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize); | |||||
| if (data == 0) | if (data == 0) | ||||
| { | { | ||||
| @@ -36,10 +36,12 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| enum VisualStudioVersion | enum VisualStudioVersion | ||||
| { | { | ||||
| visualStudio6, | |||||
| visualStudio2005, | visualStudio2005, | ||||
| visualStudio2008 | visualStudio2008 | ||||
| }; | }; | ||||
| static const char* getNameVC6() { return "Visual C++ 6.0"; } | |||||
| static const char* getName2005() { return "Visual Studio 2005"; } | static const char* getName2005() { return "Visual Studio 2005"; } | ||||
| static const char* getName2008() { return "Visual Studio 2008"; } | static const char* getName2008() { return "Visual Studio 2008"; } | ||||
| @@ -47,6 +49,7 @@ public: | |||||
| { | { | ||||
| switch (version) | switch (version) | ||||
| { | { | ||||
| case visualStudio6: return "MSVC6"; break; | |||||
| case visualStudio2005: return "VS2005"; break; | case visualStudio2005: return "VS2005"; break; | ||||
| case visualStudio2008: return "VS2008"; break; | case visualStudio2008: return "VS2008"; break; | ||||
| default: jassertfalse; break; | default: jassertfalse; break; | ||||
| @@ -58,7 +61,9 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| static MSVCProjectExporter* createForSettings (Project& project, const ValueTree& settings) | static MSVCProjectExporter* createForSettings (Project& project, const ValueTree& settings) | ||||
| { | { | ||||
| if (settings.hasType (getValueTreeTypeName (visualStudio2005))) | |||||
| if (settings.hasType (getValueTreeTypeName (visualStudio6))) | |||||
| return new MSVCProjectExporter (project, settings, visualStudio6); | |||||
| else if (settings.hasType (getValueTreeTypeName (visualStudio2005))) | |||||
| return new MSVCProjectExporter (project, settings, visualStudio2005); | return new MSVCProjectExporter (project, settings, visualStudio2005); | ||||
| else if (settings.hasType (getValueTreeTypeName (visualStudio2008))) | else if (settings.hasType (getValueTreeTypeName (visualStudio2008))) | ||||
| return new MSVCProjectExporter (project, settings, visualStudio2008); | return new MSVCProjectExporter (project, settings, visualStudio2008); | ||||
| @@ -74,6 +79,7 @@ public: | |||||
| switch (version) | switch (version) | ||||
| { | { | ||||
| case visualStudio6: name = "Visual C++ 6.0"; subFolderName += "MSVC6"; break; | |||||
| case visualStudio2005: name = "Visual Studio 2005"; subFolderName += "VisualStudio2005"; break; | case visualStudio2005: name = "Visual Studio 2005"; subFolderName += "VisualStudio2005"; break; | ||||
| case visualStudio2008: name = "Visual Studio 2008"; subFolderName += "VisualStudio2008"; break; | case visualStudio2008: name = "Visual Studio 2008"; subFolderName += "VisualStudio2008"; break; | ||||
| default: jassertfalse; break; | default: jassertfalse; break; | ||||
| @@ -118,25 +124,46 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| const String create() | const String create() | ||||
| { | { | ||||
| projectGUID = createGUID (project.getProjectUID()); | |||||
| if (version == visualStudio6) | |||||
| { | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| writeVC6Project (mo); | |||||
| XmlElement masterXml ("VisualStudioProject"); | |||||
| fillInMasterXml (masterXml); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getDSPFile(), mo)) | |||||
| return "Can't write to the VC project file: " + getDSPFile().getFullPathName(); | |||||
| } | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| masterXml.writeToStream (mo, String::empty, false, true, "UTF-8", 10); | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| writeDSWFile (mo); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getVCProjFile(), mo)) | |||||
| return "Can't write to the VC project file: " + getVCProjFile().getFullPathName(); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getDSWFile(), mo)) | |||||
| return "Can't write to the VC solution file: " + getDSWFile().getFullPathName(); | |||||
| } | |||||
| } | } | ||||
| else | |||||
| { | { | ||||
| MemoryOutputStream mo; | |||||
| writeSolutionFile (mo); | |||||
| projectGUID = createGUID (project.getProjectUID()); | |||||
| XmlElement masterXml ("VisualStudioProject"); | |||||
| fillInMasterXml (masterXml); | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| masterXml.writeToStream (mo, String::empty, false, true, "UTF-8", 10); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getVCProjFile(), mo)) | |||||
| return "Can't write to the VC project file: " + getVCProjFile().getFullPathName(); | |||||
| } | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| writeSolutionFile (mo); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getSLNFile(), mo)) | |||||
| return "Can't write to the VC solution file: " + getSLNFile().getFullPathName(); | |||||
| if (! overwriteFileWithNewDataIfDifferent (getSLNFile(), mo)) | |||||
| return "Can't write to the VC solution file: " + getSLNFile().getFullPathName(); | |||||
| } | |||||
| } | } | ||||
| return String::empty; | return String::empty; | ||||
| @@ -146,9 +173,12 @@ private: | |||||
| String projectGUID; | String projectGUID; | ||||
| const VisualStudioVersion version; | const VisualStudioVersion version; | ||||
| const File getVCProjFile() const { return getTargetFolder().getChildFile (project.getProjectFilenameRoot()).withFileExtension (".vcproj"); } | |||||
| const File getSLNFile() const { return getVCProjFile().withFileExtension (".sln"); } | |||||
| const File getProjectFile (const String& extension) const { return getTargetFolder().getChildFile (project.getProjectFilenameRoot()).withFileExtension (extension); } | |||||
| const File getVCProjFile() const { return getProjectFile (".vcproj"); } | |||||
| const File getSLNFile() const { return getProjectFile (".sln"); } | |||||
| const File getDSPFile() const { return getProjectFile (".dsp"); } | |||||
| const File getDSWFile() const { return getProjectFile (".dsw"); } | |||||
| //============================================================================== | //============================================================================== | ||||
| void fillInMasterXml (XmlElement& masterXml) | void fillInMasterXml (XmlElement& masterXml) | ||||
| @@ -306,7 +336,7 @@ private: | |||||
| return ".exe"; | return ".exe"; | ||||
| } | } | ||||
| const String getPreprocessorDefs (const Project::BuildConfiguration& config) const | |||||
| const String getPreprocessorDefs (const Project::BuildConfiguration& config, const String& joinString) const | |||||
| { | { | ||||
| StringArray defines; | StringArray defines; | ||||
| defines.add ("WIN32"); | defines.add ("WIN32"); | ||||
| @@ -327,7 +357,7 @@ private: | |||||
| } | } | ||||
| defines.addArray (config.parsePreprocessorDefs()); | defines.addArray (config.parsePreprocessorDefs()); | ||||
| return defines.joinIntoString (";"); | |||||
| return defines.joinIntoString (joinString); | |||||
| } | } | ||||
| const StringArray getHeaderSearchPaths (const Project::BuildConfiguration& config) const | const StringArray getHeaderSearchPaths (const Project::BuildConfiguration& config) const | ||||
| @@ -449,7 +479,7 @@ private: | |||||
| } | } | ||||
| compiler->setAttribute ("AdditionalIncludeDirectories", getHeaderSearchPaths (config).joinIntoString (";")); | compiler->setAttribute ("AdditionalIncludeDirectories", getHeaderSearchPaths (config).joinIntoString (";")); | ||||
| compiler->setAttribute ("PreprocessorDefinitions", getPreprocessorDefs (config)); | |||||
| compiler->setAttribute ("PreprocessorDefinitions", getPreprocessorDefs (config, ";")); | |||||
| compiler->setAttribute ("RuntimeLibrary", isRTAS() ? (isDebug ? 3 : 2) // MT DLL | compiler->setAttribute ("RuntimeLibrary", isRTAS() ? (isDebug ? 3 : 2) // MT DLL | ||||
| : (isDebug ? 1 : 0)); // MT static | : (isDebug ? 1 : 0)); // MT static | ||||
| compiler->setAttribute ("RuntimeTypeInfo", "true"); | compiler->setAttribute ("RuntimeTypeInfo", "true"); | ||||
| @@ -559,12 +589,13 @@ private: | |||||
| } | } | ||||
| out << newLine << "Project(\"" << createGUID (project.getProjectName().toString() + "sln_guid") << "\") = \"" << project.getProjectName().toString() << "\", \"" | out << newLine << "Project(\"" << createGUID (project.getProjectName().toString() + "sln_guid") << "\") = \"" << project.getProjectName().toString() << "\", \"" | ||||
| << getVCProjFile().getFileName() << "\", \"" << projectGUID << "\"" << newLine | |||||
| << getVCProjFile().getFileName() << "\", \"" << projectGUID << '"' << newLine | |||||
| << "EndProject" << newLine | << "EndProject" << newLine | ||||
| << "Global" << newLine | << "Global" << newLine | ||||
| << "\tGlobalSection(SolutionConfigurationPlatforms) = preSolution" << newLine; | << "\tGlobalSection(SolutionConfigurationPlatforms) = preSolution" << newLine; | ||||
| for (int i = 0; i < project.getNumConfigurations(); ++i) | |||||
| int i; | |||||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||||
| { | { | ||||
| Project::BuildConfiguration config (project.getConfiguration (i)); | Project::BuildConfiguration config (project.getConfiguration (i)); | ||||
| out << "\t\t" << createConfigName (config) << " = " << createConfigName (config) << newLine; | out << "\t\t" << createConfigName (config) << " = " << createConfigName (config) << newLine; | ||||
| @@ -573,7 +604,7 @@ private: | |||||
| out << "\tEndGlobalSection" << newLine | out << "\tEndGlobalSection" << newLine | ||||
| << "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution" << newLine; | << "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution" << newLine; | ||||
| for (int i = 0; i < project.getNumConfigurations(); ++i) | |||||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||||
| { | { | ||||
| Project::BuildConfiguration config (project.getConfiguration (i)); | Project::BuildConfiguration config (project.getConfiguration (i)); | ||||
| out << "\t\t" << projectGUID << "." << createConfigName (config) << ".ActiveCfg = " << createConfigName (config) << newLine; | out << "\t\t" << projectGUID << "." << createConfigName (config) << ".ActiveCfg = " << createConfigName (config) << newLine; | ||||
| @@ -586,6 +617,216 @@ private: | |||||
| << "\tEndGlobalSection" << newLine | << "\tEndGlobalSection" << newLine | ||||
| << "EndGlobal" << newLine; | << "EndGlobal" << newLine; | ||||
| } | } | ||||
| //============================================================================== | |||||
| const String createConfigNameVC6 (const Project::BuildConfiguration& config) const | |||||
| { | |||||
| return project.getProjectName().toString() + " - Win32 " + config.getName().toString(); | |||||
| } | |||||
| void writeVC6Project (OutputStream& out) | |||||
| { | |||||
| String defaultConfig (createConfigNameVC6 (project.getConfiguration (0))); | |||||
| const bool isDLL = project.isAudioPlugin() || project.isBrowserPlugin(); | |||||
| String targetType, targetCode; | |||||
| if (isDLL) { targetType = "\"Win32 (x86) Dynamic-Link Library\""; targetCode = "0x0102"; } | |||||
| else if (project.isLibrary()) { targetType = "\"Win32 (x86) Static Library\""; targetCode = "0x0104"; } | |||||
| else if (project.isCommandLineApp()) { targetType = "\"Win32 (x86) Console Application\""; targetCode = "0x0103"; } | |||||
| else { targetType = "\"Win32 (x86) Application\""; targetCode = "0x0101"; } | |||||
| out << "# Microsoft Developer Studio Project File - Name=\"" << project.getProjectName() | |||||
| << "\" - Package Owner=<4>" << newLine | |||||
| << "# Microsoft Developer Studio Generated Build File, Format Version 6.00" << newLine | |||||
| << "# ** DO NOT EDIT **" << newLine | |||||
| << "# TARGTYPE " << targetType << " " << targetCode << newLine | |||||
| << "CFG=" << defaultConfig << newLine | |||||
| << "!MESSAGE This is not a valid makefile. To build this project using NMAKE," << newLine | |||||
| << "!MESSAGE use the Export Makefile command and run" << newLine | |||||
| << "!MESSAGE " << newLine | |||||
| << "!MESSAGE NMAKE /f \"" << project.getProjectName() << ".mak.\"" << newLine | |||||
| << "!MESSAGE " << newLine | |||||
| << "!MESSAGE You can specify a configuration when running NMAKE" << newLine | |||||
| << "!MESSAGE by defining the macro CFG on the command line. For example:" << newLine | |||||
| << "!MESSAGE " << newLine | |||||
| << "!MESSAGE NMAKE /f \"" << project.getProjectName() << ".mak\" CFG=\"" << defaultConfig << '"' << newLine | |||||
| << "!MESSAGE " << newLine | |||||
| << "!MESSAGE Possible choices for configuration are:" << newLine | |||||
| << "!MESSAGE " << newLine; | |||||
| int i; | |||||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||||
| out << "!MESSAGE \"" << createConfigNameVC6 (project.getConfiguration (i)) << "\" (based on " << targetType << ")" << newLine; | |||||
| out << "!MESSAGE " << newLine | |||||
| << "# Begin Project" << newLine | |||||
| << "# PROP AllowPerConfigDependencies 0" << newLine | |||||
| << "# PROP Scc_ProjName \"\"" << newLine | |||||
| << "# PROP Scc_LocalPath \"\"" << newLine | |||||
| << "CPP=cl.exe" << newLine | |||||
| << "MTL=midl.exe" << newLine | |||||
| << "RSC=rc.exe" << newLine; | |||||
| String targetList; | |||||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||||
| { | |||||
| const Project::BuildConfiguration config (project.getConfiguration (i)); | |||||
| const String configName (createConfigNameVC6 (config)); | |||||
| targetList << "# Name \"" << configName << '"' << newLine; | |||||
| const String outFile (windowsStylePath (getConfigTargetPath(config) + "/" + config.getTargetBinaryName().toString() + getTargetBinarySuffix())); | |||||
| const String optimisationFlag (((int) config.getOptimisationLevel().getValue() <= 1) ? "Od" : (config.getOptimisationLevel() == 2 ? "O2" : "O3")); | |||||
| const String defines (getPreprocessorDefs (config, " /D ")); | |||||
| const bool isDebug = (bool) config.isDebug().getValue(); | |||||
| const String extraDebugFlags (isDebug ? "/Gm /ZI /GZ" : ""); | |||||
| const String includes (getHeaderSearchPaths (config).joinIntoString (" /I ")); | |||||
| out << (i == 0 ? "!IF" : "!ELSEIF") << " \"$(CFG)\" == \"" << configName << '"' << newLine | |||||
| << "# PROP BASE Use_MFC 0" << newLine | |||||
| << "# PROP BASE Use_Debug_Libraries " << (isDebug ? "1" : "0") << newLine | |||||
| << "# PROP BASE Output_Dir \"" << getConfigTargetPath (config) << '"' << newLine | |||||
| << "# PROP BASE Intermediate_Dir \"" << getIntermediatesPath (config) << '"' << newLine | |||||
| << "# PROP BASE Target_Dir \"\"" << newLine | |||||
| << "# PROP Use_MFC 0" << newLine | |||||
| << "# PROP Use_Debug_Libraries " << (isDebug ? "1" : "0") << newLine | |||||
| << "# PROP Output_Dir \"" << getConfigTargetPath (config) << '"' << newLine | |||||
| << "# PROP Intermediate_Dir \"" << getIntermediatesPath (config) << '"' << newLine | |||||
| << "# PROP Ignore_Export_Lib 0" << newLine | |||||
| << "# PROP Target_Dir \"\"" << newLine | |||||
| << "# ADD BASE CPP /nologo /W3 /GX /" << optimisationFlag << " /D " << defines | |||||
| << " /YX /FD /c " << extraDebugFlags << " /Zm1024" << newLine | |||||
| << "# ADD CPP /nologo " << (isDebug ? "/MTd" : "/MT") << " /W3 /GR /GX /" << optimisationFlag | |||||
| << " /I " << includes << " /D " << defines << " /D \"_UNICODE\" /D \"UNICODE\" /FD /c " << extraDebugFlags << " /Zm1024" << newLine; | |||||
| if (! isDebug) | |||||
| out << "# SUBTRACT CPP /YX" << newLine; | |||||
| if (! project.isLibrary()) | |||||
| out << "# ADD BASE MTL /nologo /D " << defines << " /mktyplib203 /win32" << newLine | |||||
| << "# ADD MTL /nologo /D " << defines << " /mktyplib203 /win32" << newLine; | |||||
| out << "# ADD BASE RSC /l 0x40c /d " << defines << newLine | |||||
| << "# ADD RSC /l 0x40c /d " << defines << newLine | |||||
| << "BSC32=bscmake.exe" << newLine | |||||
| << "# ADD BASE BSC32 /nologo" << newLine | |||||
| << "# ADD BSC32 /nologo" << newLine; | |||||
| if (project.isLibrary()) | |||||
| { | |||||
| out << "LIB32=link.exe -lib" << newLine | |||||
| << "# ADD BASE LIB32 /nologo" << newLine | |||||
| << "# ADD LIB32 /nologo /out:\"" << outFile << '"' << newLine; | |||||
| } | |||||
| else | |||||
| { | |||||
| out << "LINK32=link.exe" << newLine | |||||
| << "# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386" << newLine | |||||
| << "# ADD LINK32 \"C:\\Program Files\\Microsoft Visual Studio\\VC98\\LIB\\shell32.lib\" " // This is avoid debug information corruption when mixing Platform SDK | |||||
| << "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib " | |||||
| << (isDebug ? " /debug" : "") | |||||
| << " /nologo /machine:I386 /out:\"" << outFile << "\" " | |||||
| << (isDLL ? "/dll" : (project.isCommandLineApp() ? "/subsystem:console" | |||||
| : "/subsystem:windows")) << newLine; | |||||
| } | |||||
| } | |||||
| out << "!ENDIF" << newLine | |||||
| << "# Begin Target" << newLine | |||||
| << targetList; | |||||
| writeFilesVC6 (out, project.getMainGroup()); | |||||
| writeGroupVC6 (out, project.getJuceCodeGroupName(), juceWrapperFiles); | |||||
| writeGroupVC6 (out, "Juce VST Wrapper", getVSTFilesRequired()); | |||||
| out << "# End Target" << newLine | |||||
| << "# End Project" << newLine; | |||||
| } | |||||
| void writeFileVC6 (OutputStream& out, const RelativePath& file, const bool excludeFromBuild) | |||||
| { | |||||
| jassert (file.getRoot() == RelativePath::buildTargetFolder); | |||||
| out << "# Begin Source File" << newLine | |||||
| << "SOURCE=" << file.toWindowsStyle().quoted() << newLine; | |||||
| if (excludeFromBuild) | |||||
| out << "# PROP Exclude_From_Build 1" << newLine; | |||||
| out << "# End Source File" << newLine; | |||||
| } | |||||
| void writeFilesVC6 (OutputStream& out, const Project::Item& projectItem) | |||||
| { | |||||
| if (projectItem.isGroup()) | |||||
| { | |||||
| out << "# Begin Group \"" << projectItem.getName() << '"' << newLine | |||||
| << "# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"" << newLine; | |||||
| for (int i = 0; i < projectItem.getNumChildren(); ++i) | |||||
| writeFilesVC6 (out, projectItem.getChild (i)); | |||||
| out << "# End Group" << newLine; | |||||
| } | |||||
| else if (projectItem.shouldBeAddedToTargetProject()) | |||||
| { | |||||
| const RelativePath path (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder); | |||||
| writeFileVC6 (out, path, projectItem.shouldBeAddedToBinaryResources() || (shouldFileBeCompiledByDefault (path) && ! projectItem.shouldBeCompiled())); | |||||
| } | |||||
| } | |||||
| void writeGroupVC6 (OutputStream& out, const String& groupName, const Array<RelativePath>& files) | |||||
| { | |||||
| if (files.size() > 0) | |||||
| { | |||||
| out << "# Begin Group \"" << groupName << '"' << newLine; | |||||
| for (int i = 0; i < files.size(); ++i) | |||||
| if (files.getReference(i).hasFileExtension ("cpp;c;h")) | |||||
| writeFileVC6 (out, files.getReference(i), false); | |||||
| out << "# End Group" << newLine; | |||||
| } | |||||
| } | |||||
| void writeDSWFile (OutputStream& out) | |||||
| { | |||||
| out << "Microsoft Developer Studio Workspace File, Format Version 6.00 " << newLine; | |||||
| if (! project.isUsingWrapperFiles()) | |||||
| { | |||||
| out << "Project: \"JUCE\"= ..\\JUCE.dsp - Package Owner=<4>" << newLine | |||||
| << "Package=<5>" << newLine | |||||
| << "{{{" << newLine | |||||
| << "}}}" << newLine | |||||
| << "Package=<4>" << newLine | |||||
| << "{{{" << newLine | |||||
| << "}}}" << newLine; | |||||
| } | |||||
| out << "Project: \"" << project.getProjectName() << "\" = .\\" << getDSPFile().getFileName() << " - Package Owner=<4>" << newLine | |||||
| << "Package=<5>" << newLine | |||||
| << "{{{" << newLine | |||||
| << "}}}" << newLine | |||||
| << "Package=<4>" << newLine | |||||
| << "{{{" << newLine; | |||||
| if (! project.isUsingWrapperFiles()) | |||||
| { | |||||
| out << " Begin Project Dependency" << newLine | |||||
| << " Project_Dep_Name JUCE" << newLine | |||||
| << " End Project Dependency" << newLine; | |||||
| } | |||||
| out << "}}}" << newLine | |||||
| << "Global:" << newLine | |||||
| << "Package=<5>" << newLine | |||||
| << "{{{" << newLine | |||||
| << "}}}" << newLine | |||||
| << "Package=<3>" << newLine | |||||
| << "{{{" << newLine | |||||
| << "}}}" << newLine; | |||||
| } | |||||
| }; | }; | ||||
| @@ -263,7 +263,8 @@ private: | |||||
| << "DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)" << newLine | << "DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)" << newLine | ||||
| << newLine; | << newLine; | ||||
| for (int i = 0; i < project.getNumConfigurations(); ++i) | |||||
| int i; | |||||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||||
| writeConfig (out, project.getConfiguration(i)); | writeConfig (out, project.getConfiguration(i)); | ||||
| writeObjects (out, files); | writeObjects (out, files); | ||||
| @@ -272,7 +273,7 @@ private: | |||||
| << newLine; | << newLine; | ||||
| out << "$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES)" << newLine | out << "$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES)" << newLine | ||||
| << "\t@echo Linking " << project.getProjectName().toString() << newLine | |||||
| << "\t@echo Linking " << project.getProjectName() << newLine | |||||
| << "\t-@mkdir -p $(BINDIR)" << newLine | << "\t-@mkdir -p $(BINDIR)" << newLine | ||||
| << "\t-@mkdir -p $(LIBDIR)" << newLine | << "\t-@mkdir -p $(LIBDIR)" << newLine | ||||
| << "\t-@mkdir -p $(OUTDIR)" << newLine | << "\t-@mkdir -p $(OUTDIR)" << newLine | ||||
| @@ -280,13 +281,13 @@ private: | |||||
| << newLine; | << newLine; | ||||
| out << "clean:" << newLine | out << "clean:" << newLine | ||||
| << "\t@echo Cleaning " << project.getProjectName().toString() << newLine | |||||
| << "\t@echo Cleaning " << project.getProjectName() << newLine | |||||
| << "\t-@rm -f $(OUTDIR)/$(TARGET)" << newLine | << "\t-@rm -f $(OUTDIR)/$(TARGET)" << newLine | ||||
| << "\t-@rm -rf $(OBJDIR)/*" << newLine | << "\t-@rm -rf $(OBJDIR)/*" << newLine | ||||
| << "\t-@rm -rf $(OBJDIR)" << newLine | << "\t-@rm -rf $(OBJDIR)" << newLine | ||||
| << newLine; | << newLine; | ||||
| for (int i = 0; i < files.size(); ++i) | |||||
| for (i = 0; i < files.size(); ++i) | |||||
| { | { | ||||
| if (shouldFileBeCompiledByDefault (files.getReference(i))) | if (shouldFileBeCompiledByDefault (files.getReference(i))) | ||||
| { | { | ||||
| @@ -919,8 +919,8 @@ private: | |||||
| const char* files[] = { "extras/audio plugins/wrapper/AU/juce_AU_Resources.r", | const char* files[] = { "extras/audio plugins/wrapper/AU/juce_AU_Resources.r", | ||||
| "extras/audio plugins/wrapper/AU/juce_AU_Wrapper.mm" }; | "extras/audio plugins/wrapper/AU/juce_AU_Wrapper.mm" }; | ||||
| for (int i = 0; i < numElementsInArray (files); ++i) | |||||
| int i; | |||||
| for (i = 0; i < numElementsInArray (files); ++i) | |||||
| auWrappers.add (getJucePathFromTargetFolder().getChildFile (files[i])); | auWrappers.add (getJucePathFromTargetFolder().getChildFile (files[i])); | ||||
| const char* appleAUFiles[] = { "Extras/CoreAudio/PublicUtility/CADebugMacros.h", | const char* appleAUFiles[] = { "Extras/CoreAudio/PublicUtility/CADebugMacros.h", | ||||
| @@ -976,7 +976,6 @@ private: | |||||
| StringArray fileIDs, appleFileIDs; | StringArray fileIDs, appleFileIDs; | ||||
| int i; | |||||
| for (i = 0; i < auWrappers.size(); ++i) | for (i = 0; i < auWrappers.size(); ++i) | ||||
| { | { | ||||
| addFile (auWrappers.getReference(i), shouldFileBeCompiledByDefault (auWrappers.getReference(i)), false); | addFile (auWrappers.getReference(i), shouldFileBeCompiledByDefault (auWrappers.getReference(i)), false); | ||||
| @@ -42,7 +42,7 @@ ProjectExporter::~ProjectExporter() | |||||
| //============================================================================== | //============================================================================== | ||||
| int ProjectExporter::getNumExporters() | int ProjectExporter::getNumExporters() | ||||
| { | { | ||||
| return 5; | |||||
| return 6; | |||||
| } | } | ||||
| const StringArray ProjectExporter::getExporterNames() | const StringArray ProjectExporter::getExporterNames() | ||||
| @@ -50,6 +50,7 @@ const StringArray ProjectExporter::getExporterNames() | |||||
| StringArray s; | StringArray s; | ||||
| s.add (XCodeProjectExporter::getNameMac()); | s.add (XCodeProjectExporter::getNameMac()); | ||||
| s.add (XCodeProjectExporter::getNameiPhone()); | s.add (XCodeProjectExporter::getNameiPhone()); | ||||
| s.add (MSVCProjectExporter::getNameVC6()); | |||||
| s.add (MSVCProjectExporter::getName2005()); | s.add (MSVCProjectExporter::getName2005()); | ||||
| s.add (MSVCProjectExporter::getName2008()); | s.add (MSVCProjectExporter::getName2008()); | ||||
| s.add (MakefileProjectExporter::getNameLinux()); | s.add (MakefileProjectExporter::getNameLinux()); | ||||
| @@ -64,9 +65,10 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int | |||||
| { | { | ||||
| case 0: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter::getValueTreeTypeName (false)), false); break; | case 0: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter::getValueTreeTypeName (false)), false); break; | ||||
| case 1: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter::getValueTreeTypeName (true)), true); break; | case 1: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter::getValueTreeTypeName (true)), true); break; | ||||
| case 2: exp = new MSVCProjectExporter (project, ValueTree (MSVCProjectExporter::getValueTreeTypeName (MSVCProjectExporter::visualStudio2005)), MSVCProjectExporter::visualStudio2005); break; | |||||
| case 3: exp = new MSVCProjectExporter (project, ValueTree (MSVCProjectExporter::getValueTreeTypeName (MSVCProjectExporter::visualStudio2008)), MSVCProjectExporter::visualStudio2008); break; | |||||
| case 4: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter::getValueTreeTypeName())); break; | |||||
| case 2: exp = new MSVCProjectExporter (project, ValueTree (MSVCProjectExporter::getValueTreeTypeName (MSVCProjectExporter::visualStudio6)), MSVCProjectExporter::visualStudio6); break; | |||||
| case 3: exp = new MSVCProjectExporter (project, ValueTree (MSVCProjectExporter::getValueTreeTypeName (MSVCProjectExporter::visualStudio2005)), MSVCProjectExporter::visualStudio2005); break; | |||||
| case 4: exp = new MSVCProjectExporter (project, ValueTree (MSVCProjectExporter::getValueTreeTypeName (MSVCProjectExporter::visualStudio2008)), MSVCProjectExporter::visualStudio2008); break; | |||||
| case 5: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter::getValueTreeTypeName())); break; | |||||
| default: jassertfalse; return 0; | default: jassertfalse; return 0; | ||||
| } | } | ||||
| @@ -71,9 +71,9 @@ public: | |||||
| Value getRTASFolder() const { return getSetting ("rtasFolder"); } | Value getRTASFolder() const { return getSetting ("rtasFolder"); } | ||||
| Value getAUFolder() const { return getSetting ("auFolder"); } | Value getAUFolder() const { return getSetting ("auFolder"); } | ||||
| bool isVST() const { return project.isAudioPlugin() && project.shouldBuildVST().getValue(); } | |||||
| bool isRTAS() const { return project.isAudioPlugin() && project.shouldBuildRTAS().getValue(); } | |||||
| bool isAU() const { return project.isAudioPlugin() && project.shouldBuildAU().getValue(); } | |||||
| bool isVST() const { return (bool) project.isAudioPlugin() && (bool) project.shouldBuildVST().getValue(); } | |||||
| bool isRTAS() const { return (bool) project.isAudioPlugin() && (bool) project.shouldBuildRTAS().getValue(); } | |||||
| bool isAU() const { return (bool) project.isAudioPlugin() && (bool) project.shouldBuildAU().getValue(); } | |||||
| Array<RelativePath> juceWrapperFiles; | Array<RelativePath> juceWrapperFiles; | ||||
| @@ -270,7 +270,8 @@ private: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| for (int i = paths.size(); --i >= 0;) | |||||
| int i = paths.size(); | |||||
| for (; --i >= 0;) | |||||
| { | { | ||||
| for (int j = i; --j >= 0;) | for (int j = i; --j >= 0;) | ||||
| { | { | ||||
| @@ -282,7 +283,7 @@ private: | |||||
| } | } | ||||
| } | } | ||||
| for (int i = 0; i < paths.size(); ++i) | |||||
| for (i = 0; i < paths.size(); ++i) | |||||
| { | { | ||||
| out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine | out << (i == 0 ? "#if " : "#elif ") << guards[i] << newLine | ||||
| << " #include " << paths[i].quoted() << newLine; | << " #include " << paths[i].quoted() << newLine; | ||||
| @@ -310,7 +311,7 @@ private: | |||||
| static const String createVersionCode (const String& version) | static const String createVersionCode (const String& version) | ||||
| { | { | ||||
| StringArray configs; | StringArray configs; | ||||
| configs.addTokens (version, T(",.")); | |||||
| configs.addTokens (version, T(",."), String::empty); | |||||
| configs.trim(); | configs.trim(); | ||||
| configs.removeEmptyStrings(); | configs.removeEmptyStrings(); | ||||
| @@ -177,6 +177,16 @@ static void writeCppData (InputStream& in, OutputStream& out) | |||||
| } | } | ||||
| } | } | ||||
| static int calcResourceHashCode (const String& s) | |||||
| { | |||||
| const char* t = s.toUTF8(); | |||||
| int hash = 0; | |||||
| while (*t != 0) | |||||
| hash = 31 * hash + *t++; | |||||
| return hash; | |||||
| } | |||||
| bool ResourceFile::write (const File& cppFile, OutputStream& cpp, OutputStream& header) | bool ResourceFile::write (const File& cppFile, OutputStream& cpp, OutputStream& header) | ||||
| { | { | ||||
| String comment; | String comment; | ||||
| @@ -216,19 +226,19 @@ bool ResourceFile::write (const File& cppFile, OutputStream& cpp, OutputStream& | |||||
| cpp << createIncludeStatement (cppFile.withFileExtension (".h"), cppFile) << newLine | cpp << createIncludeStatement (cppFile.withFileExtension (".h"), cppFile) << newLine | ||||
| << newLine | << newLine | ||||
| << newLine | << newLine | ||||
| << "const char* " << namespaceName << "::getNamedResource (const wchar_t* resourceName, int& numBytes) throw()" << newLine | |||||
| << "const char* " << namespaceName << "::getNamedResource (const char* resourceNameUTF8, int& numBytes) throw()" << newLine | |||||
| << "{" << newLine | << "{" << newLine | ||||
| << " int hash = 0;" << newLine | << " int hash = 0;" << newLine | ||||
| << " if (resourceName != 0)" << newLine | |||||
| << " while (*resourceName != 0)" << newLine | |||||
| << " hash = 31 * hash + *resourceName++;" << newLine | |||||
| << " if (resourceNameUTF8 != 0)" << newLine | |||||
| << " while (*resourceNameUTF8 != 0)" << newLine | |||||
| << " hash = 31 * hash + *resourceNameUTF8++;" << newLine | |||||
| << newLine | << newLine | ||||
| << " switch (hash)" << newLine | << " switch (hash)" << newLine | ||||
| << " {" << newLine; | << " {" << newLine; | ||||
| for (i = 0; i < files.size(); ++i) | for (i = 0; i < files.size(); ++i) | ||||
| { | { | ||||
| cpp << " case 0x" << hexString8Digits (variableNames[i].hashCode()) | |||||
| cpp << " case 0x" << hexString8Digits (calcResourceHashCode (variableNames[i])) | |||||
| << ": numBytes = " << namespaceName << "::" << variableNames[i] << "Size; return " | << ": numBytes = " << namespaceName << "::" << variableNames[i] << "Size; return " | ||||
| << namespaceName << "::" << variableNames[i] << ";" << newLine; | << namespaceName << "::" << variableNames[i] << ";" << newLine; | ||||
| } | } | ||||
| @@ -273,7 +283,7 @@ bool ResourceFile::write (const File& cppFile, OutputStream& cpp, OutputStream& | |||||
| header << " // If you provide the name of one of the binary resource variables above, this function will" << newLine | header << " // If you provide the name of one of the binary resource variables above, this function will" << newLine | ||||
| << " // return the corresponding data and its size (or a null pointer if the name isn't found)." << newLine | << " // return the corresponding data and its size (or a null pointer if the name isn't found)." << newLine | ||||
| << " const char* getNamedResource (const wchar_t* resourceName, int& dataSizeInBytes) throw();" << newLine | |||||
| << " const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();" << newLine | |||||
| << "}" << newLine; | << "}" << newLine; | ||||
| return true; | return true; | ||||
| @@ -86,6 +86,7 @@ public: | |||||
| juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
| private: | private: | ||||
| friend class Canvas; | |||||
| Project* project; | Project* project; | ||||
| DrawableDocument* drawableDocument; | DrawableDocument* drawableDocument; | ||||
| @@ -246,7 +246,8 @@ public: | |||||
| deleteAllChildren(); | deleteAllChildren(); | ||||
| Rectangle<int> childBounds; | Rectangle<int> childBounds; | ||||
| for (int i = 0; i < dc->getNumDrawables(); ++i) | |||||
| int i; | |||||
| for (i = 0; i < dc->getNumDrawables(); ++i) | |||||
| { | { | ||||
| Drawable* d = dc->getDrawable (i); | Drawable* d = dc->getDrawable (i); | ||||
| jassert (d != 0); | jassert (d != 0); | ||||
| @@ -271,12 +272,12 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| for (int i = dc->getNumDrawables(); --i >= 0;) | |||||
| for (i = dc->getNumDrawables(); --i >= 0;) | |||||
| dc->removeDrawable (i, false); | dc->removeDrawable (i, false); | ||||
| setBounds (childBounds); | setBounds (childBounds); | ||||
| for (int i = getNumChildComponents(); --i >= 0;) | |||||
| for (i = getNumChildComponents(); --i >= 0;) | |||||
| { | { | ||||
| DrawableObjectComponent* dc = dynamic_cast <DrawableObjectComponent*> (getChildComponent (i)); | DrawableObjectComponent* dc = dynamic_cast <DrawableObjectComponent*> (getChildComponent (i)); | ||||
| @@ -147,7 +147,7 @@ private: | |||||
| String lastTip; | String lastTip; | ||||
| int tabIndex; | int tabIndex; | ||||
| const String findTip (Component* c) const | |||||
| const String findTip (Component* c) | |||||
| { | { | ||||
| while (c != 0 && c != this) | while (c != 0 && c != this) | ||||
| { | { | ||||
| @@ -288,7 +288,7 @@ void ProjectTreeViewBase::moveItems (OwnedArray <Project::Item>& selectedNodes, | |||||
| } | } | ||||
| // Remove and re-insert them one at a time.. | // Remove and re-insert them one at a time.. | ||||
| for (int i = 0; i < selectedNodes.size(); ++i) | |||||
| for (i = 0; i < selectedNodes.size(); ++i) | |||||
| { | { | ||||
| Project::Item* selectedNode = selectedNodes.getUnchecked(i); | Project::Item* selectedNode = selectedNodes.getUnchecked(i); | ||||
| @@ -132,8 +132,7 @@ const String randomHexString (Random& random, int numChars) | |||||
| const String hexString8Digits (int value) | const String hexString8Digits (int value) | ||||
| { | { | ||||
| String s (String::toHexString (value)); | |||||
| return String::repeatedString (T("0"), 8 - s.length()) + s; | |||||
| return String::toHexString (value).paddedLeft ('0', 8); | |||||
| } | } | ||||
| @@ -197,7 +197,7 @@ | |||||
| #endif | #endif | ||||
| #ifndef JUCE_ASIO | #ifndef JUCE_ASIO | ||||
| #define JUCE_ASIO 1 | |||||
| #define JUCE_ASIO 0 | |||||
| #endif | #endif | ||||
| #ifndef JUCE_WASAPI | #ifndef JUCE_WASAPI | ||||
| @@ -217,7 +217,7 @@ | |||||
| #endif | #endif | ||||
| #if ! (defined (JUCE_QUICKTIME) || JUCE_LINUX || JUCE_IPHONE || (JUCE_WINDOWS && ! JUCE_MSVC)) | #if ! (defined (JUCE_QUICKTIME) || JUCE_LINUX || JUCE_IPHONE || (JUCE_WINDOWS && ! JUCE_MSVC)) | ||||
| #define JUCE_QUICKTIME 1 | |||||
| #define JUCE_QUICKTIME 0 | |||||
| #endif | #endif | ||||
| #ifndef JUCE_OPENGL | #ifndef JUCE_OPENGL | ||||
| @@ -233,7 +233,7 @@ | |||||
| #endif | #endif | ||||
| #if (! defined (JUCE_USE_CDBURNER)) && ! (JUCE_WINDOWS && ! JUCE_MSVC) | #if (! defined (JUCE_USE_CDBURNER)) && ! (JUCE_WINDOWS && ! JUCE_MSVC) | ||||
| #define JUCE_USE_CDBURNER 1 | |||||
| #define JUCE_USE_CDBURNER 0 | |||||
| #endif | #endif | ||||
| #ifndef JUCE_USE_CDREADER | #ifndef JUCE_USE_CDREADER | ||||
| @@ -273,7 +273,7 @@ | |||||
| #endif | #endif | ||||
| #ifndef JUCE_WEB_BROWSER | #ifndef JUCE_WEB_BROWSER | ||||
| #define JUCE_WEB_BROWSER 1 | |||||
| #define JUCE_WEB_BROWSER 0 | |||||
| #endif | #endif | ||||
| #ifndef JUCE_SUPPORT_CARBON | #ifndef JUCE_SUPPORT_CARBON | ||||
| @@ -6314,6 +6314,8 @@ private: | |||||
| Value& operator= (const Value& other); | Value& operator= (const Value& other); | ||||
| }; | }; | ||||
| OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value); | |||||
| #endif // __JUCE_VALUE_JUCEHEADER__ | #endif // __JUCE_VALUE_JUCEHEADER__ | ||||
| /*** End of inlined file: juce_Value.h ***/ | /*** End of inlined file: juce_Value.h ***/ | ||||
| @@ -6709,7 +6711,8 @@ private: | |||||
| ReferenceCountedObjectPtr <SharedObject> object; | ReferenceCountedObjectPtr <SharedObject> object; | ||||
| ListenerList <Listener> listeners; | ListenerList <Listener> listeners; | ||||
| ValueTree (SharedObject* const object_); | |||||
| public: | |||||
| ValueTree (SharedObject* const object_); // (can be made private when VC6 support is finally dropped) | |||||
| }; | }; | ||||
| #endif // __JUCE_VALUETREE_JUCEHEADER__ | #endif // __JUCE_VALUETREE_JUCEHEADER__ | ||||
| @@ -9884,6 +9887,11 @@ public: | |||||
| return Rectangle (x + deltaX, y + deltaY, w, h); | return Rectangle (x + deltaX, y + deltaY, w, h); | ||||
| } | } | ||||
| const Rectangle operator+ (const Point<ValueType>& deltaPosition) const throw() | |||||
| { | |||||
| return Rectangle (x + deltaPosition.getX(), y + deltaPosition.getY(), w, h); | |||||
| } | |||||
| void expand (const ValueType deltaX, | void expand (const ValueType deltaX, | ||||
| const ValueType deltaY) throw() | const ValueType deltaY) throw() | ||||
| { | { | ||||
| @@ -9929,7 +9937,7 @@ public: | |||||
| return xCoord >= x && yCoord >= y && xCoord < x + w && yCoord < y + h; | return xCoord >= x && yCoord >= y && xCoord < x + w && yCoord < y + h; | ||||
| } | } | ||||
| bool contains (const Point<ValueType> point) const throw() | |||||
| bool contains (const Point<ValueType>& point) const throw() | |||||
| { | { | ||||
| return point.getX() >= x && point.getY() >= y && point.getX() < x + w && point.getY() < y + h; | return point.getX() >= x && point.getY() >= y && point.getX() < x + w && point.getY() < y + h; | ||||
| } | } | ||||
| @@ -10341,13 +10349,13 @@ class JUCE_API Path | |||||
| { | { | ||||
| public: | public: | ||||
| Path() throw(); | |||||
| Path(); | |||||
| Path (const Path& other) throw(); | |||||
| Path (const Path& other); | |||||
| ~Path() throw(); | |||||
| ~Path(); | |||||
| Path& operator= (const Path& other) throw(); | |||||
| Path& operator= (const Path& other); | |||||
| bool isEmpty() const throw(); | bool isEmpty() const throw(); | ||||
| @@ -10355,99 +10363,91 @@ public: | |||||
| const Rectangle<float> getBoundsTransformed (const AffineTransform& transform) const throw(); | const Rectangle<float> getBoundsTransformed (const AffineTransform& transform) const throw(); | ||||
| bool contains (const float x, | |||||
| const float y, | |||||
| const float tolerence = 10.0f) const throw(); | |||||
| bool contains (float x, float y, | |||||
| float tolerence = 10.0f) const; | |||||
| bool intersectsLine (const float x1, const float y1, | |||||
| const float x2, const float y2, | |||||
| const float tolerence = 10.0f) throw(); | |||||
| bool intersectsLine (float x1, float y1, | |||||
| float x2, float y2, | |||||
| float tolerence = 10.0f); | |||||
| void clear() throw(); | void clear() throw(); | ||||
| void startNewSubPath (const float startX, | |||||
| const float startY) throw(); | |||||
| void startNewSubPath (float startX, float startY); | |||||
| void closeSubPath() throw(); | |||||
| void closeSubPath(); | |||||
| void lineTo (const float endX, | |||||
| const float endY) throw(); | |||||
| void lineTo (float endX, float endY); | |||||
| void quadraticTo (const float controlPointX, | |||||
| const float controlPointY, | |||||
| const float endPointX, | |||||
| const float endPointY) throw(); | |||||
| void quadraticTo (float controlPointX, | |||||
| float controlPointY, | |||||
| float endPointX, | |||||
| float endPointY); | |||||
| void cubicTo (const float controlPoint1X, | |||||
| const float controlPoint1Y, | |||||
| const float controlPoint2X, | |||||
| const float controlPoint2Y, | |||||
| const float endPointX, | |||||
| const float endPointY) throw(); | |||||
| void cubicTo (float controlPoint1X, | |||||
| float controlPoint1Y, | |||||
| float controlPoint2X, | |||||
| float controlPoint2Y, | |||||
| float endPointX, | |||||
| float endPointY); | |||||
| const Point<float> getCurrentPosition() const; | const Point<float> getCurrentPosition() const; | ||||
| void addRectangle (const float x, const float y, | |||||
| const float w, const float h) throw(); | |||||
| void addRectangle (float x, float y, float width, float height); | |||||
| void addRectangle (const Rectangle<int>& rectangle) throw(); | |||||
| void addRectangle (const Rectangle<int>& rectangle); | |||||
| void addRoundedRectangle (const float x, const float y, | |||||
| const float w, const float h, | |||||
| float cornerSize) throw(); | |||||
| void addRoundedRectangle (float x, float y, float width, float height, | |||||
| float cornerSize); | |||||
| void addRoundedRectangle (const float x, const float y, | |||||
| const float w, const float h, | |||||
| void addRoundedRectangle (float x, float y, float width, float height, | |||||
| float cornerSizeX, | float cornerSizeX, | ||||
| float cornerSizeY) throw(); | |||||
| void addTriangle (const float x1, const float y1, | |||||
| const float x2, const float y2, | |||||
| const float x3, const float y3) throw(); | |||||
| void addQuadrilateral (const float x1, const float y1, | |||||
| const float x2, const float y2, | |||||
| const float x3, const float y3, | |||||
| const float x4, const float y4) throw(); | |||||
| void addEllipse (const float x, const float y, | |||||
| const float width, const float height) throw(); | |||||
| void addArc (const float x, const float y, | |||||
| const float width, const float height, | |||||
| const float fromRadians, | |||||
| const float toRadians, | |||||
| const bool startAsNewSubPath = false) throw(); | |||||
| void addCentredArc (const float centreX, const float centreY, | |||||
| const float radiusX, const float radiusY, | |||||
| const float rotationOfEllipse, | |||||
| const float fromRadians, | |||||
| const float toRadians, | |||||
| const bool startAsNewSubPath = false) throw(); | |||||
| void addPieSegment (const float x, const float y, | |||||
| const float width, const float height, | |||||
| const float fromRadians, | |||||
| const float toRadians, | |||||
| const float innerCircleProportionalSize); | |||||
| void addLineSegment (const float startX, const float startY, | |||||
| const float endX, const float endY, | |||||
| float lineThickness) throw(); | |||||
| void addArrow (const float startX, const float startY, | |||||
| const float endX, const float endY, | |||||
| float cornerSizeY); | |||||
| void addTriangle (float x1, float y1, | |||||
| float x2, float y2, | |||||
| float x3, float y3); | |||||
| void addQuadrilateral (float x1, float y1, | |||||
| float x2, float y2, | |||||
| float x3, float y3, | |||||
| float x4, float y4); | |||||
| void addEllipse (float x, float y, float width, float height); | |||||
| void addArc (float x, float y, float width, float height, | |||||
| float fromRadians, | |||||
| float toRadians, | |||||
| bool startAsNewSubPath = false); | |||||
| void addCentredArc (float centreX, float centreY, | |||||
| float radiusX, float radiusY, | |||||
| float rotationOfEllipse, | |||||
| float fromRadians, | |||||
| float toRadians, | |||||
| bool startAsNewSubPath = false); | |||||
| void addPieSegment (float x, float y, | |||||
| float width, float height, | |||||
| float fromRadians, | |||||
| float toRadians, | |||||
| float innerCircleProportionalSize); | |||||
| void addLineSegment (float startX, float startY, | |||||
| float endX, float endY, | |||||
| float lineThickness); | |||||
| void addArrow (float startX, float startY, | |||||
| float endX, float endY, | |||||
| float lineThickness, | float lineThickness, | ||||
| float arrowheadWidth, | float arrowheadWidth, | ||||
| float arrowheadLength) throw(); | |||||
| float arrowheadLength); | |||||
| void addStar (const float centreX, | |||||
| const float centreY, | |||||
| const int numberOfPoints, | |||||
| const float innerRadius, | |||||
| const float outerRadius, | |||||
| const float startAngle = 0.0f); | |||||
| void addStar (float centreX, | |||||
| float centreY, | |||||
| int numberOfPoints, | |||||
| float innerRadius, | |||||
| float outerRadius, | |||||
| float startAngle = 0.0f); | |||||
| void addBubble (float bodyX, float bodyY, | void addBubble (float bodyX, float bodyY, | ||||
| float bodyW, float bodyH, | float bodyW, float bodyH, | ||||
| @@ -10458,27 +10458,25 @@ public: | |||||
| float arrowPositionAlongEdgeProportional, | float arrowPositionAlongEdgeProportional, | ||||
| float arrowWidth); | float arrowWidth); | ||||
| void addPath (const Path& pathToAppend) throw(); | |||||
| void addPath (const Path& pathToAppend); | |||||
| void addPath (const Path& pathToAppend, | void addPath (const Path& pathToAppend, | ||||
| const AffineTransform& transformToApply) throw(); | |||||
| const AffineTransform& transformToApply); | |||||
| void swapWithPath (Path& other); | void swapWithPath (Path& other); | ||||
| void applyTransform (const AffineTransform& transform) throw(); | void applyTransform (const AffineTransform& transform) throw(); | ||||
| void scaleToFit (const float x, const float y, | |||||
| const float width, const float height, | |||||
| const bool preserveProportions) throw(); | |||||
| void scaleToFit (float x, float y, float width, float height, | |||||
| bool preserveProportions) throw(); | |||||
| const AffineTransform getTransformToScaleToFit (const float x, const float y, | |||||
| const float width, const float height, | |||||
| const bool preserveProportions, | |||||
| const Justification& justificationType = Justification::centred) const throw(); | |||||
| const AffineTransform getTransformToScaleToFit (float x, float y, float width, float height, | |||||
| bool preserveProportions, | |||||
| const Justification& justificationType = Justification::centred) const; | |||||
| const Path createPathWithRoundedCorners (const float cornerRadius) const throw(); | |||||
| const Path createPathWithRoundedCorners (float cornerRadius) const; | |||||
| void setUsingNonZeroWinding (const bool isNonZeroWinding) throw(); | |||||
| void setUsingNonZeroWinding (bool isNonZeroWinding) throw(); | |||||
| bool isUsingNonZeroWinding() const { return useNonZeroWinding; } | bool isUsingNonZeroWinding() const { return useNonZeroWinding; } | ||||
| @@ -10506,7 +10504,7 @@ public: | |||||
| private: | private: | ||||
| const Path& path; | const Path& path; | ||||
| int index; | |||||
| size_t index; | |||||
| Iterator (const Iterator&); | Iterator (const Iterator&); | ||||
| Iterator& operator= (const Iterator&); | Iterator& operator= (const Iterator&); | ||||
| @@ -10514,8 +10512,7 @@ public: | |||||
| void loadPathFromStream (InputStream& source); | void loadPathFromStream (InputStream& source); | ||||
| void loadPathFromData (const unsigned char* const data, | |||||
| const int numberOfBytes) throw(); | |||||
| void loadPathFromData (const void* data, int numberOfBytes); | |||||
| void writePathToStream (OutputStream& destination) const; | void writePathToStream (OutputStream& destination) const; | ||||
| @@ -10529,7 +10526,7 @@ private: | |||||
| friend class PathFlatteningIterator; | friend class PathFlatteningIterator; | ||||
| friend class Path::Iterator; | friend class Path::Iterator; | ||||
| ArrayAllocationBase <float, DummyCriticalSection> data; | ArrayAllocationBase <float, DummyCriticalSection> data; | ||||
| int numElements; | |||||
| size_t numElements; | |||||
| float pathXMin, pathXMax, pathYMin, pathYMax; | float pathXMin, pathXMax, pathYMin, pathYMax; | ||||
| bool useNonZeroWinding; | bool useNonZeroWinding; | ||||
| @@ -13359,30 +13356,34 @@ public: | |||||
| }; | }; | ||||
| PropertiesFile (const File& file, | PropertiesFile (const File& file, | ||||
| const int millisecondsBeforeSaving, | |||||
| const int options); | |||||
| int millisecondsBeforeSaving, | |||||
| int optionFlags); | |||||
| ~PropertiesFile(); | ~PropertiesFile(); | ||||
| bool isValidFile() const throw() { return loadedOk; } | |||||
| bool saveIfNeeded(); | bool saveIfNeeded(); | ||||
| bool save(); | bool save(); | ||||
| bool needsToBeSaved() const; | bool needsToBeSaved() const; | ||||
| void setNeedsToBeSaved (bool needsToBeSaved); | |||||
| const File getFile() const { return file; } | const File getFile() const { return file; } | ||||
| static PropertiesFile* createDefaultAppPropertiesFile (const String& applicationName, | static PropertiesFile* createDefaultAppPropertiesFile (const String& applicationName, | ||||
| const String& fileNameSuffix, | const String& fileNameSuffix, | ||||
| const String& folderName, | const String& folderName, | ||||
| const bool commonToAllUsers, | |||||
| const int millisecondsBeforeSaving, | |||||
| const int propertiesFileOptions); | |||||
| bool commonToAllUsers, | |||||
| int millisecondsBeforeSaving, | |||||
| int propertiesFileOptions); | |||||
| static const File getDefaultAppSettingsFile (const String& applicationName, | static const File getDefaultAppSettingsFile (const String& applicationName, | ||||
| const String& fileNameSuffix, | const String& fileNameSuffix, | ||||
| const String& folderName, | const String& folderName, | ||||
| const bool commonToAllUsers); | |||||
| bool commonToAllUsers); | |||||
| juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
| @@ -13394,7 +13395,7 @@ private: | |||||
| File file; | File file; | ||||
| int timerInterval; | int timerInterval; | ||||
| const int options; | const int options; | ||||
| bool needsWriting; | |||||
| bool loadedOk, needsWriting; | |||||
| void timerCallback(); | void timerCallback(); | ||||
| @@ -26668,7 +26669,11 @@ public: | |||||
| OpenGLPixelFormat (const int bitsPerRGBComponent = 8, | OpenGLPixelFormat (const int bitsPerRGBComponent = 8, | ||||
| const int alphaBits = 8, | const int alphaBits = 8, | ||||
| const int depthBufferBits = 16, | const int depthBufferBits = 16, | ||||
| const int stencilBufferBits = 0) throw(); | |||||
| const int stencilBufferBits = 0); | |||||
| OpenGLPixelFormat (const OpenGLPixelFormat&); | |||||
| OpenGLPixelFormat& operator= (const OpenGLPixelFormat&); | |||||
| bool operator== (const OpenGLPixelFormat&) const; | |||||
| int redBits; /**< The number of bits per pixel to use for the red channel. */ | int redBits; /**< The number of bits per pixel to use for the red channel. */ | ||||
| int greenBits; /**< The number of bits per pixel to use for the green channel. */ | int greenBits; /**< The number of bits per pixel to use for the green channel. */ | ||||
| @@ -26688,8 +26693,6 @@ public: | |||||
| static void getAvailablePixelFormats (Component* component, | static void getAvailablePixelFormats (Component* component, | ||||
| OwnedArray <OpenGLPixelFormat>& results); | OwnedArray <OpenGLPixelFormat>& results); | ||||
| bool operator== (const OpenGLPixelFormat&) const throw(); | |||||
| juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
| }; | }; | ||||
| @@ -27959,11 +27962,11 @@ public: | |||||
| PathFlatteningIterator (const Path& path, | PathFlatteningIterator (const Path& path, | ||||
| const AffineTransform& transform = AffineTransform::identity, | const AffineTransform& transform = AffineTransform::identity, | ||||
| float tolerence = 6.0f) throw(); | |||||
| float tolerence = 6.0f); | |||||
| ~PathFlatteningIterator() throw(); | |||||
| ~PathFlatteningIterator(); | |||||
| bool next() throw(); | |||||
| bool next(); | |||||
| float x1; | float x1; | ||||
| float y1; | float y1; | ||||
| @@ -27985,11 +27988,11 @@ private: | |||||
| const AffineTransform transform; | const AffineTransform transform; | ||||
| float* points; | float* points; | ||||
| float tolerence, subPathCloseX, subPathCloseY; | float tolerence, subPathCloseX, subPathCloseY; | ||||
| bool isIdentityTransform; | |||||
| const bool isIdentityTransform; | |||||
| HeapBlock <float> stackBase; | HeapBlock <float> stackBase; | ||||
| float* stackPos; | float* stackPos; | ||||
| int index, stackSize; | |||||
| size_t index, stackSize; | |||||
| PathFlatteningIterator (const PathFlatteningIterator&); | PathFlatteningIterator (const PathFlatteningIterator&); | ||||
| PathFlatteningIterator& operator= (const PathFlatteningIterator&); | PathFlatteningIterator& operator= (const PathFlatteningIterator&); | ||||
| @@ -217,5 +217,9 @@ void Value::callListeners() | |||||
| listeners.call (&Listener::valueChanged, v); | listeners.call (&Listener::valueChanged, v); | ||||
| } | } | ||||
| OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value) | |||||
| { | |||||
| return stream << value.toString(); | |||||
| } | |||||
| END_JUCE_NAMESPACE | END_JUCE_NAMESPACE | ||||
| @@ -227,5 +227,8 @@ private: | |||||
| Value& operator= (const Value& other); | Value& operator= (const Value& other); | ||||
| }; | }; | ||||
| /** Writes a Value to an OutputStream as a UTF8 string. */ | |||||
| OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value); | |||||
| #endif // __JUCE_VALUE_JUCEHEADER__ | #endif // __JUCE_VALUE_JUCEHEADER__ | ||||
| @@ -443,7 +443,9 @@ private: | |||||
| ReferenceCountedObjectPtr <SharedObject> object; | ReferenceCountedObjectPtr <SharedObject> object; | ||||
| ListenerList <Listener> listeners; | ListenerList <Listener> listeners; | ||||
| ValueTree (SharedObject* const object_); | |||||
| public: | |||||
| /** @internal */ | |||||
| ValueTree (SharedObject* const object_); // (can be made private when VC6 support is finally dropped) | |||||
| }; | }; | ||||
| @@ -43,7 +43,7 @@ extern void juce_glViewport (const int w, const int h); | |||||
| OpenGLPixelFormat::OpenGLPixelFormat (const int bitsPerRGBComponent, | OpenGLPixelFormat::OpenGLPixelFormat (const int bitsPerRGBComponent, | ||||
| const int alphaBits_, | const int alphaBits_, | ||||
| const int depthBufferBits_, | const int depthBufferBits_, | ||||
| const int stencilBufferBits_) throw() | |||||
| const int stencilBufferBits_) | |||||
| : redBits (bitsPerRGBComponent), | : redBits (bitsPerRGBComponent), | ||||
| greenBits (bitsPerRGBComponent), | greenBits (bitsPerRGBComponent), | ||||
| blueBits (bitsPerRGBComponent), | blueBits (bitsPerRGBComponent), | ||||
| @@ -58,9 +58,50 @@ OpenGLPixelFormat::OpenGLPixelFormat (const int bitsPerRGBComponent, | |||||
| { | { | ||||
| } | } | ||||
| bool OpenGLPixelFormat::operator== (const OpenGLPixelFormat& other) const throw() | |||||
| OpenGLPixelFormat::OpenGLPixelFormat (const OpenGLPixelFormat& other) | |||||
| : redBits (other.redBits), | |||||
| greenBits (other.greenBits), | |||||
| blueBits (other.blueBits), | |||||
| alphaBits (other.alphaBits), | |||||
| depthBufferBits (other.depthBufferBits), | |||||
| stencilBufferBits (other.stencilBufferBits), | |||||
| accumulationBufferRedBits (other.accumulationBufferRedBits), | |||||
| accumulationBufferGreenBits (other.accumulationBufferGreenBits), | |||||
| accumulationBufferBlueBits (other.accumulationBufferBlueBits), | |||||
| accumulationBufferAlphaBits (other.accumulationBufferAlphaBits), | |||||
| fullSceneAntiAliasingNumSamples (other.fullSceneAntiAliasingNumSamples) | |||||
| { | { | ||||
| return memcmp (this, &other, sizeof (other)) == 0; | |||||
| } | |||||
| OpenGLPixelFormat& OpenGLPixelFormat::operator= (const OpenGLPixelFormat& other) | |||||
| { | |||||
| redBits = other.redBits; | |||||
| greenBits = other.greenBits; | |||||
| blueBits = other.blueBits; | |||||
| alphaBits = other.alphaBits; | |||||
| depthBufferBits = other.depthBufferBits; | |||||
| stencilBufferBits = other.stencilBufferBits; | |||||
| accumulationBufferRedBits = other.accumulationBufferRedBits; | |||||
| accumulationBufferGreenBits = other.accumulationBufferGreenBits; | |||||
| accumulationBufferBlueBits = other.accumulationBufferBlueBits; | |||||
| accumulationBufferAlphaBits = other.accumulationBufferAlphaBits; | |||||
| fullSceneAntiAliasingNumSamples = other.fullSceneAntiAliasingNumSamples; | |||||
| return *this; | |||||
| } | |||||
| bool OpenGLPixelFormat::operator== (const OpenGLPixelFormat& other) const | |||||
| { | |||||
| return redBits == other.redBits | |||||
| && greenBits == other.greenBits | |||||
| && blueBits == other.blueBits | |||||
| && alphaBits == other.alphaBits | |||||
| && depthBufferBits == other.depthBufferBits | |||||
| && stencilBufferBits == other.stencilBufferBits | |||||
| && accumulationBufferRedBits == other.accumulationBufferRedBits | |||||
| && accumulationBufferGreenBits == other.accumulationBufferGreenBits | |||||
| && accumulationBufferBlueBits == other.accumulationBufferBlueBits | |||||
| && accumulationBufferAlphaBits == other.accumulationBufferAlphaBits | |||||
| && fullSceneAntiAliasingNumSamples == other.fullSceneAntiAliasingNumSamples; | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -50,7 +50,11 @@ public: | |||||
| OpenGLPixelFormat (const int bitsPerRGBComponent = 8, | OpenGLPixelFormat (const int bitsPerRGBComponent = 8, | ||||
| const int alphaBits = 8, | const int alphaBits = 8, | ||||
| const int depthBufferBits = 16, | const int depthBufferBits = 16, | ||||
| const int stencilBufferBits = 0) throw(); | |||||
| const int stencilBufferBits = 0); | |||||
| OpenGLPixelFormat (const OpenGLPixelFormat&); | |||||
| OpenGLPixelFormat& operator= (const OpenGLPixelFormat&); | |||||
| bool operator== (const OpenGLPixelFormat&) const; | |||||
| //============================================================================== | //============================================================================== | ||||
| int redBits; /**< The number of bits per pixel to use for the red channel. */ | int redBits; /**< The number of bits per pixel to use for the red channel. */ | ||||
| @@ -78,8 +82,6 @@ public: | |||||
| OwnedArray <OpenGLPixelFormat>& results); | OwnedArray <OpenGLPixelFormat>& results); | ||||
| //============================================================================== | //============================================================================== | ||||
| bool operator== (const OpenGLPixelFormat&) const throw(); | |||||
| juce_UseDebuggingNewOperator | juce_UseDebuggingNewOperator | ||||
| }; | }; | ||||
| @@ -53,6 +53,12 @@ BEGIN_JUCE_NAMESPACE | |||||
| class StringHolder | class StringHolder | ||||
| { | { | ||||
| public: | public: | ||||
| StringHolder() | |||||
| : refCount (0x3fffffff), allocatedNumChars (0) | |||||
| { | |||||
| text[0] = 0; | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| static juce_wchar* create (const size_t numChars) | static juce_wchar* create (const size_t numChars) | ||||
| { | { | ||||
| @@ -134,11 +140,13 @@ public: | |||||
| private: | private: | ||||
| static inline StringHolder* bufferFromText (juce_wchar* const text) throw() | static inline StringHolder* bufferFromText (juce_wchar* const text) throw() | ||||
| { | { | ||||
| return reinterpret_cast <StringHolder*> (reinterpret_cast <char*> (text) - offsetof (StringHolder, StringHolder::text)); | |||||
| // (Can't use offsetof() here because of warnings about this not being a POD) | |||||
| return reinterpret_cast <StringHolder*> (reinterpret_cast <char*> (text) | |||||
| - (reinterpret_cast <size_t> (reinterpret_cast <StringHolder*> (1)->text) - 1)); | |||||
| } | } | ||||
| }; | }; | ||||
| StringHolder StringHolder::empty = { 0x3fffffff, 0, { 0 } }; | |||||
| StringHolder StringHolder::empty; | |||||
| const String String::empty; | const String String::empty; | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -353,7 +361,11 @@ namespace NumberToStringConverters | |||||
| static juce_wchar getDecimalPoint() | static juce_wchar getDecimalPoint() | ||||
| { | { | ||||
| #if JUCE_WINDOWS && _MSC_VER < 1400 | |||||
| static juce_wchar dp = std::_USE (std::locale(), std::numpunct <wchar_t>).decimal_point(); | |||||
| #else | |||||
| static juce_wchar dp = std::use_facet <std::numpunct <wchar_t> > (std::locale()).decimal_point(); | static juce_wchar dp = std::use_facet <std::numpunct <wchar_t> > (std::locale()).decimal_point(); | ||||
| #endif | |||||
| return dp; | return dp; | ||||
| } | } | ||||
| @@ -1092,6 +1104,7 @@ const String String::repeatedString (const juce_wchar* const stringToRepeat, int | |||||
| const int len = CharacterFunctions::length (stringToRepeat); | const int len = CharacterFunctions::length (stringToRepeat); | ||||
| String result ((size_t) (len * numberOfTimesToRepeat + 1), (int) 0); | String result ((size_t) (len * numberOfTimesToRepeat + 1), (int) 0); | ||||
| juce_wchar* n = result.text; | juce_wchar* n = result.text; | ||||
| *n = 0; | |||||
| while (--numberOfTimesToRepeat >= 0) | while (--numberOfTimesToRepeat >= 0) | ||||
| { | { | ||||
| @@ -187,7 +187,7 @@ bool PropertiesFile::save() | |||||
| if (childElement != 0) | if (childElement != 0) | ||||
| e->addChildElement (childElement); | e->addChildElement (childElement); | ||||
| else | else | ||||
| e->setAttribute (PropertyFileConstants::valueAttribute, | |||||
| e->setAttribute (PropertyFileConstants::valueAttribute, | |||||
| getAllProperties().getAllValues() [i]); | getAllProperties().getAllValues() [i]); | ||||
| } | } | ||||
| @@ -120,7 +120,7 @@ public: | |||||
| explicitly set this flag with setNeedsToBeSaved(). | explicitly set this flag with setNeedsToBeSaved(). | ||||
| */ | */ | ||||
| bool needsToBeSaved() const; | bool needsToBeSaved() const; | ||||
| /** Explicitly sets the flag to indicate whether the file needs saving or not. | /** Explicitly sets the flag to indicate whether the file needs saving or not. | ||||
| @see needsToBeSaved | @see needsToBeSaved | ||||
| */ | */ | ||||