Browse Source

cosmetic cleanup

tags/2021-05-28
jules 17 years ago
parent
commit
29e2de7fd0
40 changed files with 3783 additions and 3787 deletions
  1. +1
    -1
      build/linux/platform_specific_code/juce_linux_Files.cpp
  2. +1
    -1
      build/linux/platform_specific_code/juce_linux_WebBrowserComponent.cpp
  3. +1
    -1
      build/macosx/platform_specific_code/juce_mac_Files.cpp
  4. +1
    -2
      build/macosx/platform_specific_code/juce_mac_HTTPStream.h
  5. +1
    -1
      build/win32/platform_specific_code/juce_win32_ASIO.cpp
  6. +1
    -1
      build/win32/platform_specific_code/juce_win32_WebBrowserComponent.cpp
  7. +282
    -282
      extras/audio plugin host/src/host/FilterGraph.h
  8. +1
    -1
      extras/audio plugin host/src/juce_AppConfig.h
  9. +3
    -3
      extras/audio plugin host/src/juce_LibrarySource.cpp
  10. +1049
    -1049
      extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp
  11. +0
    -1
      extras/juce demo/src/BinaryData.cpp
  12. +129
    -129
      extras/juce demo/src/binarydata/QuickTimeDemo.cpp
  13. +129
    -129
      extras/juce demo/src/demos/QuickTimeDemo.cpp
  14. +1
    -1
      extras/juce demo/src/juce_AppConfig.h
  15. +3
    -3
      extras/juce demo/src/juce_LibrarySource.cpp
  16. +0
    -1
      extras/the jucer/src/BinaryData.cpp
  17. +1
    -1
      extras/the jucer/src/juce_AppConfig.h
  18. +3
    -3
      extras/the jucer/src/juce_LibrarySource.cpp
  19. +1
    -1
      extras/the jucer/src/utility/jucer_UtilityFunctions.cpp
  20. +2
    -2
      src/juce_amalgamated_template.cpp
  21. +4
    -5
      src/juce_amalgamated_template.h
  22. +1
    -1
      src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp
  23. +1
    -1
      src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp
  24. +1
    -1
      src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp
  25. +4
    -4
      src/juce_appframework/audio/devices/juce_AudioIODevice.h
  26. +1358
    -1358
      src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp
  27. +442
    -442
      src/juce_appframework/audio/processors/juce_AudioProcessorGraph.h
  28. +1
    -1
      src/juce_appframework/gui/components/controls/juce_ComboBox.cpp
  29. +1
    -1
      src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp
  30. +1
    -1
      src/juce_appframework/gui/components/windows/juce_ComponentPeer.h
  31. +344
    -344
      src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp
  32. +2
    -2
      src/juce_core/cryptography/juce_BlowFish.h
  33. +1
    -1
      src/juce_core/io/files/juce_DirectoryIterator.cpp
  34. +2
    -2
      src/juce_core/io/files/juce_File.cpp
  35. +1
    -1
      src/juce_core/io/network/juce_URL.cpp
  36. +3
    -3
      src/juce_core/io/streams/zlib/inftrees.c
  37. +1
    -1
      src/juce_core/io/streams/zlib/trees.c
  38. +1
    -1
      src/juce_core/misc/juce_ZipFile.cpp
  39. +1
    -1
      src/juce_core/misc/juce_ZipFile.h
  40. +3
    -3
      src/juce_core/text/juce_String.h

+ 1
- 1
build/linux/platform_specific_code/juce_linux_Files.cpp View File

@@ -352,7 +352,7 @@ struct FindFileStruct
// returns 0 on failure
void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile,
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime,
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime,
Time* creationTime, bool* isReadOnly) throw()
{
DIR* d = opendir (directory.toUTF8());


+ 1
- 1
build/linux/platform_specific_code/juce_linux_WebBrowserComponent.cpp View File

@@ -53,7 +53,7 @@ WebBrowserComponent::~WebBrowserComponent()
}
//==============================================================================
void WebBrowserComponent::goToURL (const String& url,
void WebBrowserComponent::goToURL (const String& url,
const StringArray* headers,
const MemoryBlock* postData)
{


+ 1
- 1
build/macosx/platform_specific_code/juce_mac_Files.cpp View File

@@ -633,7 +633,7 @@ struct FindFileStruct
// returns 0 on failure
void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile,
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime,
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime,
Time* creationTime, bool* isReadOnly) throw()
{
DIR* const d = opendir (directory.toUTF8());


+ 1
- 2
build/macosx/platform_specific_code/juce_mac_HTTPStream.h View File

@@ -142,7 +142,7 @@ public:
StringArray lines;
lines.addLines (responseHeader);
// NB - using charToString() here instead of just T(" "), because that was
// NB - using charToString() here instead of just T(" "), because that was
// causing a mysterious gcc internal compiler error...
const int statusCode = responseHeader.fromFirstOccurrenceOf (String::charToString (T(' ')), false, false)
.substring (0, 3)
@@ -399,4 +399,3 @@ int juce_seekInInternetFile (void* handle, int newPosition)
return 0;
}

+ 1
- 1
build/win32/platform_specific_code/juce_win32_ASIO.cpp View File

@@ -1844,7 +1844,7 @@ public:
}
}
jassert (freeSlot >= 0); // unfortunately you can only have a finite number
jassert (freeSlot >= 0); // unfortunately you can only have a finite number
// of ASIO devices open at the same time..
if (freeSlot >= 0)


+ 1
- 1
build/win32/platform_specific_code/juce_win32_WebBrowserComponent.cpp View File

