Browse Source

tags/2021-05-28
jules 17 years ago
parent
commit
22fefe2c57
16 changed files with 1201 additions and 2314 deletions
  1. +0
    -17
      build/win32/platform_specific_code/juce_win32_DirectSound.cpp
  2. +11
    -241
      build/win32/platform_specific_code/juce_win32_FileChooser.cpp
  3. +31
    -300
      build/win32/platform_specific_code/juce_win32_Files.cpp
  4. +16
    -287
      build/win32/platform_specific_code/juce_win32_Fonts.cpp
  5. +10
    -10
      build/win32/platform_specific_code/juce_win32_Midi.cpp
  6. +0
    -6
      build/win32/platform_specific_code/juce_win32_Misc.cpp
  7. +10
    -137
      build/win32/platform_specific_code/juce_win32_PlatformUtils.cpp
  8. +1
    -9
      build/win32/platform_specific_code/juce_win32_SystemStats.cpp
  9. +25
    -200
      build/win32/platform_specific_code/juce_win32_Windowing.cpp
  10. +3
    -18
      build/win32/platform_specific_code/win32_headers.h
  11. +1
    -0
      docs/JUCE changelist.txt
  12. +1
    -1
      extras/audio plugins/demo/build/AudioUnit/Info-JuceAU.plist
  13. +0
    -4
      extras/audio plugins/demo/build/AudioUnit/JuceDemoAU.xcodeproj/project.pbxproj
  14. +8
    -0
      src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h
  15. +1083
    -1083
      src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp
  16. +1
    -1
      src/juce_core/basics/juce_StandardHeader.h

+ 0
- 17
build/win32/platform_specific_code/juce_win32_DirectSound.cpp View File

@@ -255,11 +255,6 @@ DSOUND_FUNCTION (DirectSoundCaptureCreate, (const GUID*, IDirectSoundCapture**,
DSOUND_FUNCTION (DirectSoundEnumerateW, (LPDSENUMCALLBACKW, LPVOID))
DSOUND_FUNCTION (DirectSoundCaptureEnumerateW, (LPDSENUMCALLBACKW, LPVOID))
#if JUCE_ENABLE_WIN98_COMPATIBILITY
DSOUND_FUNCTION (DirectSoundEnumerateA, (LPDSENUMCALLBACKA, LPVOID))
DSOUND_FUNCTION (DirectSoundCaptureEnumerateA, (LPDSENUMCALLBACKA, LPVOID))
#endif
static void initialiseDSoundFunctions()
{
if (dsDirectSoundCreate == 0)
@@ -270,11 +265,6 @@ static void initialiseDSoundFunctions()
DSOUND_FUNCTION_LOAD (DirectSoundCaptureCreate)
DSOUND_FUNCTION_LOAD (DirectSoundEnumerateW)
DSOUND_FUNCTION_LOAD (DirectSoundCaptureEnumerateW)
#if JUCE_ENABLE_WIN98_COMPATIBILITY
DSOUND_FUNCTION_LOAD (DirectSoundEnumerateA)
DSOUND_FUNCTION_LOAD (DirectSoundCaptureEnumerateA)
#endif
}
}
@@ -1460,13 +1450,6 @@ public:
dsDirectSoundEnumerateW (outputEnumProcW, this);
dsDirectSoundCaptureEnumerateW (inputEnumProcW, this);
}
#if JUCE_ENABLE_WIN98_COMPATIBILITY
else if (dsDirectSoundEnumerateA != 0)
{
dsDirectSoundEnumerateA (outputEnumProcA, this);
dsDirectSoundCaptureEnumerateA (inputEnumProcA, this);
}
#endif
}
const StringArray getDeviceNames (const bool preferInputNames) const


+ 11
- 241
build/win32/platform_specific_code/juce_win32_FileChooser.cpp View File

