diff --git a/DesktopEditor/common/ByteBuilder.cpp b/DesktopEditor/common/ByteBuilder.cpp index f0fa34f15a..bbe00e1e6b 100644 --- a/DesktopEditor/common/ByteBuilder.cpp +++ b/DesktopEditor/common/ByteBuilder.cpp @@ -99,15 +99,6 @@ namespace NSMemoryUtils m_pDataCur += nSizeof; } void CByteBuilder::WriteString(const std::wstring& sText) - { - size_t nSize = (sText.length() + 1) * sizeof(wchar_t); - AddSize(nSize); - memcpy(m_pDataCur, sText.c_str(), nSize - sizeof(wchar_t)); - - m_pDataCur += nSize; - m_lSizeCur += nSize; - } - void CByteBuilder::WriteStringUTF8(const std::wstring& sText) { int nSizeof = sizeof(wchar_t); size_t nSize = (sText.length() + 1) * nSizeof; @@ -119,6 +110,10 @@ namespace NSMemoryUtils m_lSizeCur += nSize; m_pDataCur += nSizeof; } + void CByteBuilder::WriteStringUTF8(const std::wstring& sText) + { + WriteString(U_TO_UTF8(sText)); + } void CByteBuilder::WriteInt(const int& value) { @@ -181,7 +176,7 @@ namespace NSMemoryUtils std::string CByteReader::GetString() { BYTE* pEnd = m_pDataCur; - while (pEnd != 0) + while (*pEnd != 0) pEnd++; std::string sRet((char*)m_pDataCur, pEnd - m_pDataCur); m_pDataCur = pEnd + 1; @@ -191,7 +186,7 @@ namespace NSMemoryUtils { wchar_t* pStart = (wchar_t*)m_pDataCur; wchar_t* pEnd = pStart; - while (pEnd != 0) + while (*pEnd != 0) pEnd++; std::wstring sRet((wchar_t*)m_pDataCur, pEnd - pStart); m_pDataCur += (((pEnd - pStart) + 1) * sizeof(wchar_t)); @@ -200,7 +195,7 @@ namespace NSMemoryUtils std::wstring CByteReader::GetStringUTF8() { BYTE* pEnd = m_pDataCur; - while (pEnd != 0) + while (*pEnd != 0) pEnd++; std::string sRet((char*)m_pDataCur, pEnd - m_pDataCur); m_pDataCur = pEnd + 1; diff --git a/DesktopEditor/fontengine/ApplicationFonts.h b/DesktopEditor/fontengine/ApplicationFonts.h index 53a89dd426..ba3735d6f2 100644 --- a/DesktopEditor/fontengine/ApplicationFonts.h +++ b/DesktopEditor/fontengine/ApplicationFonts.h @@ -103,6 +103,8 @@ public: RELEASEOBJECT(pTemp); } m_pList.clear(); + + RELEASEARRAYOBJECTS(m_pRanges); } virtual std::vector* GetFonts() { return &m_pList; } diff --git a/DesktopEditor/fontengine/FontManager.cpp b/DesktopEditor/fontengine/FontManager.cpp index e742f9b358..12a3bd9383 100644 --- a/DesktopEditor/fontengine/FontManager.cpp +++ b/DesktopEditor/fontengine/FontManager.cpp @@ -784,6 +784,7 @@ CFontFile* CFontManager::GetFontFileBySymbol(CFontFile* pFile, int code) CFontFile* pFontOld = m_pFont; m_pFont = NULL; + std::wstring sOldName = m_sName; int nStyle = 0; if (pFile->m_bNeedDoBold || pFile->IsBold()) @@ -801,7 +802,10 @@ CFontFile* CFontManager::GetFontFileBySymbol(CFontFile* pFile, int code) CFontFile* pFontNew = m_pFont; m_pFont = pFontOld; + m_sName = sOldName; memcpy(pFontNew->m_arrdTextMatrix, pFile->m_arrdTextMatrix, 6 * sizeof(double)); pFontNew->UpdateMatrix2(); + + return pFontNew; } diff --git a/DesktopEditor/fontengine/application_generate_fonts.h b/DesktopEditor/fontengine/application_generate_fonts.h index eca6ef4abf..88a6f060d4 100644 --- a/DesktopEditor/fontengine/application_generate_fonts.h +++ b/DesktopEditor/fontengine/application_generate_fonts.h @@ -1030,9 +1030,11 @@ namespace NSCommon if (pRangeBuilder) { + size_t nPosCur = pRangeBuilder->GetCurSize(); pRangeBuilder->SetCurSize(0); pRangeBuilder->WriteInt(nRangeBuilderCount); - oFile.WriteFile(pRangeBuilder->GetData(), (DWORD)pRangeBuilder->GetSize()); + pRangeBuilder->SetCurSize(nPosCur); + oFile.WriteFile(pRangeBuilder->GetData(), (DWORD)pRangeBuilder->GetCurSize()); } oFile.CloseFile(); diff --git a/DesktopEditor/graphics/ImageFilesCache.h b/DesktopEditor/graphics/ImageFilesCache.h index 3287aed014..1dd93288e4 100644 --- a/DesktopEditor/graphics/ImageFilesCache.h +++ b/DesktopEditor/graphics/ImageFilesCache.h @@ -107,12 +107,18 @@ public: m_lMaxCount = 10; m_oCS.InitializeCriticalSection(); + + if (m_pApplicationFonts) + m_pApplicationFonts->AddRef(); } virtual ~CImageFilesCache() { Clear(); m_oCS.DeleteCriticalSection(); + + if (m_pApplicationFonts) + m_pApplicationFonts->Release(); } virtual void Clear() @@ -179,9 +185,13 @@ public: return m_lRef; } - virtual void SetApplicationFonts(CApplicationFonts* pApplicationFonts) + virtual void SetApplicationFonts(NSFonts::IApplicationFonts* pApplicationFonts) { - m_pApplicationFonts = pApplicationFonts; + if (m_pApplicationFonts) + m_pApplicationFonts->Release(); + m_pApplicationFonts = (CApplicationFonts*)pApplicationFonts; + if (m_pApplicationFonts) + m_pApplicationFonts->AddRef(); } }; diff --git a/DesktopEditor/graphics/pro/Image.h b/DesktopEditor/graphics/pro/Image.h index 3c4530d916..3abeb6a277 100644 --- a/DesktopEditor/graphics/pro/Image.h +++ b/DesktopEditor/graphics/pro/Image.h @@ -63,7 +63,7 @@ namespace NSImages virtual ICacheImage* Lock(const std::wstring& strFile) = 0; - void SetApplicationFonts(NSFonts::IApplicationFonts* pApplicationFonts); + virtual void SetApplicationFonts(NSFonts::IApplicationFonts* pApplicationFonts) = 0; }; namespace NSFilesCache