@@ -316,7 +316,7 @@ void WebBrowserComponent::checkWindowAssociation()
{
if (browser != 0 && ! blankPageShown)
{
// when the component becomes invisible, some stuff like flash
// when the component becomes invisible, some stuff like flash
// carries on playing audio, so we need to force it onto a blank
// page to avoid this..


+ 282
- 282
extras/audio plugin host/src/host/FilterGraph.h View File

@@ -1,282 +1,282 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __JUCE_FILTERGRAPH_JUCEHEADER__
#define __JUCE_FILTERGRAPH_JUCEHEADER__
class FilterInGraph;
class FilterGraph;
const char* const filenameSuffix = ".filtergraph";
const char* const filenameWildcard = "*.filtergraph";
//==============================================================================
/**
Represents a connection between two pins in a FilterGraph.
*/
class FilterConnection
{
public:
//==============================================================================
FilterConnection (FilterGraph& owner);
FilterConnection (const FilterConnection& other);
~FilterConnection();
//==============================================================================
uint32 sourceFilterID;
int sourceChannel;
uint32 destFilterID;
int destChannel;
//==============================================================================
juce_UseDebuggingNewOperator
private:
FilterGraph& owner;
const FilterConnection& operator= (const FilterConnection&);
};
//==============================================================================
/**
Represents one of the filters in a FilterGraph.
*/
/*class FilterInGraph : public ReferenceCountedObject
{
public:
//==============================================================================
FilterInGraph (FilterGraph& owner, AudioPluginInstance* const plugin);
~FilterInGraph();
//==============================================================================
AudioPluginInstance* const filter;
uint32 uid;
//==============================================================================
void showUI (bool useGenericUI);
double getX() const throw() { return x; }
double getY() const throw() { return y; }
void setPosition (double x, double y) throw();
XmlElement* createXml() const;
static FilterInGraph* createForDescription (FilterGraph& owner,
const PluginDescription& desc,
String& errorMessage);
static FilterInGraph* createFromXml (FilterGraph& owner, const XmlElement& xml);
//==============================================================================
typedef ReferenceCountedObjectPtr <FilterInGraph> Ptr;
//==============================================================================
juce_UseDebuggingNewOperator
private:
friend class FilterGraphPlayer;
FilterGraph& owner;
double x, y;
friend class PluginWindow;
Component* activeUI;
Component* activeGenericUI;
int lastX, lastY;
MidiBuffer outputMidi;
AudioSampleBuffer processedAudio;
MidiBuffer processedMidi;
void prepareBuffers (int blockSize);
void renderBlock (int numSamples,
const ReferenceCountedArray <FilterInGraph>& filters,
const OwnedArray <FilterConnection>& connections);
FilterInGraph (const FilterInGraph&);
const FilterInGraph& operator= (const FilterInGraph&);
};
*/
//==============================================================================
/**
A collection of filters and some connections between them.
*/
class FilterGraph : public FileBasedDocument
{
public:
//==============================================================================
FilterGraph();
~FilterGraph();
//==============================================================================
AudioProcessorGraph& getGraph() throw() { return graph; }
int getNumFilters() const throw();
const AudioProcessorGraph::Node::Ptr getNode (const int index) const throw();
const AudioProcessorGraph::Node::Ptr getNodeForId (const uint32 uid) const throw();
void addFilter (const PluginDescription* desc, double x, double y);
void removeFilter (const uint32 filterUID);
void disconnectFilter (const uint32 filterUID);
void removeIllegalConnections();
void setNodePosition (const int nodeId, double x, double y);
void getNodePosition (const int nodeId, double& x, double& y) const;
//==============================================================================
int getNumConnections() const throw();
const AudioProcessorGraph::Connection* getConnection (const int index) const throw();
const AudioProcessorGraph::Connection* getConnectionBetween (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel) const throw();
bool canConnect (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel) const throw();
bool addConnection (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel);
void removeConnection (const int index);
void removeConnection (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel);
void clear();
//==============================================================================
XmlElement* createXml() const;
void restoreFromXml (const XmlElement& xml);
//==============================================================================
const String getDocumentTitle();
const String loadDocument (const File& file);
const String saveDocument (const File& file);
const File getLastDocumentOpened();
void setLastDocumentOpened (const File& file);
/** The special channel index used to refer to a filter's midi channel.
*/
static const int midiChannelNumber;
//==============================================================================
juce_UseDebuggingNewOperator
private:
//friend class FilterGraphPlayer;
//ReferenceCountedArray <FilterInGraph> filters;
//OwnedArray <FilterConnection> connections;
AudioProcessorGraph graph;
AudioProcessorPlayer player;
uint32 lastUID;
uint32 getNextUID() throw();
void createNodeFromXml (const XmlElement& xml);
FilterGraph (const FilterGraph&);
const FilterGraph& operator= (const FilterGraph&);
};
//==============================================================================
/**
*/
/*class FilterGraphPlayer : public AudioIODeviceCallback,
public MidiInputCallback,
public ChangeListener
{
public:
//==============================================================================
FilterGraphPlayer (FilterGraph& graph);
~FilterGraphPlayer();
//==============================================================================
void setAudioDeviceManager (AudioDeviceManager* dm);
AudioDeviceManager* getAudioDeviceManager() const throw() { return deviceManager; }
//==============================================================================
void audioDeviceIOCallback (const float** inputChannelData,
int totalNumInputChannels,
float** outputChannelData,
int totalNumOutputChannels,
int numSamples);
void audioDeviceAboutToStart (double sampleRate, int numSamplesPerBlock);
void audioDeviceStopped();
void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message);
void changeListenerCallback (void*);
//==============================================================================
static int compareElements (FilterInGraph* const first, FilterInGraph* const second) throw();
const float** inputChannelData;
int totalNumInputChannels;
float** outputChannelData;
int totalNumOutputChannels;
MidiBuffer incomingMidi;
MidiKeyboardState keyState;
MidiMessageCollector messageCollector;
//==============================================================================
class PlayerAwareFilter
{
public:
virtual void setPlayer (FilterGraphPlayer* newPlayer) = 0;
};
private:
FilterGraph& graph;
CriticalSection processLock;
double sampleRate;
int blockSize;
AudioDeviceManager* deviceManager;
ReferenceCountedArray <FilterInGraph> filters;
OwnedArray <FilterConnection> connections;
void update();
FilterGraphPlayer (const FilterGraphPlayer&);
const FilterGraphPlayer& operator= (const FilterGraphPlayer&);
};
*/
#endif
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __JUCE_FILTERGRAPH_JUCEHEADER__
#define __JUCE_FILTERGRAPH_JUCEHEADER__
class FilterInGraph;
class FilterGraph;
const char* const filenameSuffix = ".filtergraph";
const char* const filenameWildcard = "*.filtergraph";
//==============================================================================
/**
Represents a connection between two pins in a FilterGraph.
*/
class FilterConnection
{
public:
//==============================================================================
FilterConnection (FilterGraph& owner);
FilterConnection (const FilterConnection& other);
~FilterConnection();
//==============================================================================
uint32 sourceFilterID;
int sourceChannel;
uint32 destFilterID;
int destChannel;
//==============================================================================
juce_UseDebuggingNewOperator
private:
FilterGraph& owner;
const FilterConnection& operator= (const FilterConnection&);
};
//==============================================================================
/**
Represents one of the filters in a FilterGraph.
*/
/*class FilterInGraph : public ReferenceCountedObject
{
public:
//==============================================================================
FilterInGraph (FilterGraph& owner, AudioPluginInstance* const plugin);
~FilterInGraph();
//==============================================================================
AudioPluginInstance* const filter;
uint32 uid;
//==============================================================================
void showUI (bool useGenericUI);
double getX() const throw() { return x; }
double getY() const throw() { return y; }
void setPosition (double x, double y) throw();
XmlElement* createXml() const;
static FilterInGraph* createForDescription (FilterGraph& owner,
const PluginDescription& desc,
String& errorMessage);
static FilterInGraph* createFromXml (FilterGraph& owner, const XmlElement& xml);
//==============================================================================
typedef ReferenceCountedObjectPtr <FilterInGraph> Ptr;
//==============================================================================
juce_UseDebuggingNewOperator
private:
friend class FilterGraphPlayer;
FilterGraph& owner;
double x, y;
friend class PluginWindow;
Component* activeUI;
Component* activeGenericUI;
int lastX, lastY;
MidiBuffer outputMidi;
AudioSampleBuffer processedAudio;
MidiBuffer processedMidi;
void prepareBuffers (int blockSize);
void renderBlock (int numSamples,
const ReferenceCountedArray <FilterInGraph>& filters,
const OwnedArray <FilterConnection>& connections);
FilterInGraph (const FilterInGraph&);
const FilterInGraph& operator= (const FilterInGraph&);
};
*/
//==============================================================================
/**
A collection of filters and some connections between them.
*/
class FilterGraph : public FileBasedDocument
{
public:
//==============================================================================
FilterGraph();
~FilterGraph();
//==============================================================================
AudioProcessorGraph& getGraph() throw() { return graph; }
int getNumFilters() const throw();
const AudioProcessorGraph::Node::Ptr getNode (const int index) const throw();
const AudioProcessorGraph::Node::Ptr getNodeForId (const uint32 uid) const throw();
void addFilter (const PluginDescription* desc, double x, double y);
void removeFilter (const uint32 filterUID);
void disconnectFilter (const uint32 filterUID);
void removeIllegalConnections();
void setNodePosition (const int nodeId, double x, double y);
void getNodePosition (const int nodeId, double& x, double& y) const;
//==============================================================================
int getNumConnections() const throw();
const AudioProcessorGraph::Connection* getConnection (const int index) const throw();
const AudioProcessorGraph::Connection* getConnectionBetween (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel) const throw();
bool canConnect (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel) const throw();
bool addConnection (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel);
void removeConnection (const int index);
void removeConnection (uint32 sourceFilterUID, int sourceFilterChannel,
uint32 destFilterUID, int destFilterChannel);
void clear();
//==============================================================================
XmlElement* createXml() const;
void restoreFromXml (const XmlElement& xml);
//==============================================================================
const String getDocumentTitle();
const String loadDocument (const File& file);
const String saveDocument (const File& file);
const File getLastDocumentOpened();
void setLastDocumentOpened (const File& file);
/** The special channel index used to refer to a filter's midi channel.
*/
static const int midiChannelNumber;
//==============================================================================
juce_UseDebuggingNewOperator
private:
//friend class FilterGraphPlayer;
//ReferenceCountedArray <FilterInGraph> filters;
//OwnedArray <FilterConnection> connections;
AudioProcessorGraph graph;
AudioProcessorPlayer player;
uint32 lastUID;
uint32 getNextUID() throw();
void createNodeFromXml (const XmlElement& xml);
FilterGraph (const FilterGraph&);
const FilterGraph& operator= (const FilterGraph&);
};
//==============================================================================
/**
*/
/*class FilterGraphPlayer : public AudioIODeviceCallback,
public MidiInputCallback,
public ChangeListener
{
public:
//==============================================================================
FilterGraphPlayer (FilterGraph& graph);
~FilterGraphPlayer();
//==============================================================================
void setAudioDeviceManager (AudioDeviceManager* dm);
AudioDeviceManager* getAudioDeviceManager() const throw() { return deviceManager; }
//==============================================================================
void audioDeviceIOCallback (const float** inputChannelData,
int totalNumInputChannels,
float** outputChannelData,
int totalNumOutputChannels,
int numSamples);
void audioDeviceAboutToStart (double sampleRate, int numSamplesPerBlock);
void audioDeviceStopped();
void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message);
void changeListenerCallback (void*);
//==============================================================================
static int compareElements (FilterInGraph* const first, FilterInGraph* const second) throw();
const float** inputChannelData;
int totalNumInputChannels;
float** outputChannelData;
int totalNumOutputChannels;
MidiBuffer incomingMidi;
MidiKeyboardState keyState;
MidiMessageCollector messageCollector;
//==============================================================================
class PlayerAwareFilter
{
public:
virtual void setPlayer (FilterGraphPlayer* newPlayer) = 0;
};
private:
FilterGraph& graph;
CriticalSection processLock;
double sampleRate;
int blockSize;
AudioDeviceManager* deviceManager;
ReferenceCountedArray <FilterInGraph> filters;
OwnedArray <FilterConnection> connections;
void update();
FilterGraphPlayer (const FilterGraphPlayer&);
const FilterGraphPlayer& operator= (const FilterGraphPlayer&);
};
*/
#endif

+ 1
- 1
extras/audio plugin host/src/juce_AppConfig.h View File

@@ -30,7 +30,7 @@
*/
/*
This file contains settings that you might want to explicitly apply to
This file contains settings that you might want to explicitly apply to
the your build.
Most of these are turned on or off by default, but you can override


+ 3
- 3
extras/audio plugin host/src/juce_LibrarySource.cpp View File

@@ -1,10 +1,10 @@
/*
/*
This file includes the entire juce source tree via the amalgamated file.
You could add the amalgamated file directly to your project, but doing it
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
the source code.
*/


+ 1049
- 1049
extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp
File diff suppressed because it is too large
View File


+ 0
- 1
extras/juce demo/src/BinaryData.cpp View File

@@ -7969,4 +7969,3 @@ static const unsigned char temp17[] = {47,42,13,10,32,32,61,61,61,61,61,61,61,61
111,109,109,97,110,100,77,97,110,97,103,101,114,41,13,10,123,13,10,32,32,32,32,114,101,116,117,114,110,32,110,101,119,32,87,105,100,103,101,116,
115,68,101,109,111,32,40,99,111,109,109,97,110,100,77,97,110,97,103,101,114,41,59,13,10,125,13,10,0,0};
const char* BinaryData::widgetsdemo_cpp = (const char*) temp17;

+ 129
- 129
extras/juce demo/src/binarydata/QuickTimeDemo.cpp View File

@@ -1,129 +1,129 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../jucedemo_headers.h"
#if JUCE_QUICKTIME && ! JUCE_LINUX
//==============================================================================
// so that we can easily have two QT windows each with a file browser, wrap this up as a class..
class QuickTimeWindowWithFileBrowser : public Component,
public FilenameComponentListener
{
public:
QuickTimeWindowWithFileBrowser()
{
addAndMakeVisible (qtComp = new QuickTimeMovieComponent());
// and a file-chooser..
addAndMakeVisible (fileChooser = new FilenameComponent (T("movie"),
File::nonexistent,
true, false, false,
T("*.*"),
String::empty,
T("(choose a video file to play)")));
fileChooser->addListener (this);
fileChooser->setBrowseButtonText (T("browse"));
}
~QuickTimeWindowWithFileBrowser()
{
deleteAllChildren();
}
void resized()
{
qtComp->setBounds (0, 0, getWidth(), getHeight() - 30);
fileChooser->setBounds (0, getHeight() - 24, getWidth(), 24);
}
void filenameComponentChanged (FilenameComponent*)
{
// this is called when the user changes the filename in the file chooser box
if (qtComp->loadMovie (fileChooser->getCurrentFile(), true))
{
// loaded the file ok, so let's start it playing..
qtComp->play();
}
else
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
T("Couldn't load the file!"),
T("Sorry, QuickTime didn't manage to load that file!"));
}
}
private:
QuickTimeMovieComponent* qtComp;
FilenameComponent* fileChooser;
};
//==============================================================================
class QuickTimeDemo : public Component
{
public:
//==============================================================================
QuickTimeDemo()
{
setName (T("QuickTime"));
// add a movie component..
addAndMakeVisible (qtComp1 = new QuickTimeWindowWithFileBrowser());
addAndMakeVisible (qtComp2 = new QuickTimeWindowWithFileBrowser());
}
~QuickTimeDemo()
{
deleteAllChildren();
}
void resized()
{
qtComp1->setBoundsRelative (0.05f, 0.05f, 0.425f, 0.9f);
qtComp2->setBoundsRelative (0.525f, 0.05f, 0.425f, 0.9f);
}
private:
//==============================================================================
QuickTimeWindowWithFileBrowser* qtComp1;
QuickTimeWindowWithFileBrowser* qtComp2;
};
//==============================================================================
Component* createQuickTimeDemo()
{
return new QuickTimeDemo();
}
#endif
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../jucedemo_headers.h"
#if JUCE_QUICKTIME && ! JUCE_LINUX
//==============================================================================
// so that we can easily have two QT windows each with a file browser, wrap this up as a class..
class QuickTimeWindowWithFileBrowser : public Component,
public FilenameComponentListener
{
public:
QuickTimeWindowWithFileBrowser()
{
addAndMakeVisible (qtComp = new QuickTimeMovieComponent());
// and a file-chooser..
addAndMakeVisible (fileChooser = new FilenameComponent (T("movie"),
File::nonexistent,
true, false, false,
T("*.*"),
String::empty,
T("(choose a video file to play)")));
fileChooser->addListener (this);
fileChooser->setBrowseButtonText (T("browse"));
}
~QuickTimeWindowWithFileBrowser()
{
deleteAllChildren();
}
void resized()
{
qtComp->setBounds (0, 0, getWidth(), getHeight() - 30);
fileChooser->setBounds (0, getHeight() - 24, getWidth(), 24);
}
void filenameComponentChanged (FilenameComponent*)
{
// this is called when the user changes the filename in the file chooser box
if (qtComp->loadMovie (fileChooser->getCurrentFile(), true))
{
// loaded the file ok, so let's start it playing..
qtComp->play();
}
else
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
T("Couldn't load the file!"),
T("Sorry, QuickTime didn't manage to load that file!"));
}
}
private:
QuickTimeMovieComponent* qtComp;
FilenameComponent* fileChooser;
};
//==============================================================================
class QuickTimeDemo : public Component
{
public:
//==============================================================================
QuickTimeDemo()
{
setName (T("QuickTime"));
// add a movie component..
addAndMakeVisible (qtComp1 = new QuickTimeWindowWithFileBrowser());
addAndMakeVisible (qtComp2 = new QuickTimeWindowWithFileBrowser());
}
~QuickTimeDemo()
{
deleteAllChildren();
}
void resized()
{
qtComp1->setBoundsRelative (0.05f, 0.05f, 0.425f, 0.9f);
qtComp2->setBoundsRelative (0.525f, 0.05f, 0.425f, 0.9f);
}
private:
//==============================================================================
QuickTimeWindowWithFileBrowser* qtComp1;
QuickTimeWindowWithFileBrowser* qtComp2;
};
//==============================================================================
Component* createQuickTimeDemo()
{
return new QuickTimeDemo();
}
#endif

