mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
This commit is contained in:
parent
1418dcc0a4
commit
370b00e338
6 changed files with 2926 additions and 2886 deletions
|
|
@ -72,6 +72,7 @@ const tchar* File::separatorString = T("\\");
|
|||
//==============================================================================
|
||||
#if JUCE_ENABLE_WIN98_COMPATIBILITY
|
||||
UNICODE_FUNCTION (GetFileAttributesW, DWORD, (LPCWSTR))
|
||||
UNICODE_FUNCTION (GetFileAttributesExW, BOOL, (LPCWSTR, GET_FILEEX_INFO_LEVELS, LPVOID))
|
||||
UNICODE_FUNCTION (SetFileAttributesW, BOOL, (LPCWSTR, DWORD))
|
||||
UNICODE_FUNCTION (RemoveDirectoryW, BOOL, (LPCWSTR))
|
||||
UNICODE_FUNCTION (DeleteFileW, BOOL, (LPCWSTR))
|
||||
|
|
@ -98,6 +99,7 @@ void juce_initialiseUnicodeFileFunctions() throw()
|
|||
HMODULE h = GetModuleHandleA ("kernel32.dll");
|
||||
|
||||
UNICODE_FUNCTION_LOAD (GetFileAttributesW)
|
||||
UNICODE_FUNCTION_LOAD (GetFileAttributesExW)
|
||||
UNICODE_FUNCTION_LOAD (SetFileAttributesW)
|
||||
UNICODE_FUNCTION_LOAD (RemoveDirectoryW)
|
||||
UNICODE_FUNCTION_LOAD (DeleteFileW)
|
||||
|
|
@ -133,8 +135,8 @@ bool juce_fileExists (const String& fileName,
|
|||
const DWORD attr = GetFileAttributesW (fileName);
|
||||
#endif
|
||||
|
||||
return (dontCountDirectories) ? ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)
|
||||
: (attr != 0xffffffff);
|
||||
return dontCountDirectories ? ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)
|
||||
: (attr != 0xffffffff);
|
||||
}
|
||||
|
||||
bool juce_isDirectory (const String& fileName) throw()
|
||||
|
|
@ -346,16 +348,17 @@ void juce_fileFlush (void* handle) throw()
|
|||
|
||||
int64 juce_getFileSize (const String& fileName) throw()
|
||||
{
|
||||
void* const handle = juce_fileOpen (fileName, false);
|
||||
WIN32_FILE_ATTRIBUTE_DATA attributes;
|
||||
|
||||
if (handle != 0)
|
||||
#if JUCE_ENABLE_WIN98_COMPATIBILITY
|
||||
if (wGetFileAttributesExW != 0 ? wGetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes)
|
||||
: GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
|
||||
#else
|
||||
if (GetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes))
|
||||
#endif
|
||||
{
|
||||
LARGE_INTEGER li;
|
||||
li.LowPart = GetFileSize (handle, (LPDWORD) &li.HighPart);
|
||||
juce_fileClose (handle);
|
||||
|
||||
if (li.LowPart != INVALID_FILE_SIZE || GetLastError() != NO_ERROR)
|
||||
return li.QuadPart;
|
||||
return (((int64) attributes.nFileSizeHigh) << 32)
|
||||
| attributes.nFileSizeLow;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -388,21 +391,23 @@ void juce_getFileTimes (const String& fileName,
|
|||
int64& accessTime,
|
||||
int64& creationTime) throw()
|
||||
{
|
||||
creationTime = accessTime = modificationTime = 0;
|
||||
void* const h = juce_fileOpen (fileName, false);
|
||||
WIN32_FILE_ATTRIBUTE_DATA attributes;
|
||||
|
||||
if (h != 0)
|
||||
|
||||
#if JUCE_ENABLE_WIN98_COMPATIBILITY
|
||||
if (wGetFileAttributesExW != 0 ? wGetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes)
|
||||
: GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
|
||||
#else
|
||||
if (GetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes))
|
||||
#endif
|
||||
{
|
||||
FILETIME m, a, c;
|
||||
|
||||
if (GetFileTime ((HANDLE) h, &c, &a, &m))
|
||||
{
|
||||
creationTime = fileTimeToTime (&c);
|
||||
accessTime = fileTimeToTime (&a);
|
||||
modificationTime = fileTimeToTime (&m);
|
||||
}
|
||||
|
||||
juce_fileClose (h);
|
||||
modificationTime = fileTimeToTime (&attributes.ftLastWriteTime);
|
||||
creationTime = fileTimeToTime (&attributes.ftCreationTime);
|
||||
accessTime = fileTimeToTime (&attributes.ftLastAccessTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
creationTime = accessTime = modificationTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ static void updateKeyModifiers() throw()
|
|||
currentModifiers |= ModifierKeys::altModifier;
|
||||
|
||||
if ((GetKeyState (VK_RMENU) & 0x8000) != 0)
|
||||
currentModifiers &= ~(ModifierKeys::ctrlModifier | ModifierKeys::altModifier);
|
||||
currentModifiers &= ~(ModifierKeys::ctrlModifier | ModifierKeys::altModifier);
|
||||
}
|
||||
|
||||
void ModifierKeys::updateCurrentModifiers() throw()
|
||||
|
|
@ -1739,7 +1739,7 @@ private:
|
|||
BYTE keyState[256];
|
||||
GetKeyboardState (keyState);
|
||||
WCHAR unicodeChar[32];
|
||||
const DWORD converted = wToUnicode (virtualKey, virtualScanCode, keyState,
|
||||
const DWORD converted = wToUnicode (virtualKey, virtualScanCode, keyState,
|
||||
unicodeChar, 32, 0);
|
||||
if (converted > 0)
|
||||
textChar = unicodeChar[0];
|
||||
|
|
@ -1752,7 +1752,7 @@ private:
|
|||
BYTE keyState[256];
|
||||
GetKeyboardState (keyState);
|
||||
WCHAR unicodeChar[32];
|
||||
const DWORD converted = ToUnicode (virtualKey, virtualScanCode, keyState,
|
||||
const DWORD converted = ToUnicode (virtualKey, virtualScanCode, keyState,
|
||||
unicodeChar, 32, 0);
|
||||
if (converted > 0)
|
||||
textChar = unicodeChar[0];
|
||||
|
|
|
|||
|
|
@ -136,6 +136,12 @@ public:
|
|||
outDataSize = sizeof (void*);
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kAudioUnitProperty_OfflineRender)
|
||||
{
|
||||
outWritable = true;
|
||||
outDataSize = sizeof (UInt32);
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
return JuceAUBaseClass::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
|
||||
|
|
@ -150,7 +156,12 @@ public:
|
|||
{
|
||||
if (inID == juceFilterObjectPropertyID)
|
||||
{
|
||||
*((void**) outData) = (void*) juceFilter;
|
||||
*(void**) outData = (void*) juceFilter;
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kAudioUnitProperty_OfflineRender)
|
||||
{
|
||||
*(UInt32*) outData = (juceFilter != 0 && juceFilter->isNonRealtime()) ? 1 : 0;
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
|
@ -158,6 +169,23 @@ public:
|
|||
return JuceAUBaseClass::GetProperty (inID, inScope, inElement, outData);
|
||||
}
|
||||
|
||||
ComponentResult SetProperty (AudioUnitPropertyID inID,
|
||||
AudioUnitScope inScope,
|
||||
AudioUnitElement inElement,
|
||||
const void * inData,
|
||||
UInt32 inDataSize)
|
||||
{
|
||||
if (inScope == kAudioUnitScope_Global && inID == kAudioUnitProperty_OfflineRender)
|
||||
{
|
||||
if (juceFilter != 0)
|
||||
juceFilter->setNonRealtime ((*(UInt32*) inData) != 0);
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
return MusicDeviceBase::SetProperty (inID, inScope, inElement, inData, inDataSize);
|
||||
}
|
||||
|
||||
ComponentResult SaveState (CFPropertyListRef* outData)
|
||||
{
|
||||
ComponentResult err = JuceAUBaseClass::SaveState (outData);
|
||||
|
|
@ -176,7 +204,7 @@ public:
|
|||
|
||||
if (state.getSize() > 0)
|
||||
{
|
||||
CFDataRef ourState = CFDataCreate (kCFAllocatorDefault, (const uint8*) state, state.getSize());
|
||||
CFDataRef ourState = CFDataCreate (kCFAllocatorDefault, (const UInt8*) state.getData(), state.getSize());
|
||||
CFDictionarySetValue (dict, CFSTR("jucePluginState"), ourState);
|
||||
CFRelease (ourState);
|
||||
}
|
||||
|
|
@ -740,7 +768,7 @@ protected:
|
|||
{
|
||||
presets[i].presetNumber = i;
|
||||
presets[i].presetName = PlatformUtilities::juceStringToCFString (juceFilter->getProgramName (i));
|
||||
|
||||
|
||||
CFArrayAppendValue (presetsArray, presets + i);
|
||||
}
|
||||
|
||||
|
|
@ -766,7 +794,7 @@ protected:
|
|||
SetAFactoryPresetAsCurrent (chosenPreset);
|
||||
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
private:
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -33,6 +33,7 @@
|
|||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
#include <locale>
|
||||
|
||||
#include "../basics/juce_StandardHeader.h"
|
||||
|
||||
|
|
@ -53,6 +54,12 @@ BEGIN_JUCE_NAMESPACE
|
|||
static const char* const emptyCharString = "\0\0\0\0JUCE";
|
||||
static const int safeEmptyStringRefCount = 0x3fffffff;
|
||||
String::InternalRefCountedStringHolder String::emptyString = { safeEmptyStringRefCount, 0, { 0 } };
|
||||
static tchar decimalPoint = T('.');
|
||||
|
||||
void juce_initialiseStrings()
|
||||
{
|
||||
decimalPoint = String::fromUTF8 ((const uint8*) localeconv()->decimal_point) [0];
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void String::deleteInternal() throw()
|
||||
|
|
@ -405,7 +412,7 @@ void String::doubleToStringWithDecPlaces (double n, int numDecPlaces) throw()
|
|||
while (numDecPlaces >= 0 || v > 0)
|
||||
{
|
||||
if (numDecPlaces == 0)
|
||||
*--t = T('.');
|
||||
*--t = decimalPoint;
|
||||
|
||||
*--t = (tchar) (T('0') + (v % 10));
|
||||
|
||||
|
|
@ -1291,7 +1298,7 @@ void String::vprintf (const tchar* const pf, va_list& args) throw()
|
|||
bufSize += 256;
|
||||
buf = (tchar*) juce_malloc (bufSize * sizeof (tchar));
|
||||
}
|
||||
while (bufSize < 65536); // this is a sanity check to avoid situations where vprintf repeatedly
|
||||
while (bufSize < 65536); // this is a sanity check to avoid situations where vprintf repeatedly
|
||||
// returns -1 because of an error rather than because it needs more space.
|
||||
|
||||
if (buf != stackBuf)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue