|
|
@@ -57083,6 +57083,13 @@ void TabbedComponent::resized() |
|
|
contentComponents.getUnchecked (i)->setBounds (bounds); |
|
|
contentComponents.getUnchecked (i)->setBounds (bounds); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void TabbedComponent::lookAndFeelChanged() |
|
|
|
|
|
{ |
|
|
|
|
|
for (int i = contentComponents.size(); --i >= 0;) |
|
|
|
|
|
if (contentComponents.getUnchecked (i) != 0) |
|
|
|
|
|
contentComponents.getUnchecked (i)->lookAndFeelChanged(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void TabbedComponent::changeCallback (const int newCurrentTabIndex, |
|
|
void TabbedComponent::changeCallback (const int newCurrentTabIndex, |
|
|
const String& newTabName) |
|
|
const String& newTabName) |
|
|
{ |
|
|
{ |
|
|
@@ -64960,7 +64967,8 @@ public: |
|
|
|
|
|
|
|
|
if (sampleRateDropDown != 0) |
|
|
if (sampleRateDropDown != 0) |
|
|
{ |
|
|
{ |
|
|
sampleRateDropDown->setVisible (! showAdvancedSettingsButton->isVisible()); |
|
|
|
|
|
|
|
|
sampleRateDropDown->setVisible (showAdvancedSettingsButton == 0 |
|
|
|
|
|
|| ! showAdvancedSettingsButton->isVisible()); |
|
|
|
|
|
|
|
|
sampleRateDropDown->setBounds (lx, y, w, h); |
|
|
sampleRateDropDown->setBounds (lx, y, w, h); |
|
|
y += dh; |
|
|
y += dh; |
|
|
@@ -64968,14 +64976,16 @@ public: |
|
|
|
|
|
|
|
|
if (bufferSizeDropDown != 0) |
|
|
if (bufferSizeDropDown != 0) |
|
|
{ |
|
|
{ |
|
|
bufferSizeDropDown->setVisible (! showAdvancedSettingsButton->isVisible()); |
|
|
|
|
|
|
|
|
bufferSizeDropDown->setVisible (showAdvancedSettingsButton == 0 |
|
|
|
|
|
|| ! showAdvancedSettingsButton->isVisible()); |
|
|
bufferSizeDropDown->setBounds (lx, y, w, h); |
|
|
bufferSizeDropDown->setBounds (lx, y, w, h); |
|
|
y += dh; |
|
|
y += dh; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (showUIButton != 0) |
|
|
if (showUIButton != 0) |
|
|
{ |
|
|
{ |
|
|
showUIButton->setVisible (! showAdvancedSettingsButton->isVisible()); |
|
|
|
|
|
|
|
|
showUIButton->setVisible (showAdvancedSettingsButton == 0 |
|
|
|
|
|
|| ! showAdvancedSettingsButton->isVisible()); |
|
|
showUIButton->changeWidthToFitText (h); |
|
|
showUIButton->changeWidthToFitText (h); |
|
|
showUIButton->setTopLeftPosition (lx, y); |
|
|
showUIButton->setTopLeftPosition (lx, y); |
|
|
} |
|
|
} |
|
|
@@ -79295,11 +79305,13 @@ private: |
|
|
const String text (e->getText()); |
|
|
const String text (e->getText()); |
|
|
|
|
|
|
|
|
Path path; |
|
|
Path path; |
|
|
parseShape (*e, path); |
|
|
|
|
|
|
|
|
Drawable* s = parseShape (*e, path); |
|
|
|
|
|
delete s; |
|
|
} |
|
|
} |
|
|
else if (e->hasTagName (T("tspan"))) |
|
|
else if (e->hasTagName (T("tspan"))) |
|
|
{ |
|
|
{ |
|
|
parseText (*e); |
|
|
|
|
|
|
|
|
Drawable* s = parseText (*e); |
|
|
|
|
|
delete s; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@@ -98157,17 +98169,24 @@ bool GZIPDecompressorInputStream::setPosition (int64 newPos) |
|
|
{ |
|
|
{ |
|
|
if (newPos != currentPos) |
|
|
if (newPos != currentPos) |
|
|
{ |
|
|
{ |
|
|
// reset the stream and start again.. |
|
|
|
|
|
GZIPDecompressHelper* const h = (GZIPDecompressHelper*) helper; |
|
|
|
|
|
delete h; |
|
|
|
|
|
|
|
|
if (newPos > currentPos) |
|
|
|
|
|
{ |
|
|
|
|
|
skipNextBytes (newPos - currentPos); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
// reset the stream and start again.. |
|
|
|
|
|
GZIPDecompressHelper* const h = (GZIPDecompressHelper*) helper; |
|
|
|
|
|
delete h; |
|
|
|
|
|
|
|
|
isEof = false; |
|
|
|
|
|
activeBufferSize = 0; |
|
|
|
|
|
currentPos = 0; |
|
|
|
|
|
helper = new GZIPDecompressHelper (noWrap); |
|
|
|
|
|
|
|
|
isEof = false; |
|
|
|
|
|
activeBufferSize = 0; |
|
|
|
|
|
currentPos = 0; |
|
|
|
|
|
helper = new GZIPDecompressHelper (noWrap); |
|
|
|
|
|
|
|
|
sourceStream->setPosition (originalSourcePos); |
|
|
|
|
|
skipNextBytes (newPos); |
|
|
|
|
|
|
|
|
sourceStream->setPosition (originalSourcePos); |
|
|
|
|
|
skipNextBytes (newPos); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return true; |
|
|
return true; |
|
|
@@ -240498,11 +240517,11 @@ public: |
|
|
if (! hasCreatedCaret) |
|
|
if (! hasCreatedCaret) |
|
|
{ |
|
|
{ |
|
|
hasCreatedCaret = true; |
|
|
hasCreatedCaret = true; |
|
|
CreateCaret (hwnd, 0, 0, 0); |
|
|
|
|
|
|
|
|
CreateCaret (hwnd, (HBITMAP) 1, 0, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ShowCaret (hwnd); |
|
|
ShowCaret (hwnd); |
|
|
SetCaretPos (-1, -1); |
|
|
|
|
|
|
|
|
SetCaretPos (0, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void repaint (int x, int y, int w, int h) |
|
|
void repaint (int x, int y, int w, int h) |
|
|
@@ -243805,51 +243824,34 @@ bool WaitableEvent::wait (const int timeOutMillisecs) const throw() |
|
|
bool ok = true; |
|
|
bool ok = true; |
|
|
pthread_mutex_lock (&es->mutex); |
|
|
pthread_mutex_lock (&es->mutex); |
|
|
|
|
|
|
|
|
if (! es->triggered) |
|
|
|
|
|
|
|
|
if (timeOutMillisecs < 0) |
|
|
{ |
|
|
{ |
|
|
if (timeOutMillisecs < 0) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
while (! es->triggered) |
|
|
pthread_cond_wait (&es->condition, &es->mutex); |
|
|
pthread_cond_wait (&es->condition, &es->mutex); |
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
while (! es->triggered) |
|
|
{ |
|
|
{ |
|
|
struct timespec time; |
|
|
|
|
|
|
|
|
|
|
|
#if JUCE_MAC |
|
|
|
|
|
time.tv_sec = timeOutMillisecs / 1000; |
|
|
|
|
|
time.tv_nsec = (timeOutMillisecs % 1000) * 1000000; |
|
|
|
|
|
pthread_cond_timedwait_relative_np (&es->condition, &es->mutex, &time); |
|
|
|
|
|
#else |
|
|
|
|
|
struct timeval t; |
|
|
struct timeval t; |
|
|
int timeout = 0; |
|
|
|
|
|
|
|
|
|
|
|
gettimeofday (&t, 0); |
|
|
gettimeofday (&t, 0); |
|
|
|
|
|
|
|
|
|
|
|
struct timespec time; |
|
|
time.tv_sec = t.tv_sec + (timeOutMillisecs / 1000); |
|
|
time.tv_sec = t.tv_sec + (timeOutMillisecs / 1000); |
|
|
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000) * 1000)) * 1000; |
|
|
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000) * 1000)) * 1000; |
|
|
|
|
|
|
|
|
while (time.tv_nsec >= 1000000000) |
|
|
|
|
|
|
|
|
if (time.tv_nsec >= 1000000000) |
|
|
{ |
|
|
{ |
|
|
time.tv_nsec -= 1000000000; |
|
|
time.tv_nsec -= 1000000000; |
|
|
time.tv_sec++; |
|
|
time.tv_sec++; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
while (! timeout) |
|
|
|
|
|
|
|
|
if (pthread_cond_timedwait (&es->condition, &es->mutex, &time) == ETIMEDOUT) |
|
|
{ |
|
|
{ |
|
|
timeout = pthread_cond_timedwait (&es->condition, &es->mutex, &time); |
|
|
|
|
|
|
|
|
|
|
|
if (! timeout) |
|
|
|
|
|
// Success |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
if (timeout == EINTR) |
|
|
|
|
|
// Go round again |
|
|
|
|
|
timeout = 0; |
|
|
|
|
|
|
|
|
ok = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
#endif |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ok = es->triggered; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
es->triggered = false; |
|
|
es->triggered = false; |
|
|
@@ -251514,51 +251516,34 @@ bool WaitableEvent::wait (const int timeOutMillisecs) const throw() |
|
|
bool ok = true; |
|
|
bool ok = true; |
|
|
pthread_mutex_lock (&es->mutex); |
|
|
pthread_mutex_lock (&es->mutex); |
|
|
|
|
|
|
|
|
if (! es->triggered) |
|
|
|
|
|
|
|
|
if (timeOutMillisecs < 0) |
|
|
{ |
|
|
{ |
|
|
if (timeOutMillisecs < 0) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
while (! es->triggered) |
|
|
pthread_cond_wait (&es->condition, &es->mutex); |
|
|
pthread_cond_wait (&es->condition, &es->mutex); |
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
while (! es->triggered) |
|
|
{ |
|
|
{ |
|
|
struct timespec time; |
|
|
|
|
|
|
|
|
|
|
|
#if JUCE_MAC |
|
|
|
|
|
time.tv_sec = timeOutMillisecs / 1000; |
|
|
|
|
|
time.tv_nsec = (timeOutMillisecs % 1000) * 1000000; |
|
|
|
|
|
pthread_cond_timedwait_relative_np (&es->condition, &es->mutex, &time); |
|
|
|
|
|
#else |
|
|
|
|
|
struct timeval t; |
|
|
struct timeval t; |
|
|
int timeout = 0; |
|
|
|
|
|
|
|
|
|
|
|
gettimeofday (&t, 0); |
|
|
gettimeofday (&t, 0); |
|
|
|
|
|
|
|
|
|
|
|
struct timespec time; |
|
|
time.tv_sec = t.tv_sec + (timeOutMillisecs / 1000); |
|
|
time.tv_sec = t.tv_sec + (timeOutMillisecs / 1000); |
|
|
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000) * 1000)) * 1000; |
|
|
time.tv_nsec = (t.tv_usec + ((timeOutMillisecs % 1000) * 1000)) * 1000; |
|
|
|
|
|
|
|
|
while (time.tv_nsec >= 1000000000) |
|
|
|
|
|
|
|
|
if (time.tv_nsec >= 1000000000) |
|
|
{ |
|
|
{ |
|
|
time.tv_nsec -= 1000000000; |
|
|
time.tv_nsec -= 1000000000; |
|
|
time.tv_sec++; |
|
|
time.tv_sec++; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
while (! timeout) |
|
|
|
|
|
|
|
|
if (pthread_cond_timedwait (&es->condition, &es->mutex, &time) == ETIMEDOUT) |
|
|
{ |
|
|
{ |
|
|
timeout = pthread_cond_timedwait (&es->condition, &es->mutex, &time); |
|
|
|
|
|
|
|
|
|
|
|
if (! timeout) |
|
|
|
|
|
// Success |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
if (timeout == EINTR) |
|
|
|
|
|
// Go round again |
|
|
|
|
|
timeout = 0; |
|
|
|
|
|
|
|
|
ok = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
#endif |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ok = es->triggered; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
es->triggered = false; |
|
|
es->triggered = false; |
|
|
@@ -256083,8 +256068,20 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results, |
|
|
|
|
|
|
|
|
[panel setDelegate: delegate]; |
|
|
[panel setDelegate: delegate]; |
|
|
|
|
|
|
|
|
if ([panel runModalForDirectory: juceStringToNS (currentFileOrDirectory.getParentDirectory().getFullPathName()) |
|
|
|
|
|
file: juceStringToNS (currentFileOrDirectory.getFileName())] |
|
|
|
|
|
|
|
|
String directory, filename; |
|
|
|
|
|
|
|
|
|
|
|
if (currentFileOrDirectory.isDirectory()) |
|
|
|
|
|
{ |
|
|
|
|
|
directory = currentFileOrDirectory.getFullPathName(); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
directory = currentFileOrDirectory.getParentDirectory().getFullPathName(); |
|
|
|
|
|
filename = currentFileOrDirectory.getFileName(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ([panel runModalForDirectory: juceStringToNS (directory) |
|
|
|
|
|
file: juceStringToNS (filename)] |
|
|
== NSOKButton) |
|
|
== NSOKButton) |
|
|
{ |
|
|
{ |
|
|
if (isSaveDialogue) |
|
|
if (isSaveDialogue) |
|
|
|