+ 129
- 129
extras/juce demo/src/demos/QuickTimeDemo.cpp View File

@@ -1,129 +1,129 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../jucedemo_headers.h"
#if JUCE_QUICKTIME && ! JUCE_LINUX
//==============================================================================
// so that we can easily have two QT windows each with a file browser, wrap this up as a class..
class QuickTimeWindowWithFileBrowser : public Component,
public FilenameComponentListener
{
public:
QuickTimeWindowWithFileBrowser()
{
addAndMakeVisible (qtComp = new QuickTimeMovieComponent());
// and a file-chooser..
addAndMakeVisible (fileChooser = new FilenameComponent (T("movie"),
File::nonexistent,
true, false, false,
T("*.*"),
String::empty,
T("(choose a video file to play)")));
fileChooser->addListener (this);
fileChooser->setBrowseButtonText (T("browse"));
}
~QuickTimeWindowWithFileBrowser()
{
deleteAllChildren();
}
void resized()
{
qtComp->setBounds (0, 0, getWidth(), getHeight() - 30);
fileChooser->setBounds (0, getHeight() - 24, getWidth(), 24);
}
void filenameComponentChanged (FilenameComponent*)
{
// this is called when the user changes the filename in the file chooser box
if (qtComp->loadMovie (fileChooser->getCurrentFile(), true))
{
// loaded the file ok, so let's start it playing..
qtComp->play();
}
else
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
T("Couldn't load the file!"),
T("Sorry, QuickTime didn't manage to load that file!"));
}
}
private:
QuickTimeMovieComponent* qtComp;
FilenameComponent* fileChooser;
};
//==============================================================================
class QuickTimeDemo : public Component
{
public:
//==============================================================================
QuickTimeDemo()
{
setName (T("QuickTime"));
// add a movie component..
addAndMakeVisible (qtComp1 = new QuickTimeWindowWithFileBrowser());
addAndMakeVisible (qtComp2 = new QuickTimeWindowWithFileBrowser());
}
~QuickTimeDemo()
{
deleteAllChildren();
}
void resized()
{
qtComp1->setBoundsRelative (0.05f, 0.05f, 0.425f, 0.9f);
qtComp2->setBoundsRelative (0.525f, 0.05f, 0.425f, 0.9f);
}
private:
//==============================================================================
QuickTimeWindowWithFileBrowser* qtComp1;
QuickTimeWindowWithFileBrowser* qtComp2;
};
//==============================================================================
Component* createQuickTimeDemo()
{
return new QuickTimeDemo();
}
#endif
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../jucedemo_headers.h"
#if JUCE_QUICKTIME && ! JUCE_LINUX
//==============================================================================
// so that we can easily have two QT windows each with a file browser, wrap this up as a class..
class QuickTimeWindowWithFileBrowser : public Component,
public FilenameComponentListener
{
public:
QuickTimeWindowWithFileBrowser()
{
addAndMakeVisible (qtComp = new QuickTimeMovieComponent());
// and a file-chooser..
addAndMakeVisible (fileChooser = new FilenameComponent (T("movie"),
File::nonexistent,
true, false, false,
T("*.*"),
String::empty,
T("(choose a video file to play)")));
fileChooser->addListener (this);
fileChooser->setBrowseButtonText (T("browse"));
}
~QuickTimeWindowWithFileBrowser()
{
deleteAllChildren();
}
void resized()
{
qtComp->setBounds (0, 0, getWidth(), getHeight() - 30);
fileChooser->setBounds (0, getHeight() - 24, getWidth(), 24);
}
void filenameComponentChanged (FilenameComponent*)
{
// this is called when the user changes the filename in the file chooser box
if (qtComp->loadMovie (fileChooser->getCurrentFile(), true))
{
// loaded the file ok, so let's start it playing..
qtComp->play();
}
else
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
T("Couldn't load the file!"),
T("Sorry, QuickTime didn't manage to load that file!"));
}
}
private:
QuickTimeMovieComponent* qtComp;
FilenameComponent* fileChooser;
};
//==============================================================================
class QuickTimeDemo : public Component
{
public:
//==============================================================================
QuickTimeDemo()
{
setName (T("QuickTime"));
// add a movie component..
addAndMakeVisible (qtComp1 = new QuickTimeWindowWithFileBrowser());
addAndMakeVisible (qtComp2 = new QuickTimeWindowWithFileBrowser());
}
~QuickTimeDemo()
{
deleteAllChildren();
}
void resized()
{
qtComp1->setBoundsRelative (0.05f, 0.05f, 0.425f, 0.9f);
qtComp2->setBoundsRelative (0.525f, 0.05f, 0.425f, 0.9f);
}
private:
//==============================================================================
QuickTimeWindowWithFileBrowser* qtComp1;
QuickTimeWindowWithFileBrowser* qtComp2;
};
//==============================================================================
Component* createQuickTimeDemo()
{
return new QuickTimeDemo();
}
#endif

+ 1
- 1
extras/juce demo/src/juce_AppConfig.h View File

@@ -30,7 +30,7 @@
*/
/*
This file contains settings that you might want to explicitly apply to
This file contains settings that you might want to explicitly apply to
the your build.
Most of these are turned on or off by default, but you can override


+ 3
- 3
extras/juce demo/src/juce_LibrarySource.cpp View File

@@ -1,10 +1,10 @@
/*
/*
This file includes the entire juce source tree via the amalgamated file.
You could add the amalgamated file directly to your project, but doing it
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
the source code.
*/


+ 0
- 1
extras/the jucer/src/BinaryData.cpp View File

@@ -911,4 +911,3 @@ static const unsigned char temp4[] = {137,80,78,71,13,10,26,10,0,0,0,13,73,72,68
0,98,28,9,155,95,0,2,104,68,236,11,1,8,160,17,225,73,128,0,3,0,120,52,172,151,198,78,252,63,0,0,0,0,73,69,78,68,174,66,
96,130,0,0};
const char* BinaryData::prefs_misc_png = (const char*) temp4;