@@ -49,33 +49,6 @@ BEGIN_JUCE_NAMESPACE
#pragma warning (pop)
#endif
//==============================================================================
#if JUCE_ENABLE_WIN98_COMPATIBILITY
UNICODE_FUNCTION (SHBrowseForFolderW, LPITEMIDLIST, (LPBROWSEINFOW))
UNICODE_FUNCTION (SHGetPathFromIDListW, BOOL, (LPCITEMIDLIST, LPWSTR))
UNICODE_FUNCTION (GetSaveFileNameW, BOOL, (LPOPENFILENAMEW))
UNICODE_FUNCTION (GetOpenFileNameW, BOOL, (LPOPENFILENAMEW))
static void juce_initialiseUnicodeFileBrowserFunctions()
{
static bool initialised = false;
if (! initialised)
{
initialised = true;
HMODULE h = LoadLibraryA ("shell32.dll");
UNICODE_FUNCTION_LOAD (SHBrowseForFolderW)
UNICODE_FUNCTION_LOAD (SHGetPathFromIDListW)
h = LoadLibraryA ("comdlg32.dll");
UNICODE_FUNCTION_LOAD (GetSaveFileNameW)
UNICODE_FUNCTION_LOAD (GetOpenFileNameW)
}
}
#endif
//==============================================================================
static const void* defaultDirPath = 0;
static String returnedString; // need this to get non-existent pathnames from the directory chooser
@@ -98,13 +71,7 @@ static int CALLBACK browseCallbackProc (HWND hWnd, UINT msg, LPARAM lParam, LPAR
{
if (msg == BFFM_INITIALIZED)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
SendMessage (hWnd, (wSHBrowseForFolderW != 0) ? BFFM_SETSELECTIONW
: BFFM_SETSELECTIONA,
TRUE, (LPARAM) defaultDirPath);
#else
SendMessage (hWnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) defaultDirPath);
#endif
}
else if (msg == BFFM_VALIDATEFAILEDW)
{
@@ -162,16 +129,7 @@ static UINT_PTR CALLBACK openCallback (HWND hdlg, UINT uiMsg, WPARAM /*wParam*/,
path[0] = 0;
CommDlg_OpenSave_GetFilePath (GetParent (hdlg), (LPARAM) &path, MAX_PATH);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
String fn;
if (wGetOpenFileNameW != 0)
fn = (const WCHAR*) path;
else
fn = path;
#else
const String fn ((const WCHAR*) path);
#endif
comp->selectedFileChanged (File (fn));
}
@@ -216,10 +174,6 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
bool selectMultipleFiles,
FilePreviewComponent* extraInfoComponent)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
juce_initialiseUnicodeFileBrowserFunctions();
#endif
const int numCharsAvailable = 32768;
MemoryBlock filenameSpace ((numCharsAvailable + 1) * sizeof (WCHAR), true);
WCHAR* const fname = (WCHAR*) filenameSpace.getData();
@@ -250,14 +204,7 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
}
else
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wSHBrowseForFolderW != 0)
currentFileOrDirectory.getFileName().copyToBuffer (fname, numCharsAvailable);
else
currentFileOrDirectory.getFileName().copyToBuffer ((char*) fname, numCharsAvailable);
#else
currentFileOrDirectory.getFileName().copyToBuffer (fname, numCharsAvailable);
#endif
initialDir = currentFileOrDirectory.getParentDirectory().getFullPathName();
}
@@ -273,60 +220,10 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
LPITEMIDLIST list = 0;
filenameSpace.fillWith (0);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wSHBrowseForFolderW != 0)
{
BROWSEINFOW bi;
zerostruct (bi);
bi.hwndOwner = (HWND) w.getWindowHandle();
bi.pszDisplayName = fname;
bi.lpszTitle = title;
bi.lpfn = browseCallbackProc;
#ifdef BIF_USENEWUI
bi.ulFlags = BIF_USENEWUI | BIF_VALIDATE;
#else
bi.ulFlags = 0x50;
#endif
defaultDirPath = (const WCHAR*) initialDir;
list = wSHBrowseForFolderW (&bi);
if (! wSHGetPathFromIDListW (list, fname))
{
fname[0] = 0;
returnedString = String::empty;
}
}
else
{
BROWSEINFO bi;
zerostruct (bi);
bi.hwndOwner = (HWND) w.getWindowHandle();
bi.pszDisplayName = (TCHAR*) fname;
bi.lpszTitle = title;
bi.lpfn = browseCallbackProc;
#ifdef BIF_USENEWUI
bi.ulFlags = BIF_USENEWUI | BIF_VALIDATE;
#else
bi.ulFlags = 0x50;
#endif
defaultDirPath = (const char*) initialDir;
list = SHBrowseForFolder (&bi);
if (! SHGetPathFromIDList (list, (char*) fname))
{
fname[0] = 0;
returnedString = String::empty;
}
}
#else
{
BROWSEINFOW bi;
zerostruct (bi);
bi.hwndOwner = (HWND) w.getWindowHandle();
bi.pszDisplayName = fname;
bi.lpszTitle = title;
@@ -338,7 +235,7 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
#endif
defaultDirPath = (const WCHAR*) initialDir;
list = SHBrowseForFolderW (&bi);
list = SHBrowseForFolder (&bi);
if (! SHGetPathFromIDListW (list, fname))
{
@@ -346,7 +243,6 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
returnedString = String::empty;
}
}
#endif
LPMALLOC al;
if (list != 0 && SUCCEEDED (SHGetMalloc (&al)))
@@ -356,16 +252,7 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
if (returnedString.isNotEmpty())
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
String stringFName;
if (wSHBrowseForFolderW != 0)
stringFName = fname;
else
stringFName = (char*) fname;
#else
const String stringFName (fname);
#endif
results.add (new File (File (stringFName).getSiblingFile (returnedString)));
returnedString = String::empty;
@@ -396,8 +283,6 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
currentExtraFileWin->enterModalState();
}
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetSaveFileNameW != 0)
{
WCHAR filters [1024];
zeromem (filters, sizeof (filters));
@@ -422,49 +307,6 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
of.lpstrTitle = title;
of.Flags = flags;
if (extraInfoComponent != 0)
of.lpfnHook = &openCallback;
if (isSaveDialogue)
{
if (! wGetSaveFileNameW (&of))
fname[0] = 0;
else
fnameIdx = of.nFileOffset;
}
else
{
if (! wGetOpenFileNameW (&of))
fname[0] = 0;
else
fnameIdx = of.nFileOffset;
}
}
else
{
TCHAR filters [1024];
zeromem (filters, sizeof (filters));
filter.copyToBuffer (filters, 1024);
filter.copyToBuffer (filters + filter.length() + 1,
1022 - filter.length());
OPENFILENAME of;
zerostruct (of);
#ifdef OPENFILENAME_SIZE_VERSION_400
of.lStructSize = OPENFILENAME_SIZE_VERSION_400;
#else
of.lStructSize = sizeof (of);
#endif
of.hwndOwner = (HWND) w.getWindowHandle();
of.lpstrFilter = filters;
of.nFilterIndex = 1;
of.lpstrFile = (TCHAR*) fname;
of.nMaxFile = numCharsAvailable;
of.lpstrInitialDir = initialDir;
of.lpstrTitle = title;
of.Flags = flags;
if (extraInfoComponent != 0)
of.lpfnHook = &openCallback;
@@ -483,50 +325,6 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
fnameIdx = of.nFileOffset;
}
}
#else
{
WCHAR filters [1024];
zeromem (filters, sizeof (filters));
filter.copyToBuffer (filters, 1024);
filter.copyToBuffer (filters + filter.length() + 1,
1022 - filter.length());
OPENFILENAMEW of;
zerostruct (of);
#ifdef OPENFILENAME_SIZE_VERSION_400W
of.lStructSize = OPENFILENAME_SIZE_VERSION_400W;
#else
of.lStructSize = sizeof (of);
#endif
of.hwndOwner = (HWND) w.getWindowHandle();
of.lpstrFilter = filters;
of.nFilterIndex = 1;
of.lpstrFile = fname;
of.nMaxFile = numCharsAvailable;
of.lpstrInitialDir = initialDir;
of.lpstrTitle = title;
of.Flags = flags;
if (extraInfoComponent != 0)
of.lpfnHook = &openCallback;
if (isSaveDialogue)
{
if (! GetSaveFileNameW (&of))
fname[0] = 0;
else
fnameIdx = of.nFileOffset;
}
else
{
if (! GetOpenFileNameW (&of))
fname[0] = 0;
else
fnameIdx = of.nFileOffset;
}
}
#endif
}
}
#if JUCE_CATCH_UNHANDLED_EXCEPTIONS
@@ -538,51 +336,23 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
deleteAndZero (currentExtraFileWin);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetSaveFileNameW != 0)
{
#endif
const WCHAR* const files = fname;
const WCHAR* const files = fname;
if (selectMultipleFiles && fnameIdx > 0 && files [fnameIdx - 1] == 0)
{
const WCHAR* filename = files + fnameIdx;
if (selectMultipleFiles && fnameIdx > 0 && files [fnameIdx - 1] == 0)
{
const WCHAR* filename = files + fnameIdx;
while (*filename != 0)
{
const String filepath (String (files) + T("\\") + String (filename));
results.add (new File (filepath));
filename += CharacterFunctions::length (filename) + 1;
}
}
else if (files[0] != 0)
while (*filename != 0)
{
results.add (new File (files));
const String filepath (String (files) + T("\\") + String (filename));
results.add (new File (filepath));
filename += CharacterFunctions::length (filename) + 1;
}
#if JUCE_ENABLE_WIN98_COMPATIBILITY
}
else
else if (files[0] != 0)
{
const char* const files = (const char*) fname;
if (selectMultipleFiles && fnameIdx > 0 && files [fnameIdx - 1] == 0)
{
const char* filename = files + fnameIdx;
while (*filename != 0)
{
const String filepath (String (files) + T("\\") + String (filename));
results.add (new File (filepath));
filename += CharacterFunctions::length (filename) + 1;
}
}
else if (files[0] != 0)
{
results.add (new File (files));
}
results.add (new File (files));
}
#endif
}
END_JUCE_NAMESPACE

+ 31
- 300
build/win32/platform_specific_code/juce_win32_Files.cpp View File

