| @@ -8,12 +8,12 @@ | |||
| #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; | |||
| if (resourceName != 0) | |||
| while (*resourceName != 0) | |||
| hash = 31 * hash + *resourceName++; | |||
| if (resourceNameUTF8 != 0) | |||
| while (*resourceNameUTF8 != 0) | |||
| hash = 31 * hash + *resourceNameUTF8++; | |||
| switch (hash) | |||
| { | |||
| @@ -45,5 +45,5 @@ namespace BinaryData | |||
| // 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). | |||
| 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 | |||
| { | |||
| StringArray defines; | |||
| defines.addTokens (getPreprocessorDefs().toString(), T(" ,;")); | |||
| defines.addTokens (getPreprocessorDefs().toString(), T(" ,;"), String::empty); | |||
| defines.removeEmptyStrings (true); | |||
| return defines; | |||
| } | |||
| @@ -853,7 +853,7 @@ const StringArray Project::BuildConfiguration::parsePreprocessorDefs() const | |||
| const StringArray Project::BuildConfiguration::getHeaderSearchPaths() const | |||
| { | |||
| StringArray s; | |||
| s.addTokens (getHeaderSearchPath().toString(), T(";")); | |||
| s.addTokens (getHeaderSearchPath().toString(), T(";"), String::empty); | |||
| return s; | |||
| } | |||
| @@ -919,7 +919,7 @@ void Project::createDefaultExporters() | |||
| const String Project::getFileTemplate (const String& templateName) | |||
| { | |||
| int dataSize; | |||
| const char* data = BinaryData::getNamedResource (templateName, dataSize); | |||
| const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize); | |||
| if (data == 0) | |||
| { | |||
| @@ -36,10 +36,12 @@ public: | |||
| //============================================================================== | |||
| enum VisualStudioVersion | |||
| { | |||
| visualStudio6, | |||
| visualStudio2005, | |||
| visualStudio2008 | |||
| }; | |||
| static const char* getNameVC6() { return "Visual C++ 6.0"; } | |||
| static const char* getName2005() { return "Visual Studio 2005"; } | |||
| static const char* getName2008() { return "Visual Studio 2008"; } | |||
| @@ -47,6 +49,7 @@ public: | |||
| { | |||
| switch (version) | |||
| { | |||
| case visualStudio6: return "MSVC6"; break; | |||
| case visualStudio2005: return "VS2005"; break; | |||
| case visualStudio2008: return "VS2008"; break; | |||
| default: jassertfalse; break; | |||
| @@ -58,7 +61,9 @@ public: | |||
| //============================================================================== | |||
| 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); | |||
| else if (settings.hasType (getValueTreeTypeName (visualStudio2008))) | |||
| return new MSVCProjectExporter (project, settings, visualStudio2008); | |||
| @@ -74,6 +79,7 @@ public: | |||
| switch (version) | |||
| { | |||
| case visualStudio6: name = "Visual C++ 6.0"; subFolderName += "MSVC6"; break; | |||
| case visualStudio2005: name = "Visual Studio 2005"; subFolderName += "VisualStudio2005"; break; | |||
| case visualStudio2008: name = "Visual Studio 2008"; subFolderName += "VisualStudio2008"; break; | |||
| default: jassertfalse; break; | |||
| @@ -118,25 +124,46 @@ public: | |||
| //============================================================================== | |||
| 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; | |||
| @@ -146,9 +173,12 @@ private: | |||
| String projectGUID; | |||
| 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) | |||
| @@ -306,7 +336,7 @@ private: | |||
| return ".exe"; | |||
| } | |||
| const String getPreprocessorDefs (const Project::BuildConfiguration& config) const | |||
| const String getPreprocessorDefs (const Project::BuildConfiguration& config, const String& joinString) const | |||
| { | |||
| StringArray defines; | |||
| defines.add ("WIN32"); | |||
| @@ -327,7 +357,7 @@ private: | |||
| } | |||
| defines.addArray (config.parsePreprocessorDefs()); | |||
| return defines.joinIntoString (";"); | |||
| return defines.joinIntoString (joinString); | |||
| } | |||
| const StringArray getHeaderSearchPaths (const Project::BuildConfiguration& config) const | |||
| @@ -449,7 +479,7 @@ private: | |||
| } | |||
| 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 | |||
| : (isDebug ? 1 : 0)); // MT static | |||
| compiler->setAttribute ("RuntimeTypeInfo", "true"); | |||
| @@ -559,12 +589,13 @@ private: | |||
| } | |||
| out << newLine << "Project(\"" << createGUID (project.getProjectName().toString() + "sln_guid") << "\") = \"" << project.getProjectName().toString() << "\", \"" | |||
| << getVCProjFile().getFileName() << "\", \"" << projectGUID << "\"" << newLine | |||
| << getVCProjFile().getFileName() << "\", \"" << projectGUID << '"' << newLine | |||
| << "EndProject" << newLine | |||
| << "Global" << 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)); | |||
| out << "\t\t" << createConfigName (config) << " = " << createConfigName (config) << newLine; | |||
| @@ -573,7 +604,7 @@ private: | |||
| out << "\tEndGlobalSection" << 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)); | |||
| out << "\t\t" << projectGUID << "." << createConfigName (config) << ".ActiveCfg = " << createConfigName (config) << newLine; | |||
| @@ -586,6 +617,216 @@ private: | |||
| << "\tEndGlobalSection" << 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 | |||
| << newLine; | |||
| for (int i = 0; i < project.getNumConfigurations(); ++i) | |||
| int i; | |||
| for (i = 0; i < project.getNumConfigurations(); ++i) | |||
| writeConfig (out, project.getConfiguration(i)); | |||
| writeObjects (out, files); | |||
| @@ -272,7 +273,7 @@ private: | |||
| << 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 $(LIBDIR)" << newLine | |||
| << "\t-@mkdir -p $(OUTDIR)" << newLine | |||
| @@ -280,13 +281,13 @@ private: | |||
| << 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 -rf $(OBJDIR)/*" << newLine | |||
| << "\t-@rm -rf $(OBJDIR)" << newLine | |||
| << newLine; | |||
| for (int i = 0; i < files.size(); ++i) | |||
| for (i = 0; i < files.size(); ++i) | |||
| { | |||
| if (shouldFileBeCompiledByDefault (files.getReference(i))) | |||
| { | |||
| @@ -919,8 +919,8 @@ private: | |||
| const char* files[] = { "extras/audio plugins/wrapper/AU/juce_AU_Resources.r", | |||
| "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])); | |||
| const char* appleAUFiles[] = { "Extras/CoreAudio/PublicUtility/CADebugMacros.h", | |||
| @@ -976,7 +976,6 @@ private: | |||
| StringArray fileIDs, appleFileIDs; | |||
| int i; | |||
| for (i = 0; i < auWrappers.size(); ++i) | |||
| { | |||
| addFile (auWrappers.getReference(i), shouldFileBeCompiledByDefault (auWrappers.getReference(i)), false); | |||
| @@ -42,7 +42,7 @@ ProjectExporter::~ProjectExporter() | |||
| //============================================================================== | |||
| int ProjectExporter::getNumExporters() | |||
| { | |||
| return 5; | |||
| return 6; | |||
| } | |||
| const StringArray ProjectExporter::getExporterNames() | |||
| @@ -50,6 +50,7 @@ const StringArray ProjectExporter::getExporterNames() | |||
| StringArray s; | |||
| s.add (XCodeProjectExporter::getNameMac()); | |||
| s.add (XCodeProjectExporter::getNameiPhone()); | |||
| s.add (MSVCProjectExporter::getNameVC6()); | |||
| s.add (MSVCProjectExporter::getName2005()); | |||
| s.add (MSVCProjectExporter::getName2008()); | |||
| 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 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; | |||
| } | |||
| @@ -71,9 +71,9 @@ public: | |||
| Value getRTASFolder() const { return getSetting ("rtasFolder"); } | |||
| 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; | |||
| @@ -270,7 +270,8 @@ private: | |||
| } | |||
| else | |||
| { | |||
| for (int i = paths.size(); --i >= 0;) | |||
| int i = paths.size(); | |||
| for (; --i >= 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 | |||
| << " #include " << paths[i].quoted() << newLine; | |||
| @@ -310,7 +311,7 @@ private: | |||
| static const String createVersionCode (const String& version) | |||
| { | |||
| StringArray configs; | |||
| configs.addTokens (version, T(",.")); | |||
| configs.addTokens (version, T(",."), String::empty); | |||
| configs.trim(); | |||
| 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) | |||
| { | |||
| String comment; | |||
| @@ -216,19 +226,19 @@ bool ResourceFile::write (const File& cppFile, OutputStream& cpp, OutputStream& | |||
| cpp << createIncludeStatement (cppFile.withFileExtension (".h"), cppFile) << 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 | |||
| << " 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 | |||
| << " switch (hash)" << newLine | |||
| << " {" << newLine; | |||
| 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 " | |||
| << 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 | |||
| << " // 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; | |||
| return true; | |||
| @@ -86,6 +86,7 @@ public: | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| friend class Canvas; | |||
| Project* project; | |||
| DrawableDocument* drawableDocument; | |||
| @@ -246,7 +246,8 @@ public: | |||
| deleteAllChildren(); | |||
| 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); | |||
| 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); | |||
| setBounds (childBounds); | |||
| for (int i = getNumChildComponents(); --i >= 0;) | |||
| for (i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| DrawableObjectComponent* dc = dynamic_cast <DrawableObjectComponent*> (getChildComponent (i)); | |||
| @@ -147,7 +147,7 @@ private: | |||
| String lastTip; | |||
| int tabIndex; | |||
| const String findTip (Component* c) const | |||
| const String findTip (Component* c) | |||
| { | |||
| 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.. | |||
| for (int i = 0; i < selectedNodes.size(); ++i) | |||
| for (i = 0; i < selectedNodes.size(); ++i) | |||
| { | |||
| Project::Item* selectedNode = selectedNodes.getUnchecked(i); | |||
| @@ -132,8 +132,7 @@ const String randomHexString (Random& random, int numChars) | |||
| 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 | |||
| #ifndef JUCE_ASIO | |||
| #define JUCE_ASIO 1 | |||
| #define JUCE_ASIO 0 | |||
| #endif | |||
| #ifndef JUCE_WASAPI | |||
| @@ -217,7 +217,7 @@ | |||
| #endif | |||
| #if ! (defined (JUCE_QUICKTIME) || JUCE_LINUX || JUCE_IPHONE || (JUCE_WINDOWS && ! JUCE_MSVC)) | |||
| #define JUCE_QUICKTIME 1 | |||
| #define JUCE_QUICKTIME 0 | |||
| #endif | |||
| #ifndef JUCE_OPENGL | |||
| @@ -233,7 +233,7 @@ | |||
| #endif | |||
| #if (! defined (JUCE_USE_CDBURNER)) && ! (JUCE_WINDOWS && ! JUCE_MSVC) | |||
| #define JUCE_USE_CDBURNER 1 | |||
| #define JUCE_USE_CDBURNER 0 | |||
| #endif | |||
| #ifndef JUCE_USE_CDREADER | |||
| @@ -273,7 +273,7 @@ | |||
| #endif | |||
| #ifndef JUCE_WEB_BROWSER | |||
| #define JUCE_WEB_BROWSER 1 | |||
| #define JUCE_WEB_BROWSER 0 | |||
| #endif | |||
| #ifndef JUCE_SUPPORT_CARBON | |||
| @@ -6314,6 +6314,8 @@ private: | |||
| Value& operator= (const Value& other); | |||
| }; | |||
| OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value); | |||
| #endif // __JUCE_VALUE_JUCEHEADER__ | |||
| /*** End of inlined file: juce_Value.h ***/ | |||
| @@ -6709,7 +6711,8 @@ private: | |||
| ReferenceCountedObjectPtr <SharedObject> object; | |||
| 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__ | |||
| @@ -9884,6 +9887,11 @@ public: | |||
| 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, | |||
| const ValueType deltaY) throw() | |||
| { | |||
| @@ -9929,7 +9937,7 @@ public: | |||
| 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; | |||
| } | |||
| @@ -10341,13 +10349,13 @@ class JUCE_API Path | |||
| { | |||
| 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(); | |||
| @@ -10355,99 +10363,91 @@ public: | |||
| 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 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; | |||
| 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 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 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, | |||
| float bodyW, float bodyH, | |||
| @@ -10458,27 +10458,25 @@ public: | |||
| float arrowPositionAlongEdgeProportional, | |||
| float arrowWidth); | |||
| void addPath (const Path& pathToAppend) throw(); | |||
| void addPath (const Path& pathToAppend); | |||
| void addPath (const Path& pathToAppend, | |||
| const AffineTransform& transformToApply) throw(); | |||
| const AffineTransform& transformToApply); | |||
| void swapWithPath (Path& other); | |||
| 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; } | |||
| @@ -10506,7 +10504,7 @@ public: | |||
| private: | |||
| const Path& path; | |||
| int index; | |||
| size_t index; | |||
| Iterator (const Iterator&); | |||
| Iterator& operator= (const Iterator&); | |||
| @@ -10514,8 +10512,7 @@ public: | |||
| 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; | |||
| @@ -10529,7 +10526,7 @@ private: | |||
| friend class PathFlatteningIterator; | |||
| friend class Path::Iterator; | |||
| ArrayAllocationBase <float, DummyCriticalSection> data; | |||
| int numElements; | |||
| size_t numElements; | |||
| float pathXMin, pathXMax, pathYMin, pathYMax; | |||
| bool useNonZeroWinding; | |||
| @@ -13359,30 +13356,34 @@ public: | |||
| }; | |||
| PropertiesFile (const File& file, | |||
| const int millisecondsBeforeSaving, | |||
| const int options); | |||
| int millisecondsBeforeSaving, | |||
| int optionFlags); | |||
| ~PropertiesFile(); | |||
| bool isValidFile() const throw() { return loadedOk; } | |||
| bool saveIfNeeded(); | |||
| bool save(); | |||
| bool needsToBeSaved() const; | |||
| void setNeedsToBeSaved (bool needsToBeSaved); | |||
| const File getFile() const { return file; } | |||
| static PropertiesFile* createDefaultAppPropertiesFile (const String& applicationName, | |||
| const String& fileNameSuffix, | |||
| 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, | |||
| const String& fileNameSuffix, | |||
| const String& folderName, | |||
| const bool commonToAllUsers); | |||
| bool commonToAllUsers); | |||
| juce_UseDebuggingNewOperator | |||
| @@ -13394,7 +13395,7 @@ private: | |||
| File file; | |||
| int timerInterval; | |||
| const int options; | |||
| bool needsWriting; | |||
| bool loadedOk, needsWriting; | |||
| void timerCallback(); | |||
| @@ -26668,7 +26669,11 @@ public: | |||
| OpenGLPixelFormat (const int bitsPerRGBComponent = 8, | |||
| const int alphaBits = 8, | |||
| 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 greenBits; /**< The number of bits per pixel to use for the green channel. */ | |||
| @@ -26688,8 +26693,6 @@ public: | |||
| static void getAvailablePixelFormats (Component* component, | |||
| OwnedArray <OpenGLPixelFormat>& results); | |||
| bool operator== (const OpenGLPixelFormat&) const throw(); | |||
| juce_UseDebuggingNewOperator | |||
| }; | |||
| @@ -27959,11 +27962,11 @@ public: | |||
| PathFlatteningIterator (const Path& path, | |||
| 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 y1; | |||
| @@ -27985,11 +27988,11 @@ private: | |||
| const AffineTransform transform; | |||
| float* points; | |||
| float tolerence, subPathCloseX, subPathCloseY; | |||
| bool isIdentityTransform; | |||
| const bool isIdentityTransform; | |||
| HeapBlock <float> stackBase; | |||
| float* stackPos; | |||
| int index, stackSize; | |||
| size_t index, stackSize; | |||
| PathFlatteningIterator (const PathFlatteningIterator&); | |||
| PathFlatteningIterator& operator= (const PathFlatteningIterator&); | |||
| @@ -217,5 +217,9 @@ void Value::callListeners() | |||
| listeners.call (&Listener::valueChanged, v); | |||
| } | |||
| OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const Value& value) | |||
| { | |||
| return stream << value.toString(); | |||
| } | |||
| END_JUCE_NAMESPACE | |||
| @@ -227,5 +227,8 @@ private: | |||
| 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__ | |||
| @@ -443,7 +443,9 @@ private: | |||
| ReferenceCountedObjectPtr <SharedObject> object; | |||
| 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, | |||
| const int alphaBits_, | |||
| const int depthBufferBits_, | |||
| const int stencilBufferBits_) throw() | |||
| const int stencilBufferBits_) | |||
| : redBits (bitsPerRGBComponent), | |||
| greenBits (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, | |||
| const int alphaBits = 8, | |||
| 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. */ | |||
| @@ -78,8 +82,6 @@ public: | |||
| OwnedArray <OpenGLPixelFormat>& results); | |||
| //============================================================================== | |||
| bool operator== (const OpenGLPixelFormat&) const throw(); | |||
| juce_UseDebuggingNewOperator | |||
| }; | |||
| @@ -53,6 +53,12 @@ BEGIN_JUCE_NAMESPACE | |||
| class StringHolder | |||
| { | |||
| public: | |||
| StringHolder() | |||
| : refCount (0x3fffffff), allocatedNumChars (0) | |||
| { | |||
| text[0] = 0; | |||
| } | |||
| //============================================================================== | |||
| static juce_wchar* create (const size_t numChars) | |||
| { | |||
| @@ -134,11 +140,13 @@ public: | |||
| private: | |||
| 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; | |||
| //============================================================================== | |||
| @@ -353,7 +361,11 @@ namespace NumberToStringConverters | |||
| 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(); | |||
| #endif | |||
| return dp; | |||
| } | |||
| @@ -1092,6 +1104,7 @@ const String String::repeatedString (const juce_wchar* const stringToRepeat, int | |||
| const int len = CharacterFunctions::length (stringToRepeat); | |||
| String result ((size_t) (len * numberOfTimesToRepeat + 1), (int) 0); | |||
| juce_wchar* n = result.text; | |||
| *n = 0; | |||
| while (--numberOfTimesToRepeat >= 0) | |||
| { | |||
| @@ -187,7 +187,7 @@ bool PropertiesFile::save() | |||
| if (childElement != 0) | |||
| e->addChildElement (childElement); | |||
| else | |||
| e->setAttribute (PropertyFileConstants::valueAttribute, | |||
| e->setAttribute (PropertyFileConstants::valueAttribute, | |||
| getAllProperties().getAllValues() [i]); | |||
| } | |||
| @@ -120,7 +120,7 @@ public: | |||
| explicitly set this flag with setNeedsToBeSaved(). | |||
| */ | |||
| bool needsToBeSaved() const; | |||
| /** Explicitly sets the flag to indicate whether the file needs saving or not. | |||
| @see needsToBeSaved | |||
| */ | |||