Browse Source

Jucer VC6 support + misc VC6 compatibility hacks.

tags/2021-05-28
Julian Storer 15 years ago
parent
commit
d7108bb5ba
25 changed files with 972 additions and 529 deletions
  1. +4
    -4
      extras/Jucer (experimental)/JuceLibraryCode/BinaryData.cpp
  2. +1
    -1
      extras/Jucer (experimental)/JuceLibraryCode/BinaryData.h
  3. +3
    -3
      extras/Jucer (experimental)/Source/model/jucer_Project.cpp
  4. +263
    -22
      extras/Jucer (experimental)/Source/model/jucer_ProjectExport_MSVC.h
  5. +5
    -4
      extras/Jucer (experimental)/Source/model/jucer_ProjectExport_Make.h
  6. +2
    -3
      extras/Jucer (experimental)/Source/model/jucer_ProjectExport_XCode.h
  7. +6
    -4
      extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.cpp
  8. +3
    -3
      extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.h
  9. +4
    -3
      extras/Jucer (experimental)/Source/model/jucer_ProjectSaver.h
  10. +16
    -6
      extras/Jucer (experimental)/Source/model/jucer_ResourceFile.cpp
  11. +1
    -0
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.h
  12. +4
    -3
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h
  13. +1
    -1
      extras/Jucer (experimental)/Source/ui/jucer_ProjectInformationComponent.cpp
  14. +1
    -1
      extras/Jucer (experimental)/Source/ui/jucer_ProjectTreeViewBase.cpp
  15. +1
    -2
      extras/Jucer (experimental)/Source/utility/jucer_UtilityFunctions.cpp
  16. +463
    -343
      juce_amalgamated.cpp
  17. +118
    -115
      juce_amalgamated.h
  18. +4
    -0
      src/containers/juce_Value.cpp
  19. +3
    -0
      src/containers/juce_Value.h
  20. +3
    -1
      src/containers/juce_ValueTree.h
  21. +44
    -3
      src/gui/components/special/juce_OpenGLComponent.cpp
  22. +5
    -3
      src/gui/components/special/juce_OpenGLComponent.h
  23. +15
    -2
      src/text/juce_String.cpp
  24. +1
    -1
      src/utilities/juce_PropertiesFile.cpp
  25. +1
    -1
      src/utilities/juce_PropertiesFile.h

+ 4
- 4
extras/Jucer (experimental)/JuceLibraryCode/BinaryData.cpp View File

@@ -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)
{ {


+ 1
- 1
extras/Jucer (experimental)/JuceLibraryCode/BinaryData.h View File

@@ -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();
} }

+ 3
- 3
extras/Jucer (experimental)/Source/model/jucer_Project.cpp View File

@@ -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)
{ {


+ 263
- 22
extras/Jucer (experimental)/Source/model/jucer_ProjectExport_MSVC.h View File

@@ -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;
}
}; };


+ 5
- 4
extras/Jucer (experimental)/Source/model/jucer_ProjectExport_Make.h View File

@@ -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)))
{ {


+ 2
- 3
extras/Jucer (experimental)/Source/model/jucer_ProjectExport_XCode.h View File

@@ -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);


+ 6
- 4
extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.cpp View File

@@ -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;
} }


+ 3
- 3
extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.h View File

@@ -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;


+ 4
- 3
extras/Jucer (experimental)/Source/model/jucer_ProjectSaver.h View File

@@ -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();


+ 16
- 6
extras/Jucer (experimental)/Source/model/jucer_ResourceFile.cpp View File

@@ -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;


+ 1
- 0
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.h View File

@@ -86,6 +86,7 @@ public:
juce_UseDebuggingNewOperator juce_UseDebuggingNewOperator
private: private:
friend class Canvas;
Project* project; Project* project;
DrawableDocument* drawableDocument; DrawableDocument* drawableDocument;


+ 4
- 3
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h View File

@@ -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));


+ 1
- 1
extras/Jucer (experimental)/Source/ui/jucer_ProjectInformationComponent.cpp View File

@@ -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)
{ {


+ 1
- 1
extras/Jucer (experimental)/Source/ui/jucer_ProjectTreeViewBase.cpp View File

@@ -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);


+ 1
- 2
extras/Jucer (experimental)/Source/utility/jucer_UtilityFunctions.cpp View File

@@ -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);
} }


+ 463
- 343
juce_amalgamated.cpp
File diff suppressed because it is too large
View File


+ 118
- 115
juce_amalgamated.h View File

@@ -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&);


+ 4
- 0
src/containers/juce_Value.cpp View File

@@ -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

+ 3
- 0
src/containers/juce_Value.h View File

@@ -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__

+ 3
- 1
src/containers/juce_ValueTree.h View File

@@ -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)
}; };


+ 44
- 3
src/gui/components/special/juce_OpenGLComponent.cpp View File

@@ -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;
} }
//============================================================================== //==============================================================================


+ 5
- 3
src/gui/components/special/juce_OpenGLComponent.h View File

@@ -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
}; };


+ 15
- 2
src/text/juce_String.cpp View File

@@ -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)
{ {


+ 1
- 1
src/utilities/juce_PropertiesFile.cpp View File

@@ -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]);
} }


+ 1
- 1
src/utilities/juce_PropertiesFile.h View File

@@ -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
*/ */


Loading…
Cancel
Save