@@ -69,57 +69,6 @@ BEGIN_JUCE_NAMESPACE
const tchar File::separator = T('\\');
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))
UNICODE_FUNCTION (MoveFileW, BOOL, (LPCWSTR, LPCWSTR))
UNICODE_FUNCTION (CopyFileW, BOOL, (LPCWSTR, LPCWSTR, BOOL))
UNICODE_FUNCTION (CreateDirectoryW, BOOL, (LPCWSTR, LPSECURITY_ATTRIBUTES))
UNICODE_FUNCTION (CreateFileW, HANDLE, (LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE))
UNICODE_FUNCTION (CreateNamedPipeW, HANDLE, (LPCWSTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPSECURITY_ATTRIBUTES))
UNICODE_FUNCTION (GetTempPathW, DWORD, (DWORD, LPCWSTR))
UNICODE_FUNCTION (SHGetSpecialFolderPathW, BOOL, (HWND, LPCWSTR, int, BOOL))
UNICODE_FUNCTION (GetModuleFileNameW, DWORD, (HMODULE, LPCWSTR, DWORD))
UNICODE_FUNCTION (GetCurrentDirectoryW, DWORD, (DWORD, LPCWSTR))
UNICODE_FUNCTION (SetCurrentDirectoryW, BOOL, (LPCWSTR))
UNICODE_FUNCTION (FindFirstFileW, HANDLE, (LPCWSTR, LPWIN32_FIND_DATAW))
UNICODE_FUNCTION (FindNextFileW, BOOL, (HANDLE, LPWIN32_FIND_DATAW))
void juce_initialiseUnicodeFileFunctions() throw()
{
static_jassert (CSIDL_MYMUSIC == 0x000d);
static_jassert (CSIDL_MYVIDEO == 0x000e);
if ((SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0)
{
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)
UNICODE_FUNCTION_LOAD (MoveFileW)
UNICODE_FUNCTION_LOAD (CopyFileW)
UNICODE_FUNCTION_LOAD (CreateDirectoryW)
UNICODE_FUNCTION_LOAD (CreateFileW)
UNICODE_FUNCTION_LOAD (CreateNamedPipeW)
UNICODE_FUNCTION_LOAD (GetTempPathW)
UNICODE_FUNCTION_LOAD (GetModuleFileNameW)
UNICODE_FUNCTION_LOAD (GetCurrentDirectoryW)
UNICODE_FUNCTION_LOAD (SetCurrentDirectoryW)
UNICODE_FUNCTION_LOAD (FindFirstFileW)
UNICODE_FUNCTION_LOAD (FindNextFileW)
h = LoadLibraryA ("shell32.dll");
UNICODE_FUNCTION_LOAD (SHGetSpecialFolderPathW)
}
}
#endif
//==============================================================================
bool juce_fileExists (const String& fileName,
@@ -128,12 +77,7 @@ bool juce_fileExists (const String& fileName,
if (fileName.isEmpty())
return false;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const DWORD attr = (wGetFileAttributesW != 0) ? wGetFileAttributesW (fileName)
: GetFileAttributes (fileName);
#else
const DWORD attr = GetFileAttributesW (fileName);
#endif
const DWORD attr = GetFileAttributes (fileName);
return dontCountDirectories ? ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)
: (attr != 0xffffffff);
@@ -141,12 +85,7 @@ bool juce_fileExists (const String& fileName,
bool juce_isDirectory (const String& fileName) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const DWORD attr = (wGetFileAttributesW != 0) ? wGetFileAttributesW (fileName)
: GetFileAttributes (fileName);
#else
const DWORD attr = GetFileAttributesW (fileName);
#endif
const DWORD attr = GetFileAttributes (fileName);
return (attr != 0xffffffff)
&& ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0);
@@ -154,12 +93,7 @@ bool juce_isDirectory (const String& fileName) throw()
bool juce_canWriteToFile (const String& fileName) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const DWORD attr = (wGetFileAttributesW != 0) ? wGetFileAttributesW (fileName)
: GetFileAttributes (fileName);
#else
const DWORD attr = GetFileAttributesW (fileName);
#endif
const DWORD attr = GetFileAttributes (fileName);
return ((attr & FILE_ATTRIBUTE_READONLY) == 0);
}
@@ -167,12 +101,7 @@ bool juce_canWriteToFile (const String& fileName) throw()
bool juce_setFileReadOnly (const String& fileName,
bool isReadOnly)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
DWORD attr = (wGetFileAttributesW != 0) ? wGetFileAttributesW (fileName)
: GetFileAttributes (fileName);
#else
DWORD attr = GetFileAttributesW (fileName);
#endif
DWORD attr = GetFileAttributes (fileName);
if (attr == 0xffffffff)
return false;
@@ -185,66 +114,33 @@ bool juce_setFileReadOnly (const String& fileName,
else
attr &= ~FILE_ATTRIBUTE_READONLY;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wSetFileAttributesW != 0)
return wSetFileAttributesW (fileName, attr) != FALSE;
return SetFileAttributes (fileName, attr) != FALSE;
#else
return SetFileAttributesW (fileName, attr) != FALSE;
#endif
}
//==============================================================================
bool juce_deleteFile (const String& fileName) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (juce_isDirectory (fileName))
return (wRemoveDirectoryW != 0) ? wRemoveDirectoryW (fileName) != 0
: RemoveDirectory (fileName) != 0;
else
return (wDeleteFileW != 0) ? wDeleteFileW (fileName) != 0
: DeleteFile (fileName) != 0;
#else
if (juce_isDirectory (fileName))
return RemoveDirectoryW (fileName) != 0;
return RemoveDirectory (fileName) != 0;
return DeleteFileW (fileName) != 0;
#endif
return DeleteFile (fileName) != 0;
}
bool juce_moveFile (const String& source, const String& dest) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
return (wMoveFileW != 0) ? wMoveFileW (source, dest) != 0
: MoveFile (source, dest) != 0;
#else
return MoveFileW (source, dest) != 0;
#endif
return MoveFile (source, dest) != 0;
}
bool juce_copyFile (const String& source, const String& dest) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
return (wCopyFileW != 0) ? wCopyFileW (source, dest, false) != 0
: CopyFile (source, dest, false) != 0;
#else
return CopyFileW (source, dest, false) != 0;
#endif
return CopyFile (source, dest, false) != 0;
}
void juce_createDirectory (const String& fileName) throw()
{
if (! juce_fileExists (fileName, true))
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateDirectoryW != 0)
wCreateDirectoryW (fileName, 0);
else
CreateDirectory (fileName, 0);
#else
CreateDirectoryW (fileName, 0);
#endif
CreateDirectory (fileName, 0);
}
}
@@ -256,17 +152,8 @@ void* juce_fileOpen (const String& fileName, bool forWriting) throw()
if (forWriting)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateFileW != 0)
h = wCreateFileW (fileName, GENERIC_WRITE, FILE_SHARE_READ, 0,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
else
h = CreateFile (fileName, GENERIC_WRITE, FILE_SHARE_READ, 0,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
#else
h = CreateFileW (fileName, GENERIC_WRITE, FILE_SHARE_READ, 0,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
#endif
h = CreateFile (fileName, GENERIC_WRITE, FILE_SHARE_READ, 0,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (h != INVALID_HANDLE_VALUE)
SetFilePointer (h, 0, 0, FILE_END);
@@ -275,17 +162,8 @@ void* juce_fileOpen (const String& fileName, bool forWriting) throw()
}
else
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateFileW != 0)
h = wCreateFileW (fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 0);
else
h = CreateFile (fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 0);
#else
h = CreateFileW (fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 0);
#endif
h = CreateFile (fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 0);
if (h == INVALID_HANDLE_VALUE)
h = 0;
@@ -350,12 +228,7 @@ int64 juce_getFileSize (const String& fileName) throw()
{
WIN32_FILE_ATTRIBUTE_DATA attributes;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetFileAttributesExW != 0 ? wGetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes)
: GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
#else
if (GetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes))
#endif
if (GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
{
return (((int64) attributes.nFileSizeHigh) << 32)
| attributes.nFileSizeLow;
@@ -394,12 +267,7 @@ void juce_getFileTimes (const String& fileName,
WIN32_FILE_ATTRIBUTE_DATA attributes;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetFileAttributesExW != 0 ? wGetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes)
: GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
#else
if (GetFileAttributesExW (fileName, GetFileExInfoStandard, &attributes))
#endif
if (GetFileAttributesEx (fileName, GetFileExInfoStandard, &attributes))
{
modificationTime = fileTimeToTime (&attributes.ftLastWriteTime);
creationTime = fileTimeToTime (&attributes.ftCreationTime);
@@ -559,27 +427,10 @@ bool File::isOnRemovableDrive() const throw()
static const File juce_getSpecialFolderPath (int type) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wSHGetSpecialFolderPathW != 0)
{
WCHAR path [MAX_PATH_CHARS];
if (wSHGetSpecialFolderPathW (0, path, type, 0))
return File (String (path));
}
else
{
TCHAR path [MAX_PATH_CHARS];
if (SHGetSpecialFolderPath (0, path, type, 0))
return File (String (path));
}
#else
WCHAR path [MAX_PATH_CHARS];
if (SHGetSpecialFolderPathW (0, path, type, 0))
if (SHGetSpecialFolderPath (0, path, type, 0))
return File (String (path));
#endif
return File::nonexistent;
}
@@ -620,56 +471,22 @@ const File JUCE_CALLTYPE File::getSpecialLocation (const SpecialLocationType typ
break;
case tempDirectory:
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetTempPathW != 0)
{
WCHAR dest [2048];
dest[0] = 0;
wGetTempPathW (2048, dest);
return File (String (dest));
}
else
{
TCHAR dest [2048];
dest[0] = 0;
GetTempPath (2048, dest);
return File (String (dest));
}
#else
{
WCHAR dest [2048];
dest[0] = 0;
GetTempPathW (2048, dest);
return File (String (dest));
}
#endif
case currentExecutableFile:
case currentApplicationFile:
{
HINSTANCE moduleHandle = (HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle();
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetModuleFileNameW != 0)
{
WCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
wGetModuleFileNameW (moduleHandle, dest, MAX_PATH_CHARS);
return File (String (dest));
}
else
{
TCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
GetModuleFileName (moduleHandle, dest, MAX_PATH_CHARS);
return File (String (dest));
}
#else
WCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
GetModuleFileNameW (moduleHandle, dest, MAX_PATH_CHARS);
GetModuleFileName (moduleHandle, dest, MAX_PATH_CHARS);
return File (String (dest));
#endif
}
break;
@@ -690,37 +507,15 @@ void juce_setCurrentExecutableFileName (const String&) throw()
//==============================================================================
const File File::getCurrentWorkingDirectory() throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetCurrentDirectoryW != 0)
{
WCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
wGetCurrentDirectoryW (MAX_PATH_CHARS, dest);
return File (String (dest));
}
else
{
TCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
GetCurrentDirectory (MAX_PATH_CHARS, dest);
return File (String (dest));
}
#else
WCHAR dest [MAX_PATH_CHARS];
dest[0] = 0;
GetCurrentDirectoryW (MAX_PATH_CHARS, dest);
GetCurrentDirectory (MAX_PATH_CHARS, dest);
return File (String (dest));
#endif
}
bool File::setAsCurrentWorkingDirectory() const throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
return (wSetCurrentDirectoryW != 0) ? wSetCurrentDirectoryW (getFullPathName()) != FALSE
: SetCurrentDirectory (getFullPathName()) != FALSE;
#else
return SetCurrentDirectoryW (getFullPathName()) != FALSE;
#endif
return SetCurrentDirectory (getFullPathName()) != FALSE;
}
//==============================================================================
@@ -763,39 +558,15 @@ void* juce_findFileStart (const String& directory, const String& wildCard, Strin
wc += wildCard;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wFindFirstFileW != 0)
{
WIN32_FIND_DATAW findData;
HANDLE h = wFindFirstFileW (wc, &findData);
if (h != INVALID_HANDLE_VALUE)
{
getFindFileInfo (findData, firstResult, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
return h;
}
}
else
{
WIN32_FIND_DATA findData;
HANDLE h = FindFirstFile (wc, &findData);
if (h != INVALID_HANDLE_VALUE)
{
getFindFileInfo (findData, firstResult, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
return h;
}
}
#else
WIN32_FIND_DATAW findData;
HANDLE h = FindFirstFileW (wc, &findData);
WIN32_FIND_DATA findData;
HANDLE h = FindFirstFile (wc, &findData);
if (h != INVALID_HANDLE_VALUE)
{
getFindFileInfo (findData, firstResult, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
getFindFileInfo (findData, firstResult, isDir, isHidden, fileSize,
modTime, creationTime, isReadOnly);
return h;
}
#endif
firstResult = String::empty;
return 0;
@@ -805,36 +576,14 @@ bool juce_findFileNext (void* handle, String& resultFile,
bool* isDir, bool* isHidden, int64* fileSize,
Time* modTime, Time* creationTime, bool* isReadOnly) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wFindNextFileW != 0)
{
WIN32_FIND_DATAW findData;
if (handle != 0 && wFindNextFileW ((HANDLE) handle, &findData) != 0)
{
getFindFileInfo (findData, resultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
return true;
}
}
else
{
WIN32_FIND_DATA findData;
if (handle != 0 && FindNextFile ((HANDLE) handle, &findData) != 0)
{
getFindFileInfo (findData, resultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
return true;
}
}
#else
WIN32_FIND_DATAW findData;
WIN32_FIND_DATA findData;
if (handle != 0 && FindNextFileW ((HANDLE) handle, &findData) != 0)
if (handle != 0 && FindNextFile ((HANDLE) handle, &findData) != 0)
{
getFindFileInfo (findData, resultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
getFindFileInfo (findData, resultFile, isDir, isHidden, fileSize,
modTime, creationTime, isReadOnly);
return true;
}
#endif
resultFile = String::empty;
return false;
@@ -956,31 +705,13 @@ bool NamedPipe::openInternal (const String& pipeName, const bool createPipe)
if (createPipe)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateNamedPipeW != 0)
intern->pipeH = wCreateNamedPipeW (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,
1, 64, 64, 0, NULL);
else
intern->pipeH = CreateNamedPipe (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,
1, 64, 64, 0, NULL);
#else
intern->pipeH = CreateNamedPipeW (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,
1, 64, 64, 0, NULL);
#endif
intern->pipeH = CreateNamedPipe (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,
1, 64, 64, 0, NULL);
}
else
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateFileW != 0)
intern->pipeH = wCreateFileW (file, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 0);
else
intern->pipeH = CreateFile (file, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 0);
#else
intern->pipeH = CreateFileW (file, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 0);
#endif
intern->pipeH = CreateFile (file, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 0);
}
if (intern->pipeH != INVALID_HANDLE_VALUE)


+ 16
- 287
build/win32/platform_specific_code/juce_win32_Fonts.cpp View File

@@ -42,55 +42,6 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
#if JUCE_ENABLE_WIN98_COMPATIBILITY
UNICODE_FUNCTION (GetGlyphOutlineW, DWORD, (HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2*))
UNICODE_FUNCTION (GetTextMetricsW, BOOL, (HDC, LPTEXTMETRICW))
UNICODE_FUNCTION (GetKerningPairsW, DWORD, (HDC, DWORD, LPKERNINGPAIR))
UNICODE_FUNCTION (EnumFontFamiliesExW, int, (HDC, LPLOGFONTW, FONTENUMPROCW, LPARAM, DWORD))
UNICODE_FUNCTION (CreateFontIndirectW, HFONT, (CONST LOGFONTW *));
UNICODE_FUNCTION (GetGlyphIndicesW, DWORD, (HDC, LPCWSTR, int, LPWORD, DWORD));
static void juce_initialiseUnicodeFileFontFunctions()
{
static bool initialised = false;
if (! initialised)
{
initialised = true;
if ((SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0)
{
HMODULE h = LoadLibraryA ("gdi32.dll");
UNICODE_FUNCTION_LOAD (GetGlyphOutlineW)
UNICODE_FUNCTION_LOAD (GetTextMetricsW)
UNICODE_FUNCTION_LOAD (GetKerningPairsW)
UNICODE_FUNCTION_LOAD (EnumFontFamiliesExW)
UNICODE_FUNCTION_LOAD (CreateFontIndirectW)
UNICODE_FUNCTION_LOAD (GetGlyphIndicesW)
}
}
}
#endif
//==============================================================================
#if JUCE_ENABLE_WIN98_COMPATIBILITY
static int CALLBACK fontEnum2 (ENUMLOGFONTEX* lpelfe,
NEWTEXTMETRICEX*,
int type,
LPARAM lParam)
{
if (lpelfe != 0 && type == TRUETYPE_FONTTYPE)
{
const String fontName (lpelfe->elfLogFont.lfFaceName);
((StringArray*) lParam)->addIfNotAlreadyThere (fontName.removeCharacters (T("@")));
}
return 1;
}
#endif
static int CALLBACK wfontEnum2 (ENUMLOGFONTEXW* lpelfe,
NEWTEXTMETRICEXW*,
int type,
@@ -106,39 +57,6 @@ static int CALLBACK wfontEnum2 (ENUMLOGFONTEXW* lpelfe,
return 1;
}
#if JUCE_ENABLE_WIN98_COMPATIBILITY
static int CALLBACK fontEnum1 (ENUMLOGFONTEX* lpelfe,
NEWTEXTMETRICEX*,
int type,
LPARAM lParam)
{
if (lpelfe != 0
&& ((type & (DEVICE_FONTTYPE | RASTER_FONTTYPE)) == 0))
{
LOGFONT lf;
zerostruct (lf);
lf.lfWeight = FW_DONTCARE;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfPitchAndFamily = FF_DONTCARE;
const String fontName (lpelfe->elfLogFont.lfFaceName);
fontName.copyToBuffer (lf.lfFaceName, LF_FACESIZE - 1);
HDC dc = CreateCompatibleDC (0);
EnumFontFamiliesEx (dc, &lf,
(FONTENUMPROC) &fontEnum2,
lParam, 0);
DeleteDC (dc);
}
return 1;
}
#endif
static int CALLBACK wfontEnum1 (ENUMLOGFONTEXW* lpelfe,
NEWTEXTMETRICEXW*,
int type,
@@ -161,15 +79,9 @@ static int CALLBACK wfontEnum1 (ENUMLOGFONTEXW* lpelfe,
fontName.copyToBuffer (lf.lfFaceName, LF_FACESIZE - 1);
HDC dc = CreateCompatibleDC (0);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
wEnumFontFamiliesExW (dc, &lf,
(FONTENUMPROCW) &wfontEnum2,
lParam, 0);
#else
EnumFontFamiliesExW (dc, &lf,
(FONTENUMPROCW) &wfontEnum2,
lParam, 0);
#endif
EnumFontFamiliesEx (dc, &lf,
(FONTENUMPROCW) &wfontEnum2,
lParam, 0);
DeleteDC (dc);
}
@@ -181,8 +93,6 @@ const StringArray Font::findAllTypefaceNames() throw()
StringArray results;
HDC dc = CreateCompatibleDC (0);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wEnumFontFamiliesExW != 0)
{
LOGFONTW lf;
zerostruct (lf);
@@ -195,45 +105,10 @@ const StringArray Font::findAllTypefaceNames() throw()
lf.lfPitchAndFamily = FF_DONTCARE;
lf.lfFaceName[0] = 0;
wEnumFontFamiliesExW (dc, &lf,
(FONTENUMPROCW) &wfontEnum1,
(LPARAM) &results, 0);
}
else
{
LOGFONT lf;
zerostruct (lf);
lf.lfWeight = FW_DONTCARE;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfPitchAndFamily = FF_DONTCARE;
lf.lfFaceName[0] = 0;
EnumFontFamiliesEx (dc, &lf,
(FONTENUMPROC) &fontEnum1,
(FONTENUMPROCW) &wfontEnum1,
(LPARAM) &results, 0);
}
#else
{
LOGFONTW lf;
zerostruct (lf);
lf.lfWeight = FW_DONTCARE;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfPitchAndFamily = FF_DONTCARE;
lf.lfFaceName[0] = 0;
EnumFontFamiliesExW (dc, &lf,
(FONTENUMPROCW) &wfontEnum1,
(LPARAM) &results, 0);
}
#endif
DeleteDC (dc);
@@ -287,9 +162,6 @@ public:
italic (false),
size (0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
juce_initialiseUnicodeFileFontFunctions();
#endif
}
~FontDCHolder() throw()
@@ -334,44 +206,6 @@ public:
SetMapperFlags (dc, 0);
SetMapMode (dc, MM_TEXT);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
LOGFONT lf;
LOGFONTW lfw;
HFONT standardSizedFont = 0;
if (wCreateFontIndirectW != 0)
{
zerostruct (lfw);
lfw.lfCharSet = DEFAULT_CHARSET;
lfw.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lfw.lfOutPrecision = OUT_OUTLINE_PRECIS;
lfw.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
lfw.lfQuality = PROOF_QUALITY;
lfw.lfItalic = (BYTE) (italic ? TRUE : FALSE);
lfw.lfWeight = bold ? FW_BOLD : FW_NORMAL;
fontName.copyToBuffer (lfw.lfFaceName, LF_FACESIZE - 1);
lfw.lfHeight = size > 0 ? size : -256;
standardSizedFont = wCreateFontIndirectW (&lfw);
}
else
{
zerostruct (lf);
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfOutPrecision = OUT_OUTLINE_PRECIS;
lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
lf.lfQuality = PROOF_QUALITY;
lf.lfItalic = (BYTE) (italic ? TRUE : FALSE);
lf.lfWeight = bold ? FW_BOLD : FW_NORMAL;
fontName.copyToBuffer (lf.lfFaceName, LF_FACESIZE - 1);
lf.lfHeight = size > 0 ? size : -256;
standardSizedFont = CreateFontIndirect (&lf);
}
#else
LOGFONTW lfw;
zerostruct (lfw);
@@ -385,8 +219,7 @@ public:
fontName.copyToBuffer (lfw.lfFaceName, LF_FACESIZE - 1);
lfw.lfHeight = size > 0 ? size : -256;
HFONT standardSizedFont = CreateFontIndirectW (&lfw);
#endif
HFONT standardSizedFont = CreateFontIndirect (&lfw);
if (standardSizedFont != 0)
{
@@ -399,21 +232,8 @@ public:
OUTLINETEXTMETRIC otm;
if (GetOutlineTextMetrics (dc, sizeof (otm), &otm) != 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wCreateFontIndirectW != 0)
{
lfw.lfHeight = -(int) otm.otmEMSquare;
fontH = wCreateFontIndirectW (&lfw);
}
else
{
lf.lfHeight = -(int) otm.otmEMSquare;
fontH = CreateFontIndirect (&lf);
}
#else
lfw.lfHeight = -(int) otm.otmEMSquare;
fontH = CreateFontIndirectW (&lfw);
#endif
fontH = CreateFontIndirect (&lfw);
SelectObject (dc, fontH);
DeleteObject (standardSizedFont);
@@ -439,24 +259,9 @@ public:
{
if (kps == 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetKerningPairsW != 0)
{
numKPs = wGetKerningPairsW (dc, 0, 0);
kps = (KERNINGPAIR*) juce_calloc (sizeof (KERNINGPAIR) * numKPs);
wGetKerningPairsW (dc, numKPs, kps);
}
else
{
numKPs = GetKerningPairs (dc, 0, 0);
kps = (KERNINGPAIR*) juce_calloc (sizeof (KERNINGPAIR) * numKPs);
GetKerningPairs (dc, numKPs, kps);
}
#else
numKPs = GetKerningPairsW (dc, 0, 0);
numKPs = GetKerningPairs (dc, 0, 0);
kps = (KERNINGPAIR*) juce_calloc (sizeof (KERNINGPAIR) * numKPs);
GetKerningPairsW (dc, numKPs, kps);
#endif
GetKerningPairs (dc, numKPs, kps);
}
numKPs_ = numKPs;
@@ -479,50 +284,21 @@ static bool addGlyphToTypeface (HDC dc,
float height;
BOOL ok = false;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetGlyphIndicesW != 0)
{
const WCHAR charToTest[] = { (WCHAR)character, 0 };
const WCHAR charToTest[] = { (WCHAR) character, 0 };
WORD index = 0;
if (wGetGlyphIndicesW (dc, charToTest, 1, &index, GGI_MARK_NONEXISTING_GLYPHS) != GDI_ERROR
if (GetGlyphIndices (dc, charToTest, 1, &index, GGI_MARK_NONEXISTING_GLYPHS) != GDI_ERROR
&& index == 0xffff)
{
return false;
}
}
if (wGetTextMetricsW != 0)
{
TEXTMETRICW tm;
ok = wGetTextMetricsW (dc, &tm);
height = (float) tm.tmHeight;
}
else
{
TEXTMETRIC tm;
ok = GetTextMetrics (dc, &tm);
height = (float) tm.tmHeight;
}
#else
{
const WCHAR charToTest[] = { (WCHAR)character, 0 };
WORD index = 0;
if (GetGlyphIndicesW (dc, charToTest, 1, &index, GGI_MARK_NONEXISTING_GLYPHS) != GDI_ERROR
&& index == 0xffff)
{
return false;
}
}
TEXTMETRICW tm;
ok = GetTextMetricsW (dc, &tm);
TEXTMETRIC tm;
ok = GetTextMetrics (dc, &tm);
height = (float) tm.tmHeight;
#endif
if (! ok)
{
@@ -534,35 +310,15 @@ static bool addGlyphToTypeface (HDC dc,
const float scaleY = -1.0f / height;
static const MAT2 identityMatrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 1 } };
int bufSize;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetGlyphOutlineW != 0)
bufSize = wGetGlyphOutlineW (dc, character, GGO_NATIVE,
&gm, 0, 0, &identityMatrix);
else
bufSize = GetGlyphOutline (dc, character, GGO_NATIVE,
&gm, 0, 0, &identityMatrix);
#else
bufSize = GetGlyphOutlineW (dc, character, GGO_NATIVE,
&gm, 0, 0, &identityMatrix);
#endif
const int bufSize = GetGlyphOutline (dc, character, GGO_NATIVE,
&gm, 0, 0, &identityMatrix);
if (bufSize > 0)
{
char* const data = (char*) juce_malloc (bufSize);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetGlyphOutlineW != 0)
wGetGlyphOutlineW (dc, character, GGO_NATIVE, &gm,
bufSize, data, &identityMatrix);
else
GetGlyphOutline (dc, character, GGO_NATIVE, &gm,
bufSize, data, &identityMatrix);
#else
GetGlyphOutlineW (dc, character, GGO_NATIVE, &gm,
bufSize, data, &identityMatrix);
#endif
GetGlyphOutline (dc, character, GGO_NATIVE, &gm,
bufSize, data, &identityMatrix);
const TTPOLYGONHEADER* pheader = (TTPOLYGONHEADER*) data;
@@ -717,20 +473,6 @@ void Typeface::initialiseTypefaceCharacteristics (const String& fontName,
float height;
int firstChar, lastChar;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wGetTextMetricsW != 0)
{
TEXTMETRICW tm;
wGetTextMetricsW (dc, &tm);
height = (float) tm.tmHeight;
firstChar = tm.tmFirstChar;
lastChar = tm.tmLastChar;
setAscent (tm.tmAscent / height);
setDefaultCharacter (tm.tmDefaultChar);
}
else
{
TEXTMETRIC tm;
GetTextMetrics (dc, &tm);
@@ -742,19 +484,6 @@ void Typeface::initialiseTypefaceCharacteristics (const String& fontName,
setAscent (tm.tmAscent / height);
setDefaultCharacter (tm.tmDefaultChar);
}
#else
{
TEXTMETRICW tm;
GetTextMetricsW (dc, &tm);
height = (float) tm.tmHeight;
firstChar = tm.tmFirstChar;
lastChar = tm.tmLastChar;
setAscent (tm.tmAscent / height);
setDefaultCharacter (tm.tmDefaultChar);
}
#endif
setName (fontName);
setBold (bold);


+ 10
- 10
build/win32/platform_specific_code/juce_win32_Midi.cpp View File

@@ -331,10 +331,10 @@ const StringArray MidiInput::getDevices()
for (int i = 0; i < num; ++i)
{
MIDIINCAPSW mc;
MIDIINCAPS mc;
zerostruct (mc);
if (midiInGetDevCapsW (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
if (midiInGetDevCaps (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
s.add (String (mc.szPname, sizeof (mc.szPname)));
}
@@ -359,10 +359,10 @@ MidiInput* MidiInput::openDevice (const int index, MidiInputCallback* const call
for (int i = 0; i < num; ++i)
{
MIDIINCAPSW mc;
MIDIINCAPS mc;
zerostruct (mc);
if (midiInGetDevCapsW (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
if (midiInGetDevCaps (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
{
if (index == n)
{
@@ -444,10 +444,10 @@ const StringArray MidiOutput::getDevices()
for (int i = 0; i < num; ++i)
{
MIDIOUTCAPSW mc;
MIDIOUTCAPS mc;
zerostruct (mc);
if (midiOutGetDevCapsW (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
if (midiOutGetDevCaps (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
s.add (String (mc.szPname, sizeof (mc.szPname)));
}
@@ -461,10 +461,10 @@ int MidiOutput::getDefaultDeviceIndex()
for (int i = 0; i < num; ++i)
{
MIDIOUTCAPSW mc;
MIDIOUTCAPS mc;
zerostruct (mc);
if (midiOutGetDevCapsW (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
if (midiOutGetDevCaps (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
{
if ((mc.wTechnology & MOD_MAPPER) != 0)
return n;
@@ -484,10 +484,10 @@ MidiOutput* MidiOutput::openDevice (int index)
for (i = 0; i < num; ++i)
{
MIDIOUTCAPSW mc;
MIDIOUTCAPS mc;
zerostruct (mc);
if (midiOutGetDevCapsW (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
if (midiOutGetDevCaps (i, &mc, sizeof (mc)) == MMSYSERR_NOERROR)
{
// use the microsoft sw synth as a default - best not to allow deviceId
// to be MIDI_MAPPER, or else device sharing breaks


+ 0
- 6
build/win32/platform_specific_code/juce_win32_Misc.cpp View File

@@ -45,15 +45,9 @@ bool AlertWindow::showNativeDialogBox (const String& title,
const String& bodyText,
bool isOkCancel)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
return MessageBox (0, bodyText, title,
(isOkCancel) ? MB_OKCANCEL
: MB_OK) == IDOK;
#else
return MessageBoxW (0, bodyText, title,
(isOkCancel) ? MB_OKCANCEL
: MB_OK) == IDOK;
#endif
}
//==============================================================================


+ 10
- 137
build/win32/platform_specific_code/juce_win32_PlatformUtils.cpp View File

@@ -47,46 +47,12 @@ BEGIN_JUCE_NAMESPACE
#pragma warning (pop)
#endif
//==============================================================================
#if JUCE_ENABLE_WIN98_COMPATIBILITY
UNICODE_FUNCTION (RegCreateKeyExW, LONG, (HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD))
UNICODE_FUNCTION (RegOpenKeyExW, LONG, (HKEY, LPCWSTR, DWORD, REGSAM, PHKEY))
UNICODE_FUNCTION (RegQueryValueExW, LONG, (HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD))
UNICODE_FUNCTION (RegSetValueExW, LONG, (HKEY, LPCWSTR, DWORD, DWORD, const BYTE*, DWORD))
UNICODE_FUNCTION (RegDeleteValueW, LONG, (HKEY, LPCWSTR))
UNICODE_FUNCTION (RegDeleteKeyW, LONG, (HKEY, LPCWSTR))
static void juce_initialiseUnicodeRegistryFunctions() throw()
{
static bool initialised = false;
if (! initialised)
{
initialised = true;
if ((SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0)
{
HMODULE h = LoadLibraryA ("Advapi32.dll");
UNICODE_FUNCTION_LOAD (RegCreateKeyExW)
UNICODE_FUNCTION_LOAD (RegOpenKeyExW)
UNICODE_FUNCTION_LOAD (RegQueryValueExW)
UNICODE_FUNCTION_LOAD (RegSetValueExW)
UNICODE_FUNCTION_LOAD (RegDeleteValueW)
UNICODE_FUNCTION_LOAD (RegDeleteKeyW)
}
}
}
#endif
//==============================================================================
static HKEY findKeyForPath (String name,
const bool createForWriting,
String& valueName) throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
juce_initialiseUnicodeRegistryFunctions();
#endif
HKEY rootKey = 0;
if (name.startsWithIgnoreCase (T("HKEY_CURRENT_USER\\")))
@@ -109,42 +75,14 @@ static HKEY findKeyForPath (String name,
if (createForWriting)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegCreateKeyExW != 0)
{
if (wRegCreateKeyExW (rootKey, name, 0, L"", REG_OPTION_NON_VOLATILE,
(KEY_WRITE | KEY_QUERY_VALUE), 0, &key, &result) == ERROR_SUCCESS)
return key;
}
else
{
if (RegCreateKeyEx (rootKey, name, 0, _T(""), REG_OPTION_NON_VOLATILE,
(KEY_WRITE | KEY_QUERY_VALUE), 0, &key, &result) == ERROR_SUCCESS)
return key;
}
#else
if (RegCreateKeyExW (rootKey, name, 0, L"", REG_OPTION_NON_VOLATILE,
(KEY_WRITE | KEY_QUERY_VALUE), 0, &key, &result) == ERROR_SUCCESS)
if (RegCreateKeyEx (rootKey, name, 0, L"", REG_OPTION_NON_VOLATILE,
(KEY_WRITE | KEY_QUERY_VALUE), 0, &key, &result) == ERROR_SUCCESS)
return key;
#endif
}
else
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegOpenKeyExW != 0)
{
if (wRegOpenKeyExW (rootKey, name, 0, KEY_READ, &key) == ERROR_SUCCESS)
return key;
}
else
{
if (RegOpenKeyEx (rootKey, name, 0, KEY_READ, &key) == ERROR_SUCCESS)
return key;
}
#else
if (RegOpenKeyExW (rootKey, name, 0, KEY_READ, &key) == ERROR_SUCCESS)
if (RegOpenKeyEx (rootKey, name, 0, KEY_READ, &key) == ERROR_SUCCESS)
return key;
#endif
}
}
@@ -159,39 +97,14 @@ const String PlatformUtilities::getRegistryValue (const String& regValuePath,
if (k != 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegQueryValueExW != 0)
{
WCHAR buffer [2048];
unsigned long bufferSize = sizeof (buffer);
DWORD type = REG_SZ;
if (wRegQueryValueExW (k, valueName, 0, &type, (LPBYTE) buffer, &bufferSize) == ERROR_SUCCESS)
s = buffer;
else
s = defaultValue;
}
else
{
TCHAR buffer [2048];
unsigned long bufferSize = sizeof (buffer);
DWORD type = REG_SZ;
if (RegQueryValueEx (k, valueName, 0, &type, (LPBYTE) buffer, &bufferSize) == ERROR_SUCCESS)
s = buffer;
else
s = defaultValue;
}
#else
WCHAR buffer [2048];
unsigned long bufferSize = sizeof (buffer);
DWORD type = REG_SZ;
if (RegQueryValueExW (k, valueName, 0, &type, (LPBYTE) buffer, &bufferSize) == ERROR_SUCCESS)
if (RegQueryValueEx (k, valueName, 0, &type, (LPBYTE) buffer, &bufferSize) == ERROR_SUCCESS)
s = buffer;
else
s = defaultValue;
#endif
RegCloseKey (k);
}
@@ -207,20 +120,9 @@ void PlatformUtilities::setRegistryValue (const String& regValuePath,
if (k != 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegSetValueExW != 0)
wRegSetValueExW (k, valueName, 0, REG_SZ,
(const BYTE*) (const WCHAR*) value,
sizeof (WCHAR) * (value.length() + 1));
else
RegSetValueEx (k, valueName, 0, REG_SZ,
(const BYTE*) (const TCHAR*) value,
sizeof (TCHAR) * (value.length() + 1));
#else
RegSetValueExW (k, valueName, 0, REG_SZ,
(const BYTE*) (const WCHAR*) value,
sizeof (WCHAR) * (value.length() + 1));
#endif
RegSetValueEx (k, valueName, 0, REG_SZ,
(const BYTE*) (const WCHAR*) value,
sizeof (WCHAR) * (value.length() + 1));
RegCloseKey (k);
}
@@ -238,21 +140,8 @@ bool PlatformUtilities::registryValueExists (const String& regValuePath)
unsigned long bufferSize = sizeof (buffer);
DWORD type = 0;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegQueryValueExW != 0)
{
if (wRegQueryValueExW (k, valueName, 0, &type, buffer, &bufferSize) == ERROR_SUCCESS)
exists = true;
}
else
{
if (RegQueryValueEx (k, valueName, 0, &type, buffer, &bufferSize) == ERROR_SUCCESS)
exists = true;
}
#else
if (RegQueryValueExW (k, valueName, 0, &type, buffer, &bufferSize) == ERROR_SUCCESS)
if (RegQueryValueEx (k, valueName, 0, &type, buffer, &bufferSize) == ERROR_SUCCESS)
exists = true;
#endif
RegCloseKey (k);
}
@@ -267,15 +156,7 @@ void PlatformUtilities::deleteRegistryValue (const String& regValuePath)
if (k != 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegDeleteValueW != 0)
wRegDeleteValueW (k, valueName);
else
RegDeleteValue (k, valueName);
#else
RegDeleteValueW (k, valueName);
#endif
RegDeleteValue (k, valueName);
RegCloseKey (k);
}
}
@@ -287,15 +168,7 @@ void PlatformUtilities::deleteRegistryKey (const String& regKeyPath)
if (k != 0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegDeleteKeyW != 0)
wRegDeleteKeyW (k, valueName);
else
RegDeleteKey (k, valueName);
#else
RegDeleteKeyW (k, valueName);
#endif
RegDeleteKey (k, valueName);
RegCloseKey (k);
}
}


+ 1
- 9
build/win32/platform_specific_code/juce_win32_SystemStats.cpp View File

@@ -69,10 +69,6 @@ BEGIN_JUCE_NAMESPACE
extern void juce_updateMultiMonitorInfo() throw();
extern void juce_initialiseThreadEvents() throw();
#if JUCE_ENABLE_WIN98_COMPATIBILITY
extern void juce_initialiseUnicodeFileFunctions() throw();
#endif
//==============================================================================
void Logger::outputDebugString (const String& text) throw()
@@ -256,10 +252,6 @@ bool SystemStats::has3DNow() throw()
void SystemStats::initialiseStats() throw()
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
juce_initialiseUnicodeFileFunctions();
#endif
juce_initialiseThreadEvents();
cpuFlags.hasMMX = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE) != 0;
@@ -359,7 +351,7 @@ bool SystemStats::isOperatingSystem64Bit() throw()
#else
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle ("kernel32"), "IsWow64Process");
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress (GetModuleHandle (L"kernel32"), "IsWow64Process");
BOOL isWow64 = FALSE;


+ 25
- 200
build/win32/platform_specific_code/juce_win32_Windowing.cpp View File

@@ -134,48 +134,8 @@ bool Desktop::canUseSemiTransparentWindows() throw()
}
//==============================================================================
#if JUCE_ENABLE_WIN98_COMPATIBILITY
UNICODE_FUNCTION (SetWindowTextW, BOOL, (HWND, LPCWSTR))
UNICODE_FUNCTION (DragQueryFileW, UINT, (HDROP, UINT, LPWSTR, UINT))
UNICODE_FUNCTION (MapVirtualKeyW, UINT, (UINT, UINT))
UNICODE_FUNCTION (ToUnicode, int, (UINT, UINT, const PBYTE, LPWSTR, int, UINT))
UNICODE_FUNCTION (RegisterClassExW, ATOM, (CONST WNDCLASSEXW*))
UNICODE_FUNCTION (CreateWindowExW, HWND, (DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID))
UNICODE_FUNCTION (DefWindowProcW, LRESULT, (HWND, UINT, WPARAM, LPARAM))
void juce_initialiseUnicodeWindowFunctions()
{
static bool initialised = false;
if (! initialised)
{
initialised = true;
if ((SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0)
{
HMODULE h = LoadLibraryA ("user32.dll");
UNICODE_FUNCTION_LOAD (SetWindowTextW)
UNICODE_FUNCTION_LOAD (MapVirtualKeyW)
UNICODE_FUNCTION_LOAD (ToUnicode)
UNICODE_FUNCTION_LOAD (RegisterClassExW)
UNICODE_FUNCTION_LOAD (CreateWindowExW)
UNICODE_FUNCTION_LOAD (DefWindowProcW)
if (wDefWindowProcW == 0)
wDefWindowProcW = & DefWindowProcA;
h = LoadLibraryA ("shell32.dll");
UNICODE_FUNCTION_LOAD (DragQueryFileW)
}
}
}
#undef DefWindowProc
#define DefWindowProc wDefWindowProcW
#else
#undef DefWindowProc
#define DefWindowProc DefWindowProcW
#endif
#undef DefWindowProc
#define DefWindowProc DefWindowProcW
//==============================================================================
const int extendedKeyModifier = 0x10000;
@@ -529,10 +489,6 @@ public:
taskBarIcon (0),
dropTarget (0)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
juce_initialiseUnicodeWindowFunctions();
#endif
MessageManager::getInstance()
->callFunctionOnMessageThread (&createWindowCallback, (void*) this);
@@ -592,14 +548,7 @@ public:
void setTitle (const String& title)
{
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wSetWindowTextW != 0)
wSetWindowTextW (hwnd, title);
else
SetWindowText (hwnd, title);
#else
SetWindowTextW (hwnd, title);
#endif
SetWindowText (hwnd, title);
}
void setPosition (int x, int y)
@@ -762,7 +711,7 @@ public:
if (hasTitleBar())
ShowWindow (hwnd, SW_SHOWMAXIMIZED);
else
SendMessage (hwnd, WM_SETTINGCHANGE, 0, 0);
SendMessageW (hwnd, WM_SETTINGCHANGE, 0, 0);
}
if (! deletionChecker.hasBeenDeleted())
@@ -1024,47 +973,7 @@ private:
GetModuleFileName (moduleHandle, moduleFile, 1024);
WORD iconNum = 0;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if (wRegisterClassExW != 0)
{
WNDCLASSEXW wcex;
wcex.cbSize = sizeof (wcex);
wcex.style = CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC) windowProc;
wcex.lpszClassName = windowClassName;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 32;
wcex.hInstance = moduleHandle;
wcex.hIcon = ExtractAssociatedIcon (moduleHandle, moduleFile, &iconNum);
iconNum = 1;
wcex.hIconSm = ExtractAssociatedIcon (moduleHandle, moduleFile, &iconNum);
wcex.hCursor = 0;
wcex.hbrBackground = 0;
wcex.lpszMenuName = 0;
wRegisterClassExW (&wcex);
}
else
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof (wcex);
wcex.style = CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC) windowProc;
wcex.lpszClassName = windowClassName;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 32;
wcex.hInstance = moduleHandle;
wcex.hIcon = ExtractAssociatedIcon (moduleHandle, moduleFile, &iconNum);
iconNum = 1;
wcex.hIconSm = ExtractAssociatedIcon (moduleHandle, moduleFile, &iconNum);
wcex.hCursor = 0;
wcex.hbrBackground = 0;
wcex.lpszMenuName = 0;
RegisterClassEx (&wcex);
}
#else
WNDCLASSEXW wcex;
WNDCLASSEX wcex;
wcex.cbSize = sizeof (wcex);
wcex.style = CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC) windowProc;
@@ -1079,8 +988,7 @@ private:
wcex.hbrBackground = 0;
wcex.lpszMenuName = 0;
RegisterClassExW (&wcex);
#endif
RegisterClassEx (&wcex);
}
~WindowClassHolder()
@@ -1149,16 +1057,7 @@ private:
&& Desktop::canUseSemiTransparentWindows())
exstyle |= WS_EX_LAYERED;
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const WindowClassHolder* const windowClassHolder = WindowClassHolder::getInstance();
if (wCreateWindowExW != 0)
hwnd = wCreateWindowExW (exstyle, windowClassHolder->windowClassName, L"", type, 0, 0, 0, 0, 0, 0, 0, 0);
else
hwnd = CreateWindowEx (exstyle, windowClassHolder->windowClassName, _T(""), type, 0, 0, 0, 0, 0, 0, 0, 0);
#else
hwnd = CreateWindowExW (exstyle, WindowClassHolder::getInstance()->windowClassName, L"", type, 0, 0, 0, 0, 0, 0, 0, 0);
#endif
hwnd = CreateWindowEx (exstyle, WindowClassHolder::getInstance()->windowClassName, L"", type, 0, 0, 0, 0, 0, 0, 0, 0);
if (hwnd != 0)
{
@@ -1684,13 +1583,7 @@ private:
// if there isn't a WM_CHAR or WM_DEADCHAR message pending, we need to
// manually generate the key-press event that matches this key-down.
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const UINT keyChar = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (key, 2)
: MapVirtualKey (key, 2);
#else
const UINT keyChar = MapVirtualKeyW (key, 2);
#endif
const UINT keyChar = MapVirtualKey (key, 2);
used = handleKeyPress ((int) LOWORD (keyChar), 0) || used;
}
}
@@ -1732,49 +1625,8 @@ private:
else
{
// convert the scan code to an unmodified character code..
#if JUCE_ENABLE_WIN98_COMPATIBILITY
const UINT virtualKey = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (virtualScanCode, 1)
: MapVirtualKey (virtualScanCode, 1);
UINT keyChar = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (virtualKey, 2)
: MapVirtualKey (virtualKey, 2);
if (wToUnicode != 0)
{
BYTE keyState[256];
GetKeyboardState (keyState);
WCHAR unicodeChar[32];
const DWORD converted = wToUnicode (virtualKey, virtualScanCode, keyState,
unicodeChar, 32, 0);
if (converted > 0)
{
// ahem.. can't actually remember why this section of code was originall here,
// so if you see this assertion, please let me know what you were doing at
// the time!
jassert (textChar == unicodeChar[0]);
// textChar = unicodeChar[0];
}
}
#else
const UINT virtualKey = MapVirtualKeyW (virtualScanCode, 1);
UINT keyChar = MapVirtualKeyW (virtualKey, 2);
{
BYTE keyState[256];
GetKeyboardState (keyState);
WCHAR unicodeChar[32];
const DWORD converted = ToUnicode (virtualKey, virtualScanCode, keyState,
unicodeChar, 32, 0);
if (converted > 0)
{
// ahem.. can't actually remember why this section of code was originall here,
// so if you see this assertion, please let me know what you were doing at
// the time!
jassert (textChar == unicodeChar[0]);
// textChar = unicodeChar[0];
}
}
#endif
const UINT virtualKey = MapVirtualKey (virtualScanCode, 1);
UINT keyChar = MapVirtualKey (virtualKey, 2);
keyChar = LOWORD (keyChar);
@@ -3067,34 +2919,6 @@ static HDROP createHDrop (const StringArray& fileNames) throw()
LPDROPFILES pDropFiles = (LPDROPFILES) GlobalLock (hDrop);
pDropFiles->pFiles = sizeof (DROPFILES);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
pDropFiles->fWide = (SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0;
if (pDropFiles->fWide)
{
WCHAR* fname = (WCHAR*) (((char*) pDropFiles) + sizeof (DROPFILES));
for (int i = 0; i < fileNames.size(); ++i)
{
fileNames[i].copyToBuffer (fname, 2048);
fname += fileNames[i].length() + 1;
}
*fname = 0;
}
else
{
char* fname = ((char*) pDropFiles) + sizeof (DROPFILES);
for (int i = 0; i < fileNames.size(); ++i)
{
fileNames[i].copyToBuffer (fname, 2048);
fname += fileNames[i].length() + 1;
}
*fname = 0;
}
#else
pDropFiles->fWide = true;
WCHAR* fname = (WCHAR*) (((char*) pDropFiles) + sizeof (DROPFILES));
@@ -3106,7 +2930,6 @@ static HDROP createHDrop (const StringArray& fileNames) throw()
}
*fname = 0;
#endif
GlobalUnlock (hDrop);
}
@@ -3149,20 +2972,8 @@ bool DragAndDropContainer::performExternalDragDropOfText (const String& text)
medium.hGlobal = GlobalAlloc (GMEM_MOVEABLE | GMEM_ZEROINIT, (numChars + 2) * sizeof (WCHAR));
char* d = (char*) GlobalLock (medium.hGlobal);
#if JUCE_ENABLE_WIN98_COMPATIBILITY
if ((SystemStats::getOperatingSystemType() & SystemStats::WindowsNT) != 0)
{
text.copyToBuffer ((WCHAR*) d, numChars + 1);
format.cfFormat = CF_UNICODETEXT;
}
else
{
text.copyToBuffer (d, numChars + 1);
}
#else
text.copyToBuffer ((WCHAR*) d, numChars + 1);
format.cfFormat = CF_UNICODETEXT;
#endif
GlobalUnlock (medium.hGlobal);
@@ -4033,12 +3844,20 @@ static LRESULT CALLBACK activeXHookWndProc (HWND hwnd, UINT message, WPARAM wPar
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_MBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
if (ax->isShowing())
{
ComponentPeer* const peer = ax->getPeer();
if (peer != 0)
{
offerActiveXMouseEventToPeer (peer, hwnd, message, lParam);
if (! ax->areMouseEventsAllowed())
return 0;
}
}
break;
@@ -4055,7 +3874,8 @@ static LRESULT CALLBACK activeXHookWndProc (HWND hwnd, UINT message, WPARAM wPar
ActiveXControlComponent::ActiveXControlComponent()
: originalWndProc (0),
control (0)
control (0),
mouseEventsAllowed (true)
{
activeXComps.add (this);
}
@@ -4169,5 +3989,10 @@ void ActiveXControlComponent::setControlVisible (const bool shouldBeVisible) con
ShowWindow (hwnd, shouldBeVisible ? SW_SHOWNA : SW_HIDE);
}
void ActiveXControlComponent::setMouseEventsAllowed (const bool eventsCanReachControl)
{
mouseEventsAllowed = eventsCanReachControl;
}
END_JUCE_NAMESPACE

+ 3
- 18
build/win32/platform_specific_code/win32_headers.h View File

@@ -48,6 +48,9 @@
#define _WIN32_WINNT 0x0500
#endif
#define _UNICODE 1
#define UNICODE 1
#include <windows.h>
#include <commdlg.h>
#include <shellapi.h>
@@ -61,22 +64,4 @@
#pragma warning (pop)
#endif
//==============================================================================
#ifndef JUCE_ENABLE_WIN98_COMPATIBILITY
#define JUCE_ENABLE_WIN98_COMPATIBILITY 1
#endif
// helpers for dynamically loading unicode functions..
#if JUCE_ENABLE_WIN98_COMPATIBILITY
#define UNICODE_FUNCTION(functionName, returnType, params) \
typedef returnType (WINAPI *type##functionName) params; \
static type##functionName w##functionName = 0;
#define UNICODE_FUNCTION_LOAD(functionName) \
w##functionName = (type##functionName) GetProcAddress (h, #functionName); \
jassert (w##functionName != 0);
#endif
#endif // __WIN32_HEADERS_JUCEHEADER__

+ 1
- 0
docs/JUCE changelist.txt View File

@@ -28,6 +28,7 @@ Changelist for version 1.46
- 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!)

==============================================================================
Changelist for version 1.45


+ 1
- 1
extras/audio plugins/demo/build/AudioUnit/Info-JuceAU.plist View File

@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string></string>
<string>DemoJuceAudioUnit</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>


+ 0
- 4
extras/audio plugins/demo/build/AudioUnit/JuceDemoAU.xcodeproj/project.pbxproj View File

@@ -32,7 +32,6 @@
84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8C0D917FC700AE1A4C /* AUScopeElement.h */; };
84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */; };
84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8E0D917FC700AE1A4C /* ComponentBase.h */; };
845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; };
845FAEE10A5C2696008C94D8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845FAEE00A5C2696008C94D8 /* QuickTime.framework */; };
84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; };
84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */; };
@@ -48,7 +47,6 @@
84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */; };
84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */; };
84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */; };
84F0521E090674BB00AEC8DB /* Info-JuceAU.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */; };
84F0548F090687F600AEC8DB /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F0548E090687F600AEC8DB /* CoreAudio.framework */; };
84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */; };
84F054E90906C8DD00AEC8DB /* AUMIDIBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */; };
@@ -454,8 +452,6 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
84F0521E090674BB00AEC8DB /* Info-JuceAU.plist in Resources */,
845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};


+ 8
- 0
src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h View File

@@ -105,6 +105,13 @@ public:
*/
void* queryInterface (const void* iid) const;
/** Set this to false to stop mouse events being allowed through to the control.
*/
void setMouseEventsAllowed (const bool eventsCanReachControl);
/** Returns true if mouse events are allowed to get through to the control.
*/
bool areMouseEventsAllowed() const throw() { return mouseEventsAllowed; }
//==============================================================================
/** @internal */
@@ -117,6 +124,7 @@ public:
private:
friend class ActiveXControlData;
void* control;
bool mouseEventsAllowed;
ActiveXControlComponent (const ActiveXControlComponent&);
const ActiveXControlComponent& operator= (const ActiveXControlComponent&);


+ 1083
- 1083
src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp
File diff suppressed because it is too large
View File


+ 1
- 1
src/juce_core/basics/juce_StandardHeader.h View File

@@ -38,7 +38,7 @@
See also SystemStats::getJUCEVersion() for a string version.
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 45
#define JUCE_MINOR_VERSION 46
/** Current Juce version number.


Loading…
Cancel
Save