From b3e986bc95aa4cab32d8f882429ec3d96aadbc96 Mon Sep 17 00:00:00 2001 From: Julian Storer Date: Wed, 9 Mar 2011 10:37:26 +0000 Subject: [PATCH] Added android build files for the juce demo. Sockets fix. Updated the juce readme file in the docs folder. --- docs/JUCE changelist.txt | 762 ------------------ docs/JUCE readme.html | 292 +++---- .../Builds/Android/AndroidManifest.xml | 16 + .../JuceDemo/Builds/Android/build.properties | 1 + extras/JuceDemo/Builds/Android/build.xml | 37 + .../Builds/Android/default.properties | 4 + extras/JuceDemo/Builds/Android/jni/Android.mk | 44 + .../Builds/Android/jni/Application.mk | 5 + .../JuceDemo/Builds/Android/local.properties | 6 + .../Builds/Android/res/drawable-hdpi/icon.png | Bin 0 -> 7561 bytes .../Builds/Android/res/drawable-ldpi/icon.png | Bin 0 -> 2642 bytes .../Builds/Android/res/drawable-mdpi/icon.png | Bin 0 -> 4097 bytes .../Builds/Android/res/values/strings.xml | 5 + extras/JuceDemo/Juce Demo.jucer | 2 +- juce_amalgamated.cpp | 29 +- src/io/network/juce_Socket.cpp | 31 +- 16 files changed, 245 insertions(+), 989 deletions(-) delete mode 100644 docs/JUCE changelist.txt create mode 100644 extras/JuceDemo/Builds/Android/AndroidManifest.xml create mode 100644 extras/JuceDemo/Builds/Android/build.properties create mode 100644 extras/JuceDemo/Builds/Android/build.xml create mode 100644 extras/JuceDemo/Builds/Android/default.properties create mode 100644 extras/JuceDemo/Builds/Android/jni/Android.mk create mode 100644 extras/JuceDemo/Builds/Android/jni/Application.mk create mode 100644 extras/JuceDemo/Builds/Android/local.properties create mode 100644 extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png create mode 100644 extras/JuceDemo/Builds/Android/res/drawable-ldpi/icon.png create mode 100644 extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png create mode 100644 extras/JuceDemo/Builds/Android/res/values/strings.xml diff --git a/docs/JUCE changelist.txt b/docs/JUCE changelist.txt deleted file mode 100644 index b7362b3cb1..0000000000 --- a/docs/JUCE changelist.txt +++ /dev/null @@ -1,762 +0,0 @@ - -============================================================================== - - JUCE version 1.51 - -============================================================================== -Changelist for version 1.51 - -- Huge amounts of code cleaning-up and bugfixing! Modernised vast amounts of old code to follow C++ best practice guidelines recommended by leading C++ gurus... -- Initial support for the iPhone/iPad! -- Initial incarnation of a future replacement for the Jucer - this is unfinished, but already has fantastic project-creation and management features to let you auto-generate multiple-IDE project files. -- Numerous new features such as WASAPI, Jack, CoreGraphics, lots of great new classes such as ValueTree, CodeEditorComponent, NamedValueSet, entirely re-written graphics engine with new clipping abilities, foundations for support of multi-touch input devices. - -============================================================================== -Changelist for version 1.50 - -- It's been far too long since the last official release, and there are a vast number of new features and fixes in this version - far too many to list here! Check the SVN logs for more detailed information -- All Mac native code has been ported from Carbon to Cocoa. (There are a few exceptions, e.g. audio plugins, where Carbon support is still needed, but these remnants can easily be phased out in the future when no longer needed) -- Amalgamated builds: The entire Juce library can now be added to your application as a single (very large) cpp file! This can speed up builds (no need to build the juce library) and simplify project management, as well as making it easy to handle multiple juce projects that all need the library to be built with different settings. -- Support for browser plugins! In a similar way to building audio plugins, you can now build NPAPI and ActiveX browser plugins. -- Support for webcams! The CameraDevice class makes it easy to show a preview of a camera, and to stream its input to a video file. - -============================================================================== -Changelist for version 1.46 - -- new class: AudioProcessorGraph: This allows AudioProcessors to be efficiently wired together and run as a graph. I've converted the plugin host demo to now use this instead of its own graph rendering code. -- new class: AudioProcessorPlayer: This allows an audio i/o device to stream through an AudioProcessor (or an AudioProcessorGraph). -- new class QuickTimeAudioFormat, which uses QuickTime to implement an AudioFormat that can read .mov files and other formats that QT supports (e.g. mp3, aac, etc) -- new class: WebBrowserComponent, for embedding a web browser in your app -- AudioProcessor now has a few more pure virtual methods that you'll need to implement: acceptsMidi(), producesMidi() and getName() -- moved all the audio plugin hosting classes into the main juce tree -- Mac: the project now requires at least XCode V2.5 -- new class: ScopedTryLock -- added AudioUnit support to the audio hosting code -- any top-level components will now have their parentSizeChanged() method called when the screen res is changed (not on linux yet though..) -- jucer: added support for ImageButtons -- audio devices - a few tweaks to the various audio drivers to try to make the best possible guess at the input and output latencies that they introduce -- updated to include the latest version of Flac (1.2.1) -- added a parameter to DragAndDropTarget::isInterestedInDragSource(). This ma -- changed the parameters to AudioIODeviceCallback::audioDeviceAboutToStart(), so that it now just supplies a pointer to the device. If you need to, you can still find out the sample rate and block size by asking the device for them. -- changes to the URL class to allow file uploading -- new method: PlatformUtilities::launchEmailWithAttachments -- new classes: AudioThumbnail and AudioThumbnailCache, which allow easy rendering of low-res waveform previews -- new classes: InputSource and FileInputSource. These encapsulate some kind of resource, and also replace the XmlInputSource class. -- moved some of the posix code that was the same in the mac and linux builds into a single, shared file -- fixed InterprocessLock on mac/linux so that it can't get stuck when an app quits unexpectedly -- added an option to splash screens to close themselves when the mouse is clicked -- change to ProgressBar to allow custom text and bars that are just spinning without a known progress position. This also meant a change to the params for LookAndFeel::drawProgressBar -- ditched win98 non-unicode support (presumably nobody will miss that!) -- change to the way that channel data is passed to an AudioIODeviceCallback. Previously, some of the channels could be null, but now is uses a packed array of all the active channels - -============================================================================== -Changelist for version 1.45 - -- big new project in the "extras" folder - a basic audio plugin host! Currently it loads VSTs on PC/Mac, and lets you put them together in a filter graph, which it plays. Hosting functionality is very basic at the moment, but I'm laying down a good architecture to hopefully develop into a full cross-platform plugin host. -- audio plugins: The AudioFilterBase and AudioFilterEditor classes have moved into the main juce tree, and been renamed as AudioProcessor and AudioProcessorEditor. This means you can remove these files from your plugin projects, and should search-and-replace any instances of the old names with the new ones. -- audio plugins: the processBlock() call in AudioFilterBase has been simplified in AudioProcessor. It now just takes a single buffer for all input and output channels, and the accumulate parameter has gone. This will mean tweaking your plugin code, but will probably make it much less complicated. -- audio plugins: AudioProcessor requires a few more methods to be implemented by your plugin than AudioFilterBase did: getInputChannelName, getOutputChannelName, isInputChannelStereoPair, isOutputChannelStereoPair, getLatencySamples (which supersedes the old macro for setting the latency). These are all quite simple to add. -- audio plugins: new methods AudioProcessor::beginParameterChangeGesture() and endParameterChangeGesture() let you tell the host when a parameter-change action starts and finishes. -- audio plugins: new method AudioProcessor::updateHostDisplay() to tell the host that something about your plugin has changed and that it should refresh its display. -- new class: FileSearchPathListComponent, for letting the user edit a FileSearchPath. -- new class: FileDragAndDropTarget, which replaces the old method Component::filesDropped. To use it, just make your component inherit from FileDragAndDropTarget, and it'll receive external file drops. This provides more functionality than the old method, allowing you to track the drag enter/exit/movements as well as just reacting to the drop itself. -- added a critical section option to ReferenceCountedArray -- refactored and added features to the Socket class, replacing it with StreamableSocket (basically the same as the original class), and DatagramSocket. -- refactored the OpenGLComponent, adding new classes OpenGLPixelFormat and OpenGLContext -- A component's KeyListeners are now called before its keyPressed method, so if you want to intercept keys and stop them getting sent to the component, you can add a keylistener and comsume the events. -- added an option to choose a Midi output device to the AudioDeviceManager and AudioDeviceSelectorComponent -- updated the included version of libpng - -============================================================================== -Changelist for version 1.44 - -- added a method Desktop::setScreenSaverEnabled(), which lets you prevent the screen-saver from being activated - handy if your app is doing some kind of presentation. (only implemented on windows/mac - anyone know how to do this on linux?) -- new Mac-only class: AppleRemoteDevice, which lets you grab and listen for events from your Apple remote control. (Only works if you build for 10.3 or above). -- tweaks to get it working under Wine. -- change to the keyPressed() and keyStateChanged() callbacks in Component and KeyListener. These used to be void, but they now return a bool to indicate whether the key event was needed or not. Any existing code you've got will break in the compiler, so just change it to return true if the key was used, or false to allow the event to be passed up to the next component in the chain. (This change is a better architecture than before, and was also needed so that plugins can allow unused key events to be passed on to the host application) -- swapped the look and feel classes around, so that the basic LookAndFeel class is now what used to be the "shiny" one. The ShinyLookAndFeel class has been removed, and for that old fashioned look, I've added an OldSchoolLookAndFeel that you can use if you need the original L+F. This means that any custom looks that you were using may need to change their base class. -- changed the MouseEvent structure so that it now contains a pointer to the event component and also the original component. -- added a PopupMenu::dismissAllActiveMenus() method. -- added the JUCE_LOG_ASSERTIONS flag, which can automatically log assertion failures, even in release builds. -- new classes DirectoryContentsDisplayComponent and FileTreeComponent, allow a view of a directory as either a list or treeview. I've added a demo of the FileTreeComponent to the treeviews section of the Juce Demo. There's also now an option in the FileBrowserComponent constructor to use a treeview. -- small change to the strictness of the way TreeViews handle their root items. Be careful now to never delete a tree's root item until either the treeview has been deleted, or until you've removed the root from the tree using setRootItem (0). Not doing this can now cause a crash in the tree's destructor, where it expects the root to still be valid. -- added some virtual methods to TextEditor to allow customisation of its popup menu. -- added a Component::setExplicitFocusOrder() method for specifying the order in which components have their focus traversed, and added Jucer support for setting this value. -- made slider skew factor editable in the jucer -- added a background thread to the MidiOutput class, so it can be given a batch of midi events and will dispatch them itself based on their timestamps. -- added MultiDocumentPanel::createNewDocumentWindow() method to allow creation of custom document windows in a MultiDocumentPanel -- added a Thread::getCurrentThread() method -- added an option to MessageManagerLock that can check for thread termination, to avoid deadlocks. -- new method: PropertySet::setFallbackPropertySet() -- some simplifications to ApplicationProperties, because of problems it was causing when there were read-only common property files. - -============================================================================== -Changelist for version 1.43 - -- I've done a bit of tidying up of the juce tree, moving things like the demo, the jucer, etc into a folder called "extras", and this also now includes the audio plugin code and BinaryBuilder, rather than having those available as separate downloads. -- native menu bar support for the Mac! See MenuBarModel::setMacMainMenu(). -- a few changes to the MenuBarModel class and MenuBarComponent - the model object now has listeners, and when a menu changes, you should call MenuBarModel::menuItemsChanged() rather than calling the old equivalent method on the bar component. Also, the MenuBarModel virtual methods have changed slightly and no longer have a menu bar component as one of their parameters. One other related change is that DocumentWindow::setMenuBar() no longer takes a command manager - you should register the command manager directly using MenuBarModel::setApplicationCommandManagerToWatch -- horizontal mouse-wheel support - this involves a change to the Component::mouseWheelMove method, to add an extra parameter. If you've got existing code that uses the old form of this method, it should fail to compile with an error, and you just need to tweak it to add the new parameter -- sorted out some problems with the jucer's colour swatch menus -- fixes for AudioDeviceManager forgetting channel selection -- added a textCharacter member to the KeyPress class - this allows a unicode printing character to be stored separately from the keycode. -- added support for extra numeric keypad keys like add, subtract etc, and F13-F16 -- added a radio group ID field to buttons in the jucer -- renamed TaskbarIconComponent as SystemTrayIconComponent to make it more obvious what it does, and added support for tray icons on linux (thanks to kraken for the code for that one) -- new class: ChannelRemappingAudioSource, which lets you take a source and remap its input and output channels. -- some tweaks to the Time functions on win32 to make them slightly more efficient -- new method: Slider::setIncDecButtonsDraggable(), which adds a hybrid click/drag mode to the inc/dec button slider -- added some linux-specific methods for creating new midi in/out devices (ta to kraken) - -============================================================================== -Changelist for version 1.42 - -- jucer: fix for crash when trying to add items to a button -- optimisation for UndoManager when there's a lot of items -- added multiple file selection as an option for the FileChooser (using native dialogs, not yet juce file browsers) -- added some colour IDs for rotary slider colours -- new method: PopupMenu::addSectionHeader() -- tweaked the way that options are passed to the PropertiesFile constructor, and added an option to save the file as XML. -- new method: Slider::setSkewFactorFromMidPoint() -- jucer: added an option to specify a virtual parent class for components, so that you can edit a component of your own class using a built-in type (e.g. edit your own slider subclass using the slider class). Thanks to kraken for this idea. -- plugins: added support for current-program-only settings to be saved for VSTs -- changes to the way events are dispatched on the mac, to make use of mouse-tracking. This was necessary to avoid problems embedding HIViews in juce windows, and hopefully shouldn't cause any problems anywhere else in the code -- altered the way Files are stored internally to avoid ambiguity between "/" (on mac/linux) and File::nonexistent. Previously all files were stored without a trailing slash, but now in the case of the root dir, the slash is kept. - -============================================================================== -Changelist for version 1.41 - -- handy new macro: numElementsInArray() -- improved menu highlighting of custom menu components -- win32 windowing changes to avoid problems with plugins messing up their host's keyboard accelerators -- new class: ApplicationProperties - this is a handy singleton for managing PropertyFile objects when you need both user-specific settings and settings that are common to all users of a machine -- extra options for PopupMenu to allow more control over the width and number of columns used. Note that there's a small change to the prototype of LookAndFeel::getIdealPopupMenuItemSize, in case you've overridden this in your code -- for consistency, changed the ComboBox to use a normal menu as its popup component, instead of the slightly-different component it had been using. This also involved ditching a load of LookAndFeel methods that were for drawing the old popup. -- the FLAC and Ogg-Vorbis libraries are now embedded and integrated into the juce build. Previously these could only be used if you linked to their library files, which needed building separately, but now it all just works without any external dependencies. -- tweaked the AudioDeviceSelectorComponent to give more flexible control over which channels are enabled in a multi-channel soundcard -- Linux + Mac: added a sockets-based HTTP stream class, so that linux now has this functionality. On the Mac, this replaces the old version which used deprecated OS functions (and which kept randomly crashing deep inside Apple's HTTP code) -- altered the AudioFormat::createWriterFor method to take an OutputStream rather than a FileOutputStream - if you've written a custom AudioFormat you'll have to tweak your method prototypes -- more efficient zip file parsing -- renamed MemoryBlock::to64BitEncoding and MemoryBlock::from64BitEncoding because they're a misnomer, and I must have been a bit muddled when I wrote those. They're now called toBase64Encoding and fromBase64Encoding. -- new methods: String::indexOfAnyOf and lastIndexOfAnyOf -- changes to the prototype of File::findChildFiles, DirectoryIterator, and a couple of other related methods, so that you can use an enum to specify whether to search for files, directories, or both. -- added some methods to ListBox and TableListBox to return the position of rows and cells -- added a method to allow easy drag-and-dropping of treeview items -- added support for the numeric keypad in KeyPress -- added methods to create custom buttons in TabbedComponents, and to save/restore the scroll position of a ListBox -- fixed whitespace display in a password textbox -- jucer: a very useful change allows each co-ordinate of a component to now be made relative to another component instead of the parent, allowing some complex layout behaviour. -- linux: added support for dealing with drag-and-dropped files (thanks to kraken for the code behind that one!) - -============================================================================== -Changelist for version 1.40 - -- Audio Plugins: added an initial release of an RTAS wrapper! -- new classes: IIRFilter and IIRFilterAudioSource -- changed the Synthesiser to use reference counting for SynthesiserSound objects, so that sounds can be allowed to play on after being removed. -- added some colour options to the GroupComponent and Toolbar classes -- added a mouse-sensitivity setting to sliders -- Linux: added support for XShm, which uses shared memory to improve rendering speed -- Added a new method File::getSpecialLocation(), which lets you find out various system paths, e.g. home folders, documents folders, etc. This replaces a bunch of existing static method calls in SystemStats. -- Added a TableListBoxModel::getDragSourceDescription() method to allow easier dragging of table rows -- Added an option to PropertiesFile for creating files that are common to all users. Also tweaked a couple of methods in this class. -- Mac: added a PlatformUtilities method to convert unicode strings to their precomposed form, and used this in lots of file handling routines to avoid mix-ups between encodings of extended characters. -- Altered the directory search code to optimise fetching of file attributes - this should help when browsing directories on slower network drives -- couple of small fixes for TableHeaderComponent in stretch-to-fit mode -- added a new virtual method to OpenGLComponent to provide a callback for setting-up a new GL context -- some improvements to the AudioDeviceManager to make it do a better job of saving and restoring its state -- Jucer: some fixes for embedded jucer components -- changed the PNG loading code to correctly handle interlaced PNG formats -- added methods to convert a Path into a simple string of co-ordinates that can be reloaded. Also added a button to the font demo to turn glyphs into these strings -- added a multi-select option flag to treeviews -- mac + linux: implemented the InterProcessLock class -- fixed DirectSound handling of unicode driver names - -============================================================================== -Changelist for version 1.39 - -- change to the way Components and LookAndFeel objects handle colour. Preset colours are now identified by a unique ID number, and can be retrieved or set either for the lookandfeel object or overridden for an individual component. See the new Component::findColour and LookAndFeel::findColour methods for more info on this. -- new classes: SamplerSound and SamplerVoice, which are used with the Symthesiser class to form a very simple sampler. I've added an example of this to the audio demo. -- some Win32 changes to enable window maximising via the native system menu -- added an option to the Slider class for showing min/max values -- added ALSA midi output support for Linux -- support for Linux displays with only 16-bit colour, and fixes for handling of exteneded keycode input -- added some more string constructors, for creating strings from unsigned integers as well as signed ones -- new class: ComponentMovementWatcher, for keeping track of movements of deeply nested components (probably quite esoteric, but needed for things like OpenGL and ActiveX windows) -- Jucer: made references to embedded jucer files use relative pathnames rather than absolute, so directories of jucer files can be moved easily without breaking links -- Jucer: added constructor parameters properties for the components inside tabbed components, viewports and jucer components. -- Jucer: SVG files can now be dropped in as image resources -- changed the ApplicationCommandManager::getFirstCommandTarget() method to add a command ID parameter -- MemoryBlock::to64BitEncoding now returns a string rather than taking a dest string parameter -- tweaked the ImageCache class to use 64-bit hash-codes -- Plugin toolkit: added a class StandAloneFilterWindow, which is a window object you can use to build a plugin as a standalone app - -============================================================================== -Changelist for version 1.38 - -- Windows: mouse cursors and taskbar icons now use a full 8-bit alpha channel when running on WinXP -- Fixed some SVG bugs and made the parser more efficient -- got rid of the Component::setDragRepeatInterval() method and replaced it with a static method beginDragAutoRepeat(). This makes it easier for a parent component to enable auto-repeat when its children are clicked. -- bugfixes for some keyboard codes on Windows, RelativeTime rounding accuracy, Linux opengl repainting, mac window repainting, BWAV history chunk parsing, Table components, Mac fonts, Mac CoreAudio built-in device pairing, nested modal state return values, full-screen windows using native title bars, linux filenames with extended character sets. -- Windows: updated the network MAC address function, which wasn't correctly finding all network cards on some systems -- changes to allow a 64-bit build on Windows, including greater use of compiler intrinsics -- two new header files: juce_WithoutMacros.h and juce_DefineMacros.h (in the juce/src directory) - these make it easy to include juce.h without it defining macros that may conflict with other 3rd party header files. See the comments in these files for more info. -- tidied up the SystemStats operating system detection detection, to use an enum instead of strings, added Windows Vista detection, and renamed some of the methods. If you use these, you'll probably have to change the method you're calling, but it's not difficult. -- added an option to TreeView to set the indent size -- updated the build instructions for Windows compilers - -============================================================================== -Changelist for version 1.37 - -- new classes: Toolbar and a bunch of related classes. For creating and dynamically customising toolbars. -- new class: ComponentAnimator, which will move and resize components to new positions, taking a specified length of time to get there. There's a button to demonstrate this in the jucedemo widgets section, on the buttons page -- new class: MultiTimer, which is like a Timer, but allows multiple independent timers with different frequencies to share a callback -- fixed a few bugs in the SVG parser and a gradient-rendering bug, and added an SVG object to the "paths + transforms" demo page -- added some assertions to warn people about adding components directly to a ResizableWindow rather than using setContentComponent() -- to improve performance of the ElementComparator class, I've changed the sort routines to use a templated class rather than a virtual method. If this breaks your code, all you need to do is to no longer derive your class from ElementComparator and everything else should continue to work as normal. -- finished off the ThreadPool class, and souped-up the threading page of the demo app to show how to use it. -- added some static methods to Drawable to automatically load Drawables from some kind of image or SVG file -- fixes for some Mac VST and AU windowing bugs -- new method Component::canModalEventBeSentToComponent(), which allows a modal component to selectively allow events to reach components that it is blocking -- fixed deprecated function warnings in MSVC8 -- all projects and solutions are now compatible with MS Visual Studio 2005 - I've renamed some of the vcexpress directories to "vc7", and the projects in them will load with either VCexpress or VC8 -- updated the "hello world" projects to use a document window -- altered the AudioFileFormat::createReaderFor() method to specify whether the input stream should be preserved if opening fails - -============================================================================== -Changelist for version 1.36 - -- Windows: ActiveXComponents (and QuickTime components) now get told about any mouse events that happen inside the control -- Graphics::saveState() now saves the colour and brush as well as the clip region and origin -- SimpleListBox now prevents mouse clicks from getting sent to the list if the component is disabled -- new classes: TableListBox, TableHeaderComponent - these are for creating table components with column headings that can be re-ordered, resized, etc. I've added a table demo to the juce demo to show how to use it, and the Jucer's resources panel also now uses a stretch-to-fit table. -- removed class SimpleListBox: I've got rid of the separate SimpleListBox class, and merged its functionality with ListBox. If you're currently using a SimpleListBox, the only change you should need to make is to replace "SimpleListBox" in your code with "ListBox". -- Changes to ListBox: if you're using a ListBox with custom row components, you'll need to change your class to also derive from ListBoxModel, and make sure you call ListBox::setModel() to make it use your model class. Then you'll need to replace the old createRowComponent() and updateRowComponent() methods with the new refreshComponentForRow() method. -- new handy macro: forEachXmlChildElement, which is a neat way of iterating the child elements of an XmlElement -- new class: StretchableObjectResizer, which is for calculating how to fit a set of resizable items into a given space -- new class: TaskbarIconComponent, on Windows only, this lets you show an icon in the system tray. -- fixes for using a DLL build on Windows - I've moved all the allocators into the juce DLL, so this should now work ok -- added a bit of SSE optimisation in the graphics rendering code (just for blending large blocks of solid colour) - -============================================================================== -Changelist for version 1.35 - -- added a simple SVG parser to the Drawable class - this can parse SVG into a graph of Drawable objects that you can then render. The parser's pretty basic, and doesn't support much of the (very large) SVG spec, but I'll keep adding features to it as they're needed -- fixed the updating of ToggleButtons that are connected to app commands so that they correctly reflect the command's 'ticked' state. -- fixed the XML parser's handling of non-text element entities -- added a few handy static methods to AffineTransform -- gradient fills can now have a transform matrix specified, to deform their shape -- new class: RectanglePlacement, which is a bit like Justification, but specifically for fitting rectangular graphics within a viewport with various positioning options. This will break a few places where you call methods like drawImageWithin(), but is easy to update and the result is more readable code. -- new method Colours::findColourForName() for looking up colour names from a string -- added a flag to ApplicationCommandInfo to stop menus and buttons getting flashed when particular commands are invoked -- new class: CharacterFunctions, which contains a set of static functions for manipulating ascii and unicode characters and null-terminated strings. This is intended to replace any use of functions like strlen, etc, with a set of safe, platform-independent ones. -- some fixes and optimisations to the file chooser components -- altered the Graphics and LowLevelGraphicsContext classes to use a stack for pushing and popping the clip regions, instead of setting these explicitly with a RectangleList. (This change is needed for future support of OS contexts that can't retrieve the clip path as a set of rectangles) -- removed the Graphics class's copy constructor (use the saveState/restoreState methods instead of a temporary copy) -- added method String::indexOfWholeWord() -- tidied up some of the header files, moving all inline functions (like jlimit, jmax, etc) into the juce namespace -- Mac: complete rewite of the windowing code. Components are now placed in HIViews, rather than directly in Windows. As well as being more futureproof, this is vital for support of AudioUnits and VSTs on Intel Macs. -- Mac: tidied up the build environment. It now compiles a universal binary which is compatible with any system from 10.2 onwards, including intel on 10.4 -- Windows: new ActiveXControlComponent class, which lets you embed an ActiveX control in a Juce window. I wrote this to get the new Quicktime control working, but made it generic so you could use it for other things like embedding a web browser, etc. -- Windows: completely rewritten Quicktime support. This now requires QT7 (on windows, not Mac), but it now uses the new ActiveX QT control, which is much better than the archaic way it used to be done. Would like to update the Mac version too, but that'd only work on 10.4, so will wait until older OS versions are less common. -- Windows: fixes for non-western keyboard input sometimes not working in textboxes -- Linux: added a MIDI input device, using ALSA -- Linux: made launching of URLs in the default browser work properly -- Jucer: added an option to view a semi-transparent overlay of the components while editing the background graphics -- Jucer: better positioning of new objects when zoomed-in -- Jucer: added a "common background" graphics layer to buttons, which is drawn behind all the other button states -- Jucer: added key shortcuts for nudging component's position and size around -- JuceAudioPlugin: rewrote the mac VST and AU wrappers to embed a HIView rather than the old window hackery it was using. - -============================================================================== -Changelist for version 1.34 - -- a bunch of changes to continue improving the expressiveness and consistency of listener classes, (and moving away from generic listeners like ChangeListener): -- new class: LabelListener class now replaces Label's use of ChangeListeners -- new class: ComboBoxListener for ComboBoxes, replacing the old use of ActionListener -- new class: ScrollBarListener for ScrollBars, replacing the old use of ChangeListener -- new class: KeyboardFocusTraverser, to take the logic of keyboard focus traversal out of the component class. -- removed the Component::setFocusOrder method - instead, a KeyboardFocusTraverser object now decides the focus order (and can be overridden to support custom behaviours) -- new class: ApplicationCommandManagerListener - this is used to listen for commands being invoked, and for changes to the status of commands. The Button class now uses this so that when a button is linked to a command, it enables itself only when the command is active, and flashes when it's invoked. -- new class: FocusChangeListener - this can be registered with the Desktop class to receive callbacks whenever the focused component changes -- new class: FilenameComponentListener - for getting events from FilenameComponents, replacing the use of ActionListener -- new class: BooleanPropertyComponent - a property component with a toggle button in it -- some fixes to DLL builds on windows -- couple of additions to the MidiKeyboardComponent class -- fix for large menus not scrolling correctly -- got rid of Component::getMouseX() and getMouseY() - this functionality is already available in Desktop::getMousePosition(), so not needed here as well -- replaced the Component::getMouseXRelative() and getMouseYRelative() method with a single method getMouseXYRelative() that returns both co-ordinates at once (this is a more efficient way of doing things) -- added new methods Component::relativePositionToGlobal, globalPositionToRelative and relativePositionToOtherComponent for converting co-ordinates to and from screen co-ords. These replace the old getXRelativeTo() method. -- new class: MagnifierComponent, which magnifies or shrinks any component that you put inside it -- added colour swatches to the ColourSelectorComponent -- Jucer: literal text strings can now contain special strings which are treated as c++ code - anything inside a pair of %% characters counts as c++, so %%getName()%% gets translated into the name of the component; %%getButtonText()%% into getButtonText(), and these are concatenated with the rest of the string. -- Jucer: Button documents now have a list of the various over/down/toggled states for which you want to design paint routines, and any combination of these can be enabled -- Jucer: you can now drag-and-drop a Jucer .cpp file into a component's layout window, and it will add it as a Jucer component -- Jucer: highlighted object borders can now go beyond the edges of the component, making it easier to edit comps that are slightly off-screen or aligned with the edges of the parent comp -- Jucer: new command to bring any items that are off the edges of the screen back into the middle -- Jucer: ComboBoxes and Labels now create callback methods -- Jucer: Zoom mode! As well as the zoom in/out commands on the menus and keyboard, you can use the mouse-wheel with ctrl or alt held down to zoom. -- Jucer: Holding down the space bar now lets you scroll around the component -- Jucer: ability to group paint elements together to treat them as a single entity - -============================================================================== -Changelist for version 1.33 - -- fixed some graphics error with path strokes, and optimised the stroke creation code -- improved the ellipse and rounded rectangle path routines by using cubic approximations -- couple of extra methods for the AsyncUpdater class -- changed sliders so that they now use a SliderListener class to receive callbacks instead of using ChangeListeners -- Jucer: lots and lots of bugfixes -- Jucer: added options for converting text and other graphics elements into paths -- Jucer: Viewports can now have a content component specified, which may be a Jucer component -- Jucer: TabbedComponents can now be edited and have the contents of each tab specified -- Jucer: Added a list of extra callback methods that can be added to the code automatically -- Jucer: Added an option to images to change the stretch mode -- Jucer: Graphic objects can now use an ImageBrush for their fill or stroke -- Jucer: You can now drag-and-drop image files onto the graphics element editor page -- Jucer: Added a tooltip property to those components that implement the SettableTooltipClient interface -- Jucer: Gave it an icon -- Jucer: Sliders now create a SliderListener callback - -============================================================================== -Changelist for version 1.32 - -- Jucer: added undo/redo support! -- Jucer: restructured most of the project, adding support for documents of different types, so now it can create either normal components, or buttons with normal/over/down graphics. More document types can be added in future -- Jucer: added a VC6 project, and fixed some things that didn't build because of VC6 compiler bugs -- Jucer: holding down shift when resizing things now fixes the aspect ratio -- Jucer: holding down ctrl when dragging disables/enables grid-snapping -- added a couple of options to MultiDocumentPanel -- fixed a graphics bug with thick path strokes not being created correctly -- mac: managed to stop it repainting windows unnecessarily while dragging them around - -============================================================================== -Changelist for version 1.31 - -- First release of the Jucer! This is a component development tool that lets you design Juce components and produces c++ code. This initial release is functional but still a work-in-progress - it will be an ongoing project, adding more and more functionality and shortcuts for creating juce-based code. The Jucer source code lives inside the Juce tree, in the juce/jucer folder. -- new class: PositionedRectangle, which specifies a rectangle using either absolute or proportional co-ordinates, and giving flexible control over the anchor points used. Handy for positioning components. -- new set of classes: PropertyComponent, PropertyPanel and various basic subclasses of PropertyComponent. These allow you to quickly set up a properties panel for something, e.g. a selected object, which shows a list of named properties of various types, e.g. text, sliders, combo boxes, etc. -- added a method ApplicationCommandManager::setFirstCommandTarget() to make it easier to set up non-component command targets -- change to the FileBasedDocument load/save methods so that they can return an error message on failure -- new method: Graphics::fillCheckerBoard() -- added options to FileChooser and FileChooserDialogBox to prompt the user about overwriting files that already exist -- change to TabbedComponent, so that instead of using a virtual method to create the components for the tabs, you add components using the addTab method and the TabbedComponent looks after them for you. -- fixes to some focus issues, such as popup menus temporarily moving focus away from the main window -- new class: MultiDocumentPanel to hold multiple document windows as either floating DocumentWindows or in a TabbedComponent. - -============================================================================== -Changelist for version 1.30 - -- major set of new classes to introduce "application commands". This is a powerful mechanism for despatching commands to command targets. It allows commands to be bound to keystrokes and easily triggered by menus, buttons, etc. New classes to support this include ApplicationCommandManager, ApplicationCommandTarget, ApplicationCommandInfo. I've rewritten the Juce demo to use commands to control its menu system, and added key-shortcuts to select the various demos. -- the new app command stuff replaces a lot of the functionality that was in KeyPressMappingSet, so this class has been slimmed down with some functionality moving into the new classes. I've renamed the createXml() and restoreFromXml() methods to draw attention to the slight difference in the way they're used, (and to make the names more consistent with other code) -- new class SettableTooltipClient, and made a lot of the existing widgets inherit from this, to make it easy to set tooltips for them -- new flag in the Justification class - horizontallyJustified, which spreads text out to align both its left and right margins -- tidied up the Uuid class and got rid of any platform-dependent libraries it was using -- the constructor for the Thread class now takes a name, and on windows this gets passed to the debugger to make it easy to see which thread is which. (Haven't got mac or linux implementations for this yet) -- some UI fixes for running under KDE on Linux -- added a File::areFileNamesCaseSensitive() method -- added a method to the MidiInputCallback class to handle incoming sections of a long sysex message. (This is only currently supported on the mac) -- the XML parser now loads extended UTF-8 characters correctly - -============================================================================== -Changelist for version 1.29 - -- moved the Juce demo app into the main Juce tree, to make it all easier to download -- added classes for FLAC and Ogg-Vorbis audio formats -- added support for native window title bars and borders -- moved the window style flag enum out of Component and into ComponentPeer, adding lots of new flags. -- changed some of the methods in ComponentBoundsConstrainer so it'd work with the new windowing stuff -- couple of minor fixes to named pipes on windows -- some Quicktime component fixes and optimisations -- changed the AudioFormat class to allow multiple file extensions, and added a method AudioFormatManager::getWildcardForAllFormats() to make it easy to show browsers for audio files -- on OSX, added a juce.xcconfig file to the XCode build, to make it easier to select whether to build for gcc3 or 4 -- made the TabBarButton class public to allow customised tab bar components -- changed the default font on OSX from Verdana to Lucida Grande, as Verdana isn't actually guaranteed to be installed on all systems - -============================================================================== -Changelist for version 1.28 - -- Cleaned up the audio device driver architecture, adding an AudioIODeviceType class to represent the different types, (e.g. DSound, ASIO, CoreAudio, ALSA, etc). The AudioIODevice class is now an abstract base class, and instances can only be created by using an AudioIODeviceType object. This means that user code no longer needs to care whether support for ASIO is enabled or not. -- Fixes to the ReadWriteLock class -- Couple of bugfixes to stop older VC7 compilers complaining -- Finally found a way of making the windows come to the front correctly under Gnome on Linux -- Fixed a linux mouse focus bug that messed up menus -- New class: Socket, which is.. you guessed it.. a socket. -- New class: NamedPipe, which is, unsurprisingly, a named pipe, for interprocess comms. -- new class: InterprocessConnection, which manages a simple two-way socket or pipe-based message passing connection to another process or machine on the network. -- Added a new interprocess comms page to the demo, to demonstrate InterprocessConnections. -- Improvements to repaint speed on win32 when there are complex repaint regions -- Fix for a mac windowing bug that stopped modal windows coming to the front correctly - -============================================================================== -Changelist for version 1.27 - -- lots of new file selector classes: DirectoryContentsList, FileListComponent, FileChooserDialogBox, FileBrowserComponent, FileFilter, etc. These can be used either as separate components or as a ready-made dialog box file chooser, which means that the Linux build finally has a file chooser! -- jazzed-up the colour selector to give more control over how it looks -- added a simple pattern match (for matching filenames, mainly) to the String class -- fixes to avoid problems with drifting clocks on the new dual-core intel cpus -- added UTF-8 conversion methods to the String class -- made PropertiesFile support unicode strings -- new class: BorderSize, which is used to represent the gaps around things - I've changed a few methods in classes like LookAndFeel, ResizableWindow, Component to use this instead of specifying the gaps manually, which was a bit messy. -- new class: AudioDataConverters, which contains methods for converting floating point audio to various integer formats -- new static_jassert macro for doing compile-time assertions -- fixes for mac MidiInput with certain drivers -- tidied up the MemoryBlock class and got rid of its virtual base class to make it quicker. Also dumped the AlignedMemoryBlock class: if anyone wants it back, let me know and I'll do a new version! -- optimised repainting for cases where there are a lot of deeply-nested components -- tweak to the broadcast message code on win32 to avoid deadlocks -- fixes for GCC4.0 optimised build under linux - the crashes here were due to strict aliasing in some numeric conversion functions. I've been through and made them more complient now. - -============================================================================== -Changelist for version 1.26 - -- Linux audio support using ALSA! This is a first stab at an implementation, so I've only had chance to try it on one soundcard - linux audio experts, please let me know what I've done wrong! -- Restructured the way components are housed in windows, getting rid of NativeDesktopWindow and instead having a ComponentPeer base class, of which there may be more than one implementation. (This won't make any difference to most people, only power-users) -- Graphics contexts now work with a RectangleList as their clip region, instead of just a single rectangle -- added some methods to Desktop to access a list of top-level desktop components -- fixes and improvements to TextEditor, improving its handling of word-wrapping -- added a QuickTime page and an audio input monitor to the demo app. - -============================================================================== -Changelist for version 1.25 - -- new class: TopLevelWindow to handle the concept of "active" windows -- new class: MidiMessageCollector helper for realtime midi input, and created a midi folder to tidy up the directory structure of the midi classes. -- added a JUCE_CATCH_UNHANDLED_EXCEPTIONS config to turn off the juce exception logging -- renamed JUCEApplication::getApplicationInstance() to JUCEApplication::getInstance(), for consistency with all the other singletons. Sorry for the hassle, but it's easy to find-and-replace it in your code. -- finished keyboard navigation for menu bars -- new class: Synthesiser, which is an abstract base class for multitimbral synths. Also added one of these to the audio page of the Juce demo -- TreeViews now have an extra item width parameter for each item, and horizontal scrollbars if items are too wide to fit on screen. - -============================================================================== -Changelist for version 1.24 - -- more flexible gradient control, allowing sequences of colours -- new class: DocumentWindow, which is a resizable window with a titlebar, nice-looking maximise/minimise/close buttons, a menubar, and lots of cool options. -- improved the ability for ResizableWindows to be used as child components as well as on the desktop, without them losing their drop-shadows -- eye-candy changes to ShinyLookAndFeel, adding glassy-looking buttons -- added a JUCE_VERSION macro to allow conditional builds against different juce versions -- added an option to PopupMenu that allows any component to be easily added as a custom component, rather than only ones derived from PopupMenuCustomComponent. -- made the win32 crt memory debugging overrides conditional with JUCE_CHECK_MEMORY_LEAKS macro in juce_Config.h -- new class: LassoComponent for easy lassoing of groups of UI objects -- additions to SelectedItemSet to improve the logic used when multi-selecting items that might be dragged. -- handy new method: File::replaceWithText() -- new class: RecentlyOpenedFilesList -- updated some crt function names for compatibility with the latest msvc pro -- misc fixes to glyph layout, text editor listener callbacks + lots of other things. -- new class: ComponentBoundsConstrainer for more flexible control over resizing and dragging components around. This replaces the ResizableBase class. -- popup menus now accept keyboard navigation (not done this for jumping between them on menubars yet, though) - -============================================================================== -Changelist for version 1.23 - -- new class AudioDeviceManager - this makes it super-easy for audio applications to manage the user's choice of audio and midi devices, and to save and load the user's audio settings. -- new class AudioDeviceSelectorComponent - goes with the AudioDeviceManager to make it easy to let the user change the audio settings. I've also updated the JuceDemo audio section to use these new features. -- fix to ProgressBar -- a few graphics rendering fixes, and some optimisations for pixel blending operations -- change to AudioIODeviceCallback class to add methods to tell the callback when the device starts and stops -- small tweak to AudioSourcePlayer now that it no longer needs to be told the sample rate and buffer size -- a few more tweaks for 64-bit compatibility on linux -- added a checkNewSize() method to ResizableBase and ResizableWindow to allow custom resize constraints. -- fix for a mac midi input bug that could freeze the system when malformed midi packets arrive -- optional drop-shadows on menus via the LookAndFeel class - -============================================================================== -Changelist for version 1.22 - -- new class: AudioFormatManager -- removed any dependencies on DSound.h or DSound.lib so Juce can be built with the latest Platform SDK without needing the DX SDK as well. -- fixed a mac drag-and-drop bug -- made drop-shadows optional for alert boxes + splash screens -- added some fixes for compiling on gcc4.0.2 in mandriva linux -- big restructuring of the graphics code to make it ready for adding OS or hardware-accelerated UI rendering. In its current state it should be pretty much the same speed as before, but I've moved all the software rendering into one class. Small changes to the Image class mean that you can no longer get a pointer to its pixels, you need to lock and unlock a section of the image, so that this will also work in future for images that aren't kept in main memory. - -============================================================================== -Changelist for version 1.21 - -- new class: MidiBuffer - an efficient array of midi messages for use in audio filters -- new class: MidiKeyboardComponent - a UI comp that shows a piano keyboard and has lots of groovy features -- additions to DragAndDropContainer to allow files to be dragged to external applications -- fix to Array::move() -- added a couple of accessor methods to TreeViewItem -- changed the colour selector component to make the alpha-channel optional -- fixed a layout bug with some tooltips -- fixes to the AIFF file format handler -- efficiency improvements to the Timer class -- add a Component::visibilityChanged() callback method -- added file and line info to the internal exception handling code -- linux window focus bugfix - -============================================================================== -Changelist for version 1.20 - -- changes to support the latest XCode 2.2 on the Mac, and some changes ready for Intel-based macs -- changes to support the latest version of VSExpress -- optimisations to DirectoryIterator - should make it much faster when scanning slow disks -- optimised the way Timers are triggered -- mac fixes for repainting transparent windows on 10.4 -- some tweaks necessary for AudioUnit support - -============================================================================== -Changelist for version 1.19 - -- added some more translation macros for various strings that were missing -- translation files can now contain escaped characters, e.g. "\t" or "\n" -- added a method to the QuickTimeMovieComponent to manually unload QT, as the automatic method it was using could interfere with other uses of QT in your app -- on the mac, minimising windows now animates and properly minimises them rather than just hiding them -- on the mac, hide/show application now works correctly -- small fix to ComboBox/FilenameComponent -- updated to include the latest versions of all 3rd party libraries - i.e. libjpeg, libpng and zlib, so lots of speed and security improvements there -- added ImageFileFormat::writeImageToStream() method, currently supporting writing of JPEG and PNG files -- fixed a bug in PopupMenus with a large number of items on them -- fixed a mac audio cd reading bug that could mix up the track order -- option for ComponentDragger to keep the entire thing on-screen - -============================================================================== -Changelist for version 1.18 - -- fixes to the audio resampler, and also to some looping bugs in the audio sources -- ComboBox::getSelectedId() was returning -1 if nothing was selected - changes this to be 0 instead, (it should always have been 0, as item IDs must be non-zero, but -1 is a valid ID) -- added a tryEnter() method to CriticalSection -- some tweaks to DirectSound support to allow the names of input devices to be used as well as those of output devices -- got rid of deprecated calls to strcpy -- a few fixes for gcc4.0 compatibility on linux -- new instructions for linking to the library in XCode - -============================================================================== -Changelist for version 1.17 - -- fixes for the Mac in string parsing and windowing -- fix for initial folder in the directory chooser on windows -- better unicode font name handling for winXP -- added some code for handling uncaught exceptions on the message thread -- made the DialogWindow::closeButtonPressed a pure virtual to force subclasses to handle it properly -- fixes for some keypresses that didn't work on foreign keyboards on the mac - -============================================================================== -Changelist for version 1.16 - -- added some methods to the ComboBox class to allow it to have disabled items in its drop-down list, and also to have separator lines and subheadings for different sections. -- new class: ToneGeneratorAudioSource -- more bugfixes for win98 support, XML, unicode, etc. -- on the mac, added DEBUG macros to the project, as these weren't being properly set up before and assertions were left in the release build -- on the mac, the project now creates two separate lib files for release and debug: libjuce.a and libjucedebug.a. Unfortunately there's no obvious way of making an app link to the correct one depending on whether you're doing a debug build, so you'll need to manually set the one you want in your project. -- on linux, fixed up a SUPPORT_AFFINITIES macro because some distros have obsolete APIs that won't compile the cpu affinity code -- methods to add XML elements to a PropertySet - -============================================================================== -Changelist for version 1.15 - -- got rid of the separate unicode/ansi builds, deleted juce_unicode.h and introduced a JUCE_STRINGS_USE_UNICODE macro which is defined in juce_Config.h. This is now turned on by default, so if there's some reason why you don't want your app to use unicode, you'll need to opt-out by disabling the macro. -- a bunch of unicode fixes and tweaks -- changed the method KeyPressMappingSet::isSafeToInvokeCallbacks() into isSafeToInvokeCommand() so it can choose whether particular commands are safe to run -- added an option to the ResizableBorderComponent and ResizableCornerComponent so that they can enforce a fixed aspect ratio -- new helper method for logging: FileLogger::createDefaultAppLogger() -- new class ResizableBase, as a base class for various resizable components -- various win98 fixes -- made the name of the juce namespace optional -- added methods Rectangle::toString() and fromString() to save/load rectangles easily -- fixed a stupid bug in FilenameComponent -- fixed mac file handling to fully support unicode filenames -- added drag-and-drop functionality to SimpleListBox, with helper methods in ListBox and also a few tweaks to DragAndDropContainer to help it deal with drag sources that are different from the component currently under the mouse. Also updated the demo drag-and-drop to use a listbox. -- various mac UI fixes, including some focus gain/loss improvements -- fixed the Dev-Cpp build, and added a Dev-Cpp project for building the demo app - -============================================================================== -Changelist for version 1.14 - -- tweaks to ComboBox to make it look and work better, and also to give control over the text justification -- buttons and menu items can now be linked to a command in a KeyPressMappingSet, to trigger commands automatically -- change to Buttons - rather than using an ActionListener, buttons now use a special ButtonListener to respond to callbacks. This allows for up/down messages as well as clicks, and provides a pointer to the button that triggered the event. You might have to alter a few of your classes to deal with this - sorry! but it's not too difficult to change and it does make your code neater and more readable. -- Rewrote BubbleComponent to now be a base class for drawing arbitrary graphics inside a speech bubble shape. Created BubbleMessageComponent as a subclass for showing a text message in a bubble (like the old BubbleComponent used to do). -- Sliders now have an optional pop-up bubble that shows you their current value while they're being dragged. This is handy for sliders which don't have a text box. See Slider::setPopupDisplayEnabled() -- Sliders can now have a suffix which they append to the text string that they display, to make it easy to show units without having to write a subclass -- cosmetic improvements to combo-boxes, menus, textboxes, sliders, and a few other bits + pieces -- mouse events now have a click counter to detect triple and quadruple clicks, and the TextEditor uses these to select the current paragraph or entire document -- added methods to the Desktop class to allow "global" MouseListeners to be registered, that will be told about all mouse events to all components -- new classes : MenuBarComponent and MenuBarModel for doing menu bars (obviously). This is a lightweight menu bar component, not yet an OS-specific menubar, which I'll eventually implement on the Mac, but the same model will apply to both. -- A few 64-bit compatibility tweaks, and the MessageCallbackFunction definition (used in MessageManager::callFunctionOnMessageThread()) now returns a void* instead of an int. This shouldn't affect many people. -- new class: FileBasedDocument - writing all the load/save/save-as logic for documents is pretty tedious, so this handy base-class takes care of all that stuff for you, doing all the file dialog boxes and asking whether to overwrite existing files, etc. -- on Windows, you can now build juce as a DLL, and your app can link to the DLL version by simply defining the JUCE_DLL macro before including the juce headers - -============================================================================== -Changelist for version 1.13 - -- tidied up the components directory, recategorising the components that were there and putting them into more appropriate folders -- new class: PreferencesPanel for doing mac-style prefs panels. -- improved the KeyMappingEditorComponent to use a treeview instead of a list, and to just look a bit nicer. -- added parameters to DrawableButton to allow it to show another set of images when used as a toggle button. -- changed DrawableText to use a GlyphArrangement. (Not sure why I didn't do that in the first place) -- new class: ColourGradient for specifying a colour gradient (obviously..) -- DrawablePath now uses a ColourGradient to specify its fill type -- tweaked DrawableButton to make it a bit more flexible -- slider thumb size can now be specified in the lookandfeel class -- sliders now hide the mouse when in velocity-sensitive mode -- completely all-new TabbedComponent class, bearing no resemblence to the old one. This one's much easier to use, has look-and-feel support and looks nicer. I've also split out a TabbedButtonBar class so you can just use the bar on its own, rather than using the TabbedComponent, which manages the whole panel. -- fixed a leak when using modal components -- added a new slider style: LinearBar, which is a left-right bar with the text label over the top -- new class: ProgressBar, and a demo of the ThreadWithProgressWindow class (in jucedemo, widgets page, click the "show a popup menu" and it's under "alert windows") -- more refactoring of the LookAndFeel class, in particular moving colours into the base class so you can create looks with customised colours without needing to override any functions -- added an extra clicked() method to buttons so you can handle right clicks and modifier keys -- added a text colour option to the TextButton -- on Linux, sorted out setting the mouse position and invisible mouse cursors - -============================================================================== -Changelist for version 1.12 - -- fixes to OpenGLComponent to make it work when parent components are moved -- added a flag to allow building of non-GUI apps under linux where UI libraries aren't present -- popup menus can now be positioned to align with a button or other component -- created some static initialiseJuce() functions in juce_Initialisation.h, to make it easy to embed juce in command-line apps or apps that use their own event-loop. -- new class: GroupComponent for drawing a line around a group of components -- new sliders! Completely revamped the Slider class so that it can now do vertical and rotary sliders, as well as allowing user-defined scaling and snapping. -- updated the Mac projects for XCode 2.1 and fixed the GCC4 problems. Apple have just changed the project format for this release, so if you're still on XCode 2.0, then sorry, you'll need to upgrade to build this release. -- a couple of changes to Path to clean up the elliptic-arc and pie-shape drawing methods -- added a Path::addStar() method for drawing star shapes and addBubble() for drawing speech bubble shapes -- new class: ComponentDragger to easily add logic for dragging components around -- new class: ResizableBorderComponent for adding windows-style resizable edges to components -- name change: ResizerComponent is now called ResizableCornerComponent to complement ResizableBorderComponent -- new class: ResizableWindow to make it easy to create top-level windows that are resizable/maximisable, and to make it easy to save/restore their position and state. DialogWindow has also now been changed to use this as its base class. -- renamed method: UndoManager::clear() becomes UndoManager::clearUndoHistory() (just to disambiguate when subclasses are used) -- Component::setInterceptsMouseClicks() can now optionally intercept clicks on child components -- fixed a bug in Array::move -- new set of classes: Drawables - these are used to build up a tree of graphic elements that can be drawn, forming a complex image. So far there are coloured shapes, images and text, but there may be more to add in future. They also have a persistence mechanism so can be saved/loaded and used as a vector graphics format. Although the classes are quite basic at the moment, I might expand these one day to form a way of rendering SVG. -- changes to Buttons - moved all the toggle-button logic into the base class so that all buttons can now have an on/off state and belong to button groups. TextButtons and DrawableButtons use this to draw themselves in an on/off state, and the old ToggleButton class is still there for a tickbox-style toggle button. -- new button type: DrawableButton which takes some Drawables as its image and has a few different styles. This button will ultimately take over from ImageButton and ShapeButton. -- moved isEnabled()/setEnabled() into the Component base class, so that it now applies hierarchically. (previously the different widgets all had their own separate enablement methods) -- fixes and tweaks to the windowing system on Linux to hopefully make it run more happily on Gnome - -============================================================================== -Changelist for version 1.11 - -- fix for some file methods that were failing to identify volume type correctly in OSX10.4 -- rearranged the OpenGL code to move it into the platform-specific folders. -- added openGL support for Linux -- replaced many of the win32 native calls with dual unicode/ansi implementations, so the same code will run on win98 but take advantage of unicode on win2000/XP -- reorganised the String::getHexValue() methods into 32 and 64 bit versions -- new class: SelectedObjectSet - for managing multiply-selected items -- fixed some maths bugs with rendering certain types of gradient brush -- buttons that auto-repeat can now be made to speed up the auto-repeat frequency the longer they're held down -- scrollbars can now have their buttons hidden -- implemented the MD5Checksum class -- new class: PropertySet, which now forms the base class for PropertiesFile -- each Component now has a set of named properties associated with it, which can be inherited from its parent component -- handy new method: DialogWindow::centreAroundComponent() -- finished implementing the Primes class -- finished the RSAKey class, to provide RSA public/private key cryptography -- beefed up the BitArray class, giving it a sign, so it can be used as a large number class, and added some new methods (mostly because they were needed for cryptography) -- implemented the BlowFish class, which is a symmetric-key encryption algorithm -- new layout classes: StretchableLayoutManager and StretchableLayoutResizerBar - these are for creating all kinds of sets of nested components that stretch to fill the available space, with vertical or horizontal divider bars to rescale them. I've added some code to the fonts page of the demo app to demonstrate how to use them -- better makefiles for Linux, generated using premake -- added xinerama support for Linux - -============================================================================== -Changelist for version 1.10 - -- initial rough release of the Linux build! This is only the first release, so there are still a lot of things missing (audio support, file browsers, etc) and it's bound to be a bit buggy, but the demo app works! -- new class: FilenameComponent -- new class: ReadWriteLock for allowing multiple-reader access to a critical section. -- new class: SplashScreen -- new class: LocalisedStrings, which lets you use a translation file in your app for multi-language support -- improved the sample-rate conversion algorithm in ResamplingAudioSource -- some tweaks to the win32 demo projects (rtti wasn't enabled) -- made the image loading code support Exif digital camera files -- some enhancements to TextEditor and ComboBox, to allow a message to be displayed when nothing is yet entered or selected -- fixed a bug in SubregionStream -- changes to make the code GCC 3.4 complient - -============================================================================== -Changelist for version 1.9 - -- OpenGL support with the OpenGLComponent class! -- fixed a bug with Array::addSorted that made list multi-selections go wrong -- added some methods to move array elements around -- added the TimeSliceThread class -- added the FileLogger class - -============================================================================== -Changelist for version 1.8 - -- added some convenience methods to the URL class to download and parse a URL as a string, xml, etc. -- rewrote the TreeView class completely - sorry if you were using the old version, but this one's better, honest! -- TextEditors can now be used for entering passwords with an option to obscure their content -- renamed KeyPressMappingManager to KeyPressMappingSet, and tweaked it slightly -- and a load of bugfixes suggested by users -- updated the i/o streams to use 64-bit read/write positions, (and also the audio reader and writer classes) -- added an option to compile using unicode Win32 calls (turned on in win32_headers.h). This is off by default because although it's better for win2k/XP, it stops apps running on win98. - -============================================================================== -Changelist for version 1.7 - -- new class: MouseHoverDetector -- new key-shortcut classes: KeyPressMappingManager and KeyMappingEditorComponent -- added QuickTime movie support via the QuickTimeMovieComponent class -- mouse-events are now time-stamped with the time the event occurred rather than using the time it was delivered (better for detecting double-clicks, etc)s -- getScreenX() now takes into account windows that are contained in non-juce parent windows (e.g. audio plugins) - -============================================================================== -Changelist for version 1.6 - -- added a MessageManagerLock class for allowing multi-threaded access to UI components -- new audio source classes: PositionableAudioSource, BufferingAudioSource, AudioSourcePlayer, etc to make playback more generic - -============================================================================== -Changelist for version 1.5 - -- added some workarounds to get it to build under the Borland C++ compiler -- added a VCExpress project, that should also (presumably) work in VC7 -- changes to Component::focusGained() and focusLost() to indicate the cause of the focus change - be sure to check your code and update any places you've used these methods! -- changed NativeDesktopWindow::setFullScreen() to restore the last known size when full-screening is turned off -- tweaks to win32 window minimisation because some people had mysterious non-repainting windows when building with certain libraries -- added semi-transparent window support on the mac, and some fixes so that windows with the "appearsOnTaskbar" flag set will appear properly in expose - -============================================================================== -Changelist for version 1.4 - -- made changes to the Mac event handling to allow Juce-based dynamic libraries to work correctly -- cleaned up a lot of warnings under newer MS compilers and got it to build under VC Express -- couple of minor midi bugfixes - -============================================================================== -Changelist for version 1.3 - -- cleaned up various aspects of the code so it'll build under Mingw -- created a DevC++ project to build the library -- added some AudioFormatReader methods to scan for audio levels -- added some more timecode methods to MidiMessage -- the tab/shift-tab key now moves the focus between components -- changes to the DirectSound support to allow easier addressing of the individual devices and pair up matching input/output devices -- better build settings in XCode on the Mac, so it puts the build products in the right folder - -============================================================================== -Changelist for version 1.2 - -- changed various bits of the message-handling code to allow it to work better when used to build DLLs on Windows - -============================================================================== -Changelist for version 1.1 - -- added a StringPairArray class and used it to tidy up some other bits of code -- fixed StringArray::addTokens, which was missing out empty tokens -- added metadata to the audio format readers and writers -- added support for BWAV chunks to WavAudioFormat -- finished some ImageBrush and GradientBrush methods that hadn't been implemented -- added an operator= for the Image class -- tightened up some copy constructors and operator= methods for classes that shouldn't be copied -- added an AudioSubsectionReader class -- added AudioFormatWriter::writeFromAudioReader() and writeFromAudioSource() methods -- added a format type name to AudioFormatReaders and writers -- fixed a small bug with mouse cursors when using modal windows -- added some methods to AudioCDReader to scan for indexes (PC only) -- added FloatElementComparator and IntegerElementComparator classes -- fixed a couple of layout bugettes in AlertWindow -- added the ThreadWithProgressWindow class to make it easy to show a dialog box while a background task completes -- fixed a bug with certain accented characters not displaying correctly on the Mac -- fixed the cursor position sometimes being wrong in TextEditors when undoing/redoing -- added a sample rate parameter to AudioSource::prepareToPlay - -============================================================================== -Changelist for version 1.0 - August 5th 2004 - -- initial release! - -============================================================================== diff --git a/docs/JUCE readme.html b/docs/JUCE readme.html index 067cb8dc99..1a45d95628 100644 --- a/docs/JUCE readme.html +++ b/docs/JUCE readme.html @@ -22,115 +22,85 @@

Introduction - License - Installation - -Building with VC2005 - -Building with VC Express - +Building with Visual Studio - Building with VC6 - -Building with VC7 - Building with XCode - -Building with Code::Blocks - Building on Linux - +Building with Android -

JUCE

Introduction

-

JUCE is an all-encompassing C++ class -library for developing cross-platform applications.

+

JUCE is an all-encompassing C++ class library for developing cross-platform applications and plugins.

+

For lots more help and information, please visit the JUCE website.

+

A complete set of class documentation is available here.

-

A complete doxygen-created API guide is available here -as HTML, or can be downloaded as a precompiled Windows help file from the -downloads page.

- -

For more help and information, please visit the JUCE website.

License

JUCE is released under the Gnu Public License, which means it can be freely copied and distributed, and costs nothing to use in open-source applications.

If you'd like to release a closed-source application that uses JUCE, commercial licenses are available -for a fee - click here for more information on pricing and terms.

+for a fee - click here for more information +on pricing and terms.

Installation

Installing the source code

+

There are a few ways to install a copy of JUCE:

+

The JUCE source code all lives in a folder called, unsurprisingly, juce, which you can unzip and put somewhere on your system.

-

To compile the library, there is a subfolder juce/build that contains projects for different -operating systems and compilers.

- -

Building the demo application

- -

Inside the juce folder is a demo application that shows off a few of Juce's features. -The juce/extras/juce demo/build folder contains projects and workspaces for the various platforms and compilers.

- -

The "amalgamated" version of Juce

- -

One of Juce's features is that it can be linked into your project as a monolithic C++ file, instead of a statically linked -library. This means that you can write a juce application without actually needing to build the -library beforehand, but instead by just adding juce_amalgamated.cpp to the project, and including -juce_amalagamated.h instead of juce.h. The demo apps are designed using this approach, because it means -there's less setting-up required for a new user to do before getting stuck-in, but some compilers -and debuggers can struggle with the huge files involved, so you may prefer to build -your project in the traditional way, using it as a separate library.

-

A variation on this approach is to include juce_amalgamated_template.cpp in your app, which has the -same effect as the normal amalgamated file, but which actually pulls in all the juce cpp files via #include statements -rather than by pre-munging them into one file. This makes debugging a lot easier

- -

Creating a new application with JUCE

- -

Using the new Jucer

-

NOTE! By far the easiest way to create a new cross-platform Juce app (or audio plugin) is to use the new and -not-yet-finished Jucer to generate all the project files for you... This replacement for the old Jucer is still work-in-progress and -at the "experimental" stage, but it has enough project management features to already be extemely useful. To use it, you'll need to build -and run it - that's pretty easy to do: just open an appropriate project from the juce/extras/Jucer (experimental)/Builds folder, -and compile/run it. The new Jucer has a wizard that will create a new Juce project for you, sorting out all the messy paths and project set-up, -and will spit out a collection of project files for the various IDEs that you can simply open and build.

-

When complete, the new Jucer will be a big part of future Juce versions, and is already used to auto-generate the makefiles and project -files for all the projects in the juce/extras folder.

- -

However, if you want to create a Juce project manually (i.e. the hard way), here are some instructions:

- -

Compiling with Microsoft Visual Studio

- -

The quickest way to get started is to try building the demo application - there's a Visual Studio -soluion in juce/extras/juce demo/build/win32_vc8/jucedemo.sln.

-

This should build and run with no extra set-up needed in all versions of Visual Studio from 2005 onwards, -including the free version of Visual Express 2009.

-

One thing to check if you're unfamiliar with Visual Studio is that the jucedemo -project needs to be selected as your "startup" project (right-click on the -jucedemo project in the solution explorer for this option). Also, the active configuration should be -set to "Debug" or "Release", (the first time you load a project, VS selects one of the configurations by default -and usually picks "Debug DLL", for reasons best known to itself).

- -

To create your own application that links to Juce:

+

Building the demo applications

+ +

In the juce/extras folder, there are a few demo apps to get you started and to show off JUCE's features. +Each one contains a folder called Builds, containing various projects for different compilers and platforms. +These should all work straight out-of-the-box if you load them into the appropriate development environment. Some of them +(e.g. the audio plugin demo) may require 3rd party libraries or headers to have been installed, but I've made sure that any +include statements that may not be present have comments with a detailed explanation of what's going on, so if you hit a compile +error, just have a look at the code it's pointing to and everything should become clear.

+ +

Creating a new application with the Introjucer

+ +

By far the easiest way to create a new cross-platform JUCE app (or audio plugin) is to let the Introjucer +do the hard work of creating all your projects with the correct settings.

+

You can either build the Introjucer yourself from the source (in juce/extras/Introjucer), or download +a pre-built binary from SourceForge. +

If you run it and select the 'new project' menu item, it'll walk you through the stages in setting up an app or +plugin project, and will automatically spit out a collection of project files for all the different platforms and compilers +that you need.

+ +

Requirements for building on different platforms

+ +

Microsoft Visual Studio 2005 or later

+ +

JUCE projects should build and run with no extra set-up needed in all versions of Visual Studio from 2005 onwards.

+ +

By far the easiest way to create a new project is by letting the Introjucer do all the hard work, as explained above. But +if you really insist on creating one manually, here are a few tips:

    -
  1. Either make a copy of the example project in juce/projects and rename/customise -it, or create a new application project as an 'empty' WIN32 application - avoid saying yes to -MFC or any of the other rubbish that Visual Studio might offer to pollute your application with.
  2. -
  3. Include the header file juce.h in all your source files (it's best to -put this in a precompiled header).
  4. -
  5. Ensure that the linker's search path for libraries includes the the juce/bin directory. -This path can be set globally, or can be added to your project's linker settings.
  6. -
  7. Choose to link to the "Multithreaded" or "Debug Multithreaded" run-time libraries, depending on -whether you're doing a debug or release build. On VC6, this is set in the Project Settings / C/C++ / Code -Generation options panel. In Visual Studio, it's in the project properties.
  8. +
  9. Create your new application project as an 'empty' WIN32 application - avoid saying yes to +MFC or any of the other rubbish that Visual Studio might offer you.
  10. Make sure that your project has exception handling and run-time type information (RTTI) turned ON.
  11. -
  12. Have a look at the 'hello world' projects, demo projects, or the API documentation about the +
  13. Have a look at the example projects, demo projects, or the API documentation about the JUCEApplication class to find out how to create the application launch code.
-

Alternatively, you can use the amalgamated form of Juce (see note above). To do this, -all need to do is to add juce_amalagamated.cpp to your project, and include -juce_amalagamated.h instead of juce.h. This pulls the entire library into -your project without needing to link to it separately, so you can skip the steps above that involve -setting up the link paths, etc. Most of the demo apps are written using the amalgamated version, -so refer to these for an example of how to do this.

- -

Compiling with Microsoft Visual Studio 6

+

Microsoft Visual Studio 6

-

To compile the JUCE .lib files from the source code:

+

JUCE can still be compiled with VC6, although support for this will be dropped at some point in the future... +but here are some tips for getting it going:

  1. Install the latest Platform SDK from Microsoft.
  2. @@ -148,10 +118,6 @@ C:\Program Files\Microsoft Platform SDK\lib C:\mycode\juce\bin ... -
  3. Open the juce.dsp project file in juce/build/win32/vc6
  4. -
  5. There are several configurations: debug, release, debug-unicode, and release-unicode. -You can build all or some of these, and the resultant .lib files should end up in the -"juce/bin" folder.

Note that there's a rather lame bug in VC6 that causes an internal compiler error if you include @@ -159,45 +125,16 @@ filenames that are too long. This can get triggered if you put the juce folder i directory (such as your user home directory). Unfortunately I think the only workaround for this is to move the source tree to a shallower directory.

-

For info on how to create an application that uses Juce, see the VC2005 notes above.

- -

Compiling with Microsoft Visual Studio 7

- -

For VC7, you can import the VC6 projects and this should work ok. It's also possible to -tweak the version number in the VC8 projects so that they can be opened in VC7, but that's a -less reliable method!

+

XCode on OSX

-

Compiling with XCode on MacOSX

+

Use XCode 3 or later. You might want to tick the option to install the 10.4 SDK if you want to build binaries +that are backward-compatible with 10.4 and PPCs. If you're going to build for iOS, you'll obviously need the iOS version of XCode.

-

To compile the JUCE binaries from the source code:

+

The easiest way to create a new application is by using the Intojucer, but here are a few tips if you're mad enough +to want to set one up manually:

-
    -
  1. Open the Juce.xcodeproj file in juce/build/macosx
  2. -
  3. This project has "debug" and "release" configurations, and the library files it creates -are libjuce.a (release) and libjucedebug.a (debug), which will appear -in the juce/bin directory.
  4. -
- -

Then, to create and build an application:

- -
    -
  1. Either make a copy of the example project in juce/extras/example projects and rename/customise it, or -create a new "Carbon Application" project.
  2. -
  3. Include the header file juce.h in all your source files.
  4. -
  5. Get rid of any main() functions that XCode might have generated for you, and instead use the -JUCEApplication class as your application launcher - see the API documentation for this -class for more details, or have a look at the example projects, or demos.
  6. -
  7. Drag-and-drop the juce.xcodeproj file into the project's "External Frameworks and Libraries" -list.
  8. -
  9. Expand this item in the treeview, and inside there'll be an item "libjuce.a" or "libjucedebug.a" - drag-and-drop -this into the "link binary with libraries" phase inside the xcode target. When you select either a debug -or release juce build these entries will (usually) update themselves to show the correct debug or release library -name. If you want your project to automatically rebuild Juce when you make changes to a juce file, you can -also add Juce to your target's "Direct Dependency" list (show information for the target, and this is on the -"general" tab).
    Alternative ways of linking to juce would be to add the libjuce.a or libjucedebug.a library to -your "External Frameworks and Libraries" list, or to add switch to the linker's command-line of either "-ljuce" -or "-ljucedebug".
  10. -
  11. You'll also need to add some or all of the following OSX frameworks to your "External Frameworks and Libraries" list, +
      +
    • You'll need to add some or all of the following OSX frameworks to your "External Frameworks and Libraries" list, depending on what features your application uses:
      Cocoa.framework
       Carbon.framework
      @@ -219,70 +156,57 @@ CoreFoundation.framework
      In future there may be other frameworks that you'll need to link with to support new JUCE features. (It should be pretty obvious from the link-time error when one of these is missing).
    • -
- -

If all this seems too complicated, you can make things slightly easier by using the amalgamated form of Juce -(see earlier note). To do this, all you need to do is to add juce_amalagamated.cpp to your project, and include -juce_amalagamated.h instead of juce.h. This pulls the entire library into your project without needing -to link to it separately, so you can skip the steps above that involve compiling the library, setting up the link paths, etc. -Most of the demo apps are written using the amalgamated version, so have a look through their source code for examples of how -to do this.

- -

Creating a JUCE application with Code::Blocks and MinGW

-
    -
  1. open the Juce project: juce/build/win32/codeblocks/juce.cbp
  2. -
  3. open the demo app project: juce/extras/juce demo/build/win32_codeblocks/JuceDemo.cbp
  4. -
  5. Build first the "Juce Library" project, and then the "Juce Demo App" project. If your -build environment is set up correctly, these should just work and the demo app should run. -
- -

To create your own application:

-
    -
  1. Create a new project, as a "win32 GUI".
  2. -
  3. Either copy the example main.cpp from the Juce example project, or write your own based -around the JUCEApplication class
  4. -
  5. In your project's build settings, you'll need to make sure the linker uses the following libraries: -
    libjuce.a or libjucedebug.a (these should be created in the juce/bin/codeblocks directory)
    -libshell32.a
    -libole32.a
    -libvfw32.a
    -libwinmm.a
    -libwininet.a
    -libdsound.a
    -libwsock32.a
    -libopengl32.a
    -libglu32.a
    -libuuid.a
    -librpcrt4.a (these are all in the MinGW libraries folder)
    -
  6. -
- -

Creating a JUCE application on Linux with GCC

- -
    -
  1. Most linux distros should come with the tools you need, although you might want to get hold of -premake, which is used to automatically generate the -juce makefile. (This isn't necessary if you're just going to use the makefile that's provided).
  2. -
  3. Get a command prompt and go into /juce/build/linux
  4. -
  5. To build the debug version, use "make CONFIG=Debug", or use "make CONFIG=Release" -to build the release version. You can also use "make clean" to delete the intermediate -files.
  6. -
- -

Then, to create and build an application:

-
    -
  1. Building the library will have produced the library files /juce/bin/libjuce.a and -/juce/bin/libjuce_debug.a. You'll need to link to one of these in your app, and you'll -also need to link to these libraries: -
    freetype
    -pthread
    -X11
    -If you've set the JUCE_USE_XINERAMA flag in juce_Config.h, you'll also need to link to the -xinerama library. -And you'll need the GL and GLU libraries if you've enabled -JUCE_OPENGL -
  2. -
+
  • If you need to link to the JUCE static library rather than using the amalgamated files, you'll need to drag-and-drop +the juce.xcodeproj file into your project's "External Frameworks and Libraries" list. Then, expand this +item in the treeview, and inside there'll be an item "libjuce.a" or "libjucedebug.a" - drag-and-drop +this into the "link binary with libraries" phase inside the xcode target. When you select either a debug +or release juce build these entries will (usually) update themselves to show the correct debug or release library +name. If you want your project to automatically rebuild JUCE when you make changes to a JUCE file, you can +also add JUCE to your target's "Direct Dependency" list (show information for the target, and this is on the +"general" tab).
    Alternative ways of linking to JUCE would be to add the libjuce.a or libjucedebug.a library to +your "External Frameworks and Libraries" list, or to add switch to the linker's command-line of either "-ljuce" +or "-ljucedebug".
  • + + +

    Linux with GCC

    + +

    Most linux distros should come with the tools you need. You may need to install the development packages of +freetype, X11 and pthreads if they're not already available.

    +

    If you've enabled the JUCE_USE_XINERAMA option, then you'll also need to install the Xinerama package. +And you'll need the GL and GLU libraries if you've enabled JUCE_OPENGL

    +

    The makefiles that are generated by the Introjucer can be run by "make CONFIG=Debug", +or "make CONFIG=Release". You can also use "make clean" to delete the +intermediate files.

    + +

    Android

    + +

    ***

    diff --git a/extras/JuceDemo/Builds/Android/AndroidManifest.xml b/extras/JuceDemo/Builds/Android/AndroidManifest.xml new file mode 100644 index 0000000000..5d647b784b --- /dev/null +++ b/extras/JuceDemo/Builds/Android/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/extras/JuceDemo/Builds/Android/build.properties b/extras/JuceDemo/Builds/Android/build.properties new file mode 100644 index 0000000000..d08980348c --- /dev/null +++ b/extras/JuceDemo/Builds/Android/build.properties @@ -0,0 +1 @@ +# This file is used to override default values used by the Ant build system. diff --git a/extras/JuceDemo/Builds/Android/build.xml b/extras/JuceDemo/Builds/Android/build.xml new file mode 100644 index 0000000000..bca554ffb9 --- /dev/null +++ b/extras/JuceDemo/Builds/Android/build.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/JuceDemo/Builds/Android/default.properties b/extras/JuceDemo/Builds/Android/default.properties new file mode 100644 index 0000000000..1444d74911 --- /dev/null +++ b/extras/JuceDemo/Builds/Android/default.properties @@ -0,0 +1,4 @@ +# This file is used to override default values used by the Ant build system. +# It is automatically generated - DO NOT EDIT IT or your changes will be lost!. + +target=android-9 diff --git a/extras/JuceDemo/Builds/Android/jni/Android.mk b/extras/JuceDemo/Builds/Android/jni/Android.mk new file mode 100644 index 0000000000..bda2d33078 --- /dev/null +++ b/extras/JuceDemo/Builds/Android/jni/Android.mk @@ -0,0 +1,44 @@ +# Automatically generated makefile, created by the Jucer +# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_CPP_EXTENSION := cpp +LOCAL_MODULE := juce_jni +LOCAL_SRC_FILES := \ + ../../../Source/ApplicationStartup.cpp\ + ../../../Source/MainDemoWindow.cpp\ + ../../../Source/demos/AudioDemoLatencyPage.cpp\ + ../../../Source/demos/AudioDemoPlaybackPage.cpp\ + ../../../Source/demos/AudioDemoRecordPage.cpp\ + ../../../Source/demos/AudioDemoSetupPage.cpp\ + ../../../Source/demos/AudioDemoSynthPage.cpp\ + ../../../Source/demos/AudioDemoTabComponent.cpp\ + ../../../Source/demos/CameraDemo.cpp\ + ../../../Source/demos/CodeEditorDemo.cpp\ + ../../../Source/demos/DragAndDropDemo.cpp\ + ../../../Source/demos/FontsAndTextDemo.cpp\ + ../../../Source/demos/InterprocessCommsDemo.cpp\ + ../../../Source/demos/OpenGLDemo.cpp\ + ../../../Source/demos/QuickTimeDemo.cpp\ + ../../../Source/demos/RenderingTestComponent.cpp\ + ../../../Source/demos/TableDemo.cpp\ + ../../../Source/demos/ThreadingDemo.cpp\ + ../../../Source/demos/TreeViewDemo.cpp\ + ../../../Source/demos/WebBrowserDemo.cpp\ + ../../../Source/demos/WidgetsDemo.cpp\ + ../../../JuceLibraryCode/BinaryData.cpp\ + ../../../JuceLibraryCode/JuceLibraryCode1.cpp\ + ../../../JuceLibraryCode/JuceLibraryCode2.cpp\ + ../../../JuceLibraryCode/JuceLibraryCode3.cpp\ + ../../../JuceLibraryCode/JuceLibraryCode4.cpp\ + +ifeq ($(CONFIG),Debug) + LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -O0 -D "JUCE_ANDROID=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" +else + LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -Os -D "JUCE_ANDROID=1" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" +endif + +include $(BUILD_SHARED_LIBRARY) diff --git a/extras/JuceDemo/Builds/Android/jni/Application.mk b/extras/JuceDemo/Builds/Android/jni/Application.mk new file mode 100644 index 0000000000..29d8ea0bbb --- /dev/null +++ b/extras/JuceDemo/Builds/Android/jni/Application.mk @@ -0,0 +1,5 @@ +# Automatically generated makefile, created by the Jucer +# Don't edit this file! Your changes will be overwritten when you re-save the Jucer project! + +APP_STL := gnustl_static +APP_CPPFLAGS += -fsigned-char -fexceptions -frtti diff --git a/extras/JuceDemo/Builds/Android/local.properties b/extras/JuceDemo/Builds/Android/local.properties new file mode 100644 index 0000000000..0f2a997c4e --- /dev/null +++ b/extras/JuceDemo/Builds/Android/local.properties @@ -0,0 +1,6 @@ +# This file is used to override default values used by the Ant build system. +# It is automatically generated by the Jucer - DO NOT EDIT IT or your changes will be lost!. + +sdk.dir=${user.home}/SDKs/android-sdk-mac_86 +ndk.dir=${user.home}/SDKs/android-ndk-r5 + diff --git a/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..97acb16b4e83f63e4ef15d12db9a04c8f91dfe99 GIT binary patch literal 7561 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 literal 0 HcmV?d00001 diff --git a/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7841a79ea09644bfc099b9e467a43d3a9a0984a4 GIT binary patch literal 4097 zcmV+c5dQCpP)>Mf&itF(+MP#!JQV)Tt35pjfU=2s6M-@& z3EluAK>V^P$&;@-95^yu1omo+sePDmnSLIby_K+R&XVvz08@(}_&2bxZY8P`Dd zIWXmPh}0lMy~J9ed0wKv#rDovlFKb~+|ceFnPPt++zFk0G6XCj3U* zkb^`E%)S=2y$AJ&pQF0k!AXM>$ZPIIECLQbiE8>h{vDqHXBZ3?@0rO25+an*%n=U=~DaFnICTp6OvHO z!L+kc^=nZNJc#<;U645phR`-H1!~`$h_lxsY8p`MUxDrGAshiA!7#uKY17*MGHT27 zh~?KKk`gkzNuE$GYX)=6=H{gLrvb4YyrYKNqY;p3n@`?0t7i4bPBiYAwYnuDLQ*d= z_gYlXbo_g7hu5D0I|9-eRj8DZ9ze`qj#zXN{;z)oBfY_#iXj5Rg<;gI8xSA54w2sm zu0v{WQq*S(OB;%zzNh+f?TqG&BYa{!0s;sF$rbhWi*G)`|MtQ)Ep;MpYI{H7M*OGu zpziw;6ow&Wk1qnR1o1k=Nf)Dj`+X=m8t}N{G9cXt#1M<-z`&aj3Xz%1j^D+eCxQ#mCH_vtg`2& z!145=b*H1A_@%yUB0$oF{)5oh32G8K$@8G84f0(&hoGS36FNS{$)`q7y}enkflv}{ z+V9{VOTYl4rk!XybqbeHJ)>T{^Kc;`-Hup#E)>0qK?#A%XCXZZasslx2ay!w%$3mn zJQxzJFyKP5$dohcII&S(SW^{m1LEj}`VQcC9vQH!{$x{p<>hC^Kbl;eGH?T+%7>vh z5GS4wem!(-1>b$QV^*%_fmrYls5f4KQgM8(DIYwLYwtkJiGo#&s#*!5rBJ^dK^o}8 zE_%saN3rw8p?o`#NBe`S)PMwRtZ4Oxjm9O-^I{=<1uBSMO{YQI#gKjldDSZ9zyAUn zXFwsVL5#=1bG4>Si*XaG?}1Z5eDdpv)&GL(l=u&C#sAJ%@xO5s{tv!~id_cbTI%OU zJq$GCd~ z;v+X{dw25hHY?=?q0)Xg{*nWsDDrbZMJ_)d|I1h7-+2vc^P`aM2ch8Lo2bp3pz*_q z8cA!5dHh)kYc^m9c=eA!;UOS;PEwxSJTqKF%!GU%=3ImShYhGl?* zLtJqSa@9ZKKlFXn#z(ZI%^*8w3DdeIO>V}AQ~OD zVO2!!-h$fs0{r1##3k1uKYKT7)f)Vt+zbbIfgJ^3*J2`;L@8gJl`IwWznY zKrD9jK!AWk8kNm~8OKbS)K{6)8>$m^fd*tH0W+ceL{&so%ebYbm6(AV8US&OCP^9) zjzaGN{CjS~`^Lu*(`F$*e?K(MfT4bYf{6q#r`zqpw>QRH+Ds z5}0v>Es4g6*B0|hbV4&LO~_10X@{dB8%yZO5~_yWo?}0xJPcD`y`A{?-i$cqBIKvO z3E>#>_$8<(AHcu!6X51_Q8(G4JSgNLW`iLJMJ+QdW!Z_}(SQJ?@;t*ZJOd%Lw;EB% zq;&;3=?5x3f3O>rLd-oG71Tju!Ra6^aEp^)523ZJ6bLXRQh1(8P!Ci_A&G(Tl~AbQ zFIbxWL}dev#`M;OaQTgh<~G!$|B3qR)6m$0diHn7D{p~w*T5q`M(x@HmZi0JbZO{} zT$Run9f7aF(>^0$G!H01Wj)U;BBCq>CG|q&gqwRd$wS7o6AW{*?_kofWbFN$Ty>}|o zGJQ=zn59fkWmL{ZBn9{xsICjL@mS#~4ZOMmvHEj}d8eUX`V; zVCl%EwysCL{sLnD>Bx`V0MP{gQ@?`O*6Y&543Ap2Q$U=&3cTG=%0kH^pY;nPMyLpm z0#qdd&np)5-TB1f(qM6Rs3ro#Z@~1~P*M;MwBqRk3p<9m_%q1MZ$fR~i2toMI%bC} zW4hAcvjd}Aw8DTwZCj7pz5%h|OytU|VbxmHi;tpSTd)1jSJ1KmarU`z;9fApc>M)> zvwmN9&PfwA{AB_@;DYD8IpXe1znxoAJEsbIUqhaF4&I69!J8X&&}y2ESa2%h!fU}W z@$bJ)XJFIPd10)UA~6^|G{%oaK!kwEvxxbpAwF^g@}Iws+VeaVa){~Ep#P7MJq(d3 z`R)R{2L0WhSIiPLHB~^hK8=6x z&5#*9c32EYjvaM^T%caxhHzLo z0=Z3txdR=C68jhQ<>$(VC}a-6_OBtL_2A_oaxv=H+wgyNCz!^>G2IFsrCJ?_h*GEr z?nD)fh*Qsiy}tz+*8Rkg!@j-Fp=SmPdnyR{l~Je&Wc*U0|A`*;V*j4J!Vsg8cH{um zEJD3K1^gJmA01PF!zqVdUvVbJsJ2>xR~MR^M$-mJ-+l5|Ig^@seIawVr1z0EQ{ z0buySuKZtjzB1BF&K-@Qh6Q!!qaOMZx>K1EsSW-Jbxo6N>;dvQ#QEzG)=nsN<8>F<^!PyUU5AQKfIk@ED+GAo z)zlY3H=zUheCH4Msz={?y5B)5y`!Ang1q?C;5baU`|Xx=S>fzNOli_x+p&i7b?7{Q z9rDsuaNze~SnPYI&;98h|FL~TBYS|}fIzVfV5}Fa;1WQ%Bkwx#oE4t$<>w^kRKrj^ zV&R7or8-pmCT&VbbI?)|aq0C4Ya3$9Le!>>P&i6q=((T-;;JtqSDggycY|{1U*E(1 zPvzI&)0uu8R3~r{7zzk59)U^{fC_IME)6#Jm6CHUuO&J+0lixgAN~|XkAof0>8WxI zD9?r37UWgeB0BDanpW^yVA}==g+}N3L8+W*MBeZto^C_$i-@JG5Yx{_?b@!l1x0Wc zpnPx~pCl!934NBQxT_LhFtdrMC4W2{XbyYq&N5T`#uvQk6ab+D3E5S<7N49JeSDv0FosuyqGlbfB2m zCBV2lajrI8!-Tw#b0Ev!9ckzJ&FP)@A1pop!eC)L+FUw=&mk(p=6fYjCSjp>hU%l|r zmgk2H?cnzThk!1$!;YZM=6xSARn9YkC{PX5YZBCftezXUTFy<$IZKmb=Bx&@sd|bX ziKHykj+;^hxSg!$=Z8w(aBrc|(c^W$JmBs9^N_!DXQtE%{s8(Y=`hd(44|`Zi3t+U zdpTw;zfKS)I5z`o12Q#00%W`{Y*bAT8Hu>?ZQGEhKnaCVMbCHBN;-#JmFdcR!{BDn zNplb_?S8bmWEeG>3DfucIjOHa?2ZA+fJ_R#^&Li=T=~qYeAKPb^^1!xSuzA=OYoTu z{yynL?)OWe@?IkVY@^M~4!)P)ofundRT3zm&7|;tfLDU}prdSBCP92*RQiyF>L;qRu00000NkvXXu0mjfnbPnI literal 0 HcmV?d00001 diff --git a/extras/JuceDemo/Builds/Android/res/values/strings.xml b/extras/JuceDemo/Builds/Android/res/values/strings.xml new file mode 100644 index 0000000000..31b49805aa --- /dev/null +++ b/extras/JuceDemo/Builds/Android/res/values/strings.xml @@ -0,0 +1,5 @@ + + + + Juce Demo + diff --git a/extras/JuceDemo/Juce Demo.jucer b/extras/JuceDemo/Juce Demo.jucer index 4d30164408..94cbedb865 100644 --- a/extras/JuceDemo/Juce Demo.jucer +++ b/extras/JuceDemo/Juce Demo.jucer @@ -22,7 +22,7 @@ diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 011e59e1c3..b78838377c 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -8993,32 +8993,21 @@ BEGIN_JUCE_NAMESPACE namespace SocketHelpers { - #if JUCE_WINDOWS - class WinSocketStarter : public DeletedAtShutdown + void initSockets() { - public: - WinSocketStarter() + #if JUCE_WINDOWS + static bool socketsStarted = false; + + if (! socketsStarted) { + socketsStarted = true; + WSADATA wsaData; const WORD wVersionRequested = MAKEWORD (1, 1); WSAStartup (wVersionRequested, &wsaData); } - - ~WinSocketStarter() - { - WSACleanup(); - clearSingletonInstance(); - } - - juce_DeclareSingleton (WinSocketStarter, false); - }; - - juce_ImplementSingleton (WinSocketStarter); - - void initSockets() { WinSocketStarter::getInstance(); } - #else - void initSockets() {} - #endif + #endif + } bool resetSocketOptions (const int handle, const bool isDatagram, const bool allowBroadcast) throw() { diff --git a/src/io/network/juce_Socket.cpp b/src/io/network/juce_Socket.cpp index a910e1935f..edc4c0a4ef 100644 --- a/src/io/network/juce_Socket.cpp +++ b/src/io/network/juce_Socket.cpp @@ -60,8 +60,6 @@ BEGIN_JUCE_NAMESPACE #include "juce_Socket.h" #include "../../threads/juce_ScopedLock.h" #include "../../threads/juce_Thread.h" -#include "../../utilities/juce_DeletedAtShutdown.h" -#include "../../core/juce_Singleton.h" #if JUCE_WINDOWS typedef int juce_socklen_t; @@ -72,32 +70,21 @@ BEGIN_JUCE_NAMESPACE //============================================================================== namespace SocketHelpers { - #if JUCE_WINDOWS - class WinSocketStarter : public DeletedAtShutdown + void initSockets() { - public: - WinSocketStarter() + #if JUCE_WINDOWS + static bool socketsStarted = false; + + if (! socketsStarted) { + socketsStarted = true; + WSADATA wsaData; const WORD wVersionRequested = MAKEWORD (1, 1); WSAStartup (wVersionRequested, &wsaData); } - - ~WinSocketStarter() - { - WSACleanup(); - clearSingletonInstance(); - } - - juce_DeclareSingleton (WinSocketStarter, false); - }; - - juce_ImplementSingleton (WinSocketStarter); - - void initSockets() { WinSocketStarter::getInstance(); } - #else - void initSockets() {} - #endif + #endif + } bool resetSocketOptions (const int handle, const bool isDatagram, const bool allowBroadcast) throw() {