| @@ -176,8 +176,6 @@ namespace MarkChunk | |||
| for (int i = 0; i < numCues; ++i) | |||
| { | |||
| const String prefixCue ("Cue" + String (i)); | |||
| const String prefixLabel ("CueLabel" + String (i)); | |||
| const int identifier = idOffset + values.getValue (prefixCue + "Identifier", "1").getIntValue(); | |||
| #if JUCE_DEBUG | |||
| @@ -186,8 +184,7 @@ namespace MarkChunk | |||
| #endif | |||
| const int offset = values.getValue (prefixCue + "Offset", "0").getIntValue(); | |||
| String label (prefixLabel); | |||
| String label ("CueLabel" + String (i)); | |||
| for (int labelIndex = 0; labelIndex < numCueLabels; ++labelIndex) | |||
| { | |||
| @@ -250,18 +250,18 @@ class OggWriter : public AudioFormatWriter | |||
| public: | |||
| //============================================================================== | |||
| OggWriter (OutputStream* const out, | |||
| const double sampleRate, | |||
| const int numChannels, | |||
| const int bitsPerSample, | |||
| const double sampleRate_, | |||
| const int numChannels_, | |||
| const int bitsPerSample_, | |||
| const int qualityIndex) | |||
| : AudioFormatWriter (out, TRANS (oggFormatName), sampleRate, numChannels, bitsPerSample), | |||
| : AudioFormatWriter (out, TRANS (oggFormatName), sampleRate_, numChannels_, bitsPerSample_), | |||
| ok (false) | |||
| { | |||
| using namespace OggVorbisNamespace; | |||
| vorbis_info_init (&vi); | |||
| if (vorbis_encode_init_vbr (&vi, numChannels, (int) sampleRate, | |||
| if (vorbis_encode_init_vbr (&vi, numChannels_, (int) sampleRate_, | |||
| jlimit (0.0f, 1.0f, qualityIndex * 0.1f)) == 0) | |||
| { | |||
| vorbis_comment_init (&vc); | |||
| @@ -78,12 +78,12 @@ void ReverbAudioSource::setParameters (const Reverb::Parameters& newParams) | |||
| reverb.setParameters (newParams); | |||
| } | |||
| void ReverbAudioSource::setBypassed (bool isBypassed) noexcept | |||
| void ReverbAudioSource::setBypassed (bool b) noexcept | |||
| { | |||
| if (bypass != isBypassed) | |||
| if (bypass != b) | |||
| { | |||
| const ScopedLock sl (lock); | |||
| bypass = isBypassed; | |||
| bypass = b; | |||
| reverb.reset(); | |||
| } | |||
| } | |||
| @@ -775,11 +775,11 @@ void AudioDeviceManager::addMidiInputCallback (const String& name, | |||
| } | |||
| } | |||
| void AudioDeviceManager::removeMidiInputCallback (const String& name, MidiInputCallback* callback) | |||
| void AudioDeviceManager::removeMidiInputCallback (const String& name, MidiInputCallback* callbackToRemove) | |||
| { | |||
| for (int i = midiCallbacks.size(); --i >= 0;) | |||
| { | |||
| if (midiCallbackDevices[i] == name && midiCallbacks.getUnchecked(i) == callback) | |||
| if (midiCallbackDevices[i] == name && midiCallbacks.getUnchecked(i) == callbackToRemove) | |||
| { | |||
| const ScopedLock sl (midiCallbackLock); | |||
| midiCallbacks.remove (i); | |||
| @@ -235,9 +235,9 @@ void Synthesiser::noteOn (const int midiChannel, | |||
| { | |||
| // If hitting a note that's still ringing, stop it first (it could be | |||
| // still playing because of the sustain or sostenuto pedal). | |||
| for (int i = voices.size(); --i >= 0;) | |||
| for (int j = voices.size(); --j >= 0;) | |||
| { | |||
| SynthesiserVoice* const voice = voices.getUnchecked (i); | |||
| SynthesiserVoice* const voice = voices.getUnchecked (j); | |||
| if (voice->getCurrentlyPlayingNote() == midiNoteNumber | |||
| && voice->isPlayingChannel (midiChannel)) | |||
| @@ -315,9 +315,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| const ElementType* e = data.elements.getData(); | |||
| const ElementType* const end = e + numUsed; | |||
| const ElementType* const end_ = e + numUsed; | |||
| for (; e != end; ++e) | |||
| for (; e != end_; ++e) | |||
| if (elementToLookFor == *e) | |||
| return static_cast <int> (e - data.elements.getData()); | |||
| @@ -333,9 +333,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| const ElementType* e = data.elements.getData(); | |||
| const ElementType* const end = e + numUsed; | |||
| const ElementType* const end_ = e + numUsed; | |||
| for (; e != end; ++e) | |||
| for (; e != end_; ++e) | |||
| if (elementToLookFor == *e) | |||
| return true; | |||
| @@ -668,11 +668,11 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| int start = 0; | |||
| int end = numUsed; | |||
| int end_ = numUsed; | |||
| for (;;) | |||
| { | |||
| if (start >= end) | |||
| if (start >= end_) | |||
| { | |||
| return -1; | |||
| } | |||
| @@ -682,14 +682,14 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const int halfway = (start + end) >> 1; | |||
| const int halfway = (start + end_) >> 1; | |||
| if (halfway == start) | |||
| return -1; | |||
| else if (comparator.compareElements (elementToLookFor, data.elements [halfway]) >= 0) | |||
| start = halfway; | |||
| else | |||
| end = halfway; | |||
| end_ = halfway; | |||
| } | |||
| } | |||
| } | |||
| @@ -108,7 +108,7 @@ public: | |||
| will be the "upperLimit" parameter that is passed to your generateHash() function. The number | |||
| of hash slots will grow automatically if necessary, or it can be remapped manually using remapTable(). | |||
| */ | |||
| HashMap (const int numberOfSlots = defaultHashTableSize) | |||
| explicit HashMap (const int numberOfSlots = defaultHashTableSize) | |||
| : totalNumItems (0) | |||
| { | |||
| slots.insertMultiple (0, nullptr, numberOfSlots); | |||
| @@ -185,9 +185,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| ObjectClass* const* e = data.elements.getData(); | |||
| ObjectClass* const* const end = e + numUsed; | |||
| ObjectClass* const* const end_ = e + numUsed; | |||
| for (; e != end; ++e) | |||
| for (; e != end_; ++e) | |||
| if (objectToLookFor == *e) | |||
| return static_cast <int> (e - data.elements.getData()); | |||
| @@ -203,9 +203,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| ObjectClass* const* e = data.elements.getData(); | |||
| ObjectClass* const* const end = e + numUsed; | |||
| ObjectClass* const* const end_ = e + numUsed; | |||
| for (; e != end; ++e) | |||
| for (; e != end_; ++e) | |||
| if (objectToLookFor == *e) | |||
| return true; | |||
| @@ -463,11 +463,11 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| int start = 0; | |||
| int end = numUsed; | |||
| int end_ = numUsed; | |||
| for (;;) | |||
| { | |||
| if (start >= end) | |||
| if (start >= end_) | |||
| { | |||
| return -1; | |||
| } | |||
| @@ -477,14 +477,14 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const int halfway = (start + end) >> 1; | |||
| const int halfway = (start + end_) >> 1; | |||
| if (halfway == start) | |||
| return -1; | |||
| else if (comparator.compareElements (objectToLookFor, data.elements [halfway]) >= 0) | |||
| start = halfway; | |||
| else | |||
| end = halfway; | |||
| end_ = halfway; | |||
| } | |||
| } | |||
| } | |||
| @@ -198,9 +198,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| ObjectClass** e = data.elements.getData(); | |||
| ObjectClass** const end = e + numUsed; | |||
| ObjectClass** const end_ = e + numUsed; | |||
| while (e != end) | |||
| while (e != end_) | |||
| { | |||
| if (objectToLookFor == *e) | |||
| return static_cast <int> (e - data.elements.getData()); | |||
| @@ -220,9 +220,9 @@ public: | |||
| { | |||
| const ScopedLockType lock (getLock()); | |||
| ObjectClass** e = data.elements.getData(); | |||
| ObjectClass** const end = e + numUsed; | |||
| ObjectClass** const end_ = e + numUsed; | |||
| while (e != end) | |||
| while (e != end_) | |||
| { | |||
| if (objectToLookFor == *e) | |||
| return true; | |||
| @@ -529,12 +529,12 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| const int start = jlimit (0, numUsed, startIndex); | |||
| const int end = jlimit (0, numUsed, startIndex + numberToRemove); | |||
| const int end_ = jlimit (0, numUsed, startIndex + numberToRemove); | |||
| if (end > start) | |||
| if (end_ > start) | |||
| { | |||
| int i; | |||
| for (i = start; i < end; ++i) | |||
| for (i = start; i < end_; ++i) | |||
| { | |||
| if (data.elements[i] != nullptr) | |||
| { | |||
| @@ -543,9 +543,9 @@ public: | |||
| } | |||
| } | |||
| const int rangeSize = end - start; | |||
| const int rangeSize = end_ - start; | |||
| ObjectClass** e = data.elements + start; | |||
| i = numUsed - end; | |||
| i = numUsed - end_; | |||
| numUsed -= rangeSize; | |||
| while (--i >= 0) | |||
| @@ -270,11 +270,11 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| int start = 0; | |||
| int end = numUsed; | |||
| int end_ = numUsed; | |||
| for (;;) | |||
| { | |||
| if (start >= end) | |||
| if (start >= end_) | |||
| { | |||
| return -1; | |||
| } | |||
| @@ -284,12 +284,12 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const int halfway = (start + end) >> 1; | |||
| const int halfway = (start + end_) >> 1; | |||
| if (halfway == start) | |||
| return -1; | |||
| else if (elementToLookFor < data.elements [halfway]) | |||
| end = halfway; | |||
| end_ = halfway; | |||
| else | |||
| start = halfway; | |||
| } | |||
| @@ -306,11 +306,11 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| int start = 0; | |||
| int end = numUsed; | |||
| int end_ = numUsed; | |||
| for (;;) | |||
| { | |||
| if (start >= end) | |||
| if (start >= end_) | |||
| { | |||
| return false; | |||
| } | |||
| @@ -320,12 +320,12 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const int halfway = (start + end) >> 1; | |||
| const int halfway = (start + end_) >> 1; | |||
| if (halfway == start) | |||
| return false; | |||
| else if (elementToLookFor < data.elements [halfway]) | |||
| end = halfway; | |||
| end_ = halfway; | |||
| else | |||
| start = halfway; | |||
| } | |||
| @@ -343,13 +343,13 @@ public: | |||
| const ScopedLockType lock (getLock()); | |||
| int start = 0; | |||
| int end = numUsed; | |||
| int end_ = numUsed; | |||
| for (;;) | |||
| { | |||
| if (start >= end) | |||
| if (start >= end_) | |||
| { | |||
| jassert (start <= end); | |||
| jassert (start <= end_); | |||
| insertInternal (start, newElement); | |||
| break; | |||
| } | |||
| @@ -359,7 +359,7 @@ public: | |||
| } | |||
| else | |||
| { | |||
| const int halfway = (start + end) >> 1; | |||
| const int halfway = (start + end_) >> 1; | |||
| if (halfway == start) | |||
| { | |||
| @@ -371,7 +371,7 @@ public: | |||
| break; | |||
| } | |||
| else if (newElement < data.elements [halfway]) | |||
| end = halfway; | |||
| end_ = halfway; | |||
| else | |||
| start = halfway; | |||
| } | |||
| @@ -565,9 +565,9 @@ Array<var>* var::convertToArray() | |||
| return array; | |||
| } | |||
| void var::append (const var& value) | |||
| void var::append (const var& n) | |||
| { | |||
| convertToArray()->add (value); | |||
| convertToArray()->add (n); | |||
| } | |||
| void var::remove (const int index) | |||
| @@ -578,9 +578,9 @@ void var::remove (const int index) | |||
| array->remove (index); | |||
| } | |||
| void var::insert (const int index, const var& value) | |||
| void var::insert (const int index, const var& n) | |||
| { | |||
| convertToArray()->insert (index, value); | |||
| convertToArray()->insert (index, n); | |||
| } | |||
| void var::resize (const int numArrayElementsWanted) | |||
| @@ -588,10 +588,10 @@ void var::resize (const int numArrayElementsWanted) | |||
| convertToArray()->resize (numArrayElementsWanted); | |||
| } | |||
| int var::indexOf (const var& value) const | |||
| int var::indexOf (const var& n) const | |||
| { | |||
| const Array<var>* const array = getArray(); | |||
| return array != nullptr ? array->indexOf (value) : -1; | |||
| return array != nullptr ? array->indexOf (n) : -1; | |||
| } | |||
| //============================================================================== | |||
| @@ -44,7 +44,10 @@ | |||
| any kind of ReferenceCountedObject. The var class is intended to act like | |||
| the kind of values used in dynamic scripting languages. | |||
| @see DynamicObject | |||
| You can save/load var objects either in a small, proprietary binary format | |||
| using writeToStream()/readFromStream(), or as JSON by using the JSON class. | |||
| @see JSON, DynamicObject | |||
| */ | |||
| class JUCE_API var | |||
| { | |||
| @@ -208,12 +211,14 @@ public: | |||
| //============================================================================== | |||
| /** Writes a binary representation of this value to a stream. | |||
| The data can be read back later using readFromStream(). | |||
| @see JSON | |||
| */ | |||
| void writeToStream (OutputStream& output) const; | |||
| /** Reads back a stored binary representation of a value. | |||
| The data in the stream must have been written using writeToStream(), or this | |||
| will have unpredictable results. | |||
| @see JSON | |||
| */ | |||
| static var readFromStream (InputStream& input); | |||
| @@ -65,7 +65,7 @@ public: | |||
| void run() | |||
| { | |||
| uint32 lastTime = Time::getMillisecondCounter(); | |||
| Message::Ptr message (new Message()); | |||
| Message::Ptr messageToSend (new Message()); | |||
| while (! threadShouldExit()) | |||
| { | |||
| @@ -92,7 +92,7 @@ public: | |||
| */ | |||
| if (callbackNeeded.compareAndSetBool (1, 0)) | |||
| { | |||
| postMessage (message); | |||
| postMessage (messageToSend); | |||
| /* Sometimes our message can get discarded by the OS (e.g. when running as an RTAS | |||
| when the app has a modal loop), so this is how long to wait before assuming the | |||
| @@ -77,15 +77,15 @@ void ShapeButton::setShape (const Path& newShape, | |||
| if (resizeNowToFitThisShape) | |||
| { | |||
| Rectangle<float> bounds (shape.getBounds()); | |||
| Rectangle<float> newBounds (shape.getBounds()); | |||
| if (hasShadow) | |||
| bounds.expand (4.0f, 4.0f); | |||
| newBounds.expand (4.0f, 4.0f); | |||
| shape.applyTransform (AffineTransform::translation (-bounds.getX(), -bounds.getY())); | |||
| shape.applyTransform (AffineTransform::translation (-newBounds.getX(), -newBounds.getY())); | |||
| setSize (1 + (int) (bounds.getWidth() + outlineWidth), | |||
| 1 + (int) (bounds.getHeight() + outlineWidth)); | |||
| setSize (1 + (int) (newBounds.getWidth() + outlineWidth), | |||
| 1 + (int) (newBounds.getHeight() + outlineWidth)); | |||
| } | |||
| } | |||
| @@ -31,8 +31,8 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| ImageComponent::ImageComponent (const String& componentName) | |||
| : Component (componentName), | |||
| ImageComponent::ImageComponent (const String& name) | |||
| : Component (name), | |||
| placement (RectanglePlacement::centred) | |||
| { | |||
| } | |||
| @@ -34,9 +34,9 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| Label::Label (const String& componentName, | |||
| Label::Label (const String& name, | |||
| const String& labelText) | |||
| : Component (componentName), | |||
| : Component (name), | |||
| textValue (labelText), | |||
| lastTextValue (labelText), | |||
| font (15.0f), | |||
| @@ -1715,9 +1715,9 @@ void TextEditor::drawContent (Graphics& g) | |||
| } | |||
| } | |||
| for (int i = underlinedSections.size(); --i >= 0;) | |||
| for (int j = underlinedSections.size(); --j >= 0;) | |||
| { | |||
| const Range<int>& underlinedSection = underlinedSections.getReference (i); | |||
| const Range<int>& underlinedSection = underlinedSections.getReference (j); | |||
| Iterator i2 (sections, wordWrapWidth, passwordCharacter); | |||
| @@ -459,8 +459,8 @@ private: | |||
| //============================================================================== | |||
| TreeView::TreeView (const String& componentName) | |||
| : Component (componentName), | |||
| TreeView::TreeView (const String& name) | |||
| : Component (name), | |||
| rootItem (nullptr), | |||
| indentSize (24), | |||
| defaultOpenness (false), | |||
| @@ -200,7 +200,7 @@ void ModalComponentManager::handleAsyncUpdate() | |||
| if (! item->isActive) | |||
| { | |||
| ScopedPointer<ModalItem> item (stack.removeAndReturn (i)); | |||
| ScopedPointer<ModalItem> deleter (stack.removeAndReturn (i)); | |||
| for (int j = item->callbacks.size(); --j >= 0;) | |||
| item->callbacks.getUnchecked(j)->modalStateFinished (item->returnValue); | |||
| @@ -385,7 +385,7 @@ public: | |||
| void changeListenerCallback (ChangeBroadcaster*) | |||
| { | |||
| const OpennessRestorer openness (*this); | |||
| const OpennessRestorer opennessRestorer (*this); | |||
| clearSubItems(); | |||
| const StringArray categories (owner.getMappings().getCommandManager()->getCommandCategories()); | |||
| @@ -32,9 +32,9 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| GroupComponent::GroupComponent (const String& componentName, | |||
| GroupComponent::GroupComponent (const String& name, | |||
| const String& labelText) | |||
| : Component (componentName), | |||
| : Component (name), | |||
| text (labelText), | |||
| justification (Justification::left) | |||
| { | |||
| @@ -150,11 +150,11 @@ void ResizableBorderComponent::mouseDrag (const MouseEvent& e) | |||
| return; | |||
| } | |||
| const Rectangle<int> bounds (mouseZone.resizeRectangleBy (originalBounds, e.getOffsetFromDragStart())); | |||
| const Rectangle<int> newBounds (mouseZone.resizeRectangleBy (originalBounds, e.getOffsetFromDragStart())); | |||
| if (constrainer != nullptr) | |||
| { | |||
| constrainer->setBoundsForComponent (component, bounds, | |||
| constrainer->setBoundsForComponent (component, newBounds, | |||
| mouseZone.isDraggingTopEdge(), | |||
| mouseZone.isDraggingLeftEdge(), | |||
| mouseZone.isDraggingBottomEdge(), | |||
| @@ -162,12 +162,12 @@ void ResizableBorderComponent::mouseDrag (const MouseEvent& e) | |||
| } | |||
| else | |||
| { | |||
| Component::Positioner* const positioner = component->getPositioner(); | |||
| Component::Positioner* const pos = component->getPositioner(); | |||
| if (positioner != nullptr) | |||
| positioner->applyNewBounds (bounds); | |||
| if (pos != nullptr) | |||
| pos->applyNewBounds (newBounds); | |||
| else | |||
| component->setBounds (bounds); | |||
| component->setBounds (newBounds); | |||
| } | |||
| } | |||
| @@ -87,10 +87,10 @@ void ResizableCornerComponent::mouseDrag (const MouseEvent& e) | |||
| } | |||
| else | |||
| { | |||
| Component::Positioner* const positioner = component->getPositioner(); | |||
| Component::Positioner* const pos = component->getPositioner(); | |||
| if (positioner != nullptr) | |||
| positioner->applyNewBounds (r); | |||
| if (pos != nullptr) | |||
| pos->applyNewBounds (r); | |||
| else | |||
| component->setBounds (r); | |||
| } | |||
| @@ -82,20 +82,20 @@ void ResizableEdgeComponent::mouseDrag (const MouseEvent& e) | |||
| return; | |||
| } | |||
| Rectangle<int> bounds (originalBounds); | |||
| Rectangle<int> newBounds (originalBounds); | |||
| switch (edge) | |||
| { | |||
| case leftEdge: bounds.setLeft (jmin (bounds.getRight(), bounds.getX() + e.getDistanceFromDragStartX())); break; | |||
| case rightEdge: bounds.setWidth (jmax (0, bounds.getWidth() + e.getDistanceFromDragStartX())); break; | |||
| case topEdge: bounds.setTop (jmin (bounds.getBottom(), bounds.getY() + e.getDistanceFromDragStartY())); break; | |||
| case bottomEdge: bounds.setHeight (jmax (0, bounds.getHeight() + e.getDistanceFromDragStartY())); break; | |||
| case leftEdge: newBounds.setLeft (jmin (newBounds.getRight(), newBounds.getX() + e.getDistanceFromDragStartX())); break; | |||
| case rightEdge: newBounds.setWidth (jmax (0, newBounds.getWidth() + e.getDistanceFromDragStartX())); break; | |||
| case topEdge: newBounds.setTop (jmin (newBounds.getBottom(), newBounds.getY() + e.getDistanceFromDragStartY())); break; | |||
| case bottomEdge: newBounds.setHeight (jmax (0, newBounds.getHeight() + e.getDistanceFromDragStartY())); break; | |||
| default: jassertfalse; break; | |||
| } | |||
| if (constrainer != nullptr) | |||
| { | |||
| constrainer->setBoundsForComponent (component, bounds, | |||
| constrainer->setBoundsForComponent (component, newBounds, | |||
| edge == topEdge, | |||
| edge == leftEdge, | |||
| edge == bottomEdge, | |||
| @@ -103,12 +103,12 @@ void ResizableEdgeComponent::mouseDrag (const MouseEvent& e) | |||
| } | |||
| else | |||
| { | |||
| Component::Positioner* const positioner = component->getPositioner(); | |||
| Component::Positioner* const pos = component->getPositioner(); | |||
| if (positioner != nullptr) | |||
| positioner->applyNewBounds (bounds); | |||
| if (pos != nullptr) | |||
| pos->applyNewBounds (newBounds); | |||
| else | |||
| component->setBounds (bounds); | |||
| component->setBounds (newBounds); | |||
| } | |||
| } | |||
| @@ -32,8 +32,8 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| Viewport::Viewport (const String& componentName) | |||
| : Component (componentName), | |||
| Viewport::Viewport (const String& name) | |||
| : Component (name), | |||
| scrollBarThickness (0), | |||
| singleStepX (16), | |||
| singleStepY (16), | |||
| @@ -220,10 +220,10 @@ void RelativeCoordinatePositionerBase::componentChildrenChanged (Component& chan | |||
| apply(); | |||
| } | |||
| void RelativeCoordinatePositionerBase::componentBeingDeleted (Component& component) | |||
| void RelativeCoordinatePositionerBase::componentBeingDeleted (Component& comp) | |||
| { | |||
| jassert (sourceComponents.contains (&component)); | |||
| sourceComponents.removeValue (&component); | |||
| jassert (sourceComponents.contains (&comp)); | |||
| sourceComponents.removeValue (&comp); | |||
| registeredOk = false; | |||
| } | |||
| @@ -147,8 +147,8 @@ const Rectangle<float> RelativeRectangle::resolve (const Expression::Scope* scop | |||
| { | |||
| if (scope == nullptr) | |||
| { | |||
| RelativeRectangleLocalScope scope (*this); | |||
| return resolve (&scope); | |||
| RelativeRectangleLocalScope defaultScope (*this); | |||
| return resolve (&defaultScope); | |||
| } | |||
| else | |||
| { | |||
| @@ -36,17 +36,17 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| CallOutBox::CallOutBox (Component& contentComponent, | |||
| Component& componentToPointTo, | |||
| Component* const parentComponent) | |||
| Component* const parent) | |||
| : borderSpace (20), arrowSize (16.0f), content (contentComponent) | |||
| { | |||
| addAndMakeVisible (&content); | |||
| if (parentComponent != nullptr) | |||
| if (parent != nullptr) | |||
| { | |||
| parentComponent->addChildComponent (this); | |||
| parent->addChildComponent (this); | |||
| updatePosition (parentComponent->getLocalArea (&componentToPointTo, componentToPointTo.getLocalBounds()), | |||
| parentComponent->getLocalBounds()); | |||
| updatePosition (parent->getLocalArea (&componentToPointTo, componentToPointTo.getLocalBounds()), | |||
| parent->getLocalBounds()); | |||
| setVisible (true); | |||
| } | |||
| @@ -155,12 +155,12 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R | |||
| targetArea = newAreaToPointTo; | |||
| availableArea = newAreaToFitIn; | |||
| Rectangle<int> bounds (0, 0, | |||
| content.getWidth() + borderSpace * 2, | |||
| content.getHeight() + borderSpace * 2); | |||
| Rectangle<int> newBounds (0, 0, | |||
| content.getWidth() + borderSpace * 2, | |||
| content.getHeight() + borderSpace * 2); | |||
| const int hw = bounds.getWidth() / 2; | |||
| const int hh = bounds.getHeight() / 2; | |||
| const int hw = newBounds.getWidth() / 2; | |||
| const int hh = newBounds.getHeight() / 2; | |||
| const float hwReduced = (float) (hw - borderSpace * 3); | |||
| const float hhReduced = (float) (hh - borderSpace * 3); | |||
| const float arrowIndent = borderSpace - arrowSize; | |||
| @@ -195,12 +195,12 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R | |||
| nearest = distanceFromCentre; | |||
| targetPoint = targets[i]; | |||
| bounds.setPosition ((int) (centre.getX() - hw), | |||
| (int) (centre.getY() - hh)); | |||
| newBounds.setPosition ((int) (centre.getX() - hw), | |||
| (int) (centre.getY() - hh)); | |||
| } | |||
| } | |||
| setBounds (bounds); | |||
| setBounds (newBounds); | |||
| } | |||
| void CallOutBox::refreshPath() | |||
| @@ -65,18 +65,18 @@ class TempDialogWindow : public DialogWindow | |||
| { | |||
| public: | |||
| TempDialogWindow (const String& title, | |||
| Component* contentComponent, | |||
| Component* contentComponent_, | |||
| Component* componentToCentreAround, | |||
| const Colour& colour, | |||
| const bool escapeKeyTriggersCloseButton, | |||
| const bool escapeKeyTriggersCloseButton_, | |||
| const bool shouldBeResizable, | |||
| const bool useBottomRightCornerResizer) | |||
| : DialogWindow (title, colour, escapeKeyTriggersCloseButton, true) | |||
| : DialogWindow (title, colour, escapeKeyTriggersCloseButton_, true) | |||
| { | |||
| if (! JUCEApplication::isStandaloneApp()) | |||
| setAlwaysOnTop (true); // for a plugin, make it always-on-top because the host windows are often top-level | |||
| setContentNonOwned (contentComponent, true); | |||
| setContentNonOwned (contentComponent_, true); | |||
| centreAroundComponent (componentToCentreAround, getWidth(), getHeight()); | |||
| setResizable (shouldBeResizable, useBottomRightCornerResizer); | |||
| } | |||
| @@ -83,13 +83,13 @@ ResizableWindow::~ResizableWindow() | |||
| jassert (getNumChildComponents() == 0); | |||
| } | |||
| void ResizableWindow::initialise (const bool addToDesktop) | |||
| void ResizableWindow::initialise (const bool shouldAddToDesktop) | |||
| { | |||
| defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16); | |||
| lastNonFullScreenPos.setBounds (50, 50, 256, 256); | |||
| if (addToDesktop) | |||
| if (shouldAddToDesktop) | |||
| Component::addToDesktop (ResizableWindow::getDesktopWindowStyleFlags()); | |||
| } | |||
| @@ -349,12 +349,12 @@ void ResizableWindow::setConstrainer (ComponentBoundsConstrainer* newConstrainer | |||
| } | |||
| } | |||
| void ResizableWindow::setBoundsConstrained (const Rectangle<int>& bounds) | |||
| void ResizableWindow::setBoundsConstrained (const Rectangle<int>& newBounds) | |||
| { | |||
| if (constrainer != nullptr) | |||
| constrainer->setBoundsForComponent (this, bounds, false, false, false, false); | |||
| constrainer->setBoundsForComponent (this, newBounds, false, false, false, false); | |||
| else | |||
| setBounds (bounds); | |||
| setBounds (newBounds); | |||
| } | |||
| //============================================================================== | |||
| @@ -37,7 +37,7 @@ BEGIN_JUCE_NAMESPACE | |||
| //============================================================================== | |||
| TooltipWindow::TooltipWindow (Component* const parentComponent, | |||
| TooltipWindow::TooltipWindow (Component* const parent_, | |||
| const int millisecondsBeforeTipAppears_) | |||
| : Component ("tooltip"), | |||
| millisecondsBeforeTipAppears (millisecondsBeforeTipAppears_), | |||
| @@ -52,8 +52,8 @@ TooltipWindow::TooltipWindow (Component* const parentComponent, | |||
| setAlwaysOnTop (true); | |||
| setOpaque (true); | |||
| if (parentComponent != nullptr) | |||
| parentComponent->addChildComponent (this); | |||
| if (parent_ != nullptr) | |||
| parent_->addChildComponent (this); | |||
| } | |||
| TooltipWindow::~TooltipWindow() | |||
| @@ -146,11 +146,11 @@ void DrawableComposite::resetContentAreaAndBoundingBoxToFitChildren() | |||
| resetBoundingBoxToContentArea(); | |||
| } | |||
| bool DrawableComposite::registerCoordinates (RelativeCoordinatePositionerBase& positioner) | |||
| bool DrawableComposite::registerCoordinates (RelativeCoordinatePositionerBase& pos) | |||
| { | |||
| bool ok = positioner.addPoint (bounds.topLeft); | |||
| ok = positioner.addPoint (bounds.topRight) && ok; | |||
| return positioner.addPoint (bounds.bottomLeft) && ok; | |||
| bool ok = pos.addPoint (bounds.topLeft); | |||
| ok = pos.addPoint (bounds.topRight) && ok; | |||
| return pos.addPoint (bounds.bottomLeft) && ok; | |||
| } | |||
| void DrawableComposite::recalculateCoordinates (Expression::Scope* scope) | |||
| @@ -98,11 +98,11 @@ void DrawableImage::setBoundingBox (const RelativeParallelogram& newBounds) | |||
| } | |||
| //============================================================================== | |||
| bool DrawableImage::registerCoordinates (RelativeCoordinatePositionerBase& positioner) | |||
| bool DrawableImage::registerCoordinates (RelativeCoordinatePositionerBase& pos) | |||
| { | |||
| bool ok = positioner.addPoint (bounds.topLeft); | |||
| ok = positioner.addPoint (bounds.topRight) && ok; | |||
| return positioner.addPoint (bounds.bottomLeft) && ok; | |||
| bool ok = pos.addPoint (bounds.topLeft); | |||
| ok = pos.addPoint (bounds.topRight) && ok; | |||
| return pos.addPoint (bounds.bottomLeft) && ok; | |||
| } | |||
| void DrawableImage::recalculateCoordinates (Expression::Scope* scope) | |||
| @@ -210,16 +210,15 @@ void DrawablePath::ValueTreeWrapper::writeTo (RelativePointPath& relativePath) c | |||
| for (int j = 0; j < numCps; ++j) | |||
| points[j] = e.getControlPoint (j); | |||
| const Identifier type (e.getType()); | |||
| RelativePointPath::ElementBase* newElement = 0; | |||
| if (type == Element::startSubPathElement) newElement = new RelativePointPath::StartSubPath (points[0]); | |||
| else if (type == Element::closeSubPathElement) newElement = new RelativePointPath::CloseSubPath(); | |||
| else if (type == Element::lineToElement) newElement = new RelativePointPath::LineTo (points[0]); | |||
| else if (type == Element::quadraticToElement) newElement = new RelativePointPath::QuadraticTo (points[0], points[1]); | |||
| else if (type == Element::cubicToElement) newElement = new RelativePointPath::CubicTo (points[0], points[1], points[2]); | |||
| else jassertfalse; | |||
| const Identifier t (e.getType()); | |||
| if (t == Element::startSubPathElement) newElement = new RelativePointPath::StartSubPath (points[0]); | |||
| else if (t == Element::closeSubPathElement) newElement = new RelativePointPath::CloseSubPath(); | |||
| else if (t == Element::lineToElement) newElement = new RelativePointPath::LineTo (points[0]); | |||
| else if (t == Element::quadraticToElement) newElement = new RelativePointPath::QuadraticTo (points[0], points[1]); | |||
| else if (t == Element::cubicToElement) newElement = new RelativePointPath::CubicTo (points[0], points[1], points[2]); | |||
| else jassertfalse; | |||
| relativePath.addElement (newElement); | |||
| } | |||
| @@ -87,12 +87,12 @@ void DrawableRectangle::rebuildPath() | |||
| } | |||
| } | |||
| bool DrawableRectangle::registerCoordinates (RelativeCoordinatePositionerBase& positioner) | |||
| bool DrawableRectangle::registerCoordinates (RelativeCoordinatePositionerBase& pos) | |||
| { | |||
| bool ok = positioner.addPoint (bounds.topLeft); | |||
| ok = positioner.addPoint (bounds.topRight) && ok; | |||
| ok = positioner.addPoint (bounds.bottomLeft) && ok; | |||
| return positioner.addPoint (cornerSize) && ok; | |||
| bool ok = pos.addPoint (bounds.topLeft); | |||
| ok = pos.addPoint (bounds.topRight) && ok; | |||
| ok = pos.addPoint (bounds.bottomLeft) && ok; | |||
| return pos.addPoint (cornerSize) && ok; | |||
| } | |||
| void DrawableRectangle::recalculateCoordinates (Expression::Scope* scope) | |||
| @@ -101,17 +101,17 @@ void DrawableShape::setStrokeFill (const FillType& newFill) | |||
| } | |||
| void DrawableShape::setFillInternal (RelativeFillType& fill, const RelativeFillType& newFill, | |||
| ScopedPointer<RelativeCoordinatePositionerBase>& positioner) | |||
| ScopedPointer<RelativeCoordinatePositionerBase>& pos) | |||
| { | |||
| if (fill != newFill) | |||
| { | |||
| fill = newFill; | |||
| positioner = nullptr; | |||
| pos = nullptr; | |||
| if (fill.isDynamic()) | |||
| { | |||
| positioner = new RelativePositioner (*this, fill, true); | |||
| positioner->apply(); | |||
| pos = new RelativePositioner (*this, fill, true); | |||
| pos->apply(); | |||
| } | |||
| else | |||
| { | |||
| @@ -130,12 +130,12 @@ void DrawableText::refreshBounds() | |||
| } | |||
| } | |||
| bool DrawableText::registerCoordinates (RelativeCoordinatePositionerBase& positioner) | |||
| bool DrawableText::registerCoordinates (RelativeCoordinatePositionerBase& pos) | |||
| { | |||
| bool ok = positioner.addPoint (bounds.topLeft); | |||
| ok = positioner.addPoint (bounds.topRight) && ok; | |||
| ok = positioner.addPoint (bounds.bottomLeft) && ok; | |||
| return positioner.addPoint (fontSizeControlPoint) && ok; | |||
| bool ok = pos.addPoint (bounds.topLeft); | |||
| ok = pos.addPoint (bounds.topRight) && ok; | |||
| ok = pos.addPoint (bounds.bottomLeft) && ok; | |||
| return pos.addPoint (fontSizeControlPoint) && ok; | |||
| } | |||
| void DrawableText::recalculateCoordinates (Expression::Scope* scope) | |||
| @@ -315,9 +315,9 @@ private: | |||
| return code; | |||
| } | |||
| int getCode (const int codeSize_, const bool initialise) | |||
| int getCode (const int codeSize_, const bool shouldInitialise) | |||
| { | |||
| if (initialise) | |||
| if (shouldInitialise) | |||
| { | |||
| currentBit = 0; | |||
| lastBit = 0; | |||
| @@ -1056,9 +1056,9 @@ Expression Expression::withRenamedSymbol (const Expression::Symbol& oldSymbol, c | |||
| return e; | |||
| } | |||
| bool Expression::referencesSymbol (const Expression::Symbol& symbol, const Scope& scope) const | |||
| bool Expression::referencesSymbol (const Expression::Symbol& symbolToCheck, const Scope& scope) const | |||
| { | |||
| Helpers::SymbolCheckVisitor visitor (symbol); | |||
| Helpers::SymbolCheckVisitor visitor (symbolToCheck); | |||
| try | |||
| { | |||
| @@ -51,9 +51,9 @@ public: | |||
| unitsToHeightScaleFactor (0.0f) | |||
| { | |||
| JUCE_AUTORELEASEPOOL | |||
| CFStringRef name = PlatformUtilities::juceStringToCFString (font.getTypefaceName()); | |||
| ctFontRef = CTFontCreateWithName (name, 1024, nullptr); | |||
| CFRelease (name); | |||
| CFStringRef cfName = PlatformUtilities::juceStringToCFString (font.getTypefaceName()); | |||
| ctFontRef = CTFontCreateWithName (cfName, 1024, nullptr); | |||
| CFRelease (cfName); | |||
| if (ctFontRef != nullptr) | |||
| { | |||
| @@ -61,7 +61,7 @@ public: | |||
| if (font.isItalic()) | |||
| { | |||
| CTFontRef newFont = CTFontCreateCopyWithSymbolicTraits (ctFontRef, 0.0, nullptr, | |||
| CTFontRef newFont = CTFontCreateCopyWithSymbolicTraits (ctFontRef, 0.0f, nullptr, | |||
| kCTFontItalicTrait, kCTFontItalicTrait); | |||
| if (newFont != nullptr) | |||
| @@ -77,7 +77,7 @@ public: | |||
| if (font.isBold()) | |||
| { | |||
| CTFontRef newFont = CTFontCreateCopyWithSymbolicTraits (ctFontRef, 0.0, nullptr, | |||
| CTFontRef newFont = CTFontCreateCopyWithSymbolicTraits (ctFontRef, 0.0f, nullptr, | |||
| kCTFontBoldTrait, kCTFontBoldTrait); | |||
| if (newFont != nullptr) | |||
| { | |||
| @@ -156,6 +156,7 @@ private: | |||
| { | |||
| DynamicObject* const resultObject = new DynamicObject(); | |||
| result = resultObject; | |||
| NamedValueSet& resultProperties = resultObject->getProperties(); | |||
| for (;;) | |||
| { | |||
| @@ -185,17 +186,17 @@ private: | |||
| t = t.findEndOfWhitespace(); | |||
| oldT = t; | |||
| const juce_wchar c = t.getAndAdvance(); | |||
| if (c != ':') | |||
| const juce_wchar c2 = t.getAndAdvance(); | |||
| if (c2 != ':') | |||
| return createFail ("Expected ':', but found", &oldT); | |||
| var propertyValue; | |||
| Result r (parseAny (t, propertyValue)); | |||
| resultProperties.set (propertyName, var::null); | |||
| var* propertyValue = resultProperties.getVarPointer (propertyName); | |||
| if (r.failed()) | |||
| return r; | |||
| Result r2 (parseAny (t, *propertyValue)); | |||
| resultObject->setProperty (propertyName, propertyValue); | |||
| if (r2.failed()) | |||
| return r2; | |||
| t = t.findEndOfWhitespace(); | |||
| oldT = t; | |||
| @@ -528,5 +529,123 @@ void JSON::writeToStream (OutputStream& output, const var& data, const bool allO | |||
| JSONFormatter::write (output, data, 0, allOnOneLine); | |||
| } | |||
| //============================================================================== | |||
| //============================================================================== | |||
| #if JUCE_UNIT_TESTS | |||
| #include "../utilities/juce_UnitTest.h" | |||
| #include "../maths/juce_Random.h" | |||
| class JSONTests : public UnitTest | |||
| { | |||
| public: | |||
| JSONTests() : UnitTest ("JSON") {} | |||
| static String createRandomWideCharString (Random& r) | |||
| { | |||
| juce_wchar buffer[40] = { 0 }; | |||
| for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) | |||
| { | |||
| if (r.nextBool()) | |||
| { | |||
| do | |||
| { | |||
| buffer[i] = (juce_wchar) (1 + r.nextInt (0x10ffff - 1)); | |||
| } | |||
| while (! CharPointer_UTF16::canRepresent (buffer[i])); | |||
| } | |||
| else | |||
| buffer[i] = (juce_wchar) (1 + r.nextInt (0xff)); | |||
| } | |||
| return CharPointer_UTF32 (buffer); | |||
| } | |||
| static String createRandomIdentifier (Random& r) | |||
| { | |||
| char buffer[30] = { 0 }; | |||
| for (int i = 0; i < numElementsInArray (buffer) - 1; ++i) | |||
| { | |||
| static const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-:"; | |||
| buffer[i] = chars [r.nextInt (sizeof (chars) - 1)]; | |||
| } | |||
| return CharPointer_ASCII (buffer); | |||
| } | |||
| static var createRandomVar (Random& r, int depth) | |||
| { | |||
| switch (r.nextInt (depth > 3 ? 6 : 8)) | |||
| { | |||
| case 0: return var::null; | |||
| case 1: return r.nextInt(); | |||
| case 2: return r.nextInt64(); | |||
| case 3: return r.nextBool(); | |||
| case 4: return r.nextDouble(); | |||
| case 5: return createRandomWideCharString (r); | |||
| case 6: | |||
| { | |||
| var v (createRandomVar (r, depth + 1)); | |||
| for (int i = 1 + r.nextInt (30); --i >= 0;) | |||
| v.append (createRandomVar (r, depth + 1)); | |||
| return v; | |||
| } | |||
| case 7: | |||
| { | |||
| DynamicObject* o = new DynamicObject(); | |||
| for (int i = r.nextInt (30); --i >= 0;) | |||
| o->setProperty (createRandomIdentifier (r), createRandomVar (r, depth + 1)); | |||
| return o; | |||
| } | |||
| default: | |||
| return var::null; | |||
| } | |||
| } | |||
| void runTest() | |||
| { | |||
| beginTest ("JSON"); | |||
| Random r; | |||
| r.setSeedRandomly(); | |||
| expect (JSON::parse (String::empty) == var::null); | |||
| expect (JSON::parse ("{}").isObject()); | |||
| expect (JSON::parse ("[]").isArray()); | |||
| expect (JSON::parse ("1234").isInt()); | |||
| expect (JSON::parse ("12345678901234").isInt64()); | |||
| expect (JSON::parse ("1.123e3").isDouble()); | |||
| expect (JSON::parse ("-1234").isInt()); | |||
| expect (JSON::parse ("-12345678901234").isInt64()); | |||
| expect (JSON::parse ("-1.123e3").isDouble()); | |||
| for (int i = 100; --i >= 0;) | |||
| { | |||
| var v; | |||
| if (i > 0) | |||
| v = createRandomVar (r, 0); | |||
| const bool oneLine = r.nextBool(); | |||
| String asString (JSON::toString (v, oneLine)); | |||
| var parsed = JSON::parse (asString); | |||
| String parsedString (JSON::toString (parsed, oneLine)); | |||
| expect (asString.isNotEmpty() && parsedString == asString); | |||
| } | |||
| } | |||
| }; | |||
| static JSONTests JSONUnitTests; | |||
| #endif | |||
| END_JUCE_NAMESPACE | |||