+ 1
- 1
extras/the jucer/src/juce_AppConfig.h View File

@@ -30,7 +30,7 @@
*/
/*
This file contains settings that you might want to explicitly apply to
This file contains settings that you might want to explicitly apply to
the your build.
Most of these are turned on or off by default, but you can override


+ 3
- 3
extras/the jucer/src/juce_LibrarySource.cpp View File

@@ -1,10 +1,10 @@
/*
/*
This file includes the entire juce source tree via the amalgamated file.
You could add the amalgamated file directly to your project, but doing it
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
like this allows you to put your app's config settings in the
juce_AppConfig.h file and have them applied to both the juce headers and
the source code.
*/


+ 1
- 1
extras/the jucer/src/utility/jucer_UtilityFunctions.cpp View File

@@ -362,7 +362,7 @@ void positionToCode (const RelativePositionedRectangle& position,
positionToCode (ComponentTypeHandler::getComponentPosition (relCompW), layout, wrx, wry, wrw, wrh);
String hrx, hry, hrw, hrh;
Component* const relCompH = (layout != 0 && position.rect.getHeightMode() != PositionedRectangle::absoluteSize)
Component* const relCompH = (layout != 0 && position.rect.getHeightMode() != PositionedRectangle::absoluteSize)
? layout->findComponentWithId (position.relativeToH) : 0;
if (relCompH != 0)
positionToCode (ComponentTypeHandler::getComponentPosition (relCompH), layout, hrx, hry, hrw, hrh);


+ 2
- 2
src/juce_amalgamated_template.cpp View File

@@ -32,7 +32,7 @@
/*
This monolithic file contains the entire Juce source tree!
To build an app which uses Juce, all you need to do is to add this
To build an app which uses Juce, all you need to do is to add this
file to your project, and include juce.h in your own cpp files.
*/
@@ -343,7 +343,7 @@
#endif
//==============================================================================
// some files include lots of library code, so leave them to the end to avoid cluttering
// some files include lots of library code, so leave them to the end to avoid cluttering
// up the build for the clean files.
#include "juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp"
#include "juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp"


+ 4
- 5
src/juce_amalgamated_template.h View File

@@ -29,11 +29,10 @@
==============================================================================
*/
/*
==============================================================================
This header contains the entire Juce source tree, and can be #included in
This header contains the entire Juce source tree, and can be #included in
all your source files.
As well as including this in your files, you should also add juce_inline.cpp
@@ -43,11 +42,11 @@
==============================================================================
*/
#ifndef __ALL_JUCE_HEADERS_H__
#define __ALL_JUCE_HEADERS_H__
#ifndef __JUCE_AMALGAMATED_TEMPLATE_JUCEHEADER__
#define __JUCE_AMALGAMATED_TEMPLATE_JUCEHEADER__
#define DONT_AUTOLINK_TO_JUCE_LIBRARY 1
#include "../juce.h"
#endif
#endif // __JUCE_AMALGAMATED_TEMPLATE_JUCEHEADER__

+ 1
- 1
src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp View File

@@ -97,7 +97,7 @@ public:
return;
#elif JUCE_MAC
EnterMoviesOnThread (0);
#endif
#endif
if (EnterMovies() != noErr)
return;


+ 1
- 1
src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp View File

@@ -43,7 +43,7 @@ AudioSourcePlayer::AudioSourcePlayer()
sampleRate (0),
bufferSize (0),
tempBuffer (2, 8),
lastGain (1.0f),
lastGain (1.0f),
gain (1.0f)
{
}


+ 1
- 1
src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp View File

@@ -458,7 +458,7 @@ void AudioDeviceManager::updateXml()
for (int i = 0; i < midiInsFromXml.size(); ++i)
{
if (! availableMidiDevices.contains (midiInsFromXml[i], true))
if (! availableMidiDevices.contains (midiInsFromXml[i], true))
{
XmlElement* const m = new XmlElement (T("MIDIINPUT"));
m->setAttribute (T("name"), midiInsFromXml[i]);


+ 4
- 4
src/juce_appframework/audio/devices/juce_AudioIODevice.h View File

@@ -68,21 +68,21 @@ public:
@param inputChannelData a set of arrays containing the audio data for each
incoming channel - this data is valid until the function
returns. There will be one channel of data for each input
returns. There will be one channel of data for each input
channel that was enabled when the audio device was opened
(see AudioIODevice::open())
@param numInputChannels the number of pointers to channel data in the
@param numInputChannels the number of pointers to channel data in the
inputChannelData array.
@param outputChannelData a set of arrays which need to be filled with the data
that should be sent to each outgoing channel of the device.
There will be one channel of data for each output channel
that was enabled when the audio device was opened (see
that was enabled when the audio device was opened (see
AudioIODevice::open())
The initial contents of the array is undefined, so the
callback function must fill all the channels with zeros if
its output is silence. Failing to do this could cause quite
an unpleasant noise!
@param numOutputChannels the number of pointers to channel data in the
@param numOutputChannels the number of pointers to channel data in the
outputChannelData array.
@param numSamples the number of samples in each channel of the input and
output arrays. The number of samples will depend on the


+ 1358
- 1358
src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp
File diff suppressed because it is too large
View File


+ 442
- 442
src/juce_appframework/audio/processors/juce_AudioProcessorGraph.h View File

@@ -1,442 +1,442 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__
#define __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__
#include "juce_AudioProcessor.h"
#include "../plugins/juce_AudioPluginFormatManager.h"
#include "../plugins/juce_KnownPluginList.h"
#include "../../../juce_core/containers/juce_ReferenceCountedArray.h"
//==============================================================================
/**
A type of AudioProcessor which plays back a graph of other AudioProcessors.
Use one of these objects if you want to wire-up a set of AudioProcessors
and play back the result.
Processors can be added to the graph as "nodes" using addNode(), and once
added, you can connect any of their input or output channels to other
nodes using addConnection().
To play back a graph through an audio device, you might want to use an
AudioProcessorPlayer object.
*/
class JUCE_API AudioProcessorGraph : public AudioProcessor,
public AsyncUpdater
{
public:
//==============================================================================
/** Creates an empty graph.
*/
AudioProcessorGraph();
/** Destructor.
Any processor objects that have been added to the graph will also be deleted.
*/
~AudioProcessorGraph();
//==============================================================================
/** Represents one of the nodes, or processors, in an AudioProcessorGraph.
To create a node, call AudioProcessorGraph::addNode().
*/
class Node : public ReferenceCountedObject
{
public:
/** Destructor.
*/
~Node();
//==============================================================================
/** The ID number assigned to this node.
This is assigned by the graph that owns it, and can't be changed.
*/
const uint32 id;
/** The actual processor object that this node represents.
*/
AudioProcessor* const processor;
/** A set of user-definable properties that are associated with this node.
This can be used to attach values to the node for whatever purpose seems
useful. For example, you might store an x and y position if your application
is displaying the nodes on-screen.
*/
PropertySet properties;
//==============================================================================
/** A convenient typedef for referring to a pointer to a node object.
*/
typedef ReferenceCountedObjectPtr <Node> Ptr;
//==============================================================================
juce_UseDebuggingNewOperator
private:
friend class AudioProcessorGraph;
bool isPrepared;
Node (const uint32 id, AudioProcessor* const processor) throw();
void prepare (const double sampleRate, const int blockSize, AudioProcessorGraph* const graph);
void unprepare();
Node (const Node&);
const Node& operator= (const Node&);
};
//==============================================================================
/** Represents a connection between two channels of two nodes in an AudioProcessorGraph.
To create a connection, use AudioProcessorGraph::addConnection().
*/
struct Connection
{
public:
//==============================================================================
/** The ID number of the node which is the input source for this connection.
@see AudioProcessorGraph::getNodeForId
*/
uint32 sourceNodeId;
/** The index of the output channel of the source node from which this
connection takes its data.
If this value is the special number AudioProcessorGraph::midiChannelIndex, then
it is referring to the source node's midi output. Otherwise, it is the zero-based
index of an audio output channel in the source node.
*/
int sourceChannelIndex;
/** The ID number of the node which is the destination for this connection.
@see AudioProcessorGraph::getNodeForId
*/
uint32 destNodeId;
/** The index of the input channel of the destination node to which this
connection delivers its data.
If this value is the special number AudioProcessorGraph::midiChannelIndex, then
it is referring to the destination node's midi input. Otherwise, it is the zero-based
index of an audio input channel in the destination node.
*/
int destChannelIndex;
//==============================================================================
juce_UseDebuggingNewOperator
private:
};
//==============================================================================
/** Deletes all nodes and connections from this graph.
Any processor objects in the graph will be deleted.
*/
void clear();
/** Returns the number of nodes in the graph. */
int getNumNodes() const throw() { return nodes.size(); }
/** Returns a pointer to one of the nodes in the graph.
This will return 0 if the index is out of range.
@see getNodeForId
*/
Node* getNode (const int index) const throw() { return nodes [index]; }
/** Searches the graph for a node with the given ID number and returns it.
If no such node was found, this returns 0.
@see getNode
*/
Node* getNodeForId (const uint32 nodeId) const throw();
/** Adds a node to the graph.
This creates a new node in the graph, for the specified processor. Once you have
added a processor to the graph, the graph owns it and will delete it later when
it is no longer needed.
The optional nodeId parameter lets you specify an ID to use for the node, but
if the value is already in use, this new node will overwrite the old one.
If this succeeds, it returns a pointer to the newly-created node.
*/
Node* addNode (AudioProcessor* const newProcessor,
uint32 nodeId = 0);
/** Deletes a node within the graph which has the specified ID.
This will also delete any connections that are attached to this node.
*/
bool removeNode (const uint32 nodeId);
//==============================================================================
/** Returns the number of connections in the graph. */
int getNumConnections() const throw() { return connections.size(); }
/** Returns a pointer to one of the connections in the graph. */
const Connection* getConnection (const int index) const throw() { return connections [index]; }
/** Searches for a connection between some specified channels.
If no such connection is found, this returns 0.
*/
const Connection* getConnectionBetween (const uint32 sourceNodeId,
const int sourceChannelIndex,
const uint32 destNodeId,
const int destChannelIndex) const throw();
/** Returns true if there is a connection between any of the channels of
two specified nodes.
*/
bool isConnected (const uint32 possibleSourceNodeId,
const uint32 possibleDestNodeId) const throw();
/** Returns true if it would be legal to connect the specified points.
*/
bool canConnect (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex) const throw();
/** Attempts to connect two specified channels of two nodes.
If this isn't allowed (e.g. because you're trying to connect a midi channel
to an audio one or other such nonsense), then it'll return false.
*/
bool addConnection (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex);
/** Deletes the connection with the specified index.
Returns true if a connection was actually deleted.
*/
void removeConnection (const int index);
/** Deletes any connection between two specified points.
Returns true if a connection was actually deleted.
*/
bool removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex);
/** Removes all connections from the specified node.
*/
bool disconnectNode (const uint32 nodeId);
/** Performs a sanity checks of all the connections.
This might be useful if some of the processors are doing things like changing
their channel counts, which could render some connections obsolete.
*/
bool removeIllegalConnections();
//==============================================================================
/** A special number that represents the midi channel of a node.
This is used as a channel index value if you want to refer to the midi input
or output instead of an audio channel.
*/
static const int midiChannelIndex;
//==============================================================================
/** A special type of AudioProcessor that can live inside an AudioProcessorGraph
in order to use the audio that comes into and out of the graph itself.
If you create an AudioGraphIOProcessor in "input" mode, it will act as a
node in the graph which delivers the audio that is coming into the parent
graph. This allows you to stream the data to other nodes and process the
incoming audio.
Likewise, one of these in "output" mode can be sent data which it will add to
the sum of data being sent to the graph's output.
@see AudioProcessorGraph
*/
class AudioGraphIOProcessor : public AudioPluginInstance
{
public:
/** Specifies the mode in which this processor will operate.
*/
enum IODeviceType
{
audioInputNode, /**< In this mode, the processor has output channels
representing all the audio input channels that are
coming into its parent audio graph. */
audioOutputNode, /**< In this mode, the processor has input channels
representing all the audio output channels that are
going out of its parent audio graph. */
midiInputNode, /**< In this mode, the processor has a midi output which
delivers the same midi data that is arriving at its
parent graph. */
midiOutputNode /**< In this mode, the processor has a midi input and
any data sent to it will be passed out of the parent
graph. */
};
//==============================================================================
/** Returns the mode of this processor. */
IODeviceType getType() const throw() { return type; }
/** Returns the parent graph to which this processor belongs, or 0 if it
hasn't yet been added to one. */
AudioProcessorGraph* getParentGraph() const throw() { return graph; }
/** True if this is an audio or midi input. */
bool isInput() const throw();
/** True if this is an audio or midi output. */
bool isOutput() const throw();
//==============================================================================
AudioGraphIOProcessor (const IODeviceType type);
~AudioGraphIOProcessor();
const String getName() const;
void fillInPluginDescription (PluginDescription& d) const;
void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock);
void releaseResources();
void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages);
const String getInputChannelName (const int channelIndex) const;
const String getOutputChannelName (const int channelIndex) const;
bool isInputChannelStereoPair (int index) const;
bool isOutputChannelStereoPair (int index) const;
bool acceptsMidi() const;
bool producesMidi() const;
AudioProcessorEditor* createEditor();
int getNumParameters();
const String getParameterName (int);
float getParameter (int);
const String getParameterText (int);
void setParameter (int, float);
int getNumPrograms();
int getCurrentProgram();
void setCurrentProgram (int);
const String getProgramName (int);
void changeProgramName (int, const String&);
void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData);
void setStateInformation (const void* data, int sizeInBytes);
/** @internal */
void setParentGraph (AudioProcessorGraph* const graph) throw();
juce_UseDebuggingNewOperator
private:
const IODeviceType type;
AudioProcessorGraph* graph;
AudioGraphIOProcessor (const AudioGraphIOProcessor&);
const AudioGraphIOProcessor& operator= (const AudioGraphIOProcessor&);
};
//==============================================================================
// AudioProcessor methods:
const String getName() const;
void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock);
void releaseResources();
void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages);
const String getInputChannelName (const int channelIndex) const;
const String getOutputChannelName (const int channelIndex) const;
bool isInputChannelStereoPair (int index) const;
bool isOutputChannelStereoPair (int index) const;
bool acceptsMidi() const;
bool producesMidi() const;
AudioProcessorEditor* createEditor() { return 0; }
int getNumParameters() { return 0; }
const String getParameterName (int) { return String::empty; }
float getParameter (int) { return 0; }
const String getParameterText (int) { return String::empty; }
void setParameter (int, float) { }
int getNumPrograms() { return 0; }
int getCurrentProgram() { return 0; }
void setCurrentProgram (int) { }
const String getProgramName (int) { return String::empty; }
void changeProgramName (int, const String&) { }
void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData);
void setStateInformation (const void* data, int sizeInBytes);
/** @internal */
void handleAsyncUpdate();
//==============================================================================
juce_UseDebuggingNewOperator
private:
ReferenceCountedArray <Node> nodes;
OwnedArray <Connection> connections;
int lastNodeId;
AudioSampleBuffer renderingBuffers;
OwnedArray <MidiBuffer> midiBuffers;
CriticalSection renderLock;
VoidArray renderingOps;
friend class AudioGraphIOProcessor;
AudioSampleBuffer* currentAudioInputBuffer;
AudioSampleBuffer currentAudioOutputBuffer;
MidiBuffer* currentMidiInputBuffer;
MidiBuffer currentMidiOutputBuffer;
void clearRenderingSequence();
void buildRenderingSequence();
bool isAnInputTo (const uint32 possibleInputId,
const uint32 possibleDestinationId,
const int recursionCheck) const throw();
AudioProcessorGraph (const AudioProcessorGraph&);
const AudioProcessorGraph& operator= (const AudioProcessorGraph&);
};
#endif // __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__
#define __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__
#include "juce_AudioProcessor.h"
#include "../plugins/juce_AudioPluginFormatManager.h"
#include "../plugins/juce_KnownPluginList.h"
#include "../../../juce_core/containers/juce_ReferenceCountedArray.h"
//==============================================================================
/**
A type of AudioProcessor which plays back a graph of other AudioProcessors.
Use one of these objects if you want to wire-up a set of AudioProcessors
and play back the result.
Processors can be added to the graph as "nodes" using addNode(), and once
added, you can connect any of their input or output channels to other
nodes using addConnection().
To play back a graph through an audio device, you might want to use an
AudioProcessorPlayer object.
*/
class JUCE_API AudioProcessorGraph : public AudioProcessor,
public AsyncUpdater
{
public:
//==============================================================================
/** Creates an empty graph.
*/
AudioProcessorGraph();
/** Destructor.
Any processor objects that have been added to the graph will also be deleted.
*/
~AudioProcessorGraph();
//==============================================================================
/** Represents one of the nodes, or processors, in an AudioProcessorGraph.
To create a node, call AudioProcessorGraph::addNode().
*/
class Node : public ReferenceCountedObject
{
public:
/** Destructor.
*/
~Node();
//==============================================================================
/** The ID number assigned to this node.
This is assigned by the graph that owns it, and can't be changed.
*/
const uint32 id;
/** The actual processor object that this node represents.
*/
AudioProcessor* const processor;
/** A set of user-definable properties that are associated with this node.
This can be used to attach values to the node for whatever purpose seems
useful. For example, you might store an x and y position if your application
is displaying the nodes on-screen.
*/
PropertySet properties;
//==============================================================================
/** A convenient typedef for referring to a pointer to a node object.
*/
typedef ReferenceCountedObjectPtr <Node> Ptr;
//==============================================================================
juce_UseDebuggingNewOperator
private:
friend class AudioProcessorGraph;
bool isPrepared;
Node (const uint32 id, AudioProcessor* const processor) throw();
void prepare (const double sampleRate, const int blockSize, AudioProcessorGraph* const graph);
void unprepare();
Node (const Node&);
const Node& operator= (const Node&);
};
//==============================================================================
/** Represents a connection between two channels of two nodes in an AudioProcessorGraph.
To create a connection, use AudioProcessorGraph::addConnection().
*/
struct Connection
{
public:
//==============================================================================
/** The ID number of the node which is the input source for this connection.
@see AudioProcessorGraph::getNodeForId
*/
uint32 sourceNodeId;
/** The index of the output channel of the source node from which this
connection takes its data.
If this value is the special number AudioProcessorGraph::midiChannelIndex, then
it is referring to the source node's midi output. Otherwise, it is the zero-based
index of an audio output channel in the source node.
*/
int sourceChannelIndex;
/** The ID number of the node which is the destination for this connection.
@see AudioProcessorGraph::getNodeForId
*/
uint32 destNodeId;
/** The index of the input channel of the destination node to which this
connection delivers its data.
If this value is the special number AudioProcessorGraph::midiChannelIndex, then
it is referring to the destination node's midi input. Otherwise, it is the zero-based
index of an audio input channel in the destination node.
*/
int destChannelIndex;
//==============================================================================
juce_UseDebuggingNewOperator
private:
};
//==============================================================================
/** Deletes all nodes and connections from this graph.
Any processor objects in the graph will be deleted.
*/
void clear();
/** Returns the number of nodes in the graph. */
int getNumNodes() const throw() { return nodes.size(); }
/** Returns a pointer to one of the nodes in the graph.
This will return 0 if the index is out of range.
@see getNodeForId
*/
Node* getNode (const int index) const throw() { return nodes [index]; }
/** Searches the graph for a node with the given ID number and returns it.
If no such node was found, this returns 0.
@see getNode
*/
Node* getNodeForId (const uint32 nodeId) const throw();
/** Adds a node to the graph.
This creates a new node in the graph, for the specified processor. Once you have
added a processor to the graph, the graph owns it and will delete it later when
it is no longer needed.
The optional nodeId parameter lets you specify an ID to use for the node, but
if the value is already in use, this new node will overwrite the old one.
If this succeeds, it returns a pointer to the newly-created node.
*/
Node* addNode (AudioProcessor* const newProcessor,
uint32 nodeId = 0);
/** Deletes a node within the graph which has the specified ID.
This will also delete any connections that are attached to this node.
*/
bool removeNode (const uint32 nodeId);
//==============================================================================
/** Returns the number of connections in the graph. */
int getNumConnections() const throw() { return connections.size(); }
/** Returns a pointer to one of the connections in the graph. */
const Connection* getConnection (const int index) const throw() { return connections [index]; }
/** Searches for a connection between some specified channels.
If no such connection is found, this returns 0.
*/
const Connection* getConnectionBetween (const uint32 sourceNodeId,
const int sourceChannelIndex,
const uint32 destNodeId,
const int destChannelIndex) const throw();
/** Returns true if there is a connection between any of the channels of
two specified nodes.
*/
bool isConnected (const uint32 possibleSourceNodeId,
const uint32 possibleDestNodeId) const throw();
/** Returns true if it would be legal to connect the specified points.
*/
bool canConnect (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex) const throw();
/** Attempts to connect two specified channels of two nodes.
If this isn't allowed (e.g. because you're trying to connect a midi channel
to an audio one or other such nonsense), then it'll return false.
*/
bool addConnection (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex);
/** Deletes the connection with the specified index.
Returns true if a connection was actually deleted.
*/
void removeConnection (const int index);
/** Deletes any connection between two specified points.
Returns true if a connection was actually deleted.
*/
bool removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex,
const uint32 destNodeId, const int destChannelIndex);
/** Removes all connections from the specified node.
*/
bool disconnectNode (const uint32 nodeId);
/** Performs a sanity checks of all the connections.
This might be useful if some of the processors are doing things like changing
their channel counts, which could render some connections obsolete.
*/
bool removeIllegalConnections();
//==============================================================================
/** A special number that represents the midi channel of a node.
This is used as a channel index value if you want to refer to the midi input
or output instead of an audio channel.
*/
static const int midiChannelIndex;
//==============================================================================
/** A special type of AudioProcessor that can live inside an AudioProcessorGraph
in order to use the audio that comes into and out of the graph itself.
If you create an AudioGraphIOProcessor in "input" mode, it will act as a
node in the graph which delivers the audio that is coming into the parent
graph. This allows you to stream the data to other nodes and process the
incoming audio.
Likewise, one of these in "output" mode can be sent data which it will add to
the sum of data being sent to the graph's output.
@see AudioProcessorGraph
*/
class AudioGraphIOProcessor : public AudioPluginInstance
{
public:
/** Specifies the mode in which this processor will operate.
*/
enum IODeviceType
{
audioInputNode, /**< In this mode, the processor has output channels
representing all the audio input channels that are
coming into its parent audio graph. */
audioOutputNode, /**< In this mode, the processor has input channels
representing all the audio output channels that are
going out of its parent audio graph. */
midiInputNode, /**< In this mode, the processor has a midi output which
delivers the same midi data that is arriving at its
parent graph. */
midiOutputNode /**< In this mode, the processor has a midi input and
any data sent to it will be passed out of the parent
graph. */
};
//==============================================================================
/** Returns the mode of this processor. */
IODeviceType getType() const throw() { return type; }
/** Returns the parent graph to which this processor belongs, or 0 if it
hasn't yet been added to one. */
AudioProcessorGraph* getParentGraph() const throw() { return graph; }
/** True if this is an audio or midi input. */
bool isInput() const throw();
/** True if this is an audio or midi output. */
bool isOutput() const throw();
//==============================================================================
AudioGraphIOProcessor (const IODeviceType type);
~AudioGraphIOProcessor();
const String getName() const;
void fillInPluginDescription (PluginDescription& d) const;
void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock);
void releaseResources();
void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages);
const String getInputChannelName (const int channelIndex) const;
const String getOutputChannelName (const int channelIndex) const;
bool isInputChannelStereoPair (int index) const;
bool isOutputChannelStereoPair (int index) const;
bool acceptsMidi() const;
bool producesMidi() const;
AudioProcessorEditor* createEditor();
int getNumParameters();
const String getParameterName (int);
float getParameter (int);
const String getParameterText (int);
void setParameter (int, float);
int getNumPrograms();
int getCurrentProgram();
void setCurrentProgram (int);
const String getProgramName (int);
void changeProgramName (int, const String&);
void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData);
void setStateInformation (const void* data, int sizeInBytes);
/** @internal */
void setParentGraph (AudioProcessorGraph* const graph) throw();
juce_UseDebuggingNewOperator
private:
const IODeviceType type;
AudioProcessorGraph* graph;
AudioGraphIOProcessor (const AudioGraphIOProcessor&);
const AudioGraphIOProcessor& operator= (const AudioGraphIOProcessor&);
};
//==============================================================================
// AudioProcessor methods:
const String getName() const;
void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock);
void releaseResources();
void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages);
const String getInputChannelName (const int channelIndex) const;
const String getOutputChannelName (const int channelIndex) const;
bool isInputChannelStereoPair (int index) const;
bool isOutputChannelStereoPair (int index) const;
bool acceptsMidi() const;
bool producesMidi() const;
AudioProcessorEditor* createEditor() { return 0; }
int getNumParameters() { return 0; }
const String getParameterName (int) { return String::empty; }
float getParameter (int) { return 0; }
const String getParameterText (int) { return String::empty; }
void setParameter (int, float) { }
int getNumPrograms() { return 0; }
int getCurrentProgram() { return 0; }
void setCurrentProgram (int) { }
const String getProgramName (int) { return String::empty; }
void changeProgramName (int, const String&) { }
void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData);
void setStateInformation (const void* data, int sizeInBytes);
/** @internal */
void handleAsyncUpdate();
//==============================================================================
juce_UseDebuggingNewOperator
private:
ReferenceCountedArray <Node> nodes;
OwnedArray <Connection> connections;
int lastNodeId;
AudioSampleBuffer renderingBuffers;
OwnedArray <MidiBuffer> midiBuffers;
CriticalSection renderLock;
VoidArray renderingOps;
friend class AudioGraphIOProcessor;
AudioSampleBuffer* currentAudioInputBuffer;
AudioSampleBuffer currentAudioOutputBuffer;
MidiBuffer* currentMidiInputBuffer;
MidiBuffer currentMidiOutputBuffer;
void clearRenderingSequence();
void buildRenderingSequence();
bool isAnInputTo (const uint32 possibleInputId,
const uint32 possibleDestinationId,
const int recursionCheck) const throw();
AudioProcessorGraph (const AudioProcessorGraph&);
const AudioProcessorGraph& operator= (const AudioProcessorGraph&);
};
#endif // __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__

