diff options
author | Neil <nyamatongwe@gmail.com> | 2021-06-17 09:28:05 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-06-17 09:28:05 +1000 |
commit | 9e52243831ceffced1e9f0ef27041770fe13a85a (patch) | |
tree | a14b3f24127e77c4c28e16e0b81e0a5dac929e2c /win32/ScintillaWin.cxx | |
parent | 37edcd47eed457d80e353bccfe9e601578ccca33 (diff) | |
download | scintilla-mirror-9e52243831ceffced1e9f0ef27041770fe13a85a.tar.gz |
Add SciFnDirectStatus, a direct access function which also returns status so can
improve performance for client code that called SCI_GETSTATUS after every API to
check for failure.
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r-- | win32/ScintillaWin.cxx | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 068cef15f..0af4a6d65 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -371,6 +371,8 @@ class ScintillaWin : static sptr_t DirectFunction( sptr_t ptr, UINT iMessage, uptr_t wParam, sptr_t lParam); + static sptr_t DirectStatusFunction( + sptr_t ptr, UINT iMessage, uptr_t wParam, sptr_t lParam, int *pStatus); static LRESULT PASCAL SWndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam); static LRESULT PASCAL CTWndProc( @@ -1792,6 +1794,9 @@ sptr_t ScintillaWin::SciMessage(Message iMessage, uptr_t wParam, sptr_t lParam) case Message::GetDirectFunction: return reinterpret_cast<sptr_t>(DirectFunction); + case Message::GetDirectStatusFunction: + return reinterpret_cast<sptr_t>(DirectStatusFunction); + case Message::GetDirectPointer: return reinterpret_cast<sptr_t>(this); @@ -2032,6 +2037,7 @@ sptr_t ScintillaWin::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) { iMessage = SciMessageFromEM(msg); switch (iMessage) { case Message::GetDirectFunction: + case Message::GetDirectStatusFunction: case Message::GetDirectPointer: case Message::GrabFocus: case Message::SetTechnology: @@ -3549,8 +3555,18 @@ LRESULT PASCAL ScintillaWin::CTWndProc( sptr_t ScintillaWin::DirectFunction( sptr_t ptr, UINT iMessage, uptr_t wParam, sptr_t lParam) { - PLATFORM_ASSERT(::GetCurrentThreadId() == ::GetWindowThreadProcessId(reinterpret_cast<ScintillaWin *>(ptr)->MainHWND(), nullptr)); - return reinterpret_cast<ScintillaWin *>(ptr)->WndProc(static_cast<Message>(iMessage), wParam, lParam); + ScintillaWin *sci = reinterpret_cast<ScintillaWin *>(ptr); + PLATFORM_ASSERT(::GetCurrentThreadId() == ::GetWindowThreadProcessId(sci->MainHWND(), nullptr)); + return sci->WndProc(static_cast<Message>(iMessage), wParam, lParam); +} + +sptr_t ScintillaWin::DirectStatusFunction( + sptr_t ptr, UINT iMessage, uptr_t wParam, sptr_t lParam, int *pStatus) { + ScintillaWin *sci = reinterpret_cast<ScintillaWin *>(ptr); + PLATFORM_ASSERT(::GetCurrentThreadId() == ::GetWindowThreadProcessId(sci->MainHWND(), nullptr)); + const sptr_t returnValue = sci->WndProc(static_cast<Message>(iMessage), wParam, lParam); + *pStatus = static_cast<int>(sci->errorStatus); + return returnValue; } namespace Scintilla::Internal { |