From e80ee06365585d7175b6dc5a50e20c96148133bc Mon Sep 17 00:00:00 2001 From: Julian Storer Date: Mon, 5 Jul 2010 18:35:02 +0100 Subject: [PATCH] Added icon generation to the new Jucer (on win32 + mac), and added an icon to the juce demo. --- .../Source/Project/jucer_Project.cpp | 63 ++++- .../Source/Project/jucer_Project.h | 5 + .../Project/jucer_ProjectContentComponent.cpp | 2 +- .../Source/Project/jucer_ProjectExport_MSVC.h | 222 ++++++++++++++- .../Project/jucer_ProjectExport_XCode.h | 118 +++++++- extras/juce demo/Binary Data/juce_icon.png | Bin 0 -> 19826 bytes extras/juce demo/Builds/MacOSX/Icon.icns | Bin 0 -> 81944 bytes extras/juce demo/Builds/MacOSX/Info.plist | 2 +- .../Juce Demo.xcodeproj/project.pbxproj | 10 +- .../Builds/VisualStudio2005/Juce Demo.vcproj | 3 + .../Builds/VisualStudio2005/icon.ico | Bin 0 -> 82726 bytes .../Builds/VisualStudio2005/resources.rc | 1 + .../Builds/VisualStudio2008/Juce Demo.vcproj | 3 + .../Builds/VisualStudio2008/icon.ico | Bin 0 -> 82726 bytes .../Builds/VisualStudio2008/resources.rc | 1 + .../Builds/VisualStudio2010/Juce Demo.vcxproj | 6 + .../Juce Demo.vcxproj.filters | 13 + .../Builds/VisualStudio2010/icon.ico | Bin 0 -> 82726 bytes .../Builds/VisualStudio2010/resources.rc | 1 + extras/juce demo/Builds/iPhone/Icon.icns | Bin 0 -> 81944 bytes extras/juce demo/Builds/iPhone/Info.plist | 2 +- .../Juce Demo.xcodeproj/project.pbxproj | 10 +- extras/juce demo/Juce Demo.jucer | 4 +- .../src/model/jucer_BinaryResources.cpp | 2 +- juce_amalgamated.cpp | 257 ++++++++---------- juce_amalgamated.h | 147 ++++++---- src/io/streams/juce_MemoryOutputStream.h | 2 +- 27 files changed, 656 insertions(+), 218 deletions(-) create mode 100644 extras/juce demo/Binary Data/juce_icon.png create mode 100644 extras/juce demo/Builds/MacOSX/Icon.icns create mode 100644 extras/juce demo/Builds/VisualStudio2005/icon.ico create mode 100644 extras/juce demo/Builds/VisualStudio2005/resources.rc create mode 100644 extras/juce demo/Builds/VisualStudio2008/icon.ico create mode 100644 extras/juce demo/Builds/VisualStudio2008/resources.rc create mode 100644 extras/juce demo/Builds/VisualStudio2010/icon.ico create mode 100644 extras/juce demo/Builds/VisualStudio2010/resources.rc create mode 100644 extras/juce demo/Builds/iPhone/Icon.icns diff --git a/extras/Jucer (experimental)/Source/Project/jucer_Project.cpp b/extras/Jucer (experimental)/Source/Project/jucer_Project.cpp index a51d3c9a6a..b3c081d8fc 100644 --- a/extras/Jucer (experimental)/Source/Project/jucer_Project.cpp +++ b/extras/Jucer (experimental)/Source/Project/jucer_Project.cpp @@ -322,6 +322,31 @@ void Project::createPropertyEditors (Array & props) props.add (new TextPropertyComponent (getBundleIdentifier(), "Bundle Identifier", 256, false)); props.getLast()->setTooltip ("A unique identifier for this product, mainly for use in Mac builds. It should be something like 'com.yourcompanyname.yourproductname'"); + { + OwnedArray images; + findAllImageItems (images); + + StringArray choices; + Array ids; + + choices.add (""); + ids.add (var::null); + choices.add (String::empty); + ids.add (var::null); + + for (int i = 0; i < images.size(); ++i) + { + choices.add (images.getUnchecked(i)->getName().toString()); + ids.add (images.getUnchecked(i)->getID()); + } + + props.add (new ChoicePropertyComponent (getSmallIconImageItemID(), "Icon (small)", choices, ids)); + props.getLast()->setTooltip ("Sets an icon to use for the executable."); + + props.add (new ChoicePropertyComponent (getBigIconImageItemID(), "Icon (large)", choices, ids)); + props.getLast()->setTooltip ("Sets an icon to use for the executable."); + } + if (isAudioPlugin()) { props.add (new BooleanPropertyComponent (shouldBuildVST(), "Build VST", "Enabled")); @@ -387,6 +412,26 @@ void Project::createPropertyEditors (Array & props) props.getUnchecked(i)->setPreferredHeight (22); } +const Image Project::getBigIcon() +{ + Item icon (getMainGroup().findItemWithID (getBigIconImageItemID().toString())); + + if (icon.isValid()) + return ImageCache::getFromFile (icon.getFile()); + + return Image(); +} + +const Image Project::getSmallIcon() +{ + Item icon (getMainGroup().findItemWithID (getSmallIconImageItemID().toString())); + + if (icon.isValid()) + return ImageCache::getFromFile (icon.getFile()); + + return Image(); +} + //============================================================================== Project::Item Project::getMainGroup() { @@ -659,18 +704,24 @@ bool Project::Item::addFile (const File& file, int insertIndex) DirectoryIterator iter (file, false, "*", File::findFilesAndDirectories); while (iter.next()) - group.addFile (iter.getFile(), -1); + { + if (! project.getMainGroup().findItemForFile (iter.getFile()).isValid()) + group.addFile (iter.getFile(), -1); + } group.sortAlphabetically(); } else if (file.existsAsFile()) { - Item item (project.createNewItem (file)); - - if (canContain (item)) + if (! project.getMainGroup().findItemForFile (file).isValid()) { - item.setFile (file); - addChild (item, insertIndex); + Item item (project.createNewItem (file)); + + if (canContain (item)) + { + item.setFile (file); + addChild (item, insertIndex); + } } } else diff --git a/extras/Jucer (experimental)/Source/Project/jucer_Project.h b/extras/Jucer (experimental)/Source/Project/jucer_Project.h index 2f1abf26a2..996adbe212 100644 --- a/extras/Jucer (experimental)/Source/Project/jucer_Project.h +++ b/extras/Jucer (experimental)/Source/Project/jucer_Project.h @@ -102,6 +102,11 @@ public: //============================================================================== Value getProjectValue (const Identifier& name) const { return projectRoot.getPropertyAsValue (name, getUndoManagerFor (projectRoot)); } + Value getBigIconImageItemID() const { return getProjectValue ("bigIcon"); } + Value getSmallIconImageItemID() const { return getProjectValue ("smallIcon"); } + const Image getBigIcon(); + const Image getSmallIcon(); + Value shouldBuildVST() const { return getProjectValue ("buildVST"); } Value shouldBuildRTAS() const { return getProjectValue ("buildRTAS"); } Value shouldBuildAU() const { return getProjectValue ("buildAU"); } diff --git a/extras/Jucer (experimental)/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Jucer (experimental)/Source/Project/jucer_ProjectContentComponent.cpp index e0e018454e..ed354fe305 100644 --- a/extras/Jucer (experimental)/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Jucer (experimental)/Source/Project/jucer_ProjectContentComponent.cpp @@ -102,7 +102,7 @@ void ProjectContentComponent::setProject (Project* newProject) project->addChangeListener (this); if (currentDocument == 0) - commandManager->invoke (CommandIDs::showProjectSettings, true); + invokeDirectly (CommandIDs::showProjectSettings, true); updateMissingFileStatuses(); } diff --git a/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_MSVC.h b/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_MSVC.h index ab7885f08a..0fa44c825f 100644 --- a/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_MSVC.h +++ b/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_MSVC.h @@ -35,7 +35,7 @@ class MSVCProjectExporterBase : public ProjectExporter public: //============================================================================== MSVCProjectExporterBase (Project& project_, const ValueTree& settings_, const char* const folderName) - : ProjectExporter (project_, settings_) + : ProjectExporter (project_, settings_), hasIcon (false) { if (getTargetLocation().toString().isEmpty()) getTargetLocation() = getDefaultBuildsRootFolder() + folderName; @@ -78,6 +78,8 @@ public: protected: String projectGUID; + File rcFile, iconFile; + bool hasIcon; const File getProjectFile (const String& extension) const { return getTargetFolder().getChildFile (project.getProjectFilenameRoot()).withFileExtension (extension); } @@ -255,6 +257,180 @@ protected: << "EndGlobal" << newLine; } + //============================================================================== + static bool writeRCFile (const File& file, const File& iconFile) + { + return file.deleteFile() + && file.appendText ("IDI_ICON1 ICON DISCARDABLE " + + iconFile.getFileName().quoted(), false, false); + } + + static void writeIconFile (const Array& images, OutputStream& out) + { + out.writeShort (0); // reserved + out.writeShort (1); // .ico tag + out.writeShort ((short) images.size()); + + MemoryOutputStream dataBlock; + + const int imageDirEntrySize = 16; + const int dataBlockStart = 6 + images.size() * imageDirEntrySize; + + for (int i = 0; i < images.size(); ++i) + { + const Image& image = images.getReference (i); + const int w = image.getWidth(); + const int h = image.getHeight(); + const int maskStride = (w / 8 + 3) & ~3; + + const size_t oldDataSize = dataBlock.getDataSize(); + dataBlock.writeInt (40); // bitmapinfoheader size + dataBlock.writeInt (w); + dataBlock.writeInt (h * 2); + dataBlock.writeShort (1); // planes + dataBlock.writeShort (32); // bits + dataBlock.writeInt (0); // compression + dataBlock.writeInt ((h * w * 4) + (h * maskStride)); // size image + dataBlock.writeInt (0); // x pixels per meter + dataBlock.writeInt (0); // y pixels per meter + dataBlock.writeInt (0); // clr used + dataBlock.writeInt (0); // clr important + + const Image::BitmapData bitmap (image, 0, 0, w, h); + const int alphaThreshold = 5; + + int y; + for (y = h; --y >= 0;) + { + for (int x = 0; x < w; ++x) + { + const Colour pixel (bitmap.getPixelColour (x, y)); + + if (pixel.getAlpha() <= alphaThreshold) + { + dataBlock.writeInt (0); + } + else + { + dataBlock.writeByte ((char) pixel.getBlue()); + dataBlock.writeByte ((char) pixel.getGreen()); + dataBlock.writeByte ((char) pixel.getRed()); + dataBlock.writeByte ((char) pixel.getAlpha()); + } + } + } + + for (y = h; --y >= 0;) + { + int mask = 0, count = 0; + + for (int x = 0; x < w; ++x) + { + const Colour pixel (bitmap.getPixelColour (x, y)); + + mask <<= 1; + if (pixel.getAlpha() <= alphaThreshold) + mask |= 1; + + if (++count == 8) + { + dataBlock.writeByte (mask); + count = 0; + mask = 0; + } + } + + if (mask != 0) + dataBlock.writeByte (mask); + + for (int i = maskStride - w / 8; --i >= 0;) + dataBlock.writeByte (0); + } + + out.writeByte ((char) w); + out.writeByte ((char) h); + out.writeByte (0); + out.writeByte (0); + out.writeShort (1); // colour planes + out.writeShort (32); // bits per pixel + out.writeInt ((int) (dataBlock.getDataSize() - oldDataSize)); + out.writeInt (dataBlockStart + oldDataSize); + } + + jassert (out.getPosition() == dataBlockStart); + out << dataBlock; + } + + static const Image getBestIconImage (const Image& im1, const Image& im2, int size) + { + Image im; + + if (im1.isValid() && im2.isValid()) + { + if (im1.getWidth() >= size && im2.getWidth() >= size) + im = im1.getWidth() < im2.getWidth() ? im1 : im2; + else if (im1.getWidth() >= size) + im = im1; + else if (im2.getWidth() >= size) + im = im2; + else + return Image(); + } + else + { + im = im1.isValid() ? im1 : im2; + } + + if (size == im.getWidth() && size == im.getHeight()) + return im; + + if (im.getWidth() < size && im.getHeight() < size) + return Image(); + + Image newIm (Image::ARGB, size, size, true); + Graphics g (newIm); + g.drawImageWithin (im, 0, 0, size, size, + RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, false); + return newIm; + } + + bool createIconFile() + { + Array images; + + const Image smallIcon (project.getSmallIcon()); + const Image bigIcon (project.getBigIcon()); + + Image im (getBestIconImage (smallIcon, bigIcon, 16)); + if (im.isValid()) + images.add (im); + + im = getBestIconImage (smallIcon, bigIcon, 32); + if (im.isValid()) + images.add (im); + + im = getBestIconImage (smallIcon, bigIcon, 48); + if (im.isValid()) + images.add (im); + + im = getBestIconImage (smallIcon, bigIcon, 128); + if (im.isValid()) + images.add (im); + + if (images.size() == 0) + return true; + + MemoryOutputStream mo; + writeIconFile (images, mo); + + iconFile = getTargetFolder().getChildFile ("icon.ico"); + rcFile = getTargetFolder().getChildFile ("resources.rc"); + + hasIcon = FileHelpers::overwriteFileWithNewDataIfDifferent (iconFile, mo) + && writeRCFile (rcFile, iconFile); + return hasIcon; + } + MSVCProjectExporterBase (const MSVCProjectExporterBase&); MSVCProjectExporterBase& operator= (const MSVCProjectExporterBase&); }; @@ -298,6 +474,14 @@ public: //============================================================================== const String create() { + createIconFile(); + + if (hasIcon) + { + juceWrapperFiles.add (RelativePath (iconFile.getFileName(), RelativePath::buildTargetFolder)); + juceWrapperFiles.add (RelativePath (rcFile.getFileName(), RelativePath::buildTargetFolder)); + } + { XmlElement projectXml ("VisualStudioProject"); fillInProjectXml (projectXml); @@ -413,7 +597,7 @@ protected: XmlElement* const group = createGroup (groupName, parent); for (int i = 0; i < files.size(); ++i) - if (files.getReference(i).hasFileExtension ("cpp;c;h")) + if (files.getReference(i).hasFileExtension ("cpp;c;cc;h;hpp;rc;ico")) addFile (files.getReference(i), *group, false, useStdcall && shouldFileBeCompiledByDefault (files.getReference(i))); } @@ -953,6 +1137,8 @@ public: //============================================================================== const String create() { + createIconFile(); + { XmlElement projectXml ("Project"); fillInProjectXml (projectXml); @@ -1171,6 +1357,21 @@ protected: addFilesToCompile (getRTASFilesRequired(), *cppFiles, *headerFiles, true); } + if (hasIcon) + { + { + XmlElement* iconGroup = projectXml.createNewChildElement ("ItemGroup"); + XmlElement* e = iconGroup->createNewChildElement ("None"); + e->setAttribute ("Include", ".\\" + iconFile.getFileName()); + } + + { + XmlElement* rcGroup = projectXml.createNewChildElement ("ItemGroup"); + XmlElement* e = rcGroup->createNewChildElement ("ResourceCompile"); + e->setAttribute ("Include", ".\\" + rcFile.getFileName()); + } + } + { XmlElement* e = projectXml.createNewChildElement ("Import"); e->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets"); @@ -1313,6 +1514,23 @@ protected: addFilesToFilter (juceWrapperFiles, project.getJuceCodeGroupName(), *cpps, *headers, *groups); addFilesToFilter (getVSTFilesRequired(), "Juce VST Wrapper", *cpps, *headers, *groups); addFilesToFilter (getRTASFilesRequired(), "Juce RTAS Wrapper", *cpps, *headers, *groups); + + if (iconFile.exists()) + { + { + XmlElement* iconGroup = filterXml.createNewChildElement ("ItemGroup"); + XmlElement* e = iconGroup->createNewChildElement ("None"); + e->setAttribute ("Include", ".\\" + iconFile.getFileName()); + e->createNewChildElement ("Filter")->addTextElement (project.getJuceCodeGroupName()); + } + + { + XmlElement* rcGroup = filterXml.createNewChildElement ("ItemGroup"); + XmlElement* e = rcGroup->createNewChildElement ("ResourceCompile"); + e->setAttribute ("Include", ".\\" + rcFile.getFileName()); + e->createNewChildElement ("Filter")->addTextElement (project.getJuceCodeGroupName()); + } + } } //============================================================================== diff --git a/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_XCode.h b/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_XCode.h index 35d1d5e90e..f5970fa9bf 100644 --- a/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_XCode.h +++ b/extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_XCode.h @@ -109,6 +109,9 @@ public: { infoPlistFile = getTargetFolder().getChildFile ("Info.plist"); + if (! createIconFile()) + return "Can't write the icon file"; + File projectBundle (getProjectBundle()); if (! projectBundle.createDirectory()) return "Can't write to the target directory"; @@ -135,7 +138,7 @@ private: OwnedArray pbxBuildFiles, pbxFileReferences, groups, misc, projectConfigs, targetConfigs; StringArray buildPhaseIDs, resourceIDs, sourceIDs, frameworkIDs; StringArray frameworkFileIDs, rezFileIDs, resourceFileRefs; - File infoPlistFile; + File infoPlistFile, iconFile; int64 projectIDSalt; const bool iPhone; @@ -179,6 +182,14 @@ private: resourceFileRefs.add (createID (plistPath)); } + if (iconFile.exists()) + { + RelativePath iconPath (iconFile, getTargetFolder(), RelativePath::buildTargetFolder); + addFileReference (iconPath); + resourceIDs.add (addBuildFile (iconPath, false, false)); + resourceFileRefs.add (createID (iconPath)); + } + addProjectItem (project.getMainGroup()); for (int i = 0; i < project.getNumConfigurations(); ++i) @@ -210,6 +221,109 @@ private: addProjectObject(); } + static const Image fixMacIconImageSize (Image& image) + { + const int w = image.getWidth(); + const int h = image.getHeight(); + + if (w != h || (w != 16 && w != 32 && w != 48 && w != 64)) + { + const int newSize = w >= 128 ? 128 : (w >= 64 ? 64 : (w >= 32 ? 32 : 16)); + Image newIm (Image::ARGB, newSize, newSize, true); + Graphics g (newIm); + g.drawImageWithin (image, 0, 0, newSize, newSize, + RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, false); + return newIm; + } + + return image; + } + + void writeIcnsFile (const Array& images, OutputStream& out) + { + MemoryOutputStream data; + + for (int i = 0; i < images.size(); ++i) + { + Image image (fixMacIconImageSize (images.getReference (i))); + + const int w = image.getWidth(); + const int h = image.getHeight(); + + const char* type = 0; + const char* maskType = 0; + + if (w == h) + { + if (w == 16) { type = "is32"; maskType = "s8mk"; } + if (w == 32) { type = "il32"; maskType = "l8mk"; } + if (w == 48) { type = "ih32"; maskType = "h8mk"; } + if (w == 128) { type = "it32"; maskType = "t8mk"; } + } + + if (type != 0) + { + data.write (type, 4); + data.writeIntBigEndian (8 + 4 * w * h); + + const Image::BitmapData bitmap (image, 0, 0, w, h); + + int y; + for (y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const Colour pixel (bitmap.getPixelColour (x, y)); + data.writeByte ((char) pixel.getAlpha()); + data.writeByte ((char) pixel.getRed()); + data.writeByte ((char) pixel.getGreen()); + data.writeByte ((char) pixel.getBlue()); + } + } + + data.write (maskType, 4); + data.writeIntBigEndian (8 + w * h); + + for (y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const Colour pixel (bitmap.getPixelColour (x, y)); + data.writeByte ((char) pixel.getAlpha()); + } + } + } + } + + jassert (data.getDataSize() > 0); // no suitable sized images? + + out.write ("icns", 4); + out.writeIntBigEndian (data.getDataSize() + 8); + out << data; + } + + bool createIconFile() + { + Array images; + + Image bigIcon (project.getBigIcon()); + if (bigIcon.isValid()) + images.add (bigIcon); + + Image smallIcon (project.getSmallIcon()); + if (smallIcon.isValid()) + images.add (smallIcon); + + if (images.size() == 0) + return true; + + MemoryOutputStream mo; + writeIcnsFile (images, mo); + + iconFile = getTargetFolder().getChildFile ("Icon.icns"); + return FileHelpers::overwriteFileWithNewDataIfDifferent (iconFile, mo); + } + bool writeInfoPlistFile() { if (! hasPList()) @@ -219,7 +333,7 @@ private: XmlElement* dict = plist.createNewChildElement ("dict"); addPlistDictionaryKey (dict, "CFBundleExecutable", "${EXECUTABLE_NAME}"); - addPlistDictionaryKey (dict, "CFBundleIconFile", ""); + addPlistDictionaryKey (dict, "CFBundleIconFile", iconFile.exists() ? iconFile.getFileName() : String::empty); addPlistDictionaryKey (dict, "CFBundleIdentifier", project.getBundleIdentifier().toString()); addPlistDictionaryKey (dict, "CFBundleName", project.getProjectName().toString()); diff --git a/extras/juce demo/Binary Data/juce_icon.png b/extras/juce demo/Binary Data/juce_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..396aaeccb821d497fdab5d3e406d9a3046c7ee54 GIT binary patch literal 19826 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%0AHl8sA6Rlewn?6! zq>l3w0{{Yunh5|`B4B|g0Cp^;0W!^rR3)%U3-IzfOK{113$f`ceSE3N!upFDbSpNm z59LI5=w{|&%WZrBMUpza(SWCrio`=1Qo9(`r_cuWueB@F9mIz=8hEeCU(A~jqo8)@K7c4K>#3tXpsQWdk4rPhO9`D z%YhW>=%oO>B!FU8Lvel)D=k$?Yo?Ft%Aa2;GQIoA#>&skz$wMUz$MKM#9RyTQ{|x^>|7Q69_9p}Au&nP-zA=1#{F&kVi!Z>U z|3AYoF3unKB-HL5fAjU;(MNBdTzL86Ed%c5bl7H6kyrKn#xlG2pIY@AKmgGy0pLmm zu!O*dRvK_3B>*lYaSkN4tk4pH*N~q@JU~l9OXuT5b>@#B*}%7^b1*Wn^0G5<2y-!T zD*+RQEHFU`axk!g&guhgSz|&vX#f z#rzlWfy}=@e`f%7-ay9^f8yr<_N|W`DBh?u&=F zKL7gg`6u{3dgNvFzmOvKI|J^8oIlZ8`G2v@>r=I{0}w#8P5`*t1<1q4=+y#p?&m}k zM@|SJeJt$EOu!}p3x_Z_Czpkiw75R&PbnSdZ%X_hUkQOTF(V7ZKhTC*&}=Xl6Zkqc z(8UqVu#K!(f)jMk?*D&~2_MjPxgggvgRWxz^OxcO-@goRr8Hh%d;jUlWp;@tCvM$) z_44D_ub=+>`}y&SwfB>Rb0w7c+pqB{j zNHixFF?OUx0MpOR!o&nj5R5FmY%FZ53i7-L0_>vV&#w#d$tbXji;D3vKfcAr!SI)z zM^uuH<>xn6a9xh(chKEvf7m&He|q=&$It)Fzkf+9e|!7-_4g0Y9{+qJtMmT+^LMXr zJ$e2K*r5CU^B=>XKmY#0aw@iiG=5^q`PepZpzq@SN2?+q9RLInJre-FDgn7fKps0l zPY@i05&;9+_2>+!yDP9>iHD=D&w!=Dg?^SY`WXtp(Q-X{WTQtquI<}2EAr6+KmgHu zV?OdFtjK|hek?64AlZ;;SO6j?09Ybm!IKD>@GM%v*V)4s@x(;_PaKKh7nYViu89B7 zK&R0wfB+hZlNoU3u>VMb%8VAUtkA$?hXy7)S}DPXlmJ+;Bmi8A0N1!K`cXLy445aV z<2pkLIRX5_QOqN^?$PUd1_nCrO#%oYdRGC&R0~Wv+6b&@JpnefDu4|w0l+XLk<|gQ z#Xh!!G=JeJ1%Bg+_U?5L z0BpS#Y~8~D4A`${8z>% literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/MacOSX/Icon.icns b/extras/juce demo/Builds/MacOSX/Icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..a1d2ba8423941483ac31efaf090732faf70ae952 GIT binary patch literal 81944 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%0DPVM z6awn|M>X%zcjS}@Dk&AE?YejB?fp8Z#|GWF0L~@AIt@eOTXh{cX4(tqZPBjW-yMH? z+L%GzS|^4zuIs9s9*KMX4@3Yf&=JXPd*x1;wdi8GJG=1)7v7pNerT_@DNX$9yE)xZ z1|I)VasFRyqlaP{-qlZN-{&>|)XWmpE;S2(~DysIq0=sIBZT@O{fAzX9! zl-v8|SSoOA6k!z+p#)AOF4_-C6&1$NU-Nb8l&% z8jTXT8){D!3P^!k^%|o9t8?EGlV&aW#riHc{W<@MnG=Tf>6jK9+|Z+#3OvdH3(yi; z<@6glY1X3^v?OtD`MjAEhxhH2-ZZokB;O|SbsRtou>db3DYHwz5tC*<@ZO&{J>}~^ zJp0}QGbfJdo0B1{-)@wAg?@5?UV!KyDF-ld#(ggzE3Ylke*O1-GbRl0m(wb-`0777 z4Ak7C2+oTG$mu(L{Iogq^2(=)F0Pw9XWIB-ec8Pqs~-!S9mCx9w_pKQfMNixI`_#P zd*|H`t}KsBd}i^3ci%Z?XrE3Qi4p!@B~*V}Fn~P|z(7PoddFJ^-!Wy@{fiFYtV3Wr z{OO)7tkKFmmGbIZtjpax+Wg7mj}O_?&4IM)dFA z9u?ren0;}qf1MIk11|3MeL`bXv%2)n9W!X01BiGU)b+)9!iTspW^tk{vN0T0Z}QyQfXOeNeBC8A(w= z*a0ASVO;N|xOZ~r32M*-A`;Ttckh=wX3C5?55BNuPiePdT-v?t`3L9Bm^?bSU$=H? z@e%$F>S6~(8Fryqw!X+62(3HaGGN5GDKqCh_|(EuZ3H>J@$CiZeahJ31A2AJOo<8g z^^%)lY!B)Ho(MAz{7XF%wz}c;?w_j*XvyArL^by>1|GXz(T9RK>ka~Q};+Gc8yZ;{9d!MfD z)0;(y`l{V0g>PT-CkqWc8wEtfrDSAd1S7^yo;Lg52jeXc%^7b4!a`KGcPX2me zSN{5CuRb|{?gRJEo;GRBh(Ue2wa-YA8<5Jr`^GXhod$CIRU}5xzH6U>!$(h;I(^nX z_ul`&Lk~YZciy~tkFeo&?!yl~^uYc1-ZN|Z)Cr@959r;Mz3UsWZf5t9J^~DYn~>b= zdHV#(5p=nw|IiVm$4{Di*YugQX5W4HJ#%Ec=bpP~&z?DB`dw2ejUPQ?$Zfs4v_tQa zh7D*XW83x>L;*Md)${hn7PRE_tWMqg^dCHIILrJbBWjiQ~tQ z9X)E~u)+QNbnldv-i&kiu2=32c(llB1lR-@o7AFJ+fH43_U_w%z@WiHb909cXB(C~ zbm-tg18(cvyJy!_#M~7!NCii3fUW0+-M2v@*n1ll9TOWHr?=SHnCK|% z!3_z*4qUH#6}$cQIu5u2*bTdny&7=uvA=&nKwuDCU_gMsKldOv@WKvcw+i3>TQCBB z_jN5d_d3{m?de&+zL(zW*Z1_SSJ$HswqO_Rz*eZMz*ox#a7S!D$KG>S*IKpQ^j51D zH=#RY3%X-vZU0u&;25f58#*?@J37{|G`z*uckKGE#NF>|0P+>1U_*bh>7UAI;Pe~* EAODerLjV8( literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/MacOSX/Info.plist b/extras/juce demo/Builds/MacOSX/Info.plist index fbc0914d22..328d0a0fd8 100644 --- a/extras/juce demo/Builds/MacOSX/Info.plist +++ b/extras/juce demo/Builds/MacOSX/Info.plist @@ -6,7 +6,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - + Icon.icns CFBundleIdentifier com.rawmaterialsoftware.jucedemo CFBundleName diff --git a/extras/juce demo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj b/extras/juce demo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj index 0144a3582b..30d0ca4e39 100644 --- a/extras/juce demo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/juce demo/Builds/MacOSX/Juce Demo.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ F1BAE9DCD179C8784FF28F8D = { isa = PBXBuildFile; fileRef = 4A96850C150C1C6D87A0D21A; }; B9911F3AC6CADFB47D1EA8D7 = { isa = PBXBuildFile; fileRef = 4D3E0D18D24F78B6BDE0E5DA; }; 452052BBDBAF17DCC06EF521 = { isa = PBXBuildFile; fileRef = E0C3359BB4B5260CEB917D46; }; + C0A3C433D146C7E1FFCADFB2 = { isa = PBXBuildFile; fileRef = 4ADECB09FD213B2E910EA229; }; 78A66C2F9A9E2E6D011D8E5E = { isa = PBXBuildFile; fileRef = 885A20D277AD743C21C822B5; }; CE5C46E66485B7D77B5ADB4E = { isa = PBXBuildFile; fileRef = 42291DB48BF81754D90FE200; }; 2E2DB52D03DD6A56FAC937A4 = { isa = PBXBuildFile; fileRef = 0704E2D6B0D1B38FBBBC6B85; }; @@ -56,6 +57,7 @@ E0C3359BB4B5260CEB917D46 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; 39B98C60B57B831FE5215CDD = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1A9DEA62F6A3CD1FB5CF105B = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = SOURCE_ROOT; }; + 4ADECB09FD213B2E910EA229 = { isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 885A20D277AD743C21C822B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../Source/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; }; 42291DB48BF81754D90FE200 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../Source/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; }; 49138F5652E637AA67CD4B70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../Source/MainDemoWindow.h; sourceTree = SOURCE_ROOT; }; @@ -90,6 +92,7 @@ A869663CA0E96FE15BB42A97 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = "demo table data.xml"; path = "../../Binary Data/demo table data.xml"; sourceTree = SOURCE_ROOT; }; A76B69386F1F19647804510D = { isa = PBXFileReference; lastKnownFileType = file.zip; name = icons.zip; path = "../../Binary Data/icons.zip"; sourceTree = SOURCE_ROOT; }; 013E12213AD7B4BEB28A31BE = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce.png; path = "../../Binary Data/juce.png"; sourceTree = SOURCE_ROOT; }; + 3369CDF7AFD79D6F3B3744B1 = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce_icon.png; path = "../../Binary Data/juce_icon.png"; sourceTree = SOURCE_ROOT; }; C7327AD5191A22C1FBD4F5F9 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = treedemo.xml; path = "../../Binary Data/treedemo.xml"; sourceTree = SOURCE_ROOT; }; EE37A0ECE471A928C6170F9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = SOURCE_ROOT; }; A6B37799E63CCE882A3383FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; }; @@ -131,6 +134,7 @@ A869663CA0E96FE15BB42A97, A76B69386F1F19647804510D, 013E12213AD7B4BEB28A31BE, + 3369CDF7AFD79D6F3B3744B1, C7327AD5191A22C1FBD4F5F9 ); name = "Binary Data"; sourceTree = ""; }; A10CCE1B2A215D5AE12386E3 = { isa = PBXGroup; children = ( 885A20D277AD743C21C822B5, @@ -149,7 +153,8 @@ 4D526A336B2E97ED42CADAD7, 8679333E781A0A0116AE5D26 ); name = "Juce Library Code"; sourceTree = ""; }; 019CD423F1EFF7A1A0A079DD = { isa = PBXGroup; children = ( - 1A9DEA62F6A3CD1FB5CF105B ); name = Resources; sourceTree = ""; }; + 1A9DEA62F6A3CD1FB5CF105B, + 4ADECB09FD213B2E910EA229 ); name = Resources; sourceTree = ""; }; 244B9AF7D858999910FD243E = { isa = PBXGroup; children = ( 2B37CDCFCBC0AC0AEAA9A479, 6A7D4DC561F2DD95ABD76F0D, @@ -234,7 +239,8 @@ C264FE1BF62B589B345E0C81 = { isa = XCConfigurationList; buildConfigurations = ( F46B3E8DBAFA746E04F4F62C, 8EF7C7FFD55219581A5075F3 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - AE930F136F638C3C939F7146 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + AE930F136F638C3C939F7146 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C0A3C433D146C7E1FFCADFB2 ); runOnlyForDeploymentPostprocessing = 0; }; 7A3A0C722E5F96990CA1B5F2 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 78A66C2F9A9E2E6D011D8E5E, CE5C46E66485B7D77B5ADB4E, diff --git a/extras/juce demo/Builds/VisualStudio2005/Juce Demo.vcproj b/extras/juce demo/Builds/VisualStudio2005/Juce Demo.vcproj index 0032c41608..189a5ceede 100644 --- a/extras/juce demo/Builds/VisualStudio2005/Juce Demo.vcproj +++ b/extras/juce demo/Builds/VisualStudio2005/Juce Demo.vcproj @@ -202,6 +202,7 @@ + @@ -224,6 +225,8 @@ + + diff --git a/extras/juce demo/Builds/VisualStudio2005/icon.ico b/extras/juce demo/Builds/VisualStudio2005/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..853e63debcee70a77cbac5428c8d32f28b92f29b GIT binary patch literal 82726 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 literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/VisualStudio2005/resources.rc b/extras/juce demo/Builds/VisualStudio2005/resources.rc new file mode 100644 index 0000000000..b20115c096 --- /dev/null +++ b/extras/juce demo/Builds/VisualStudio2005/resources.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "icon.ico" \ No newline at end of file diff --git a/extras/juce demo/Builds/VisualStudio2008/Juce Demo.vcproj b/extras/juce demo/Builds/VisualStudio2008/Juce Demo.vcproj index 22b71fbe6f..89859b2f07 100644 --- a/extras/juce demo/Builds/VisualStudio2008/Juce Demo.vcproj +++ b/extras/juce demo/Builds/VisualStudio2008/Juce Demo.vcproj @@ -202,6 +202,7 @@ + @@ -224,6 +225,8 @@ + + diff --git a/extras/juce demo/Builds/VisualStudio2008/icon.ico b/extras/juce demo/Builds/VisualStudio2008/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..853e63debcee70a77cbac5428c8d32f28b92f29b GIT binary patch literal 82726 zcmeF437pN<|Nk#D7{d(1*tcPr8OH2p?EAj2i6Wwq5|L7=v?~>r7HwK6E!y`)p)l66 zR9Z+X(qb#y+{(hhLIUkRwkSEkry0k~f z7|*CskEesjt(MlUa@V!EbWpB&Tj60ZqW z-`p=_WRAJ`MPr)3VNAKMk3693i*b+0R@1NQrSIzu@|w~;a!mWnyr%1wUQ_qn9MeMM zi5rq*+D!18h8O0Tngespfai>W%XWYAhQ6;F6Eo0jig(eox6d(Ud*_%D zcX-Xr7d4)Xye3@z7wep3is;#T++$4gluuUa((+tiy48IbcUJ%P&(pJNtV!qRn6qy3 znr36YrpIKjX|7}9upCpgV~z>c^}X&lCgHM`@9NTUt}kA7XlClYKkpx)dt9RDKX;nf zRPOJ8{?rlbSGZ_B-fM>3?ltw)N57|xDc@(_wOpIqidGxF^7#%Q7}NDeuki@aVH#`9 zSve+abndwIOx>q?P5-6Fq};J%XVEe}{=@?%s*OubyzTpM&eRwZhl_@7a!fPfuHOy* z`xV#qoo^R?=l&`0#)83zi_XX}2gCL04!wtaZ_zUaPh zU*f*zub;yC z&)Kj-UKbf*ad#s<7DM*-tFQL6LI;I%_xPtkEDYm9iNY`1r}RlV{DU))1Jllr_dnXd?>pE#yJ zYfRmH51VS^wj3 zd5tmGtup2eeNL5L&U#6DTe95zP1%yg#4yh{3Tkn~!8^)*0!-uRl&T>7xj zT=T5YOxE{jerQZR*||ysmi-tW)q1+_*-21EaID5Sdq>2KeN{*BdOk)v`bv#;(rV#I^r?2e%n1$+}BY)f9>=AtQ)z~I37oDCqrfl=M>k4}c4^%(kIIucjyM%BN)icM;Tj(G-ZO4J4-( zd%nIw{dO0){UmrktxV#zPbEE=UnssT339R6BgNSlKQJDu&tELSGx*b-`bcWnLb~AkAJ{x+RL{Xb&uD) zxzcBDl)P2!CqKo_XYwVklFU`m_xNGpg?{0e%A(0dcYDn{>wV_h_ly}Qc|=zw&-R&8 z$+tbLj*|sEH?3?~ky-<*kKDAovHa2--tw7n`9wto@K8zJ^E}bvF@4|TDzDQQzafX0 zKj1S}ZNPF?gHKJ)z7tix-JX00jn{nLvoX>O;UJJ<=nsA@b`M#2#chq#R8F#PW zzXKPH2Ydi!#jCeTmt=_sRnA(zEyNSjR()eDY0)Lh^d3{^`kjvcq<`es&1Vj7^^EwS z_-_;L_nJu$`piSpdn48F)sK1|pBVqn`ql31(M#8A+{i)I;p@Jai`-8A+WyOwEZc8% z+;uyBt)$Pcf7xfkgkSgd_A|Kfh_6a@&oNV<@|jP+G3IIM!E*A8`QDxvcnsCJCy9r; zN;g*-zHYnvZ=?Qg+!Gld(Q$CC%f3AX{jYi5XCeZ4o%?~$Qu5;m%7>mRnaY$cxbk7I z>3F&S*jm0kzO>~<_ZWEotEC6pix(>mSn-wUkI!gzKzOl`>g}ox->@_Nbz?3Uj%tXW z;1S;*9xSe7-zi@6>N4r|hrFhY=t*Cbg?DsOr0{X!46nK5KCg)oj^Iys|0Q(&&7yr1 z$w2u|Z!MOxjZ^>b7FVJ3+e=d98}}EVOc8DqrB^dX4>_E^KT_*GKS@j=0Vp656$7{Sj#9QcI z_x<^dOvmauCrD2Q(wg7lnSr-T2Z`V6tKW3l)7UF_9Eq-e;d$!W@_pbSiWTwHOs;gs zicd0R|GG#PZ+=PoQnFz2ZpXpj#E-xorGypYJ^Bo%!NRWW$b&Bm7oE~9=PN7b0rrCj?3PgNWB<&N4n|7wyR^_eu$mAE5$u6(QemDjmyr?{*MGV+BD_fJl!%&l42sBn?z#%?7d}|E>jzInw|r}6$<(=% zidUN4tC*)+tgawVJsk~xqOXGRbkOk_+SU*$e2?*YJlE#PH$Eu4yxR}Owt74v@B5*U zj)kW9!J}g^aL(a8LC97=6w|$maZm0|AN1w)>1$~cbe~kgP{GkWMPAxb=ls_k9RgqD zJC+s@x0H1OF&y9XJ8?8T@^5I2g>hCBKw)$-q$d_aRxR*1d6pyrK1y{#v>?!4>#Nh! z7X zavPJ16)S&pSVa0gMI&206c*KCcCo0Ak8vy-+3KONh>V%VidUW*>hWBm^T!B=3VI5# zVetZ<1H7E7MqCgh0N;%JT#b2rSjqV5C8~~jJtFDxPb1rWxV!v-O^2$E+TxA5^am3& zafjhp^@6S53IjhqT)O@8y(N>M+FYXQgtv>8jJr$MU#j~I6Yw11qm}?UIbq$YYXcjy z2Ct&l+6vBAzvIAXsrWlrM0LvESN+nTOv22=CS86(mVAAD%|PJ$28t6CA2?!aT>gtG z-D&0i$b^||!b>%qrTdN7ea{iVhlv7s^JLf?Vqxf-A^_*-hef7Mk4Tugvf|(kzt_3# zfJuDDm<)}#xniU&`9J3TlLpp zfbQZMY(7CB3*6ut@Xpx#6%8$VX+-TQ@0A;{IVWYV*QCjBAFVj(l~3jS$?wAtChn=F z`J$Vi@S6KK`tzUQpL}R<`GoUz?p(#h56DM+`U9VtuXC=EpV~omBOjPHPdSsbzxI_% znD${uC+cpCPGTuSfou&_(ZrQE-&#$~^n4B@M>#y(qkzDF?vIZ0v? z$2XVnOw8s{{^AbB#5aB-UKfwF6^&losNAyV#mJix&ojSQOaAn^in(7~=QCI7IiP2j z?p^EJy{3HXW9uVJM)C~kT6h;5Q_vQn6VZ>ILkoMxl!&?Q!)jx8nM`C-czR{4^3961 ziz%LC-0m2|#u?Dzoy|T&ymXiFK5?dhUdnwg&q^+gIP}SPlrs@dlHoJ;6C+$jCd^tZ zx{uX3x(d)8r3A-n(20CgSq&%*|!l-`z)W5H7ezIS2BB&5&*3srvYzOjP_03p9@NG@dqs7{RgR8Qq&C z=u@(6ySpk4{PducpOY+JFFBo|92ERPZo@r>z|X{)T@`1(_^mMyD>e$uQwN?;+{`nd zuYADkTQnc7@n?#cDh>JaNM!kbk7zt+39viZ&b%7>7C)wS@#1C1MrOXgwf;kz)6{)3 z#G7w?sXT{b^I$v^I39STy7>FkA0^+C_h7Mp;5GaWZpPiEJd|*iDtae9s(f^l1wTfX zu64D>)kRQSkQWW$FZ{1QrR&`CM$Dw$jtxSWHy2G`-(XCX@=5vejeAVRB_AJt;xnT) z9`b|k-}3s*y(7d+FDXycNqPxch`nx~iB7y{iTLPjjSYQ>ZVA@V_038YD?KKv;Dh|==tf-`%J&<3O0Ut zhifL@?=v^7&DEvqI}1ClTtMlj?|xgXNcb>~GZ+tHN!-*|HQULPNTW{kb(yVCdK zo9C9xUJ55KNJno!WXu!N*VJ4Dn}f2?z*ufmzNdcy@Q;3S^0tq7&B7hB$?6y0#dd?g zhLXPugTBZqRiVpG8fP;Bylxx3gx+aWrq*Ro){rmh_>Ow+XC$*7$BAFWGvt4nqa1ms z*R1%=XV!cn+$wj>GX&E~*rqAU8|BCUj2k;h-OF?GDK>96=20DIicepX-6J=}+(sjZ zhxVCL@wdLDapI%K2&`X(-mDoSds{wr_L77dhn!sRNclH6&5_+~<=6MZ=P&&j1RM}{shoAu&`q9Gx@G+t!Y#%w%C?czm4`jlz>=H_Jacd}@9*Cu0zN_Pa) zeef#dV}9mV<;6ev*k>-A<#pza_#QbVpEzcQ&s;3u!QR8k>FT%k6TRkM&4)ZG+tzWC zKMxzCF}vsD;J;DILo*I?y=n5(%eG#+BO;>8V2u|U#?PT)59)*!i9EAx+oj)UCY6kM;At*iyIsE7Y(EX*Z*spcEKv?#IoNut zcd~qMWyXEv-m%J;zb>BwdyGt$>$ZA#vGBUXHD3H7o3BO}#f61cI;&#$l|N-@?2P|G z@n3JvhZRKk(HH!aG|X!rd{y&7?N~X14g`$#+$kHCp^6+60ps z_xK$jMYMW;h0k{MQaEQfXj?9;<&w=MqEB)cDWJl~4D5 z^ZQKx9sbD}=`~L+@R{wqjQRQp<)h^{br3C))nM~*dEFEG%odLgQr?)nd!;is?k^VZ zj3557_=o>%l?bcczf#xiA1(fgqee>h3hKKs25<@;x`=M`B$KZ!^_lN}lHE{jQc}OU zJ02&}**rDRXbB z;)&?4t9}V9Q4e3Vroe53E0-wdXmS#b4I$1Ns95zT&DVtppMm$ae_Q#D)3|49 zPG_~^1Lg~v+xE0n940wsei0oUcaGQLqx)X*>#6+o0{2J9Me6vR_`i$zKWVP!dRi^s z78O;YtHzEG1m0~UKavrh{OHSZxBl+rK=3&q*SseF2=}sM<}wLTv_*jO?=!!F(`FRrPJpx zRsO4?#!7z0-QcCT=-OA@THQNl?R^?jY<_N_a7W|j2Y z0M#urM!-HN{KWV(F8H&q;Xaw8bIjAKF_|<=^$&_4k@>)wh{56 zefe^UkN8Yf!#CEJ3=73~t9W$8fBt|x*Nm<<{E`}DwjFZ&|J1JGkIoUVjFL?%9>6Ph z%Pr_ zC?63P+PG|sMH^GZ-^2j;uh_F&J~3wMlZxN*=hUxztbw2Ty{!0y_@%7o+4DOeI+PI) zKCf|;pGj4JO~vo%dmvruc4lu@so#| zFFtLnx$T1Z6YzU=)o0HapTXz(jh|;nelO6x_4t*3e;L_x{C@e()h^m;s??u3Q%*iM zD^PBOJ%{9=NJ>=d{I}z$9Wad)ccF_W=-!ViE_KhB2jboSjgQdeBCpB*)F0;@Yy8M_ zXZdz_NLPX@8?%rXjc)MzvI=D?Se+Rd_XZn3^r={`T(eGPJFof{drS_69PDh_r-{-D zJVRi8g&n(tPwAtJ6AK=}sLq%j6-f3UNR=OyKAXDA*RcaQ9>Y*yg7(LLBQYMNe_zJWjSyP$RX zL0h~fYu|T=j1qp1^)m}RaMy{*ON|nB?!QI%JVb2(u{1O$C-J;w`aac>WS*z`D9J42 zq<-#Z)r8$FebrX7^QQD*S=D#Je75@)W%=nseT+Y~qcXCdZ&)b$09{%QDkN7>|?t><(E~V5M5Ky zXG0#!l`7w@ZK=%nmR275y-B5RMEGSsh`OpyqQ_{>tuV)etlK#xXmx??H+~Gc=;w62 zMs}*D#+@QwNtJ%6Hg=aO-ROf=Q56T0;cE@kiwbS8ghm@W@T&%cn74 z0>9ADscg_9Dyl@a#OT_$j*V)xa7no{KKs4;r9Yc`_Z~56qKkuj@dUC+{+++mB|FSL z#$55MDSzhY2TM0v^ikQk8JCqRmCU?6Ia%&|I-Bzxq=$5{aWc( z%Qi-J{dh;kGdAt5bk^qwD)s+#UsTuiJ4&@#v8ig+qr?hudNfYL*Sb8gZaSv z`X6n?5sb?XG@iZ zM|DTe>Ia?fXgqs7$lua_y4;CU?QtuAD^dBUVg|M-6HbF4acOA*J|sRFHAdvI0qR5mVv)SSo@1}!dhWyhxG(pI zcj%9PEl=p z!}Z*U`*C0HPe1fWzx2;I7!TuOeE+qRj{)Qid9yS}E};W87tjZKLDSj-V#owRT|uIt zz930JEDxmQ1NI!w=Q^(EKHQJ{a)0`vKl-JA#=&?jFIc^xul{R)0|WSI&>h)A@1lb( z&5=v!K>i*2Kr85)F31#++ioOiB4{dTE@+VpEp==a1o+;b!}(mt_1uU1abNCFKlDex z^v^gLkL3l%$#@wzL&Gx!0|aLa1_{m)3=y0w7?umebv!Q!@IB{n zF2HqM&wb7ka9{3EKlDex^v^gL597ja#0wZNoC%7aR#_I@7aDn~Kp2PWE3veIq$9=g!{m>u% z(m&&1JdBI+VJ8?b{F)yh=;#0M8~(Dj@5l-AV&xtC3Lde&*yRoabaFodxJO3M7eE{6 z1nn*rTqc+#xKePHV6x!qT)0NZYx4kp12~s!0PewjE%)QT+@F5vkACTYr~v(dEn$4^ z1&o(*Gk%`K%?D-lccdU(@c(PPz;pBb5rQZ|c|m@3@1ft3wZQ^(H@HWxp$D{q&d_d( z;CjIgf|~?4=fW*IPIbYp`Wy)E-#MRaxd*`gxbGAJ{m>u%(m&&1JdA6Q02{%0;a4{w zxb*?g%X9Pm#RWwL|G%^_Jt#6?S`aO$EQk?+AGf@B)ZaY?(ES|2`2ut?y83bf@;OCt zL!m+;w}ccaF|Am5#k=YxHh;8!lZ##rsd?jvvCZ$wZro?yXJs>=`?_@ItKZe@vT#?8 zc1w0wZ?j}~jdqLw1bmm!dEu_Ijb8q?T*GI-Zq$3uhT6^UT3Iyq`lT7I#=II6*Zk39 z;T2{S3Mny-{^&Qif5yRh&Aev590M*jDY9n`AZ4FM=`URc)_PSLfxj_Zpy zSZ6{~^>@-56W`(O9hEchT9wvp_)DcLBtBTASh?vT8VBRa9T($coQ&7a2UZ_g|De8p z=ees1z=PEV$j1L-gSXN5*gY%r*u;8*bU{-=J3)7WmG?lpW4CVzkE}SoWTjS*S52Sz zZtd3dzKCkP{C7`%(W;(6G%DKg6H}tyCR3*G7pCIyZ&Vxcqt>haY!aqvFWd+Ao0P{6 znUu!`90MTn{{1F?+HS2^{YmS&cbbaBwy9R|3sa))CR4QWCw_iP^7BP>(-jA*HhtpL z*sROmEm1c8;UdLK-p=?0j58P?U>A5ko|EV0x$6pQ3al;wKj7(qNf)^FJ$4VChxd~O z4F#_`3cawzQFW`53ZX;dC9%Ig$uO|+fx-<4_ z&&=;lRG%+RarNg>zs?vESDDDn1;55MpSG+*Y?ry=k(H-2-rR9pKEQ6BC*b+;6M5cN z0-irfV08ib!7gGC{ugus&k!L%-&YdE2oeNV=F#=UPXh(R1lUij=N-D2s*w6XMyt^; z*KRxavr<{2d+n7bM0&bZ_s>n`QQvAEpf7b&tTVLrUYV+w zIxbK>SeEMfxKCrIM3KbguSzSY{;&m11~#IG{NQ$IYA-1&)(u?G`U6#b!-v(?f06y9Xzz=q@wg9|E3*Z4{37Pu0H%ohLn6>qB`kX32&!O*o3$TMD1jxc9 z!L^ZPV`s!Ro3SjW&70pvqdo@y1 zO$|Kj@zO1A^xH|3|6|-Qb&+Nc~`c)mCqPU#I1r zAC-)(atF^VKo^V^;P0F*=p_I@;0b(zH+&`VSV{m7fZu;>3#2`^%-Z_q`i!3ICm15Q zK!BY`7Ot;a|GfDXn!T|-G)eL<{aIY{9(U^=>2s~^mA(bH_;b)4nnLTEsxhx6NYK85 z=;h|(3u^BZv`((3>Y_Pf@9i}wgBL8{<#|u|K;vZ0@Isc>W!9SVvnk$M{$lNHQ@DP1 zPK~y2Y%f#ujHh{S0sbw10r&tf)*gT_d?fH!U10sff2$rSsxdOQ(t-*CXkS;*K+saq zRnT96zQY%uD8L@xnBI2Ef?|mu9>9Mh)~<4~)*;L}BUUyQ$@)>EcEb=XwZa}~*0YYHW-G9|M<*j+Pi)Jr^nE*`)K_TXFrco{#mZZ7fK zT)cpv;R5gl-jE&316B{<4-^;tTN-kYeF{c<{2F2%Y}`1(6@u%csx*5zw%t2F6so_{ zS0r0sVobNZrl6~V=?LqL2-Y=uQXqswIUEZA46j+#Y&n?xVh|M&|Zs2^wT&Wl=)JoX3Kf>kCob)~Ozi`Tx5tl0P=@RExk zd;(+zyano+uSKkS*3SxbNO)Kk2y zoLX(YJA<4{psr_q7P@x)a_RNGP*b=+V$6G@ZL10XJsa2$fi>x@{{>j{&i(-$+24Ha zmm-$_y(jvyek}=J3PNu;t)M+Lyj1oDexvzxkHd$J`CWR)!V&R+SNuTp>i4xj8FTe2 ztnQi3m79h3%-SaM+l((RYi(dye*;mHSZQqS#1g_zg}ALa=m-^ zJF%RbCg2|Yby1A{?stCt?iC%_$L6e?{d>)^j}2?gBecfc0j2~pDCH9?aA%;D($0}G0JOV&Xzwn*lTL)*g$*EjJQ+#&uHJN zZPEk#vVYS8=kX>^7FA*|0I2{e4TPPmiFj+1=pT6EOaHmAYyETjNb#H26?+={`Khq($6j(A z;VUACjJ+ZTwYxw`iXm_{#1ZX8C||ke}vn<|sn5G`~=D zrRgy6p_LUX*SS-;g9oq$_yhQaodv{($%0rxB|($``+GY5LF@0)H)CKdjES)^#xn)* zEjsMV>M^zNXw>`JO`f=wCcNcFQ&&9SRI=gZ>vClg`AC%Q?DVGA6w9vDe*8uI>uE0& z2hYMW>+PXwAf1o(H|yE)4}O*nIU-enJ;zSNXOH`*$#qvu@;o~%FmJ*sOo z2KQ(7VQ}n@#^`A%{?v7Ywa3`|TBCmWklzPk-!6Pd>>1B$d7k)`II+n>`5SlcG2yK? z8c&rKrp=ji)-HwS=YB#=&zu~2`X-WjH{P+6_|L=ju7XXH7uuE|^d6CGMf;|I;Qv^3 z&g*yV1bYl!uYFEv*}D`Ih!(_hb{xcZeD|Y#I)!TzH$OPM z&`9If-UMUr@tU3DV;a69ej>31&+O&_bV1Yig@?QMnWBw8HlC_0OuK{}6gS zLb9LVJ&*Mpx`X%K;H#!+55xJ|1BCXQ`nXfP7N=(?k3`=NPQ(M?sG;@)s&>iuCL~#P z2Jx#+wXEAe5KhUJO%RL}3>0(|Sbwm#K0^=aaw`2n^b2|hn^RMeB(OFge{Y0m>u@|0f}xNU)x z?^dped?B(^Bzf84)OOdrDZEY=Tq3}?!XNA;Xd-|PwFJV0fb zJ3(IoHebGK;j7YHjhP>nx$JjxdQ~sdKIbp_bNFuBqkGBEezr&0kUU&D+wX7Xw=ZHK zO^^3)_6mX)>?=znk4O%Wxq^444`|aQllUAZPr%R2cRacuJ_!1Nckpfh(Rplhm&QQ6 zOODav2cHlgVD6yG=TFbDx6z7;FpmrtggKyKmNjJ_6hw>WRuYSBE4CoTp@8i@q)ePR2_5n;d*KZq7#Lqqv+TaJ`mp>;zlh#T8$1KI>wEMKTAHLe@8VmVq-b*=8`x4WB zP;4-GkzYUlDK{Y=$e4dbIVRN?#eI0VVV9{3gmZiW@+-py#N6Zsumi+|*k|nY$%qH6 z?3dU5Vg&UC_;o~I>l5^ok&i1fnT?}>5rY`T`FJ5=94$SLb)=> z&pz3Y5darv6B69(zQJ4&R?~6a3B9W08S^q>5CjP@4Wp* z_J7vr^7-Wp(3+1^+;@U8|B2`#uEFM!=cu85Y2W|YKMwMf|^(11XlLD>GRow(SpmH_ME=Z zQ%iGs%|0>p$ngY`eRu&s`?1abXMFfg$y$@sD{BtEMSt?a)du94^d%B(|jgNJm!;^|Rcwh4t<)?m9&bX)YWPv(>+yME(A`O%uR4r`N9@7?JcSVDX z1?1g&30euP4j>-H4>-|S0NsHOvALcMeRj+KB@LUOF{^O$^24F3Yr)@V9@j1R_A|Pl z9PhH7e)h)vu&fcyzQHMz8qgw-Zmb|5k9tj7u$4xK2vSRK$&pYa0{1XTq#7SPAzYUqrT zf@p#D`N=h4_Z``TMVABF9tlyl>J~$vBISF zdS_d$gofAwa_;y6e;kS_wK$jm+Lua5n@FR%#(*>;seFWzU#-(?i^#QdD z#hZL$(&ip^=Ck2h_jv7R@+`#tTcmGk?X@pCcJH5{KYfyyAEY(-Ujf0DrNjw z_jY_!*~EL4FZ0PgoxjCDUubb?kE}^z{RuVko*LPvQKxHOk`5pqWWJqPfSeG18vYu( z`$YV}61uLe06&750>1+P0zYF^$;jx*8a*|AqJX z?SDb$@sEYKm@<#gBIUc3gdxpV}uq`RQ)|+<-eL1U|6??9okL zow>ENE_2qDjI4OA=yIU|-HeV#S0@Up3!o$PENDYlL<-OyW1n=ZPH6QG-|ADF7o zHXj5%3u*(xb*|0##OrgWpuM2K03CB_lirVfSg6jjoa&eT=&XOS@aLe|N*_v;z+P<$Kf`l%w~sA^loQKrZSZ^he=; zXI!cqp=RW;WPkaO{`o0)3~&^m!X=q%u>o$s zk315wr1krT>GLI7-S1jZG-271sKO3MJ6?FN6XjSl9Y6E`)IZQRY|*^eIeLEi0;db-yf27&k6K;Y zKS_V9kC^|SulGvQCa69wSdFs9pL5K$0V$6iG{svf7E~nd zUmRfle)5KH-QQP#4-X3qzcjt)3mZMPR+vg7wmb8Zc8%7b#+7Rauv_>p)YuUF1LT1C zo7^TmKs=yO*R0y?Gl|2bm!<#6g`H|X;5}vN+7I=&2hDPomoE=m4b7hQ}8yisP=3h?6{}Ac&4|;;1+^8Bx343hcBhm8A1_!#H`ts{qCVq4b`{`HUev1hv{ysxt?-7o z-{h>%4VLSL=Hx89>lvOFA5&|4v?1uOhK+kv^Ff!cP%X~S{vXK44ADFPsKG-=pDG@( z^nXY1XQNFx&HkTL^CH?a_j|AMxwPG)J$2B`lb|D!qoBUOr9DUCn>vfMrw?n7Dy<#R z9$3vgU;dQnb%9`@fSjFsJ^=Z~#|v!M_LtKSF#__(Hs>=mEUd(YtX|Kr_0*K^AGO`d zK?nMNj1|5;XOS^q<>pm){i?e6^*-krub<;Jvy^9JUBo7>@z|T23*IjhysJ3uhur#a za6z49v~Yt@?yUQe&vr6-!KurY{J)Yr?|!=CKlHtwf2uuLwI7T8{I^4~(6y`mw8v)R z_fach?I!y4XpN|w{`yQVfV%MtL$<13c$I0?XZ{+|&dvugSKCxT9M3#Xv>=!d;I{q5 z3pVb<_McZRq0{Zr4HxVzl(^c&-L~7mj#d4-^*=nz+UT!D*CXQPXI0nI<0{cjvP`be zLWuaj`dK-q|MhyWyXss&5`W0^-1$g1qK~Y}}8Hz*b;0m`5PzH!{7=6;BnD z?k}!=@KT=C-VDq`x%kk^{)3k= z=l)nHVR>QuF8L1fi|P-TeHOi_n>!gi;H(c-yn#NV-KuxlpNjl1V>A{b-+)iI|9 zsrTBFBM~2PPww+~Yy#uEO?0Q-r9ItFCjD7E;>f$63%+lywV`)tj$w0dojHAer8Vg< zss@2Q40z9Ur%764JVNV=#Utc^hfejHNA#}k1EN1|j&Q(!Cd{S&g$Kw7OZS%P^M&fg zvwc}TXMZ5tjS}Fyf?7fH3+;n*)9L* zrfJe=J{44qBbTE2Rr~JYW6{W=rRZt(BYco}j@QhX?=!!;hn%|MM)^cgNQ0{^WC>ksaKoT&`_Pq}M0U_Bs1i;Qxi94`mk| zkUoSD9T1-vRh-iM8n5|MbwLs>r&gIds=v@*vdFs1suyX$sk$poeCM~m3=J)I5%d#4 z$3P#DSkK*{KeZy{3CI^v-;M7-xN3Ztn^U^I|2@7%+%3QUMfbx8jAzX+TEi!OojywA zm%a;>`(yC|zjF;bp|E%W9opA*pEntlST3d)skbT59uwED)VV~bV z3*R~VPPkxSlVA2of5=93cvExf&j#=SK7i<7=cZpwA?+(tsntijlhRsWC;HjB0O(m) z0DYlzU<`myNbFZ#kSM@sB=0w*eEhlhMm1V_u&DM-uCM)Z1M9lURrFF$pIC3x7U}-J z{@j{kKC?CX$po?q91%V4%9uYMStM{_L~-sN*@ z|5%$BB002l$m_bm@9i^Md1c)yF@>!wpxX7Oxmx>nq4o$+pZGq+wa2r@06Bn9ZkK-q z2B@KA?OfozFmy?J@PM<&RAl2-2V*iOJR+FJ zLz{KIVs@d}<-U@gJ~OFL_}_Ex*8Svg$nnrVlrK+S6}}C`)rtO1tOm}awSI1p<_fm% z_=6Ad4{v|gYbu{9dP?8oOOz0vkL4R!`ky;ZHDIz?Z?5n;V=ibt0@ph+1bSQjrb*|$ zmF+WoRKxEy4e{wkUek7>UynI7*K-^%e_5PyeMk8Rw9oe#(@{DA9&pbUgH@X8acA?hc5DXzRb$+FsEhQ}SL^V?_>5l;-a7(^q-v z)i;$ZgZpn@7ksS{dk>b$HG~Z9$$DS7N;GYNw7isPqyXqeM$^L9}_xP8+r})gWO%Cdv{|?JZ!e_2| zw&YTN6gDK7F0l0Pf4$G_mtVR5Ypp+(&webujGf^;)^Iv|OR3i!i6!gU(zHL2W3P1% z_Wfi&H#`JSGgnGmCV#TkYySD+qdGt_0Ciy%hJIrT*IkiQz4BR`3 zGxT=1VD#^;6NZ(^cy?Wg_Bf}`&%ZA958vO?|1HTP^mpb_PBHz#>rwqHKa*PSA-DK* zibv#U(f0o4GdC#TNS=vxx9ARcJmSz_db{VYRX>aev7*Z7 z@3*?;pU=p1aRF;J@6q}|8g!>_&4U=j$7xp8z?|PyX|x|L}%=-rvT%P-1WV)nDrukoRT2;#KXd z=fuXJDtWihW{-@S&oh*(qOoq3ybJRM zN9nH|T&(sRF05Q_a`%N_oecUXbzAzqCvlDTHs9@+f6H&VM|98&TjZCB{_K+n4eXdt z=Mg&Kzd5-V@j}-t+3Nv5@Z$^HK<<@TnplzA!%VHYqSli2U(|y+ah$HLr~O)(lij7? zXg}}uDUaio{?$3MZ}1TPoi5sg#}eXQ`0|qb{64@d-^l-$EV8!7(w`h)ZRUdOuk_aG zv~cSQ(jPwoec{;ux}6vA^d#%uN1FG+zc^}dM1On_)~wHy9W=u44Nv;%@3yt4lLzPv znmB%#_z*gsab1ox2kGYmzpOtfA2Cz8gG~8sj=j*2HRLN)Qa%nJYwec~*`0XqdFhUR zx`(r`m;8R7?R3)J;t##V^9;PnPyeOTMeJF|JmFFLi#~Op6P)cguL`C#pnuZ_7*bHN=nKU;>qsKh(? zjf^{39C^B*2OlR(a|+)n{`*#Z%Q|8F?_l(=)!vbR8~@q(KSnf#&VlitJO5K(zjHqM zpP@vYpM8k8F;6V|_jxyf{<8md^bVTBi7UOeJ1*J^{RGgl zAo)L=|A+oZ^Z)5RmTc!eXLVFxfPdkR|KL07xvA-+v5uBF7(e=S;w8VntWQ|JpVvGr zyN|C=o2L2LN8eKJPI$D9d4;DJ`Al`q(KvZ5d_2j1e)m6}zmeZ=to30#e$xI~%3E{~ zkbl;Mu%CM2#B6UuSI7S!B3gFOrDvj!dFB6^4}$*H1kC?Y``1lyPRlbFZe}k^;)=ld zANo`CHGGL5gXH4KQ#f<8|1jQ=c_%j@9p3TsoTGbi9yp}f{eHy&vguc8-4C(dkH2a^ znn%3i1-~-*NcJpYi1dZ>3h05;y+$oBo`U`@oVh^lqoce9`xm+OKkv)r56 zZ^5Uc-{4$2LQm)leW7#U{2zZu391U1Cu}6>A{Z3c_LX&>*p;R_dw9ybjgr5=dJb?>cF zZH?Y7;@GuZpWt-T-1fz@LH|D57n?;B*|Gub6-AAxl}GGz#q+nR253c2bi?`N{|DyM zF;hqCx}Yy~4y^y-?^1$F0_y)72%P%AhP~##%RUdhf3Lv{x$ox5m3{gp|41$WCdDK8 zCC;91!vE=_KmNTlN1hv>r6@JJ%UW44x)Op%>LpdVmAdfXqXlZsbj}HCCpLP!Dea!=acXEIZ{iT=D&(UXo zCHP!ec<{LqbN0v>&RpmZrDwe& zT%MvD5Jxu)=Ve59>S3PAT`%dUieloQwU6hkf6ULIr-Sh!K0UTHTk8&K-NZw|d{(Y? z*5=|%s^*mW?eAoFX`8es+Vl;7tQTP&5WZi+ z9m@TstTyFauH2j2e8|~2KJnb zQEcJ7!z>^Mzz5_#dt2p~ej=PQA4lE4Tjt!)ay*}*fs=z34Uo4Ms*NT$>-D3-!3F<8 zkDil7C&@ds4MunRWlY#`^vL=x{>wA5^N@^_A|VeLRUrcja=)8)W|9$l%|ClFB-xB*d^S{D>lLh{FM>w@QEf#Gp5m9!K=+{ATEZ3ZcaU4@w(<0?VcTeENE^{e&-YKYA$EApZ3T}e*N+rF#vU{U#f1! zCsM|q74xTU69|%tJE2!H8S!=4rt8m zp+N1O)xqR`$_?6L3f0T@rT2Q}L(vY~j}M10hfjy?j}!#jetqRM>jMPN1NCgt=e{S| zcQjJ(u1wcj!@wFq#(*C(LSv%MQLGgr`-;DkA1&O^?VKkZW9RU{ku~CX=IE%QrA8~T zy{WuoZ}FN_b1(TTh(AU@+?V}6na|(zo8GrEz~8TXJi$I&eTJ`y&L5%N!k1ddL7VfQ zYQTo;-tv9;9pAK|&mOF=!0+gN7ee<&Y4g=^vYydWbJdw=vW zdo;%0ic`s-L7Tkr!1sWYqm@iLxRbo|9q(@>U;CMI3W06OdaW~2tx=^j)CaVXY!p=Y za&PD#J1EC&mo5MDd+Be@`$Dfkoagm7_n=R50^|l3t@Dp?^LC#zKOdw0e9;B`p4UB& z=X>~?{?5F?uW+dUJNgbQbiZtW{Re(Gyh}Aab9GK)M!(BMzfJ;dIJP{mypMkRQ^N+3 zAFz1<;>Na>YorZJ>h{)p>VSD4L6+u80`q{_A#A|4Yy7y_D%s*)td1Ourr?(v277dT zaA+<&0Z@N)wqm&1%E>R6U%pM(2e!{uXEfwC)pwrhfBz>w8@RD@SrD8$^cT-0N>-Ws zXMHl)6-0Nq?@ymR3%ZK;LQZ*H_4!g!wl45q<(7yM9Gjr?=+}My@qBi8Q}>vu`diw= zif^#}w)UsVd)g0B?~7rcCb8$j&x(YVI1{=Fu;KZ|{rdS&4ckC`NG)KDz|IBtsMq1q z7w`c~_x{3UJahPHylLg%+5q@quKWNR@6Uvu)YCZffJ|5r?W?M8pY=`5y>I?j?_~JR ze;r}gKIL4j#;2b1n%R2yreqc$kh&`eC!)de;E{73`fCiVQ=<0k#Sc~ckN!A;d)aG{ zP40o;^SyKm4c`FW#ads7$MwAQeIk5-|4U8t7rNhm-S?soHP7>`zy8Lri&ekeP45w{ zuR5((ch42wnDcYj{6SCXij6;3!v>TQpfk`N=#Y*L+FvoXQqyI>7EWDj67Sc0y0JN; zbs*pe@J_3T#G_6V5t*;%y*rO;O*i}iEYlnd@4o4BPEqPSm;)>#8Md@M(WB$Hh{pJ#tWmQK|MUUr%WBLi$~PePI9?v$ zxyfgEg_KRZmG_muN!_Kh|A+j5diU(tdsRO+?8BYjq}N2ztFyr7{PUXg(J4V2Hh^3( zalp}BV9offVX7(ojQxMA=^b_0fI!;Yzp(?!8sB+K{O?<|xHu}%N5Amz`*8oK#td5I zf5-RsTphrgN$efG&+{Lze$I=I4*g|scn84m%2!d}c{1ove~b~|qKfK`-q3m=+t3Bn z65c%5XDapg+eF7NQe2tWIPLe`6Mc8J^dIeE`TupEQQRjS+oy!5nZw7-egvtbLJn&W()5xY`BvFhe+ zzN0lCafy(HhCp>=_!x=8oy9Sl8(KJv8acU|M-0gx9`?FA=YW%hgC;n>$M&uS_RYn zhi|QLW$YF_!;~Bxj@l4Q1%1=h7X7rEWi_-gMDC6cx2+8mHJ(I zIBX>JKVBPIP@Zt)UvX*QYyJNE`Rps9{t9}1LCxG$C6br?TB_$4CQG@%W9fiEULa;+zTkmP z{^$QzbH;rpi|&fa(1+N&Q$>4d=g>v+KlE0=JsqHW>Qg~~hfib+@cmiyPtJli?`z4d z^mjMK?BsCYlOEV5o#3ak|C~dXH}vOs(v9~BSG=nZ`rCH~v*%03^Ln1HpPLeC*#{HS z2VCI^3F#&pVXLv(cC9CV|MBR4o$fSvhJ0ZK0dt2b0@j7~%kB_4}9Z-%sXe=0eDW zQBOuq5p9NeA^J(>>tzR7Kf#_3BNfx#p_u3y`9Uu$FFkLIe@>Me@0h3kb>8+}!Qc_U zuhzA@^ggInrv2G3y&oA_exPVW%#W?cW>f1Ctky?g7pUO}+BrdYKCol^Gp5c6Ph5Tg z9YF5U&OHax+x<6VMt4!Ownu(9w)g7CH1FPA`CHjMJ2!taaUbknj*qU~GW#jeSSN(7 z4R-Fy`p)qO#B+l+H%=qQL7u?}`Vf79PlRp9C$hkPKl}zB9i6WupOLu+lKm3hHXG65 zVB4;vuM7D@_LD@n7{Q77eY)&VEm$nrDmJdc;OJ)AzZOo?esIzOK&svw6+3TH;D^^QBM^rnRvTvEd#)5%!0v(fk zEnLN(!{nXN0nQvm9z4J^kP{#`h6J16hl@{e~ew!iGu)1PO7 z2cSQDg3x#eeQn7)v<@aKd3}f7XTQ%<%ENl9tT0`NJT|vzcm#HzdJSv$nZr9#yKiZ4 zkHmubkZwPqMdv;jPbiwU#!GEz?3ABOvk&st0nndyN}Z**n73!|f979<)m)q^x?38M zf8%`vwsUhDId@4EZJwxMXkYJXYYp7-p2hp>C{JJb?v#|g^MT`JF z)1*|H+I`deEL=zY8Kw6V6OTA+M1$xwV*a|a|0{MX))5b|&W@U@(@uZIV~9iWGe_t4eQ>tr{Z6J%ZhJ(D274z%lX&g@56BNowq zqj>bN-wp)P0qkoHudn&ZkNek_8O`IWc1||=bm#%6&P2Z7t-0%d7zOWJI@$T({P@Sx z-zWONUO@U|_nG4hNm-*g{_G=N2R}SZc(?vObg+8=Wchr$WzZIA2NHEwqwt96u8q%J zu*?&;(pPQl_wrFxAENj+ke|^3#JpW)$9My&M~{)y8}f9d}gmy&oGv53lJUp_K@ZL}W{>k%U zm&w&ZpHtba9k4Y*K z@m{jQp^{7HdQS$OgWUuD!hB-YfjMURr+?7@0qqHMvgUt-^&9vd{vT^N7{SC9{=5%3 zapTDS8N1KkJIuLMZ~noTsg2GUE_`G2!8`b8p8jO|`?_7e&Bg=Nh`4=$7R`FxKDAKo z6*AKDoPg%CNf^Z-dC|7@A|>+toucLr#R#*?dQk4M*ePH z(Xsf`>0kQi+}qTt+Fbem&yj9qRLgp<}4_D+Y*S2uY!VnX6gn-{~eDm6fg5Ao0cPK*fuFu&Ybwc0=I(t9d||4!1aALR1f1v8Y3&|JjH zjzQ?x*?&kmhXz{5VE2Qctr{-t_x(xti}vi{3BGujhqLE?$AxQZC${PoA>eUYk_M-PbJfqVeZQ_l!c+qyb8 zK3uJ}WV{c|S$icuaCCwExMRtB;P2E5Qzy2C0~0IR+{qKm$-rIMe@oIf(zD= zu&+7qJ)f_4gwcMJZ#Yl;b)}py8CIM~{rB|1jJ{1r%lbQS9#8E>~qf6#uFbPqZ3zxaHT32M30RaYOWefB+dSDA_}7JpG8e(*5i z(#Cl3e*@=Nr8p-f(AtH+_=%ziF@F{1nKyh56%=D^ z^w%ZBXVlf$TBMEAH`oBy^BfNkIDM)ga+uCK4~?n)Wj<#wv;)#zH0*sF**@NldDQl) zf7VhrU8L`49~53RpR4)w=oU-9imG$o|25iM2C;FW)dPN85E|AvspG@9S8TarMdm@&JfXyR`1vsca(n+~ov+~qZI%ZZJN_y$3vp|j zplN#7IS)iMT$|&mx6)V2$rBy$`vgJqM3x6QGJnLH5{~3fnMXR}7i|acyvu?2>TQvJ z_)avS;XW+XJWFHUn|xEC?d5OQQ4e0Ex&-ASsZZg(tmuyr$#sbA2YLnlPW=vb`W3WR zmGvXMH|~dD`~zSdjEDMe;u!dhak|Iv$i3`9y?gfQJv|>QwqN0kYQB13T$@Ml7Tu}a zC9fAJAfE!>@b&(!_FhBFw^^T%XCOa7&VqSL^41Mo^tfhh*``akhzGpI8m==nC+|{@ zNb!MWBUrA;jYsq;bIFOK+nEcsuluLUd$q=G%uN4&76Wedn#&*3KJelV_6fC(ISh2m2we-!S(}61`V*f? z5BS$<>iut5{OII!L+fYfRB5~Tv&J2-xKQ{YzQbQ8r%PUsoEmwR|Esju(47Vk5T}x- zB40(m8lRw^ph1;djk{K8_T~pg5?AIFieG7>`hMxmb7pA|A!mK5@aCqw`!o0j&(MuJ zS@igzMaEpH{J{l+{_pvJr{>gIlj@?k`#$zF_hT-e8nur^Pu3sj)qa(pXWh!PUrEo) z-lIRL;|WT4&D~~c{tlVv{hX|!4oz8kFt**Rua+oLp|$XkEpl|hku1mfDYsn ziSM9$R-h~%gAdRXTsKDbxidFuerTJ24J-2n@2F<;_D_r%s(0_;H_{jD*c`gMc@=pV z-SP2K9zSR*kKS%VN9$F*5{%N-TEHEvZ9+(`{VaX>&QnC+uYAl!k_PI&8bC3Uh!?Kx9te~S)S0I{Nxpg1m1AH#$cnmtb zuXBIqTIdfC)fAu;;H3m~yN>7@bPDTQi6J?k>lqjG9Cn>-{9^7TlQZ7gDO^D1`@?Aog53;K@f9l?<@f|zrIkEHj zLDt73Rt6vB^1;vl4-Nf>Z-Z}$F2L?#|A-M%N=Mge(V)}ROB?iBuqZqw`v7a(L$W?r zj%2gmL$=GL&pYJkR`TTzFG$xqK4UI@PK4eCx<>bR^b5LOJjgl>_>r32YGZ$JYBLLK zk0f&Ur8BY*q;`8}QS}B_Tv(w-3U)q45HE-k@Vv;p_3!@|^}QZ1--bP~x&XUJjDSr* zCpvskJ+5)v_~y4vjFYcawZ-yXp4!=_u=b&h=<>PtJlL*x()_A-(jIj3Xz&8`U>{7! zMj)f`g9Vq&9+TGg8t9E~$DZrHP9N$ApM-wnl)I^X!FChgc9Ub1~rL*J|8W&jQ_f9-fQm<2kLJ|6lU)^jIg<;C*xfJ}?e73nZ_`(5fhYOB=j|~@{ zk!|MSn{W?wj6P>-?dvF%HYKMch9t-OBxw@nvNn z=vy+n=RcJ1e)Fn2pDP}}v8HE!M_%N{j%~eT=k&9gu0H~-f8usPykw2sC7E?oe|u+stmF3Wm0SA`PZzhp zK0CVa!@2bjocr#kp+)%}4AD=I*n_OSQlsbn*89Ko+je{<_o`p3{r4@?OMd?FMYShm zUv}HkZ{=>f?&l6Jsq&26zow;ri#&gk8awav--lkWtUq}6T6ABWSp2?Nd4Fzr;^Ye* zcTPQ;+fdrII^E8hE&CYc>ynJT$Zh=H=>7k)zLT#1vYfwq=J~ z*L0WGwH(NUT-;275m3cUNSl0CEJFQ$?R}ClOJEbW~kgZ zvVZd7LoYs=8#(#hT|3`-?Z8tXzddo}llMx~pU#)2&YmIfdE(5w2aeTF_dIy|<^1T0 zXD9X_Khit6yW+L>+?UR*-y-zxg|4C>oYlb(zVJs5eG()(1Bi;Waz^Oen#iE zuOlCFHq$>h0x2PFV#3Yx9$O$TFxO%a#9ws7*%EqUuZ@qQH}0Uw#A-77H1ACr^{7uf z+Cv9=(1kvH;Ai5y@pa^Crhk6~@Hg8Yh`(g?!E|*SD=^`Q=*HLuwn1D*ZziM1cs6CcQlEBYL+d}~-#571ywc(nT=u+#{eg^z zSBO5i0$vs2I@pV_f>DEO0S;LRbyCQoreH*1M&oio@mCGKY=AX6QBZ(2xlp3Isjnrf zg}AC3%!IfM4#|txgG2I~f$D6~M0Gi2r+ZKj$pt;A{SK}Q{TZvgEZBk!nI(=A$P#Bc zmJzVTQzKxBrv!}Sy3J2U$i-E^=9I^A*%4p9mlVSVr#l#pL(VHW-IESA!cO-^BXR6> zU&>>6RUA9RAp;h}iALBRE-w+o-b%wY&rN?6*WKnTt$z*m)j*%i>?3Y3aU8e5M!1oE z$NVE3!^`|9=5KNTD>v}ps_!Z^?*H^ipC+iuNu@x-g0Ajs0@V;J0%3El1Jzkwr6v@j>Z*b+{tZ>buz>&o literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/VisualStudio2008/resources.rc b/extras/juce demo/Builds/VisualStudio2008/resources.rc new file mode 100644 index 0000000000..b20115c096 --- /dev/null +++ b/extras/juce demo/Builds/VisualStudio2008/resources.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "icon.ico" \ No newline at end of file diff --git a/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj b/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj index 0b51703f25..f3ec3fc9e4 100644 --- a/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj +++ b/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj @@ -163,6 +163,12 @@ + + + + + + diff --git a/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters b/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters index 651b8d318a..17106637a0 100644 --- a/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters +++ b/extras/juce demo/Builds/VisualStudio2010/Juce Demo.vcxproj.filters @@ -94,6 +94,9 @@ Juce Demo\Source\Binary Data + + Juce Demo\Source\Binary Data + Juce Demo\Source\Binary Data @@ -151,4 +154,14 @@ Juce Library Code + + + Juce Library Code + + + + + Juce Library Code + + diff --git a/extras/juce demo/Builds/VisualStudio2010/icon.ico b/extras/juce demo/Builds/VisualStudio2010/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..853e63debcee70a77cbac5428c8d32f28b92f29b GIT binary patch literal 82726 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 literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/VisualStudio2010/resources.rc b/extras/juce demo/Builds/VisualStudio2010/resources.rc new file mode 100644 index 0000000000..b20115c096 --- /dev/null +++ b/extras/juce demo/Builds/VisualStudio2010/resources.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "icon.ico" \ No newline at end of file diff --git a/extras/juce demo/Builds/iPhone/Icon.icns b/extras/juce demo/Builds/iPhone/Icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..a1d2ba8423941483ac31efaf090732faf70ae952 GIT binary patch literal 81944 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%0DPVM z6awn|M>X%zcjS}@Dk&AE?YejB?fp8Z#|GWF0L~@AIt@eOTXh{cX4(tqZPBjW-yMH? z+L%GzS|^4zuIs9s9*KMX4@3Yf&=JXPd*x1;wdi8GJG=1)7v7pNerT_@DNX$9yE)xZ z1|I)VasFRyqlaP{-qlZN-{&>|)XWmpE;S2(~DysIq0=sIBZT@O{fAzX9! zl-v8|SSoOA6k!z+p#)AOF4_-C6&1$NU-Nb8l&% z8jTXT8){D!3P^!k^%|o9t8?EGlV&aW#riHc{W<@MnG=Tf>6jK9+|Z+#3OvdH3(yi; z<@6glY1X3^v?OtD`MjAEhxhH2-ZZokB;O|SbsRtou>db3DYHwz5tC*<@ZO&{J>}~^ zJp0}QGbfJdo0B1{-)@wAg?@5?UV!KyDF-ld#(ggzE3Ylke*O1-GbRl0m(wb-`0777 z4Ak7C2+oTG$mu(L{Iogq^2(=)F0Pw9XWIB-ec8Pqs~-!S9mCx9w_pKQfMNixI`_#P zd*|H`t}KsBd}i^3ci%Z?XrE3Qi4p!@B~*V}Fn~P|z(7PoddFJ^-!Wy@{fiFYtV3Wr z{OO)7tkKFmmGbIZtjpax+Wg7mj}O_?&4IM)dFA z9u?ren0;}qf1MIk11|3MeL`bXv%2)n9W!X01BiGU)b+)9!iTspW^tk{vN0T0Z}QyQfXOeNeBC8A(w= z*a0ASVO;N|xOZ~r32M*-A`;Ttckh=wX3C5?55BNuPiePdT-v?t`3L9Bm^?bSU$=H? z@e%$F>S6~(8Fryqw!X+62(3HaGGN5GDKqCh_|(EuZ3H>J@$CiZeahJ31A2AJOo<8g z^^%)lY!B)Ho(MAz{7XF%wz}c;?w_j*XvyArL^by>1|GXz(T9RK>ka~Q};+Gc8yZ;{9d!MfD z)0;(y`l{V0g>PT-CkqWc8wEtfrDSAd1S7^yo;Lg52jeXc%^7b4!a`KGcPX2me zSN{5CuRb|{?gRJEo;GRBh(Ue2wa-YA8<5Jr`^GXhod$CIRU}5xzH6U>!$(h;I(^nX z_ul`&Lk~YZciy~tkFeo&?!yl~^uYc1-ZN|Z)Cr@959r;Mz3UsWZf5t9J^~DYn~>b= zdHV#(5p=nw|IiVm$4{Di*YugQX5W4HJ#%Ec=bpP~&z?DB`dw2ejUPQ?$Zfs4v_tQa zh7D*XW83x>L;*Md)${hn7PRE_tWMqg^dCHIILrJbBWjiQ~tQ z9X)E~u)+QNbnldv-i&kiu2=32c(llB1lR-@o7AFJ+fH43_U_w%z@WiHb909cXB(C~ zbm-tg18(cvyJy!_#M~7!NCii3fUW0+-M2v@*n1ll9TOWHr?=SHnCK|% z!3_z*4qUH#6}$cQIu5u2*bTdny&7=uvA=&nKwuDCU_gMsKldOv@WKvcw+i3>TQCBB z_jN5d_d3{m?de&+zL(zW*Z1_SSJ$HswqO_Rz*eZMz*ox#a7S!D$KG>S*IKpQ^j51D zH=#RY3%X-vZU0u&;25f58#*?@J37{|G`z*uckKGE#NF>|0P+>1U_*bh>7UAI;Pe~* EAODerLjV8( literal 0 HcmV?d00001 diff --git a/extras/juce demo/Builds/iPhone/Info.plist b/extras/juce demo/Builds/iPhone/Info.plist index fbc0914d22..328d0a0fd8 100644 --- a/extras/juce demo/Builds/iPhone/Info.plist +++ b/extras/juce demo/Builds/iPhone/Info.plist @@ -6,7 +6,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - + Icon.icns CFBundleIdentifier com.rawmaterialsoftware.jucedemo CFBundleName diff --git a/extras/juce demo/Builds/iPhone/Juce Demo.xcodeproj/project.pbxproj b/extras/juce demo/Builds/iPhone/Juce Demo.xcodeproj/project.pbxproj index 9ac58cf86c..3e9c9a00bc 100644 --- a/extras/juce demo/Builds/iPhone/Juce Demo.xcodeproj/project.pbxproj +++ b/extras/juce demo/Builds/iPhone/Juce Demo.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 36AEC0EAE7AB9D061AD9EFEF = { isa = PBXBuildFile; fileRef = 7B6D428682221857EAEA1C7D; }; F1BAE9DCD179C8784FF28F8D = { isa = PBXBuildFile; fileRef = 4A96850C150C1C6D87A0D21A; }; 268F2BF480CF9844E2F2B974 = { isa = PBXBuildFile; fileRef = B72353F9624D99DB6F93E400; }; + C0A3C433D146C7E1FFCADFB2 = { isa = PBXBuildFile; fileRef = 4ADECB09FD213B2E910EA229; }; 78A66C2F9A9E2E6D011D8E5E = { isa = PBXBuildFile; fileRef = 885A20D277AD743C21C822B5; }; CE5C46E66485B7D77B5ADB4E = { isa = PBXBuildFile; fileRef = 42291DB48BF81754D90FE200; }; 2E2DB52D03DD6A56FAC937A4 = { isa = PBXBuildFile; fileRef = 0704E2D6B0D1B38FBBBC6B85; }; @@ -46,6 +47,7 @@ B72353F9624D99DB6F93E400 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 39B98C60B57B831FE5215CDD = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1A9DEA62F6A3CD1FB5CF105B = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = SOURCE_ROOT; }; + 4ADECB09FD213B2E910EA229 = { isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; }; 885A20D277AD743C21C822B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../Source/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; }; 42291DB48BF81754D90FE200 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../Source/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; }; 49138F5652E637AA67CD4B70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../Source/MainDemoWindow.h; sourceTree = SOURCE_ROOT; }; @@ -80,6 +82,7 @@ A869663CA0E96FE15BB42A97 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = "demo table data.xml"; path = "../../Binary Data/demo table data.xml"; sourceTree = SOURCE_ROOT; }; A76B69386F1F19647804510D = { isa = PBXFileReference; lastKnownFileType = file.zip; name = icons.zip; path = "../../Binary Data/icons.zip"; sourceTree = SOURCE_ROOT; }; 013E12213AD7B4BEB28A31BE = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce.png; path = "../../Binary Data/juce.png"; sourceTree = SOURCE_ROOT; }; + 3369CDF7AFD79D6F3B3744B1 = { isa = PBXFileReference; lastKnownFileType = image.png; name = juce_icon.png; path = "../../Binary Data/juce_icon.png"; sourceTree = SOURCE_ROOT; }; C7327AD5191A22C1FBD4F5F9 = { isa = PBXFileReference; lastKnownFileType = file.xml; name = treedemo.xml; path = "../../Binary Data/treedemo.xml"; sourceTree = SOURCE_ROOT; }; EE37A0ECE471A928C6170F9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = SOURCE_ROOT; }; A6B37799E63CCE882A3383FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; }; @@ -121,6 +124,7 @@ A869663CA0E96FE15BB42A97, A76B69386F1F19647804510D, 013E12213AD7B4BEB28A31BE, + 3369CDF7AFD79D6F3B3744B1, C7327AD5191A22C1FBD4F5F9 ); name = "Binary Data"; sourceTree = ""; }; A10CCE1B2A215D5AE12386E3 = { isa = PBXGroup; children = ( 885A20D277AD743C21C822B5, @@ -139,7 +143,8 @@ 4D526A336B2E97ED42CADAD7, 8679333E781A0A0116AE5D26 ); name = "Juce Library Code"; sourceTree = ""; }; 019CD423F1EFF7A1A0A079DD = { isa = PBXGroup; children = ( - 1A9DEA62F6A3CD1FB5CF105B ); name = Resources; sourceTree = ""; }; + 1A9DEA62F6A3CD1FB5CF105B, + 4ADECB09FD213B2E910EA229 ); name = Resources; sourceTree = ""; }; 244B9AF7D858999910FD243E = { isa = PBXGroup; children = ( CE3A43E4FB4D61350C000764, 90E63FC1333F952D526FF194, @@ -219,7 +224,8 @@ C264FE1BF62B589B345E0C81 = { isa = XCConfigurationList; buildConfigurations = ( F46B3E8DBAFA746E04F4F62C, 8EF7C7FFD55219581A5075F3 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - AE930F136F638C3C939F7146 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + AE930F136F638C3C939F7146 = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C0A3C433D146C7E1FFCADFB2 ); runOnlyForDeploymentPostprocessing = 0; }; 7A3A0C722E5F96990CA1B5F2 = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 78A66C2F9A9E2E6D011D8E5E, CE5C46E66485B7D77B5ADB4E, diff --git a/extras/juce demo/Juce Demo.jucer b/extras/juce demo/Juce Demo.jucer index 4a9fc8780f..02d4ef142c 100644 --- a/extras/juce demo/Juce Demo.jucer +++ b/extras/juce demo/Juce Demo.jucer @@ -7,7 +7,8 @@ pluginCode="Abcd" pluginChannelConfigs="{ {1, 1}, {2, 2} }" pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0" pluginSilenceInIsSilenceOut="0" pluginTailLength="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="JuceDemoAU" - pluginAUViewClass="JuceDemoAU_V1" pluginRTASCategory=""> + pluginAUViewClass="JuceDemoAU_V1" pluginRTASCategory="" icon="Duj062Top" + bigIcon="f4hwldS"> @@ -97,6 +98,7 @@ file="Binary Data/demo table data.xml"/> + diff --git a/extras/the jucer/src/model/jucer_BinaryResources.cpp b/extras/the jucer/src/model/jucer_BinaryResources.cpp index 30413fe056..d3770b3632 100644 --- a/extras/the jucer/src/model/jucer_BinaryResources.cpp +++ b/extras/the jucer/src/model/jucer_BinaryResources.cpp @@ -308,7 +308,7 @@ void BinaryResources::fillInGeneratedCode (GeneratedCode& code) const defs += line1; - MemoryOutputStream out (65536, 16384); + MemoryOutputStream out (65536); int charsOnLine = line1.length(); for (size_t j = 0; j < mb.getSize(); ++j) diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index a2b744951b..adb9a8b447 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -721,7 +721,7 @@ protected: #include #include #include -#include +#include #include #include #include @@ -4252,9 +4252,9 @@ const var var::readFromStream (InputStream& input) case 4: return var (input.readDouble()); case 5: { - MemoryBlock mb; - input.readIntoMemoryBlock (mb, numBytes - 1); - return var (String::fromUTF8 (static_cast (mb.getData()), (int) mb.getSize())); + MemoryOutputStream mo; + mo.writeFromInputStream (input, numBytes - 1); + return var (mo.toUTF8()); } default: input.skipNextBytes (numBytes - 1); break; @@ -5579,62 +5579,15 @@ const String InputStream::readNextLine() int InputStream::readIntoMemoryBlock (MemoryBlock& block, int numBytes) { - const int64 totalLength = getTotalLength(); - - if (totalLength >= 0) - { - const int totalBytesRemaining = (int) jmin ((int64) 0x7fffffff, - totalLength - getPosition()); - - if (numBytes < 0) - numBytes = totalBytesRemaining; - else if (numBytes > 0) - numBytes = jmin (numBytes, totalBytesRemaining); - else - return 0; - } - - const size_t originalBlockSize = block.getSize(); - int totalBytesRead = 0; - - if (numBytes > 0) - { - // know how many bytes we want, so we can resize the block first.. - block.setSize (originalBlockSize + numBytes, false); - totalBytesRead = read (static_cast (block.getData()) + originalBlockSize, numBytes); - } - else - { - // read until end of stram.. - const int chunkSize = 32768; - - for (;;) - { - block.ensureSize (originalBlockSize + totalBytesRead + chunkSize, false); - - const int bytesJustIn = read (static_cast (block.getData()) - + originalBlockSize - + totalBytesRead, - chunkSize); - - if (bytesJustIn == 0) - break; - - totalBytesRead += bytesJustIn; - } - } - - // trim off any excess left at the end - block.setSize (originalBlockSize + totalBytesRead, false); - return totalBytesRead; + MemoryOutputStream mo (block, true); + return mo.writeFromInputStream (*this, numBytes); } const String InputStream::readEntireStreamAsString() { - MemoryBlock mb; - const int size = readIntoMemoryBlock (mb); - - return String::createStringFromData (static_cast (mb.getData()), size); + MemoryOutputStream mo; + mo.writeFromInputStream (*this, -1); + return mo.toString(); } void InputStream::skipNextBytes (int64 numBytesToSkip) @@ -8333,7 +8286,7 @@ private: void createHeadersAndPostData (const URL& url) { - MemoryOutputStream data (256, 256, &postData); + MemoryOutputStream data (postData, false); if (url.getFilesToUpload().size() > 0) { @@ -8415,7 +8368,7 @@ bool URL::readEntireBinaryStream (MemoryBlock& destData, if (in != 0) { - in->readIntoMemoryBlock (destData, -1); + in->readIntoMemoryBlock (destData); return true; } @@ -8796,18 +8749,22 @@ END_JUCE_NAMESPACE /*** Start of inlined file: juce_MemoryOutputStream.cpp ***/ BEGIN_JUCE_NAMESPACE -MemoryOutputStream::MemoryOutputStream (const size_t initialSize, - const size_t blockSizeToIncreaseBy, - MemoryBlock* const memoryBlockToWriteTo) +MemoryOutputStream::MemoryOutputStream (const size_t initialSize) + : data (internalBlock), + position (0), + size (0) +{ + internalBlock.setSize (initialSize, false); +} + +MemoryOutputStream::MemoryOutputStream (MemoryBlock& memoryBlockToWriteTo, + const bool appendToExistingBlockContent) : data (memoryBlockToWriteTo), position (0), - size (0), - blockSize (jmax ((size_t) 16, blockSizeToIncreaseBy)) + size (0) { - if (data == 0) - dataToDelete = data = new MemoryBlock (initialSize); - else - data->setSize (initialSize, false); + if (appendToExistingBlockContent) + position = size = memoryBlockToWriteTo.getSize(); } MemoryOutputStream::~MemoryOutputStream() @@ -8817,8 +8774,13 @@ MemoryOutputStream::~MemoryOutputStream() void MemoryOutputStream::flush() { - if (dataToDelete == 0) - data->setSize (size, false); + if (&data != &internalBlock) + data.setSize (size, false); +} + +void MemoryOutputStream::preallocate (const size_t bytesToPreallocate) +{ + data.ensureSize (bytesToPreallocate + 1); } void MemoryOutputStream::reset() throw() @@ -8831,18 +8793,12 @@ bool MemoryOutputStream::write (const void* const buffer, int howMany) { if (howMany > 0) { - size_t storageNeeded = position + howMany; + const size_t storageNeeded = position + howMany; - if (storageNeeded >= data->getSize()) - { - // if we need more space, increase the block by at least 10%.. - storageNeeded += jmax (blockSize, storageNeeded / 10); - storageNeeded = storageNeeded - (storageNeeded % blockSize) + blockSize; + if (storageNeeded >= data.getSize()) + data.ensureSize ((storageNeeded + jmin (storageNeeded / 2, (size_t) (1024 * 1024)) + 32) & ~31); - data->ensureSize (storageNeeded); - } - - data->copyFrom (buffer, (int) position, howMany); + memcpy (static_cast (data.getData()) + position, buffer, howMany); position += howMany; size = jmax (size, position); } @@ -8850,12 +8806,12 @@ bool MemoryOutputStream::write (const void* const buffer, int howMany) return true; } -const char* MemoryOutputStream::getData() const throw() +const void* MemoryOutputStream::getData() const throw() { - char* const d = static_cast (data->getData()); + void* const d = data.getData(); - if (data->getSize() > size) - d [size] = 0; + if (data.getSize() > size) + static_cast (d) [size] = 0; return d; } @@ -8875,9 +8831,36 @@ bool MemoryOutputStream::setPosition (int64 newPosition) } } +int MemoryOutputStream::writeFromInputStream (InputStream& source, int64 maxNumBytesToWrite) +{ + // before writing from an input, see if we can preallocate to make it more efficient.. + int64 availableData = source.getTotalLength() - source.getPosition(); + + if (availableData > 0) + { + if (maxNumBytesToWrite > 0 && maxNumBytesToWrite < availableData) + availableData = maxNumBytesToWrite; + + preallocate (data.getSize() + (size_t) maxNumBytesToWrite); + } + + return OutputStream::writeFromInputStream (source, maxNumBytesToWrite); +} + const String MemoryOutputStream::toUTF8() const { - return String (getData(), getDataSize()); + return String (static_cast (getData()), getDataSize()); +} + +const String MemoryOutputStream::toString() const +{ + return String::createStringFromData (getData(), getDataSize()); +} + +OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const MemoryOutputStream& streamToRead) +{ + stream.write (streamToRead.getData(), streamToRead.getDataSize()); + return stream; } END_JUCE_NAMESPACE @@ -10867,52 +10850,52 @@ int64 String::hashCode64() const throw() return result; } -bool JUCE_CALLTYPE operator== (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw() { return string1.compare (string2) == 0; } -bool JUCE_CALLTYPE operator== (const String& string1, const char* string2) throw() +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const char* string2) throw() { return string1.compare (string2) == 0; } -bool JUCE_CALLTYPE operator== (const String& string1, const juce_wchar* string2) throw() +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const juce_wchar* string2) throw() { return string1.compare (string2) == 0; } -bool JUCE_CALLTYPE operator!= (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const String& string2) throw() { return string1.compare (string2) != 0; } -bool JUCE_CALLTYPE operator!= (const String& string1, const char* string2) throw() +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const char* string2) throw() { return string1.compare (string2) != 0; } -bool JUCE_CALLTYPE operator!= (const String& string1, const juce_wchar* string2) throw() +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const juce_wchar* string2) throw() { return string1.compare (string2) != 0; } -bool JUCE_CALLTYPE operator> (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator> (const String& string1, const String& string2) throw() { return string1.compare (string2) > 0; } -bool JUCE_CALLTYPE operator< (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator< (const String& string1, const String& string2) throw() { return string1.compare (string2) < 0; } -bool JUCE_CALLTYPE operator>= (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator>= (const String& string1, const String& string2) throw() { return string1.compare (string2) >= 0; } -bool JUCE_CALLTYPE operator<= (const String& string1, const String& string2) throw() +bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw() { return string1.compare (string2) <= 0; } @@ -11029,114 +11012,114 @@ void String::append (const juce_wchar* const other, const int howMany) } } -const String JUCE_CALLTYPE operator+ (const char* const string1, const String& string2) +const String JUCE_PUBLIC_FUNCTION operator+ (const char* const string1, const String& string2) { String s (string1); return s += string2; } -const String JUCE_CALLTYPE operator+ (const juce_wchar* const string1, const String& string2) +const String JUCE_PUBLIC_FUNCTION operator+ (const juce_wchar* const string1, const String& string2) { String s (string1); return s += string2; } -const String JUCE_CALLTYPE operator+ (const char string1, const String& string2) +const String JUCE_PUBLIC_FUNCTION operator+ (const char string1, const String& string2) { return String::charToString (string1) + string2; } -const String JUCE_CALLTYPE operator+ (const juce_wchar string1, const String& string2) +const String JUCE_PUBLIC_FUNCTION operator+ (const juce_wchar string1, const String& string2) { return String::charToString (string1) + string2; } -const String JUCE_CALLTYPE operator+ (String string1, const String& string2) +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const String& string2) { return string1 += string2; } -const String JUCE_CALLTYPE operator+ (String string1, const char* const string2) +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const char* const string2) { return string1 += string2; } -const String JUCE_CALLTYPE operator+ (String string1, const juce_wchar* const string2) +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const juce_wchar* const string2) { return string1 += string2; } -const String JUCE_CALLTYPE operator+ (String string1, const char string2) +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const char string2) { return string1 += string2; } -const String JUCE_CALLTYPE operator+ (String string1, const juce_wchar string2) +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const juce_wchar string2) { return string1 += string2; } -String& JUCE_CALLTYPE operator<< (String& string1, const char characterToAppend) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const char characterToAppend) { return string1 += characterToAppend; } -String& JUCE_CALLTYPE operator<< (String& string1, const juce_wchar characterToAppend) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const juce_wchar characterToAppend) { return string1 += characterToAppend; } -String& JUCE_CALLTYPE operator<< (String& string1, const char* const string2) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const char* const string2) { return string1 += string2; } -String& JUCE_CALLTYPE operator<< (String& string1, const juce_wchar* const string2) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const juce_wchar* const string2) { return string1 += string2; } -String& JUCE_CALLTYPE operator<< (String& string1, const String& string2) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const String& string2) { return string1 += string2; } -String& JUCE_CALLTYPE operator<< (String& string1, const short number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const short number) { return string1 += (int) number; } -String& JUCE_CALLTYPE operator<< (String& string1, const int number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const int number) { return string1 += number; } -String& JUCE_CALLTYPE operator<< (String& string1, const unsigned int number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const unsigned int number) { return string1 += number; } -String& JUCE_CALLTYPE operator<< (String& string1, const long number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const long number) { return string1 += (int) number; } -String& JUCE_CALLTYPE operator<< (String& string1, const unsigned long number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const unsigned long number) { return string1 += (unsigned int) number; } -String& JUCE_CALLTYPE operator<< (String& string1, const float number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const float number) { return string1 += String (number); } -String& JUCE_CALLTYPE operator<< (String& string1, const double number) +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const double number) { return string1 += String (number); } -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const String& text) +OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text) { // (This avoids using toUTF8() to prevent the memory bloat that it would leave behind // if lots of large, persistent strings were to be written to streams). @@ -13281,20 +13264,9 @@ XmlElement* XmlDocument::getDocumentElement (const bool onlyReadOuterDocumentEle if (in != 0) { - MemoryBlock data; - - in->readIntoMemoryBlock (data, onlyReadOuterDocumentElement ? 8192 : -1); - - if (data.getSize() >= 2 - && ((data[0] == (char)-2 && data[1] == (char)-1) - || (data[0] == (char)-1 && data[1] == (char)-2))) - { - textToParse = String::createStringFromData (static_cast (data.getData()), (int) data.getSize()); - } - else - { - textToParse = String::fromUTF8 (static_cast (data.getData()), (int) data.getSize()); - } + MemoryOutputStream data; + data.writeFromInputStream (*in, onlyReadOuterDocumentElement ? 8192 : -1); + textToParse = data.toString(); if (! onlyReadOuterDocumentElement) originalText = textToParse; @@ -14424,7 +14396,7 @@ const String XmlElement::createDocument (const String& dtdToUse, const String& encodingType, const int lineWrapLength) const { - MemoryOutputStream mem (2048, 4096); + MemoryOutputStream mem (2048); writeToStream (mem, dtdToUse, allOnOneLine, includeXmlHeader, encodingType, lineWrapLength); return mem.toUTF8(); @@ -17433,6 +17405,8 @@ int JUCEApplication::shutdownAppAndClearUp() JUCE_TRY { + app->releaseMessageListener(); + shutdownJuce_GUI(); returnValue = app->getApplicationReturnValue(); @@ -17892,6 +17866,11 @@ ApplicationCommandTarget::ApplicationCommandTarget() } ApplicationCommandTarget::~ApplicationCommandTarget() +{ + releaseMessageListener(); +} + +void ApplicationCommandTarget::releaseMessageListener() { messageInvoker = 0; } @@ -85179,10 +85158,10 @@ Drawable* Drawable::createFromImageData (const void* data, const size_t numBytes Drawable* Drawable::createFromImageDataStream (InputStream& dataSource) { - MemoryBlock mb; - dataSource.readIntoMemoryBlock (mb); + MemoryOutputStream mo; + mo.writeFromInputStream (dataSource, -1); - return createFromImageData (mb.getData(), mb.getSize()); + return createFromImageData (mo.getData(), mo.getDataSize()); } Drawable* Drawable::createFromImageFile (const File& file) @@ -92189,7 +92168,7 @@ void Path::writePathToStream (OutputStream& dest) const const String Path::toString() const { - MemoryOutputStream s (2048, 2048); + MemoryOutputStream s (2048); if (! useNonZeroWinding) s << 'a'; @@ -210801,12 +210780,12 @@ const Image JPEGImageFormat::decodeImage (InputStream& in) using namespace jpeglibNamespace; using namespace JPEGHelpers; - MemoryBlock mb; - in.readIntoMemoryBlock (mb); + MemoryOutputStream mb; + mb.writeFromInputStream (in, -1); Image image; - if (mb.getSize() > 16) + if (mb.getDataSize() > 16) { struct jpeg_decompress_struct jpegDecompStruct; @@ -210826,7 +210805,7 @@ const Image JPEGImageFormat::decodeImage (InputStream& in) jpegDecompStruct.src->term_source = dummyCallback1; jpegDecompStruct.src->next_input_byte = static_cast (mb.getData()); - jpegDecompStruct.src->bytes_in_buffer = mb.getSize(); + jpegDecompStruct.src->bytes_in_buffer = mb.getDataSize(); try { diff --git a/juce_amalgamated.h b/juce_amalgamated.h index 9d0b9e20f0..6d3ee6f15e 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -64,7 +64,7 @@ */ #define JUCE_MAJOR_VERSION 1 #define JUCE_MINOR_VERSION 52 -#define JUCE_BUILDNUMBER 34 +#define JUCE_BUILDNUMBER 35 /** Current Juce version number. @@ -2574,83 +2574,83 @@ private: }; /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (const char* string1, const String& string2); +const String JUCE_PUBLIC_FUNCTION operator+ (const char* string1, const String& string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (const juce_wchar* string1, const String& string2); +const String JUCE_PUBLIC_FUNCTION operator+ (const juce_wchar* string1, const String& string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (char string1, const String& string2); +const String JUCE_PUBLIC_FUNCTION operator+ (char string1, const String& string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (juce_wchar string1, const String& string2); +const String JUCE_PUBLIC_FUNCTION operator+ (juce_wchar string1, const String& string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (String string1, const String& string2); +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const String& string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (String string1, const char* string2); +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const char* string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (String string1, const juce_wchar* string2); +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, const juce_wchar* string2); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (String string1, char characterToAppend); +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, char characterToAppend); /** Concatenates two strings. */ -const String JUCE_CALLTYPE operator+ (String string1, juce_wchar characterToAppend); +const String JUCE_PUBLIC_FUNCTION operator+ (String string1, juce_wchar characterToAppend); /** Appends a character at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, char characterToAppend); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, char characterToAppend); /** Appends a character at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, juce_wchar characterToAppend); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, juce_wchar characterToAppend); /** Appends a string to the end of the first one. */ -String& JUCE_CALLTYPE operator<< (String& string1, const char* string2); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const char* string2); /** Appends a string to the end of the first one. */ -String& JUCE_CALLTYPE operator<< (String& string1, const juce_wchar* string2); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const juce_wchar* string2); /** Appends a string to the end of the first one. */ -String& JUCE_CALLTYPE operator<< (String& string1, const String& string2); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, const String& string2); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, short number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, short number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, int number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, int number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, unsigned int number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, unsigned int number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, long number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, long number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, unsigned long number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, unsigned long number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, float number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, float number); /** Appends a decimal number at the end of a string. */ -String& JUCE_CALLTYPE operator<< (String& string1, double number); +String& JUCE_PUBLIC_FUNCTION operator<< (String& string1, double number); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator== (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const String& string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator== (const String& string1, const char* string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const char* string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator== (const String& string1, const juce_wchar* string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator== (const String& string1, const juce_wchar* string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator!= (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const String& string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator!= (const String& string1, const char* string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const char* string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator!= (const String& string1, const juce_wchar* string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator!= (const String& string1, const juce_wchar* string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator> (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator> (const String& string1, const String& string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator< (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator< (const String& string1, const String& string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator>= (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator>= (const String& string1, const String& string2) throw(); /** Case-sensitive comparison of two strings. */ -bool JUCE_CALLTYPE operator<= (const String& string1, const String& string2) throw(); +bool JUCE_PUBLIC_FUNCTION operator<= (const String& string1, const String& string2) throw(); /** This streaming override allows you to pass a juce String directly into std output streams. This is very handy for writing strings to std::cout, std::cerr, etc. */ template -std::basic_ostream & JUCE_CALLTYPE operator<< (std::basic_ostream & stream, const String& stringToWrite) +std::basic_ostream & JUCE_PUBLIC_FUNCTION operator<< (std::basic_ostream & stream, const String& stringToWrite) { return stream << stringToWrite.toUTF8(); } /** Writes a string to an OutputStream as UTF8. */ -OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const String& text); +OutputStream& JUCE_PUBLIC_FUNCTION operator<< (OutputStream& stream, const String& text); #endif // __JUCE_STRING_JUCEHEADER__ /*** End of inlined file: juce_String.h ***/ @@ -5847,7 +5847,7 @@ public: This is exposed publically in case you need to manipulate it directly for performance reasons. */ - Type value; + volatile Type value; }; /* @@ -5859,9 +5859,9 @@ public: #if JUCE_PPC || JUCE_IPHONE // None of these atomics are available for PPC or for iPhoneOS 3.1 or earlier!! - template static Type OSAtomicAdd64 (Type b, volatile Type* a) throw() { jassertfalse; return *a += b; } - template static Type OSAtomicIncrement64 (volatile Type* a) throw() { jassertfalse; return ++*a; } - template static Type OSAtomicDecrement64 (volatile Type* a) throw() { jassertfalse; return --*a; } + template static Type OSAtomicAdd64Barrier (Type b, volatile Type* a) throw() { jassertfalse; return *a += b; } + template static Type OSAtomicIncrement64Barrier (volatile Type* a) throw() { jassertfalse; return ++*a; } + template static Type OSAtomicDecrement64Barrier (volatile Type* a) throw() { jassertfalse; return --*a; } template static bool OSAtomicCompareAndSwap64Barrier (Type old, Type newValue, volatile Type* value) throw() { jassertfalse; if (old == *value) { *value = newValue; return true; } return false; } #define JUCE_64BIT_ATOMICS_UNAVAILABLE 1 @@ -5948,8 +5948,8 @@ template inline Type Atomic::operator+= (const Type amountToAdd) throw() { #if JUCE_ATOMICS_MAC - return sizeof (Type) == 4 ? (Type) OSAtomicAdd32 ((int32_t) amountToAdd, (int32_t*) &value) - : (Type) OSAtomicAdd64 ((int64_t) amountToAdd, (int64_t*) &value); + return sizeof (Type) == 4 ? (Type) OSAtomicAdd32Barrier ((int32_t) amountToAdd, (int32_t*) &value) + : (Type) OSAtomicAdd64Barrier ((int64_t) amountToAdd, (int64_t*) &value); #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) (juce_InterlockedExchangeAdd ((volatile long*) &value, (long) amountToAdd) + (long) amountToAdd) : (Type) (juce_InterlockedExchangeAdd64 ((volatile __int64*) &value, (__int64) amountToAdd) + (__int64) amountToAdd); @@ -5968,8 +5968,8 @@ template inline Type Atomic::operator++() throw() { #if JUCE_ATOMICS_MAC - return sizeof (Type) == 4 ? (Type) OSAtomicIncrement32 ((int32_t*) &value) - : (Type) OSAtomicIncrement64 ((int64_t*) &value); + return sizeof (Type) == 4 ? (Type) OSAtomicIncrement32Barrier ((int32_t*) &value) + : (Type) OSAtomicIncrement64Barrier ((int64_t*) &value); #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) juce_InterlockedIncrement ((volatile long*) &value) : (Type) juce_InterlockedIncrement64 ((volatile __int64*) &value); @@ -5982,8 +5982,8 @@ template inline Type Atomic::operator--() throw() { #if JUCE_ATOMICS_MAC - return sizeof (Type) == 4 ? (Type) OSAtomicDecrement32 ((int32_t*) &value) - : (Type) OSAtomicDecrement64 ((int64_t*) &value); + return sizeof (Type) == 4 ? (Type) OSAtomicDecrement32Barrier ((int32_t*) &value) + : (Type) OSAtomicDecrement64Barrier ((int64_t*) &value); #elif JUCE_ATOMICS_WINDOWS return sizeof (Type) == 4 ? (Type) juce_InterlockedDecrement ((volatile long*) &value) : (Type) juce_InterlockedDecrement64 ((volatile __int64*) &value); @@ -16706,21 +16706,28 @@ class JUCE_API MemoryOutputStream : public OutputStream { public: - /** Creates a memory stream ready for writing into. + /** Creates an empty memory stream ready for writing into. - @param initialSize the intial amount of space to allocate for writing into - @param granularity the increments by which the internal storage will be increased - @param memoryBlockToWriteTo if this is non-zero, then this block will be used as the - place that the data gets stored. If it's zero, the stream - will allocate its own storage internally, which you can - access using getData() and getDataSize() + @param initialSize the intial amount of capacity to allocate for writing into */ - MemoryOutputStream (size_t initialSize = 256, - size_t granularity = 256, - MemoryBlock* memoryBlockToWriteTo = 0); + MemoryOutputStream (size_t initialSize = 256); + + /** Creates a memory stream for writing into into a pre-existing MemoryBlock object. + + Note that the destination block will always be larger than the amount of data + that has been written to the stream, because the MemoryOutputStream keeps some + spare capactity at its end. To trim the block's size down to fit the actual + data, call flush(), or delete the MemoryOutputStream. + + @param memoryBlockToWriteTo the block into which new data will be written. + @param appendToExistingBlockContent if this is true, the contents of the block will be + kept, and new data will be appended to it. If false, + the block will be cleared before use + */ + MemoryOutputStream (MemoryBlock& memoryBlockToWriteTo, + bool appendToExistingBlockContent); /** Destructor. - This will free any data that was written to it. */ ~MemoryOutputStream(); @@ -16729,7 +16736,7 @@ public: @see getDataSize */ - const char* getData() const throw(); + const void* getData() const throw(); /** Returns the number of bytes of data that have been written to the stream. @@ -16740,25 +16747,44 @@ public: /** Resets the stream, clearing any data that has been written to it so far. */ void reset() throw(); + /** Increases the internal storage capacity to be able to contain at least the specified + amount of data without needing to be resized. + */ + void preallocate (size_t bytesToPreallocate); + /** Returns a String created from the (UTF8) data that has been written to the stream. */ const String toUTF8() const; + /** Attempts to detect the encoding of the data and convert it to a string. + @see String::createStringFromData + */ + const String toString() const; + + /** If the stream is writing to a user-supplied MemoryBlock, this will trim any excess + capacity off the block, so that its length matches the amount of actual data that + has been written so far. + */ void flush(); + bool write (const void* buffer, int howMany); int64 getPosition() { return position; } bool setPosition (int64 newPosition); + int writeFromInputStream (InputStream& source, int64 maxNumBytesToWrite); juce_UseDebuggingNewOperator private: - MemoryBlock* data; - ScopedPointer dataToDelete; - size_t position, size, blockSize; + MemoryBlock& data; + MemoryBlock internalBlock; + size_t position, size; MemoryOutputStream (const MemoryOutputStream&); MemoryOutputStream& operator= (const MemoryOutputStream&); }; +/** Copies all the data that has been written to a MemoryOutputStream into another stream. */ +OutputStream& JUCE_CALLTYPE operator<< (OutputStream& stream, const MemoryOutputStream& streamToRead); + #endif // __JUCE_MEMORYOUTPUTSTREAM_JUCEHEADER__ /*** End of inlined file: juce_MemoryOutputStream.h ***/ @@ -27731,6 +27757,9 @@ public: juce_UseDebuggingNewOperator + /** @internal */ + void releaseMessageListener(); + private: // (for async invocation of commands) class CommandTargetMessageInvoker : public MessageListener diff --git a/src/io/streams/juce_MemoryOutputStream.h b/src/io/streams/juce_MemoryOutputStream.h index c358eb8cae..1f65919819 100644 --- a/src/io/streams/juce_MemoryOutputStream.h +++ b/src/io/streams/juce_MemoryOutputStream.h @@ -115,7 +115,7 @@ public: private: MemoryBlock& data; MemoryBlock internalBlock; - size_t position, size, blockSize; + size_t position, size; MemoryOutputStream (const MemoryOutputStream&); MemoryOutputStream& operator= (const MemoryOutputStream&);