+ 1
- 1
src/juce_appframework/gui/components/controls/juce_ComboBox.cpp View File

@@ -549,7 +549,7 @@ void ComboBox::showPopup()
else if (item->isHeading)
menu.addSectionHeader (item->name);
else
menu.addItem (item->itemId, item->name,
menu.addItem (item->itemId, item->name,
item->isEnabled, item->itemId == currentId);
}


+ 1
- 1
src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp View File

@@ -37,7 +37,7 @@ BEGIN_JUCE_NAMESPACE
#include "../../graphics/imaging/juce_ImageCache.h"
void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile,
bool* isDirectory, bool* isHidden, int64* fileSize, Time* modTime,
bool* isDirectory, bool* isHidden, int64* fileSize, Time* modTime,
Time* creationTime, bool* isReadOnly) throw();
bool juce_findFileNext (void* handle, String& resultFile,
bool* isDirectory, bool* isHidden, int64* fileSize,


+ 1
- 1
src/juce_appframework/gui/components/windows/juce_ComponentPeer.h View File

@@ -82,7 +82,7 @@ public:
do its own repainting, but only to repaint when the
performAnyPendingRepaintsNow() method is called. */
windowIsSemiTransparent = (1 << 31) /**< Not intended for public use - makes a window transparent. */
};
//==============================================================================


