From 48925d98f3970f3b0b8d66839e6c2046e18fa964 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sun, 1 Jul 2012 13:10:10 +0300 Subject: Optimize QWindowsFontEngineDirectWrite::initFontInfo() a bit by using QVarLengthArray instead of allocating memory on a heap and by skipping a subsequent checks & calls in some cases. Change-Id: I300d8eaf02ef718ce50833b7c2ca7ebe8cfd0224 Reviewed-by: Friedemann Kleint --- .../windows/qwindowsfontenginedirectwrite.cpp | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp index 568de480a0..80f91ea5fd 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include @@ -680,39 +681,38 @@ void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request, hr = fontFamily->GetFamilyNames(&familyNames); UINT32 index = 0; - BOOL exists = false; - - wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr)) { - int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); + BOOL exists = false; + wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; + int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); if (defaultLocaleSuccess) hr = familyNames->FindLocaleName(localeName, &index, &exists); if (SUCCEEDED(hr) && !exists) hr = familyNames->FindLocaleName(L"en-us", &index, &exists); + + if (!exists) + index = 0; } - if (!exists) - index = 0; + // Get the family name. + if (SUCCEEDED(hr)) { + UINT32 length = 0; - UINT32 length = 0; - if (SUCCEEDED(hr)) hr = familyNames->GetStringLength(index, &length); - wchar_t *name = new (std::nothrow) wchar_t[length+1]; - if (name == NULL) - hr = E_OUTOFMEMORY; + if (SUCCEEDED(hr)) { + QVarLengthArray name(length+1); - // Get the family name. - if (SUCCEEDED(hr)) - hr = familyNames->GetString(index, name, length + 1); + hr = familyNames->GetString(index, name.data(), name.size()); - if (SUCCEEDED(hr)) - fontDef.family = QString::fromWCharArray(name); + if (SUCCEEDED(hr)) + fontDef.family = QString::fromWCharArray(name.constData()); + } + } - delete[] name; if (familyNames != NULL) familyNames->Release(); -- cgit v1.2.3