From 803c8d922cd669ab46d074b5e295caad9992c7e2 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sat, 12 Sep 2020 16:49:11 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=AF=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=81=AE=E8=AA=AC=E6=98=8E=E6=96=87?= =?UTF-8?q?=E3=81=AB"\n"=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sakura_core/window/CTipWnd.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/sakura_core/window/CTipWnd.cpp b/sakura_core/window/CTipWnd.cpp index 4281ead03a..14b02c4b89 100644 --- a/sakura_core/window/CTipWnd.cpp +++ b/sakura_core/window/CTipWnd.cpp @@ -17,6 +17,10 @@ #include "StdAfx.h" #include "CTipWnd.h" + +#include +#include + #include "env/CShareData.h" #include "env/DLLSHAREDATA.h" #include "util/window.h" @@ -151,6 +155,16 @@ void CTipWnd::ComputeWindowSize( const int cx4 = DpiScaleX( 4 ); const int cy4 = DpiScaleY( 4 ); + std::wregex re1( LR"(([^\\])\\n)" ); + std::wregex re2( LR"((\\)\\)" ); + if( m_cInfo.IsValid() + && ( std::regex_search( m_cInfo.GetStringPtr(), re1 ) || std::regex_search( m_cInfo.GetStringPtr(), re2 ) ) ){ + auto text = std::regex_replace( m_cInfo.GetStringPtr(), re1, L"$1\n" ); + text = std::regex_replace( text, re1, L"$1\n" ); + text = std::regex_replace( text, re2, L"$1" ); + m_cInfo.SetString( text.c_str(), text.length() ); + } + // 計測対象をメンバ変数からローカル変数に取得 const WCHAR* pszText = m_cInfo.GetStringPtr(); const size_t cchText = m_cInfo.GetStringLength(); @@ -166,7 +180,7 @@ void CTipWnd::ComputeWindowSize( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { // 計測結果を格納する矩形 CMyRect rc; // 計測対象の文字列がブランクでない場合 @@ -197,7 +211,7 @@ void CTipWnd::ComputeWindowSize( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める @@ -247,7 +261,7 @@ void CTipWnd::DrawTipText( const bool isEndOfText = ( pszText[i] == '\0' ); // iの位置にNUL終端、または"\n"がある場合 if ( isEndOfText - || ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) { + || pszText[i] == '\n' ) { int nHeight; // 計測対象の文字列がブランクでない場合 if ( 0 < i - nLineBgn ) { @@ -269,7 +283,7 @@ void CTipWnd::DrawTipText( } // 次の行の開始位置を設定する - nLineBgn = i + 2; // "\\n" の文字数 + nLineBgn = i + 1; // "\n" の文字数 i = nLineBgn; }else{ // 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める