+ 344
- 344
src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp View File

@@ -1,344 +1,344 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../../../../../juce_core/basics/juce_StandardHeader.h"
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable: 4390 4611)
#endif
namespace zlibNamespace
{
#undef OS_CODE
#undef fdopen
#include "../../../../../juce_core/io/streams/zlib/zlib.h"
#undef OS_CODE
}
namespace pnglibNamespace
{
using namespace zlibNamespace;
using ::malloc;
using ::free;
extern "C"
{
using ::abs;
#define PNG_INTERNAL
#define NO_DUMMY_DECL
#define PNG_SETJMP_NOT_SUPPORTED
#include "pnglib/png.h"
#include "pnglib/pngconf.h"
#define PNG_NO_EXTERN
#include "pnglib/png.c"
#include "pnglib/pngerror.c"
#include "pnglib/pngget.c"
#include "pnglib/pngmem.c"
#include "pnglib/pngread.c"
#include "pnglib/pngpread.c"
#include "pnglib/pngrio.c"
#include "pnglib/pngrtran.c"
#include "pnglib/pngrutil.c"
#include "pnglib/pngset.c"
#include "pnglib/pngtrans.c"
#include "pnglib/pngwio.c"
#include "pnglib/pngwrite.c"
#include "pnglib/pngwtran.c"
#include "pnglib/pngwutil.c"
}
}
#ifdef _MSC_VER
#pragma warning (pop)
#endif
BEGIN_JUCE_NAMESPACE
#include "../juce_Image.h"
#include "../../../../../juce_core/io/juce_InputStream.h"
#include "../../../../../juce_core/io/juce_OutputStream.h"
#include "../../colour/juce_PixelFormats.h"
using namespace pnglibNamespace;
using ::malloc;
using ::free;
//==============================================================================
static void pngReadCallback (png_structp pngReadStruct, png_bytep data, png_size_t length) throw()
{
InputStream* const in = (InputStream*) png_get_io_ptr (pngReadStruct);
in->read (data, (int) length);
}
struct PNGErrorStruct {};
static void pngErrorCallback (png_structp, png_const_charp)
{
throw PNGErrorStruct();
}
//==============================================================================
Image* juce_loadPNGImageFromStream (InputStream& in) throw()
{
Image* image = 0;
png_structp pngReadStruct;
png_infop pngInfoStruct;
pngReadStruct = png_create_read_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
if (pngReadStruct != 0)
{
pngInfoStruct = png_create_info_struct (pngReadStruct);
if (pngInfoStruct == 0)
{
png_destroy_read_struct (&pngReadStruct, 0, 0);
return 0;
}
png_set_error_fn (pngReadStruct, 0, pngErrorCallback, pngErrorCallback);
// read the header..
png_set_read_fn (pngReadStruct, &in, pngReadCallback);
png_uint_32 width, height;
int bitDepth, colorType, interlaceType;
try
{
png_read_info (pngReadStruct, pngInfoStruct);
png_get_IHDR (pngReadStruct, pngInfoStruct,
&width, &height,
&bitDepth, &colorType,
&interlaceType, 0, 0);
}
catch (...)
{
png_destroy_read_struct (&pngReadStruct, 0, 0);
return 0;
}
if (bitDepth == 16)
png_set_strip_16 (pngReadStruct);
if (colorType == PNG_COLOR_TYPE_PALETTE)
png_set_expand (pngReadStruct);
if (bitDepth < 8)
png_set_expand (pngReadStruct);
if (png_get_valid (pngReadStruct, pngInfoStruct, PNG_INFO_tRNS))
png_set_expand (pngReadStruct);
if (colorType == PNG_COLOR_TYPE_GRAY || colorType == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb (pngReadStruct);
png_set_add_alpha (pngReadStruct, 0xff, PNG_FILLER_AFTER);
const bool hasAlphaChan = (colorType & PNG_COLOR_MASK_ALPHA) != 0
|| pngInfoStruct->num_trans > 0;
// Load the image into a temp buffer in the pnglib format..
uint8* const tempBuffer = (uint8*) juce_malloc (height * (width << 2));
png_bytepp rows = (png_bytepp) juce_malloc (sizeof (png_bytep) * height);
int y;
for (y = (int) height; --y >= 0;)
rows[y] = (png_bytep) (tempBuffer + (width << 2) * y);
bool crashed = false;
try
{
png_read_image (pngReadStruct, rows);
png_read_end (pngReadStruct, pngInfoStruct);
}
catch (...)
{
crashed = true;
}
juce_free (rows);
png_destroy_read_struct (&pngReadStruct, &pngInfoStruct, 0);
if (crashed)
return 0;
// now convert the data to a juce image format..
image = new Image (hasAlphaChan ? Image::ARGB : Image::RGB,
width, height, hasAlphaChan);
int stride, pixelStride;
uint8* const pixels = image->lockPixelDataReadWrite (0, 0, width, height, stride, pixelStride);
uint8* srcRow = tempBuffer;
uint8* destRow = pixels;
for (y = 0; y < (int) height; ++y)
{
const uint8* src = srcRow;
srcRow += (width << 2);
uint8* dest = destRow;
destRow += stride;
if (hasAlphaChan)
{
for (int i = width; --i >= 0;)
{
((PixelARGB*) dest)->setARGB (src[3], src[0], src[1], src[2]);
((PixelARGB*) dest)->premultiply();
dest += pixelStride;
src += 4;
}
}
else
{
for (int i = width; --i >= 0;)
{
((PixelRGB*) dest)->setARGB (0, src[0], src[1], src[2]);
dest += pixelStride;
src += 4;
}
}
}
image->releasePixelDataReadWrite (pixels);
juce_free (tempBuffer);
}
return image;
}
//==============================================================================
static void pngWriteDataCallback (png_structp png_ptr, png_bytep data, png_size_t length) throw()
{
OutputStream* const out = (OutputStream*) png_ptr->io_ptr;
const bool ok = out->write (data, length);
(void) ok;
jassert (ok);
}
bool juce_writePNGImageToStream (const Image& image, OutputStream& out) throw()
{
const int width = image.getWidth();
const int height = image.getHeight();
png_structp pngWriteStruct = png_create_write_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
if (pngWriteStruct == 0)
return false;
png_infop pngInfoStruct = png_create_info_struct (pngWriteStruct);
if (pngInfoStruct == 0)
{
png_destroy_write_struct (&pngWriteStruct, (png_infopp) 0);
return false;
}
png_set_write_fn (pngWriteStruct, &out, pngWriteDataCallback, 0);
png_set_IHDR (pngWriteStruct, pngInfoStruct, width, height, 8,
image.hasAlphaChannel() ? PNG_COLOR_TYPE_RGB_ALPHA
: PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
png_bytep rowData = (png_bytep) juce_malloc (width * 4 * sizeof (png_byte));
png_color_8 sig_bit;
sig_bit.red = 8;
sig_bit.green = 8;
sig_bit.blue = 8;
sig_bit.alpha = 8;
png_set_sBIT (pngWriteStruct, pngInfoStruct, &sig_bit);
png_write_info (pngWriteStruct, pngInfoStruct);
png_set_shift (pngWriteStruct, &sig_bit);
png_set_packing (pngWriteStruct);
for (int y = 0; y < height; ++y)
{
uint8* dst = (uint8*) rowData;
int stride, pixelStride;
const uint8* pixels = image.lockPixelDataReadOnly (0, y, width, 1, stride, pixelStride);
const uint8* src = pixels;
if (image.hasAlphaChannel())
{
for (int i = width; --i >= 0;)
{
PixelARGB p (*(const PixelARGB*) src);
p.unpremultiply();
*dst++ = p.getRed();
*dst++ = p.getGreen();
*dst++ = p.getBlue();
*dst++ = p.getAlpha();
src += pixelStride;
}
}
else
{
for (int i = width; --i >= 0;)
{
*dst++ = ((const PixelRGB*) src)->getRed();
*dst++ = ((const PixelRGB*) src)->getGreen();
*dst++ = ((const PixelRGB*) src)->getBlue();
src += pixelStride;
}
}
png_write_rows (pngWriteStruct, &rowData, 1);
image.releasePixelDataReadOnly (pixels);
}
juce_free (rowData);
png_write_end (pngWriteStruct, pngInfoStruct);
png_destroy_write_struct (&pngWriteStruct, &pngInfoStruct);
out.flush();
return true;
}
END_JUCE_NAMESPACE
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#include "../../../../../juce_core/basics/juce_StandardHeader.h"
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable: 4390 4611)
#endif
namespace zlibNamespace
{
#undef OS_CODE
#undef fdopen
#include "../../../../../juce_core/io/streams/zlib/zlib.h"
#undef OS_CODE
}
namespace pnglibNamespace
{
using namespace zlibNamespace;
using ::malloc;
using ::free;
extern "C"
{
using ::abs;
#define PNG_INTERNAL
#define NO_DUMMY_DECL
#define PNG_SETJMP_NOT_SUPPORTED
#include "pnglib/png.h"
#include "pnglib/pngconf.h"
#define PNG_NO_EXTERN
#include "pnglib/png.c"
#include "pnglib/pngerror.c"
#include "pnglib/pngget.c"
#include "pnglib/pngmem.c"
#include "pnglib/pngread.c"
#include "pnglib/pngpread.c"
#include "pnglib/pngrio.c"
#include "pnglib/pngrtran.c"
#include "pnglib/pngrutil.c"
#include "pnglib/pngset.c"
#include "pnglib/pngtrans.c"
#include "pnglib/pngwio.c"
#include "pnglib/pngwrite.c"
#include "pnglib/pngwtran.c"
#include "pnglib/pngwutil.c"
}
}
#ifdef _MSC_VER
#pragma warning (pop)
#endif
BEGIN_JUCE_NAMESPACE
#include "../juce_Image.h"
#include "../../../../../juce_core/io/juce_InputStream.h"
#include "../../../../../juce_core/io/juce_OutputStream.h"
#include "../../colour/juce_PixelFormats.h"
using namespace pnglibNamespace;
using ::malloc;
using ::free;
//==============================================================================
static void pngReadCallback (png_structp pngReadStruct, png_bytep data, png_size_t length) throw()
{
InputStream* const in = (InputStream*) png_get_io_ptr (pngReadStruct);
in->read (data, (int) length);
}
struct PNGErrorStruct {};
static void pngErrorCallback (png_structp, png_const_charp)
{
throw PNGErrorStruct();
}
//==============================================================================
Image* juce_loadPNGImageFromStream (InputStream& in) throw()
{
Image* image = 0;
png_structp pngReadStruct;
png_infop pngInfoStruct;
pngReadStruct = png_create_read_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
if (pngReadStruct != 0)
{
pngInfoStruct = png_create_info_struct (pngReadStruct);
if (pngInfoStruct == 0)
{
png_destroy_read_struct (&pngReadStruct, 0, 0);
return 0;
}
png_set_error_fn (pngReadStruct, 0, pngErrorCallback, pngErrorCallback);
// read the header..
png_set_read_fn (pngReadStruct, &in, pngReadCallback);
png_uint_32 width, height;
int bitDepth, colorType, interlaceType;
try
{
png_read_info (pngReadStruct, pngInfoStruct);
png_get_IHDR (pngReadStruct, pngInfoStruct,
&width, &height,
&bitDepth, &colorType,
&interlaceType, 0, 0);
}
catch (...)
{
png_destroy_read_struct (&pngReadStruct, 0, 0);
return 0;
}
if (bitDepth == 16)
png_set_strip_16 (pngReadStruct);
if (colorType == PNG_COLOR_TYPE_PALETTE)
png_set_expand (pngReadStruct);
if (bitDepth < 8)
png_set_expand (pngReadStruct);
if (png_get_valid (pngReadStruct, pngInfoStruct, PNG_INFO_tRNS))
png_set_expand (pngReadStruct);
if (colorType == PNG_COLOR_TYPE_GRAY || colorType == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb (pngReadStruct);
png_set_add_alpha (pngReadStruct, 0xff, PNG_FILLER_AFTER);
const bool hasAlphaChan = (colorType & PNG_COLOR_MASK_ALPHA) != 0
|| pngInfoStruct->num_trans > 0;
// Load the image into a temp buffer in the pnglib format..
uint8* const tempBuffer = (uint8*) juce_malloc (height * (width << 2));
png_bytepp rows = (png_bytepp) juce_malloc (sizeof (png_bytep) * height);
int y;
for (y = (int) height; --y >= 0;)
rows[y] = (png_bytep) (tempBuffer + (width << 2) * y);
bool crashed = false;
try
{
png_read_image (pngReadStruct, rows);
png_read_end (pngReadStruct, pngInfoStruct);
}
catch (...)
{
crashed = true;
}
juce_free (rows);
png_destroy_read_struct (&pngReadStruct, &pngInfoStruct, 0);
if (crashed)
return 0;
// now convert the data to a juce image format..
image = new Image (hasAlphaChan ? Image::ARGB : Image::RGB,
width, height, hasAlphaChan);
int stride, pixelStride;
uint8* const pixels = image->lockPixelDataReadWrite (0, 0, width, height, stride, pixelStride);
uint8* srcRow = tempBuffer;
uint8* destRow = pixels;
for (y = 0; y < (int) height; ++y)
{
const uint8* src = srcRow;
srcRow += (width << 2);
uint8* dest = destRow;
destRow += stride;
if (hasAlphaChan)
{
for (int i = width; --i >= 0;)
{
((PixelARGB*) dest)->setARGB (src[3], src[0], src[1], src[2]);
((PixelARGB*) dest)->premultiply();
dest += pixelStride;
src += 4;
}
}
else
{
for (int i = width; --i >= 0;)
{
((PixelRGB*) dest)->setARGB (0, src[0], src[1], src[2]);
dest += pixelStride;
src += 4;
}
}
}
image->releasePixelDataReadWrite (pixels);
juce_free (tempBuffer);
}
return image;
}
//==============================================================================
static void pngWriteDataCallback (png_structp png_ptr, png_bytep data, png_size_t length) throw()
{
OutputStream* const out = (OutputStream*) png_ptr->io_ptr;
const bool ok = out->write (data, length);
(void) ok;
jassert (ok);
}
bool juce_writePNGImageToStream (const Image& image, OutputStream& out) throw()
{
const int width = image.getWidth();
const int height = image.getHeight();
png_structp pngWriteStruct = png_create_write_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
if (pngWriteStruct == 0)
return false;
png_infop pngInfoStruct = png_create_info_struct (pngWriteStruct);
if (pngInfoStruct == 0)
{
png_destroy_write_struct (&pngWriteStruct, (png_infopp) 0);
return false;
}
png_set_write_fn (pngWriteStruct, &out, pngWriteDataCallback, 0);
png_set_IHDR (pngWriteStruct, pngInfoStruct, width, height, 8,
image.hasAlphaChannel() ? PNG_COLOR_TYPE_RGB_ALPHA
: PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
png_bytep rowData = (png_bytep) juce_malloc (width * 4 * sizeof (png_byte));
png_color_8 sig_bit;
sig_bit.red = 8;
sig_bit.green = 8;
sig_bit.blue = 8;
sig_bit.alpha = 8;
png_set_sBIT (pngWriteStruct, pngInfoStruct, &sig_bit);
png_write_info (pngWriteStruct, pngInfoStruct);
png_set_shift (pngWriteStruct, &sig_bit);
png_set_packing (pngWriteStruct);
for (int y = 0; y < height; ++y)
{
uint8* dst = (uint8*) rowData;
int stride, pixelStride;
const uint8* pixels = image.lockPixelDataReadOnly (0, y, width, 1, stride, pixelStride);
const uint8* src = pixels;
if (image.hasAlphaChannel())
{
for (int i = width; --i >= 0;)
{
PixelARGB p (*(const PixelARGB*) src);
p.unpremultiply();
*dst++ = p.getRed();
*dst++ = p.getGreen();
*dst++ = p.getBlue();
*dst++ = p.getAlpha();
src += pixelStride;
}
}
else
{
for (int i = width; --i >= 0;)
{
*dst++ = ((const PixelRGB*) src)->getRed();
*dst++ = ((const PixelRGB*) src)->getGreen();
*dst++ = ((const PixelRGB*) src)->getBlue();
src += pixelStride;
}
}
png_write_rows (pngWriteStruct, &rowData, 1);
image.releasePixelDataReadOnly (pixels);
}
juce_free (rowData);
png_write_end (pngWriteStruct, pngInfoStruct);
png_destroy_write_struct (&pngWriteStruct, &pngInfoStruct);
out.flush();
return true;
}
END_JUCE_NAMESPACE

+ 2
- 2
src/juce_core/cryptography/juce_BlowFish.h View File

@@ -42,8 +42,8 @@ class JUCE_API BlowFish
{
public:
//==============================================================================
/** Creates an object that can encode/decode based on the specified key.
/** Creates an object that can encode/decode based on the specified key.
The key data can be up to 72 bytes long.
*/
BlowFish (const uint8* keyData, int keyBytes);


+ 1
- 1
src/juce_core/io/files/juce_DirectoryIterator.cpp View File

@@ -40,7 +40,7 @@ void* juce_findFileStart (const String& directory, const String& wildCard, Strin
bool* isDirectory, bool* isHidden, int64* fileSize,
Time* modTime, Time* creationTime, bool* isReadOnly) throw();
bool juce_findFileNext (void* handle, String& resultFile,
bool* isDirectory, bool* isHidden, int64* fileSize,
bool* isDirectory, bool* isHidden, int64* fileSize,
Time* modTime, Time* creationTime, bool* isReadOnly) throw();
void juce_findFileClose (void* handle) throw();


+ 2
- 2
src/juce_core/io/files/juce_File.cpp View File

@@ -86,12 +86,12 @@ const String juce_getVolumeLabel (const String& filenameOnVolume, int& volumeSer
// juce_firstResultFile gets the name of the file (not the whole pathname) and
// the other pointers, if non-null, are set based on the properties of the file.
void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile,
bool* isDirectory, bool* isHidden, int64* fileSize, Time* modTime,
bool* isDirectory, bool* isHidden, int64* fileSize, Time* modTime,
Time* creationTime, bool* isReadOnly) throw();
// returns false when no more files are found
bool juce_findFileNext (void* handle, String& resultFile,
bool* isDirectory, bool* isHidden, int64* fileSize,
bool* isDirectory, bool* isHidden, int64* fileSize,
Time* modTime, Time* creationTime, bool* isReadOnly) throw();
void juce_findFileClose (void* handle) throw();


+ 1
- 1
src/juce_core/io/network/juce_URL.cpp View File

@@ -191,7 +191,7 @@ public:
createHeadersAndPostData (url);
headers += extraHeaders;
if (! headers.endsWithChar (T('\n')))
headers << "\r\n";


+ 3
- 3
src/juce_core/io/streams/zlib/inftrees.c View File

@@ -29,9 +29,9 @@ const char inflate_copyright[] =
table index bits. It will differ if the request is greater than the
longest code or if it is less than the shortest code.
*/
int inflate_table (codetype type,
unsigned short FAR *lens,
unsigned codes,
int inflate_table (codetype type,
unsigned short FAR *lens,
unsigned codes,
code FAR * FAR *table,
unsigned FAR *bits,
unsigned short FAR *work)


+ 1
- 1
src/juce_core/io/streams/zlib/trees.c View File

@@ -1167,7 +1167,7 @@ local void bi_windup (deflate_state *s)
* Copy a stored block, storing first the length and its
* one's complement if requested.
*/
local void copy_block(deflate_state *s,
local void copy_block(deflate_state *s,
charf *buf, /* the input data */
unsigned len, /* its length */
int header) /* true if block header must be written */


+ 1
- 1
src/juce_core/misc/juce_ZipFile.cpp View File

@@ -81,7 +81,7 @@ public:
char buffer [30];
if (inputStream != 0
if (inputStream != 0
&& inputStream->setPosition (zei.streamOffset)
&& inputStream->read (buffer, 30) == 30
&& littleEndianInt (buffer) == 0x04034b50)


+ 1
- 1
src/juce_core/misc/juce_ZipFile.h View File

@@ -62,7 +62,7 @@ public:
ZipFile (const File& file);
/** Creates a ZipFile for an input source.
The inputSource object will be owned by the zip file, which will delete
it later when not needed.
*/


+ 3
- 3
src/juce_core/text/juce_String.h View File

@@ -728,7 +728,7 @@ public:
This will replace the contents of the string with the output of this
formatted printf.
Note that using the %s token with a juce string is probably a bad idea, as
Note that using the %s token with a juce string is probably a bad idea, as
this may expect differect encodings on different platforms.
@see formatted
@@ -740,7 +740,7 @@ public:
This will return a string which is the result of a sprintf using the
arguments passed-in.
Note that using the %s token with a juce string is probably a bad idea, as
Note that using the %s token with a juce string is probably a bad idea, as
this may expect differect encodings on different platforms.
@see printf, vprintf
@@ -753,7 +753,7 @@ public:
formatted printf. Used by other methods, this is public in case it's
useful for other purposes where you want to pass a va_list through directly.
Note that using the %s token with a juce string is probably a bad idea, as
Note that using the %s token with a juce string is probably a bad idea, as
this may expect differect encodings on different platforms.
@see printf, formatted


Loading…
Cancel
Save