aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/ScintillaWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r--win32/ScintillaWin.cxx483
1 files changed, 247 insertions, 236 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index c6782721f..a443d518b 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -50,14 +50,16 @@
#include <dwrite.h>
#endif
+#include "ScintillaTypes.h"
+#include "ScintillaMessages.h"
+#include "ScintillaStructures.h"
+#include "ILoader.h"
+#include "ILexer.h"
+
#include "Debugging.h"
#include "Geometry.h"
#include "Platform.h"
-#include "ILoader.h"
-#include "ILexer.h"
-#include "Scintilla.h"
-
#include "CharacterCategoryMap.h"
#include "Position.h"
#include "UniqueString.h"
@@ -124,6 +126,8 @@
#define MK_ALT 32
#endif
+namespace {
+
// Two idle messages SC_WIN_IDLE and SC_WORK_IDLE.
// SC_WIN_IDLE is low priority so should occur after the next WM_PAINT
@@ -134,10 +138,10 @@ constexpr UINT SC_WIN_IDLE = 5001;
// and delivering SCN_UPDATEUI
constexpr UINT SC_WORK_IDLE = 5002;
-#define SC_INDICATOR_INPUT INDICATOR_IME
-#define SC_INDICATOR_TARGET INDICATOR_IME+1
-#define SC_INDICATOR_CONVERTED INDICATOR_IME+2
-#define SC_INDICATOR_UNKNOWN INDICATOR_IME_MAX
+constexpr int IndicatorInput = static_cast<int>(Scintilla::IndicatorNumbers::Ime);
+constexpr int IndicatorTarget = IndicatorInput + 1;
+constexpr int IndicatorConverted = IndicatorInput + 2;
+constexpr int IndicatorUnknown = IndicatorInput + 3;
#ifndef SCS_CAP_SETRECONVERTSTRING
#define SCS_CAP_SETRECONVERTSTRING 0x00000004
@@ -148,9 +152,12 @@ constexpr UINT SC_WORK_IDLE = 5002;
typedef UINT_PTR (WINAPI *SetCoalescableTimerSig)(HWND hwnd, UINT_PTR nIDEvent,
UINT uElapse, TIMERPROC lpTimerFunc, ULONG uToleranceDelay);
+}
+
// GCC has trouble with the standard COM ABI so do it the old C way with explicit vtables.
using namespace Scintilla;
+using namespace Scintilla::Internal;
namespace {
@@ -192,13 +199,8 @@ constexpr bool KeyboardIsNumericKeypadFunction(uptr_t wParam, sptr_t lParam) {
}
}
-}
-
-class ScintillaWin; // Forward declaration for COM interface subobjects
-
typedef void VFunction(void);
-
/**
*/
class FormatEnumerator {
@@ -237,8 +239,6 @@ public:
DropTarget() noexcept;
};
-namespace {
-
class IMContext {
HWND hwnd;
public:
@@ -310,6 +310,8 @@ public:
}
+namespace Scintilla::Internal {
+
/**
*/
class ScintillaWin :
@@ -379,7 +381,7 @@ class ScintillaWin :
void DisplayCursor(Window::Cursor c) override;
bool DragThreshold(Point ptStart, Point ptNow) override;
void StartDrag() override;
- static int MouseModifiers(uptr_t wParam) noexcept;
+ static KeyMod MouseModifiers(uptr_t wParam) noexcept;
Sci::Position TargetAsUTF8(char *text) const;
Sci::Position EncodedFromUTF8(const char *utf8, char *encoded) const;
@@ -408,7 +410,7 @@ class ScintillaWin :
std::string EncodedFromUTF8(std::string_view utf8) const override;
std::string EncodeWString(std::wstring_view wsv);
- sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) override;
+ sptr_t DefWndProc(Message iMessage, uptr_t wParam, sptr_t lParam) override;
void IdleWork() override;
void QueueIdleWork(WorkItems items, Sci::Position upTo) override;
bool SetIdle(bool on) override;
@@ -431,8 +433,8 @@ class ScintillaWin :
void NotifyFocus(bool focus) override;
void SetCtrlID(int identifier) override;
int GetCtrlID() override;
- void NotifyParent(SCNotification scn) override;
- void NotifyDoubleClick(Point pt, int modifiers) override;
+ void NotifyParent(NotificationData scn) override;
+ void NotifyDoubleClick(Point pt, KeyMod modifiers) override;
std::unique_ptr<CaseFolder> CaseFolderForEncoding() override;
std::string CaseMapString(const std::string &s, CaseMapping caseMapping) override;
void Copy() override;
@@ -466,13 +468,13 @@ class ScintillaWin :
sptr_t IMEMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
sptr_t EditMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
sptr_t IdleMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- sptr_t SciMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ sptr_t SciMessage(Message iMessage, uptr_t wParam, sptr_t lParam);
public:
~ScintillaWin() override;
// Public for benefit of Scintilla_DirectFunction
- sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) override;
+ sptr_t WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) override;
/// Implement IUnknown
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppv);
@@ -494,9 +496,6 @@ public:
static bool Register(HINSTANCE hInstance_) noexcept;
static bool Unregister() noexcept;
- friend class DropSource;
- friend class DataObject;
- friend class DropTarget;
bool DragIsRectangularOK(CLIPFORMAT fmt) const noexcept {
return drag.rectangular && (fmt == cfColumnSelect);
}
@@ -589,10 +588,10 @@ void ScintillaWin::Init() {
HMODULE user32 = ::GetModuleHandleW(L"user32.dll");
SetCoalescableTimerFn = DLLFunction<SetCoalescableTimerSig>(user32, "SetCoalescableTimer");
- vs.indicators[SC_INDICATOR_UNKNOWN] = Indicator(INDIC_HIDDEN, ColourRGBA(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_INPUT] = Indicator(INDIC_DOTS, ColourRGBA(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_CONVERTED] = Indicator(INDIC_COMPOSITIONTHICK, ColourRGBA(0, 0, 0xff));
- vs.indicators[SC_INDICATOR_TARGET] = Indicator(INDIC_STRAIGHTBOX, ColourRGBA(0, 0, 0xff));
+ vs.indicators[IndicatorUnknown] = Indicator(IndicatorStyle::Hidden, ColourRGBA(0, 0, 0xff));
+ vs.indicators[IndicatorInput] = Indicator(IndicatorStyle::Dots, ColourRGBA(0, 0, 0xff));
+ vs.indicators[IndicatorConverted] = Indicator(IndicatorStyle::CompositionThick, ColourRGBA(0, 0, 0xff));
+ vs.indicators[IndicatorTarget] = Indicator(IndicatorStyle::StraightBox, ColourRGBA(0, 0, 0xff));
}
void ScintillaWin::Finalise() {
@@ -634,7 +633,7 @@ void ScintillaWin::EnsureRenderTarget(HDC hdc) {
drtp.usage = D2D1_RENDER_TARGET_USAGE_NONE;
drtp.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
- if (technology == SC_TECHNOLOGY_DIRECTWRITEDC) {
+ if (technology == Technology::DirectWriteDC) {
// Explicit pixel format needed.
drtp.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE);
@@ -652,7 +651,7 @@ void ScintillaWin::EnsureRenderTarget(HDC hdc) {
D2D1_HWND_RENDER_TARGET_PROPERTIES dhrtp {};
dhrtp.hwnd = hw;
dhrtp.pixelSize = size;
- dhrtp.presentOptions = (technology == SC_TECHNOLOGY_DIRECTWRITERETAIN) ?
+ dhrtp.presentOptions = (technology == Technology::DirectWriteRetain) ?
D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS : D2D1_PRESENT_OPTIONS_NONE;
ID2D1HwndRenderTarget *pHwndRenderTarget = nullptr;
@@ -678,7 +677,7 @@ void ScintillaWin::EnsureRenderTarget(HDC hdc) {
DropGraphics();
}
- if ((technology == SC_TECHNOLOGY_DIRECTWRITEDC) && pRenderTarget) {
+ if ((technology == Technology::DirectWriteDC) && pRenderTarget) {
RECT rcWindow;
GetClientRect(MainHWND(), &rcWindow);
const HRESULT hr = static_cast<ID2D1DCRenderTarget*>(pRenderTarget)->BindDC(hdc, &rcWindow);
@@ -702,7 +701,7 @@ HWND ScintillaWin::MainHWND() const noexcept {
}
void ScintillaWin::DisplayCursor(Window::Cursor c) {
- if (cursorMode != SC_CURSORNORMAL) {
+ if (cursorMode != CursorShape::Normal) {
c = static_cast<Window::Cursor>(cursorMode);
}
if (c == Window::Cursor::reverseArrow) {
@@ -742,12 +741,15 @@ void ScintillaWin::StartDrag() {
SetDragPosition(SelectionPosition(Sci::invalidPosition));
}
-int ScintillaWin::MouseModifiers(uptr_t wParam) noexcept {
- return ModifierFlags((wParam & MK_SHIFT) != 0,
+KeyMod ScintillaWin::MouseModifiers(uptr_t wParam) noexcept {
+ return ModifierFlags(
+ (wParam & MK_SHIFT) != 0,
(wParam & MK_CONTROL) != 0,
KeyboardIsKeyDown(VK_MENU));
}
+}
+
namespace {
int InputCodePage() noexcept {
@@ -761,36 +763,36 @@ int InputCodePage() noexcept {
return atoi(sCodePage);
}
-/** Map the key codes to their equivalent SCK_ form. */
-int KeyTranslate(int keyIn) noexcept {
+/** Map the key codes to their equivalent Keys:: form. */
+Keys KeyTranslate(int keyIn) noexcept {
//PLATFORM_ASSERT(!keyIn);
switch (keyIn) {
- case VK_DOWN: return SCK_DOWN;
- case VK_UP: return SCK_UP;
- case VK_LEFT: return SCK_LEFT;
- case VK_RIGHT: return SCK_RIGHT;
- case VK_HOME: return SCK_HOME;
- case VK_END: return SCK_END;
- case VK_PRIOR: return SCK_PRIOR;
- case VK_NEXT: return SCK_NEXT;
- case VK_DELETE: return SCK_DELETE;
- case VK_INSERT: return SCK_INSERT;
- case VK_ESCAPE: return SCK_ESCAPE;
- case VK_BACK: return SCK_BACK;
- case VK_TAB: return SCK_TAB;
- case VK_RETURN: return SCK_RETURN;
- case VK_ADD: return SCK_ADD;
- case VK_SUBTRACT: return SCK_SUBTRACT;
- case VK_DIVIDE: return SCK_DIVIDE;
- case VK_LWIN: return SCK_WIN;
- case VK_RWIN: return SCK_RWIN;
- case VK_APPS: return SCK_MENU;
- case VK_OEM_2: return '/';
- case VK_OEM_3: return '`';
- case VK_OEM_4: return '[';
- case VK_OEM_5: return '\\';
- case VK_OEM_6: return ']';
- default: return keyIn;
+ case VK_DOWN: return Keys::Down;
+ case VK_UP: return Keys::Up;
+ case VK_LEFT: return Keys::Left;
+ case VK_RIGHT: return Keys::Right;
+ case VK_HOME: return Keys::Home;
+ case VK_END: return Keys::End;
+ case VK_PRIOR: return Keys::Prior;
+ case VK_NEXT: return Keys::Next;
+ case VK_DELETE: return Keys::Delete;
+ case VK_INSERT: return Keys::Insert;
+ case VK_ESCAPE: return Keys::Escape;
+ case VK_BACK: return Keys::Back;
+ case VK_TAB: return Keys::Tab;
+ case VK_RETURN: return Keys::Return;
+ case VK_ADD: return Keys::Add;
+ case VK_SUBTRACT: return Keys::Subtract;
+ case VK_DIVIDE: return Keys::Divide;
+ case VK_LWIN: return Keys::Win;
+ case VK_RWIN: return Keys::RWin;
+ case VK_APPS: return Keys::Menu;
+ case VK_OEM_2: return static_cast<Keys>('/');
+ case VK_OEM_3: return static_cast<Keys>('`');
+ case VK_OEM_4: return static_cast<Keys>('[');
+ case VK_OEM_5: return static_cast<Keys>('\\');
+ case VK_OEM_6: return static_cast<Keys>(']');
+ default: return static_cast<Keys>(keyIn);
}
}
@@ -880,9 +882,9 @@ Sci::Position ScintillaWin::TargetAsUTF8(char *text) const {
// Need to convert
const std::string s = RangeText(targetRange.start.Position(), targetRange.end.Position());
const std::wstring characters = StringDecode(s, CodePageOfDocument());
- const int utf8Len = MultiByteLenFromWideChar(CP_UTF8, characters);
+ const int utf8Len = MultiByteLenFromWideChar(CpUtf8, characters);
if (text) {
- MultiByteFromWideChar(CP_UTF8, characters, text, utf8Len);
+ MultiByteFromWideChar(CpUtf8, characters, text, utf8Len);
text[utf8Len] = '\0';
}
return utf8Len;
@@ -902,9 +904,9 @@ Sci::Position ScintillaWin::EncodedFromUTF8(const char *utf8, char *encoded) con
} else {
// Need to convert
const std::string_view utf8Input(utf8, inputLength);
- const int charsLen = WideCharLenFromMultiByte(CP_UTF8, utf8Input);
+ const int charsLen = WideCharLenFromMultiByte(CpUtf8, utf8Input);
std::wstring characters(charsLen, L'\0');
- WideCharFromMultiByte(CP_UTF8, utf8Input, &characters[0], charsLen);
+ WideCharFromMultiByte(CpUtf8, utf8Input, &characters[0], charsLen);
const int encodedLen = MultiByteLenFromWideChar(CodePageOfDocument(), characters);
if (encoded) {
@@ -916,7 +918,7 @@ Sci::Position ScintillaWin::EncodedFromUTF8(const char *utf8, char *encoded) con
}
bool ScintillaWin::PaintDC(HDC hdc) {
- if (technology == SC_TECHNOLOGY_DEFAULT) {
+ if (technology == Technology::Default) {
AutoSurface surfaceWindow(hdc, this);
if (surfaceWindow) {
Paint(surfaceWindow, rcPaint);
@@ -987,7 +989,7 @@ sptr_t ScintillaWin::HandleCompositionWindowed(uptr_t wParam, sptr_t lParam) {
if (lParam & GCS_RESULTSTR) {
IMContext imc(MainHWND());
if (imc.hIMC) {
- AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::imeResult);
+ AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::ImeResult);
// Set new position after converted
const Point pos = PointMainCaret();
@@ -1020,7 +1022,7 @@ void ScintillaWin::DrawImeIndicator(int indicator, Sci::Position len) {
// Draw an indicator on the character before caret by the character bytes of len
// so it should be called after InsertCharacter().
// It does not affect caret positions.
- if (indicator < 8 || indicator > INDICATOR_MAX) {
+ if (indicator < 8 || indicator > IndicatorMax) {
return;
}
pdoc->DecorationSetCurrentIndicator(indicator);
@@ -1123,21 +1125,21 @@ void ScintillaWin::ToggleHanja() {
namespace {
std::vector<int> MapImeIndicators(std::vector<BYTE> inputStyle) {
- std::vector<int> imeIndicator(inputStyle.size(), SC_INDICATOR_UNKNOWN);
+ std::vector<int> imeIndicator(inputStyle.size(), IndicatorUnknown);
for (size_t i = 0; i < inputStyle.size(); i++) {
switch (static_cast<int>(inputStyle.at(i))) {
case ATTR_INPUT:
- imeIndicator[i] = SC_INDICATOR_INPUT;
+ imeIndicator[i] = IndicatorInput;
break;
case ATTR_TARGET_NOTCONVERTED:
case ATTR_TARGET_CONVERTED:
- imeIndicator[i] = SC_INDICATOR_TARGET;
+ imeIndicator[i] = IndicatorTarget;
break;
case ATTR_CONVERTED:
- imeIndicator[i] = SC_INDICATOR_CONVERTED;
+ imeIndicator[i] = IndicatorConverted;
break;
default:
- imeIndicator[i] = SC_INDICATOR_UNKNOWN;
+ imeIndicator[i] = IndicatorUnknown;
break;
}
}
@@ -1184,7 +1186,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
view.imeCaretBlockOverride = false;
if (lParam & GCS_RESULTSTR) {
- AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::imeResult);
+ AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::ImeResult);
}
if (lParam & GCS_COMPSTR) {
@@ -1210,7 +1212,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
const size_t ucWidth = UTF16CharLength(wsv[i]);
const std::string docChar = StringEncode(wsv.substr(i, ucWidth), codePage);
- InsertCharacter(docChar, CharacterSource::tentativeInput);
+ InsertCharacter(docChar, CharacterSource::TentativeInput);
DrawImeIndicator(imeIndicator[i], docChar.size());
i += ucWidth;
@@ -1221,7 +1223,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
// After candidate item been added, it's looks like been full selected, it's better to keep caret
// at end of "selection" (end of input) instead of jump to beginning of input ("selection").
const bool onlyTarget = std::all_of(imeIndicator.begin(), imeIndicator.end(), [](int i) noexcept {
- return i == SC_INDICATOR_TARGET;
+ return i == IndicatorTarget;
});
if (!onlyTarget) {
// CS_NOMOVECARET: keep caret at beginning of composition string which already moved in InsertCharacter().
@@ -1237,7 +1239,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
MoveImeCarets(-currentPos + imeCaretPosDoc);
- if (std::find(imeIndicator.begin(), imeIndicator.end(), SC_INDICATOR_TARGET) != imeIndicator.end()) {
+ if (std::find(imeIndicator.begin(), imeIndicator.end(), IndicatorTarget) != imeIndicator.end()) {
// set candidate window left aligned to beginning of target string.
SetCandidateWindowPos();
}
@@ -1255,65 +1257,66 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
namespace {
-// Translate message IDs from WM_* and EM_* to SCI_* so can partly emulate Windows Edit control
-unsigned int SciMessageFromEM(unsigned int iMessage) noexcept {
+// Translate message IDs from WM_* and EM_* to Message::* so can partly emulate Windows Edit control
+Message SciMessageFromEM(unsigned int iMessage) noexcept {
switch (iMessage) {
- case EM_CANPASTE: return SCI_CANPASTE;
- case EM_CANUNDO: return SCI_CANUNDO;
- case EM_EMPTYUNDOBUFFER: return SCI_EMPTYUNDOBUFFER;
- case EM_FINDTEXTEX: return SCI_FINDTEXT;
- case EM_FORMATRANGE: return SCI_FORMATRANGE;
- case EM_GETFIRSTVISIBLELINE: return SCI_GETFIRSTVISIBLELINE;
- case EM_GETLINECOUNT: return SCI_GETLINECOUNT;
- case EM_GETSELTEXT: return SCI_GETSELTEXT;
- case EM_GETTEXTRANGE: return SCI_GETTEXTRANGE;
- case EM_HIDESELECTION: return SCI_HIDESELECTION;
- case EM_LINEINDEX: return SCI_POSITIONFROMLINE;
- case EM_LINESCROLL: return SCI_LINESCROLL;
- case EM_REPLACESEL: return SCI_REPLACESEL;
- case EM_SCROLLCARET: return SCI_SCROLLCARET;
- case EM_SETREADONLY: return SCI_SETREADONLY;
- case WM_CLEAR: return SCI_CLEAR;
- case WM_COPY: return SCI_COPY;
- case WM_CUT: return SCI_CUT;
- case WM_SETTEXT: return SCI_SETTEXT;
- case WM_PASTE: return SCI_PASTE;
- case WM_UNDO: return SCI_UNDO;
- }
- return iMessage;
-}
-
-}
-
-namespace Scintilla {
-
-UINT CodePageFromCharSet(DWORD characterSet, UINT documentCodePage) noexcept {
- if (documentCodePage == SC_CP_UTF8) {
- return SC_CP_UTF8;
+ case EM_CANPASTE: return Message::CanPaste;
+ case EM_CANUNDO: return Message::CanUndo;
+ case EM_EMPTYUNDOBUFFER: return Message::EmptyUndoBuffer;
+ case EM_FINDTEXTEX: return Message::FindText;
+ case EM_FORMATRANGE: return Message::FormatRange;
+ case EM_GETFIRSTVISIBLELINE: return Message::GetFirstVisibleLine;
+ case EM_GETLINECOUNT: return Message::GetLineCount;
+ case EM_GETSELTEXT: return Message::GetSelText;
+ case EM_GETTEXTRANGE: return Message::GetTextRange;
+ case EM_HIDESELECTION: return Message::HideSelection;
+ case EM_LINEINDEX: return Message::PositionFromLine;
+ case EM_LINESCROLL: return Message::LineScroll;
+ case EM_REPLACESEL: return Message::ReplaceSel;
+ case EM_SCROLLCARET: return Message::ScrollCaret;
+ case EM_SETREADONLY: return Message::SetReadOnly;
+ case WM_CLEAR: return Message::Clear;
+ case WM_COPY: return Message::Copy;
+ case WM_CUT: return Message::Cut;
+ case WM_SETTEXT: return Message::SetText;
+ case WM_PASTE: return Message::Paste;
+ case WM_UNDO: return Message::Undo;
+ }
+ return static_cast<Message>(iMessage);
+}
+
+}
+
+namespace Scintilla::Internal {
+
+UINT CodePageFromCharSet(CharacterSet characterSet, UINT documentCodePage) noexcept {
+ if (documentCodePage == CpUtf8) {
+ return CpUtf8;
}
switch (characterSet) {
- case SC_CHARSET_ANSI: return 1252;
- case SC_CHARSET_DEFAULT: return documentCodePage ? documentCodePage : 1252;
- case SC_CHARSET_BALTIC: return 1257;
- case SC_CHARSET_CHINESEBIG5: return 950;
- case SC_CHARSET_EASTEUROPE: return 1250;
- case SC_CHARSET_GB2312: return 936;
- case SC_CHARSET_GREEK: return 1253;
- case SC_CHARSET_HANGUL: return 949;
- case SC_CHARSET_MAC: return 10000;
- case SC_CHARSET_OEM: return 437;
- case SC_CHARSET_RUSSIAN: return 1251;
- case SC_CHARSET_SHIFTJIS: return 932;
- case SC_CHARSET_TURKISH: return 1254;
- case SC_CHARSET_JOHAB: return 1361;
- case SC_CHARSET_HEBREW: return 1255;
- case SC_CHARSET_ARABIC: return 1256;
- case SC_CHARSET_VIETNAMESE: return 1258;
- case SC_CHARSET_THAI: return 874;
- case SC_CHARSET_8859_15: return 28605;
+ case CharacterSet::Ansi: return 1252;
+ case CharacterSet::Default: return documentCodePage ? documentCodePage : 1252;
+ case CharacterSet::Baltic: return 1257;
+ case CharacterSet::ChineseBig5: return 950;
+ case CharacterSet::EastEurope: return 1250;
+ case CharacterSet::GB2312: return 936;
+ case CharacterSet::Greek: return 1253;
+ case CharacterSet::Hangul: return 949;
+ case CharacterSet::Mac: return 10000;
+ case CharacterSet::Oem: return 437;
+ case CharacterSet::Russian: return 1251;
+ case CharacterSet::ShiftJis: return 932;
+ case CharacterSet::Turkish: return 1254;
+ case CharacterSet::Johab: return 1361;
+ case CharacterSet::Hebrew: return 1255;
+ case CharacterSet::Arabic: return 1256;
+ case CharacterSet::Vietnamese: return 1258;
+ case CharacterSet::Thai: return 874;
+ case CharacterSet::Iso8859_15: return 28605;
// Not supported
- case SC_CHARSET_CYRILLIC: return documentCodePage;
- case SC_CHARSET_SYMBOL: return documentCodePage;
+ case CharacterSet::Cyrillic: return documentCodePage;
+ case CharacterSet::Symbol: return documentCodePage;
+ default: break;
}
return documentCodePage;
}
@@ -1321,7 +1324,7 @@ UINT CodePageFromCharSet(DWORD characterSet, UINT documentCodePage) noexcept {
}
UINT ScintillaWin::CodePageOfDocument() const noexcept {
- return CodePageFromCharSet(vs.styles[STYLE_DEFAULT].characterSet, pdoc->dbcsCodePage);
+ return CodePageFromCharSet(vs.styles[StyleDefault].characterSet, pdoc->dbcsCodePage);
}
std::string ScintillaWin::EncodeWString(std::wstring_view wsv) {
@@ -1526,9 +1529,9 @@ sptr_t ScintillaWin::MouseMessage(unsigned int iMessage, uptr_t wParam, sptr_t l
// Zoom! We play with the font sizes in the styles.
// Number of steps/line is ignored, we just care if sizing up or down
if (linesToScroll < 0) {
- KeyCommand(SCI_ZOOMIN);
+ KeyCommand(Message::ZoomIn);
} else {
- KeyCommand(SCI_ZOOMOUT);
+ KeyCommand(Message::ZoomOut);
}
} else {
// Scroll
@@ -1558,7 +1561,8 @@ sptr_t ScintillaWin::KeyMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
// Don't interpret these as they may be characters entered by number.
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
}
- const int ret = KeyDownWithModifiers(KeyTranslate(static_cast<int>(wParam)),
+ const int ret = KeyDownWithModifiers(
+ static_cast<Keys>(KeyTranslate(static_cast<int>(wParam))),
ModifierFlags(KeyboardIsKeyDown(VK_SHIFT),
KeyboardIsKeyDown(VK_CONTROL),
altDown),
@@ -1587,7 +1591,7 @@ sptr_t ScintillaWin::KeyMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
lastHighSurrogateChar = 0;
wclen = 2;
}
- AddWString(std::wstring_view(wcs, wclen), CharacterSource::directInput);
+ AddWString(std::wstring_view(wcs, wclen), CharacterSource::DirectInput);
}
return 0;
@@ -1599,7 +1603,7 @@ sptr_t ScintillaWin::KeyMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
} else {
wchar_t wcs[3] = { 0 };
const size_t wclen = UTF16FromUTF32Character(static_cast<unsigned int>(wParam), wcs);
- AddWString(std::wstring_view(wcs, wclen), CharacterSource::directInput);
+ AddWString(std::wstring_view(wcs, wclen), CharacterSource::DirectInput);
return FALSE;
}
}
@@ -1659,7 +1663,7 @@ sptr_t ScintillaWin::IMEMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
}
case WM_IME_STARTCOMPOSITION:
- if (KoreanIME() || imeInteraction == IMEInteraction::internal) {
+ if (KoreanIME() || imeInteraction == IMEInteraction::Inline) {
return 0;
} else {
ImeStartComposition();
@@ -1671,14 +1675,14 @@ sptr_t ScintillaWin::IMEMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
case WM_IME_COMPOSITION:
- if (KoreanIME() || imeInteraction == IMEInteraction::internal) {
+ if (KoreanIME() || imeInteraction == IMEInteraction::Inline) {
return HandleCompositionInline(wParam, lParam);
} else {
return HandleCompositionWindowed(wParam, lParam);
}
case WM_IME_SETCONTEXT:
- if (KoreanIME() || imeInteraction == IMEInteraction::internal) {
+ if (KoreanIME() || imeInteraction == IMEInteraction::Inline) {
if (wParam) {
LPARAM NoImeWin = lParam;
NoImeWin = NoImeWin & (~ISC_SHOWUICOMPOSITIONWINDOW);
@@ -1797,34 +1801,34 @@ sptr_t ScintillaWin::IdleMessage(unsigned int iMessage, uptr_t wParam, sptr_t lP
return 0;
}
-sptr_t ScintillaWin::SciMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
+sptr_t ScintillaWin::SciMessage(Message iMessage, uptr_t wParam, sptr_t lParam) {
switch (iMessage) {
- case SCI_GETDIRECTFUNCTION:
+ case Message::GetDirectFunction:
return reinterpret_cast<sptr_t>(DirectFunction);
- case SCI_GETDIRECTPOINTER:
+ case Message::GetDirectPointer:
return reinterpret_cast<sptr_t>(this);
- case SCI_GRABFOCUS:
+ case Message::GrabFocus:
::SetFocus(MainHWND());
break;
#ifdef INCLUDE_DEPRECATED_FEATURES
- case SCI_SETKEYSUNICODE:
+ case Message::SETKEYSUNICODE:
break;
- case SCI_GETKEYSUNICODE:
+ case Message::GETKEYSUNICODE:
return true;
#endif
- case SCI_SETTECHNOLOGY:
- if ((wParam == SC_TECHNOLOGY_DEFAULT) ||
- (wParam == SC_TECHNOLOGY_DIRECTWRITERETAIN) ||
- (wParam == SC_TECHNOLOGY_DIRECTWRITEDC) ||
- (wParam == SC_TECHNOLOGY_DIRECTWRITE)) {
- const int technologyNew = static_cast<int>(wParam);
+ case Message::SetTechnology:
+ if (Technology technologyNew = static_cast<Technology>(wParam);
+ (technologyNew == Technology::Default) ||
+ (technologyNew == Technology::DirectWriteRetain) ||
+ (technologyNew == Technology::DirectWriteDC) ||
+ (technologyNew == Technology::DirectWrite)) {
if (technology != technologyNew) {
- if (technologyNew > SC_TECHNOLOGY_DEFAULT) {
+ if (technologyNew > Technology::Default) {
#if defined(USE_D2D)
if (!LoadD2D())
// Failed to load Direct2D or DirectWrite so no effect
@@ -1833,7 +1837,7 @@ sptr_t ScintillaWin::SciMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
return 0;
#endif
} else {
- bidirectional = EditModel::Bidirectional::bidiDisabled;
+ bidirectional = Bidirectional::Disabled;
}
DropRenderTarget();
technology = technologyNew;
@@ -1844,33 +1848,36 @@ sptr_t ScintillaWin::SciMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPa
}
break;
- case SCI_SETBIDIRECTIONAL:
- if (technology == SC_TECHNOLOGY_DEFAULT) {
- bidirectional = EditModel::Bidirectional::bidiDisabled;
- } else if (wParam <= SC_BIDIRECTIONAL_R2L) {
- bidirectional = static_cast<EditModel::Bidirectional>(wParam);
+ case Message::SetBidirectional:
+ if (technology == Technology::Default) {
+ bidirectional = Bidirectional::Disabled;
+ } else if (static_cast<Bidirectional>(wParam) <= Bidirectional::R2L) {
+ bidirectional = static_cast<Bidirectional>(wParam);
}
// Invalidate all cached information including layout.
DropGraphics();
InvalidateStyleRedraw();
break;
- case SCI_TARGETASUTF8:
+ case Message::TargetAsUTF8:
return TargetAsUTF8(CharPtrFromSPtr(lParam));
- case SCI_ENCODEDFROMUTF8:
+ case Message::EncodedFromUTF8:
return EncodedFromUTF8(ConstCharPtrFromUPtr(wParam),
CharPtrFromSPtr(lParam));
+
+ default:
+ break;
}
return 0;
}
-sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
+sptr_t ScintillaWin::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) {
try {
//Platform::DebugPrintf("S M:%x WP:%x L:%x\n", iMessage, wParam, lParam);
- iMessage = SciMessageFromEM(iMessage);
- switch (iMessage) {
+ const unsigned int msg = static_cast<unsigned int>(iMessage);
+ switch (msg) {
case WM_CREATE:
ctrlID = ::GetDlgCtrlID(HwndFromWindow(wMain));
@@ -1890,7 +1897,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_PRINTCLIENT: {
HDC hdc = reinterpret_cast<HDC>(wParam);
if (!IsCompatibleDC(hdc)) {
- return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
+ return ::DefWindowProc(MainHWND(), msg, wParam, lParam);
}
FullPaintDC(hdc);
}
@@ -1918,10 +1925,10 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case SC_WIN_IDLE:
case SC_WORK_IDLE:
- return IdleMessage(iMessage, wParam, lParam);
+ return IdleMessage(msg, wParam, lParam);
case WM_GETMINMAXINFO:
- return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
+ return ::DefWindowProc(MainHWND(), msg, wParam, lParam);
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
@@ -1929,7 +1936,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_MOUSEMOVE:
case WM_MOUSELEAVE:
case WM_MOUSEWHEEL:
- return MouseMessage(iMessage, wParam, lParam);
+ return MouseMessage(msg, wParam, lParam);
case WM_SETCURSOR:
if (LOWORD(lParam) == HTCLIENT) {
@@ -1940,7 +1947,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
}
return TRUE;
} else {
- return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
+ return ::DefWindowProc(MainHWND(), msg, wParam, lParam);
}
case WM_SYSKEYDOWN:
@@ -1948,7 +1955,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_KEYUP:
case WM_CHAR:
case WM_UNICHAR:
- return KeyMessage(iMessage, wParam, lParam);
+ return KeyMessage(msg, wParam, lParam);
case WM_SETTINGCHANGE:
//Platform::DebugPrintf("Setting Changed\n");
@@ -1963,7 +1970,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_KILLFOCUS:
case WM_SETFOCUS:
- return FocusMessage(iMessage, wParam, lParam);
+ return FocusMessage(msg, wParam, lParam);
case WM_SYSCOLORCHANGE:
//Platform::DebugPrintf("Setting Changed\n");
@@ -1986,7 +1993,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
break;
case WM_CONTEXTMENU:
- return ShowContextMenu(iMessage, wParam, lParam);
+ return ShowContextMenu(msg, wParam, lParam);
case WM_ERASEBKGND:
return 1; // Avoid any background erasure as whole window painted.
@@ -2008,7 +2015,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_SYSCOMMAND:
case WM_WINDOWPOSCHANGING:
case WM_WINDOWPOSCHANGED:
- return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
+ return ::DefWindowProc(MainHWND(), msg, wParam, lParam);
case WM_GETTEXTLENGTH:
return GetTextLength();
@@ -2025,7 +2032,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case WM_IME_COMPOSITION:
case WM_IME_SETCONTEXT:
case WM_IME_NOTIFY:
- return IMEMessage(iMessage, wParam, lParam);
+ return IMEMessage(msg, wParam, lParam);
case EM_LINEFROMCHAR:
case EM_EXLINEFROMCHAR:
@@ -2033,34 +2040,33 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case EM_EXGETSEL:
case EM_SETSEL:
case EM_EXSETSEL:
- return EditMessage(iMessage, wParam, lParam);
+ return EditMessage(msg, wParam, lParam);
+ }
- case SCI_GETDIRECTFUNCTION:
- case SCI_GETDIRECTPOINTER:
- case SCI_GRABFOCUS:
-#ifdef INCLUDE_DEPRECATED_FEATURES
- case SCI_SETKEYSUNICODE:
- case SCI_GETKEYSUNICODE:
-#endif
- case SCI_SETTECHNOLOGY:
- case SCI_SETBIDIRECTIONAL:
- case SCI_TARGETASUTF8:
- case SCI_ENCODEDFROMUTF8:
+ iMessage = SciMessageFromEM(msg);
+ switch (iMessage) {
+ case Message::GetDirectFunction:
+ case Message::GetDirectPointer:
+ case Message::GrabFocus:
+ case Message::SetTechnology:
+ case Message::SetBidirectional:
+ case Message::TargetAsUTF8:
+ case Message::EncodedFromUTF8:
return SciMessage(iMessage, wParam, lParam);
default:
return ScintillaBase::WndProc(iMessage, wParam, lParam);
}
} catch (std::bad_alloc &) {
- errorStatus = SC_STATUS_BADALLOC;
+ errorStatus = Status::BadAlloc;
} catch (...) {
- errorStatus = SC_STATUS_FAILURE;
+ errorStatus = Status::Failure;
}
return 0;
}
bool ScintillaWin::ValidCodePage(int codePage) const {
- return codePage == 0 || codePage == SC_CP_UTF8 ||
+ return codePage == 0 || codePage == CpUtf8 ||
codePage == 932 || codePage == 936 || codePage == 949 ||
codePage == 950 || codePage == 1361;
}
@@ -2071,7 +2077,7 @@ std::string ScintillaWin::UTF8FromEncoded(std::string_view encoded) const {
} else {
// Pivot through wide string
std::wstring ws = StringDecode(encoded, CodePageOfDocument());
- return StringEncode(ws, SC_CP_UTF8);
+ return StringEncode(ws, CpUtf8);
}
}
@@ -2080,13 +2086,13 @@ std::string ScintillaWin::EncodedFromUTF8(std::string_view utf8) const {
return std::string(utf8);
} else {
// Pivot through wide string
- std::wstring ws = StringDecode(utf8, SC_CP_UTF8);
+ std::wstring ws = StringDecode(utf8, CpUtf8);
return StringEncode(ws, CodePageOfDocument());
}
}
-sptr_t ScintillaWin::DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
- return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);
+sptr_t ScintillaWin::DefWndProc(Message iMessage, uptr_t wParam, sptr_t lParam) {
+ return ::DefWindowProc(MainHWND(), static_cast<unsigned int>(iMessage), wParam, lParam);
}
bool ScintillaWin::FineTickerRunning(TickReason reason) {
@@ -2174,12 +2180,12 @@ void ScintillaWin::SetTrackMouseLeaveEvent(bool on) noexcept {
}
void ScintillaWin::UpdateBaseElements() {
- struct ElementToIndex { int element; int nIndex; };
+ struct ElementToIndex { Element element; int nIndex; };
ElementToIndex eti[] = {
- { SC_ELEMENT_LIST, COLOR_WINDOWTEXT },
- { SC_ELEMENT_LIST_BACK, COLOR_WINDOW },
- { SC_ELEMENT_LIST_SELECTED, COLOR_HIGHLIGHTTEXT },
- { SC_ELEMENT_LIST_SELECTED_BACK, COLOR_HIGHLIGHT },
+ { Element::List, COLOR_WINDOWTEXT },
+ { Element::ListBack, COLOR_WINDOW },
+ { Element::ListSelected, COLOR_HIGHLIGHTTEXT },
+ { Element::ListSelectedBack, COLOR_HIGHLIGHT },
};
bool changed = false;
for (const ElementToIndex &ei : eti) {
@@ -2310,14 +2316,14 @@ bool ScintillaWin::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) {
void ScintillaWin::NotifyChange() {
::SendMessage(::GetParent(MainHWND()), WM_COMMAND,
- MAKEWPARAM(GetCtrlID(), SCEN_CHANGE),
+ MAKEWPARAM(GetCtrlID(), FocusChange::Change),
reinterpret_cast<LPARAM>(MainHWND()));
}
void ScintillaWin::NotifyFocus(bool focus) {
if (commandEvents) {
::SendMessage(::GetParent(MainHWND()), WM_COMMAND,
- MAKEWPARAM(GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS),
+ MAKEWPARAM(GetCtrlID(), focus ? FocusChange::Setfocus : FocusChange::Killfocus),
reinterpret_cast<LPARAM>(MainHWND()));
}
Editor::NotifyFocus(focus);
@@ -2331,20 +2337,20 @@ int ScintillaWin::GetCtrlID() {
return ::GetDlgCtrlID(HwndFromWindow(wMain));
}
-void ScintillaWin::NotifyParent(SCNotification scn) {
+void ScintillaWin::NotifyParent(NotificationData scn) {
scn.nmhdr.hwndFrom = MainHWND();
scn.nmhdr.idFrom = GetCtrlID();
::SendMessage(::GetParent(MainHWND()), WM_NOTIFY,
GetCtrlID(), reinterpret_cast<LPARAM>(&scn));
}
-void ScintillaWin::NotifyDoubleClick(Point pt, int modifiers) {
+void ScintillaWin::NotifyDoubleClick(Point pt, KeyMod modifiers) {
//Platform::DebugPrintf("ScintillaWin Double click 0\n");
ScintillaBase::NotifyDoubleClick(pt, modifiers);
// Send myself a WM_LBUTTONDBLCLK, so the container can handle it too.
::SendMessage(MainHWND(),
WM_LBUTTONDBLCLK,
- (modifiers & SCI_SHIFT) ? MK_SHIFT : 0,
+ FlagSet(modifiers, KeyMod::Shift) ? MK_SHIFT : 0,
MAKELPARAM(pt.x, pt.y));
}
@@ -2409,7 +2415,7 @@ public:
std::unique_ptr<CaseFolder> ScintillaWin::CaseFolderForEncoding() {
const UINT cpDest = CodePageOfDocument();
- if (cpDest == SC_CP_UTF8) {
+ if (cpDest == CpUtf8) {
return std::make_unique<CaseFolderUnicode>();
} else {
if (pdoc->dbcsCodePage == 0) {
@@ -2452,7 +2458,7 @@ std::string ScintillaWin::CaseMapString(const std::string &s, CaseMapping caseMa
return s;
const UINT cpDoc = CodePageOfDocument();
- if (cpDoc == SC_CP_UTF8) {
+ if (cpDoc == CpUtf8) {
return CaseConvertString(s, (caseMapping == CaseMapping::upper) ? CaseConversion::upper : CaseConversion::lower);
}
@@ -2570,7 +2576,7 @@ void ScintillaWin::Paste() {
UndoGroup ug(pdoc);
const bool isLine = SelectionEmpty() &&
(::IsClipboardFormatAvailable(cfLineSelect) || ::IsClipboardFormatAvailable(cfVSLineTag));
- ClearSelection(multiPasteMode == SC_MULTIPASTE_EACH);
+ ClearSelection(multiPasteMode == MultiPaste::Each);
bool isRectangular = (::IsClipboardFormatAvailable(cfColumnSelect) != 0);
if (!isRectangular) {
@@ -2797,10 +2803,10 @@ STDMETHODIMP DataObject_EnumFormatEtc(DataObject *pd, DWORD dwDirection, IEnumFO
return FormatEnumerator_QueryInterface(pfe, IID_IEnumFORMATETC,
reinterpret_cast<void **>(ppEnum));
} catch (std::bad_alloc &) {
- pd->sci->errorStatus = SC_STATUS_BADALLOC;
+ pd->sci->errorStatus = Status::BadAlloc;
return E_OUTOFMEMORY;
} catch (...) {
- pd->sci->errorStatus = SC_STATUS_FAILURE;
+ pd->sci->errorStatus = Status::Failure;
return E_FAIL;
}
}
@@ -2858,7 +2864,7 @@ STDMETHODIMP DropTarget_DragEnter(DropTarget *dt, LPDATAOBJECT pIDataSource, DWO
try {
return dt->sci->DragEnter(pIDataSource, grfKeyState, pt, pdwEffect);
} catch (...) {
- dt->sci->errorStatus = SC_STATUS_FAILURE;
+ dt->sci->errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -2866,7 +2872,7 @@ STDMETHODIMP DropTarget_DragOver(DropTarget *dt, DWORD grfKeyState, POINTL pt, P
try {
return dt->sci->DragOver(grfKeyState, pt, pdwEffect);
} catch (...) {
- dt->sci->errorStatus = SC_STATUS_FAILURE;
+ dt->sci->errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -2874,7 +2880,7 @@ STDMETHODIMP DropTarget_DragLeave(DropTarget *dt) {
try {
return dt->sci->DragLeave();
} catch (...) {
- dt->sci->errorStatus = SC_STATUS_FAILURE;
+ dt->sci->errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -2883,7 +2889,7 @@ STDMETHODIMP DropTarget_Drop(DropTarget *dt, LPDATAOBJECT pIDataSource, DWORD gr
try {
return dt->sci->Drop(pIDataSource, grfKeyState, pt, pdwEffect);
} catch (...) {
- dt->sci->errorStatus = SC_STATUS_FAILURE;
+ dt->sci->errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -2924,12 +2930,12 @@ void ScintillaWin::ImeStartComposition() {
// The logfont for the IME is recreated here.
const int styleHere = pdoc->StyleIndexAt(sel.MainCaret());
LOGFONTW lf = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L""};
- int sizeZoomed = vs.styles[styleHere].size + vs.zoomLevel * SC_FONT_SIZE_MULTIPLIER;
- if (sizeZoomed <= 2 * SC_FONT_SIZE_MULTIPLIER) // Hangs if sizeZoomed <= 1
- sizeZoomed = 2 * SC_FONT_SIZE_MULTIPLIER;
+ int sizeZoomed = vs.styles[styleHere].size + vs.zoomLevel * FontSizeMultiplier;
+ if (sizeZoomed <= 2 * FontSizeMultiplier) // Hangs if sizeZoomed <= 1
+ sizeZoomed = 2 * FontSizeMultiplier;
// The negative is to allow for leading
- lf.lfHeight = -::MulDiv(sizeZoomed, dpi, 72*SC_FONT_SIZE_MULTIPLIER);
- lf.lfWeight = vs.styles[styleHere].weight;
+ lf.lfHeight = -::MulDiv(sizeZoomed, dpi, 72*FontSizeMultiplier);
+ lf.lfWeight = static_cast<LONG>(vs.styles[styleHere].weight);
lf.lfItalic = vs.styles[styleHere].italic ? 1 : 0;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfFaceName[0] = L'\0';
@@ -3171,7 +3177,7 @@ void ScintillaWin::HorizontalScrollMessage(WPARAM wParam) {
* This paint will not be abandoned.
*/
void ScintillaWin::FullPaint() {
- if ((technology == SC_TECHNOLOGY_DEFAULT) || (technology == SC_TECHNOLOGY_DIRECTWRITEDC)) {
+ if ((technology == Technology::Default) || (technology == Technology::DirectWriteDC)) {
HDC hdc = ::GetDC(MainHWND());
FullPaintDC(hdc);
::ReleaseDC(MainHWND(), hdc);
@@ -3283,7 +3289,7 @@ STDMETHODIMP ScintillaWin::DragOver(DWORD grfKeyState, POINTL pt, PDWORD pdwEffe
return S_OK;
} catch (...) {
- errorStatus = SC_STATUS_FAILURE;
+ errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -3293,7 +3299,7 @@ STDMETHODIMP ScintillaWin::DragLeave() {
SetDragPosition(SelectionPosition(Sci::invalidPosition));
return S_OK;
} catch (...) {
- errorStatus = SC_STATUS_FAILURE;
+ errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -3341,7 +3347,7 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,
return S_OK;
} catch (...) {
- errorStatus = SC_STATUS_FAILURE;
+ errorStatus = Status::Failure;
}
return E_FAIL;
}
@@ -3439,7 +3445,7 @@ BOOL ScintillaWin::CreateSystemCaret() {
const BOOL retval = ::CreateCaret(
MainHWND(), sysCaretBitmap,
sysCaretWidth, sysCaretHeight);
- if (technology == SC_TECHNOLOGY_DEFAULT) {
+ if (technology == Technology::Default) {
// System caret interferes with Direct2D drawing so only show it for GDI.
::ShowCaret(MainHWND());
}
@@ -3485,14 +3491,14 @@ LRESULT PASCAL ScintillaWin::CTWndProc(
RECT rc;
GetClientRect(hWnd, &rc);
// Create a Direct2D render target.
- if (sciThis->technology == SC_TECHNOLOGY_DEFAULT) {
+ if (sciThis->technology == Technology::Default) {
surfaceWindow->Init(ps.hdc, hWnd);
} else {
#if defined(USE_D2D)
D2D1_HWND_RENDER_TARGET_PROPERTIES dhrtp;
dhrtp.hwnd = hWnd;
dhrtp.pixelSize = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);
- dhrtp.presentOptions = (sciThis->technology == SC_TECHNOLOGY_DIRECTWRITERETAIN) ?
+ dhrtp.presentOptions = (sciThis->technology == Technology::DirectWriteRetain) ?
D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS : D2D1_PRESENT_OPTIONS_NONE;
D2D1_RENDER_TARGET_PROPERTIES drtp;
@@ -3550,7 +3556,7 @@ LRESULT PASCAL ScintillaWin::CTWndProc(
}
}
} catch (...) {
- sciThis->errorStatus = SC_STATUS_FAILURE;
+ sciThis->errorStatus = Status::Failure;
}
return ::DefWindowProc(hWnd, iMessage, wParam, lParam);
}
@@ -3558,14 +3564,14 @@ 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(iMessage, wParam, lParam);
+ return reinterpret_cast<ScintillaWin *>(ptr)->WndProc(static_cast<Message>(iMessage), wParam, lParam);
}
-namespace Scintilla {
+namespace Scintilla::Internal {
sptr_t DirectFunction(
ScintillaWin *sci, UINT iMessage, uptr_t wParam, sptr_t lParam) {
- return sci->WndProc(iMessage, wParam, lParam);
+ return sci->WndProc(static_cast<Message>(iMessage), wParam, lParam);
}
}
@@ -3585,7 +3591,7 @@ LRESULT PASCAL ScintillaWin::SWndProc(
// Create C++ object associated with window
sci = new ScintillaWin(hWnd);
SetWindowPointer(hWnd, sci);
- return sci->WndProc(iMessage, wParam, lParam);
+ return sci->WndProc(static_cast<Message>(iMessage), wParam, lParam);
}
} catch (...) {
}
@@ -3600,19 +3606,19 @@ LRESULT PASCAL ScintillaWin::SWndProc(
SetWindowPointer(hWnd, nullptr);
return ::DefWindowProc(hWnd, iMessage, wParam, lParam);
} else {
- return sci->WndProc(iMessage, wParam, lParam);
+ return sci->WndProc(static_cast<Message>(iMessage), wParam, lParam);
}
}
}
// This function is externally visible so it can be called from container when building statically.
// Must be called once only.
-int Scintilla_RegisterClasses(void *hInstance) {
+extern "C" int Scintilla_RegisterClasses(void *hInstance) {
const bool result = ScintillaWin::Register(static_cast<HINSTANCE>(hInstance));
return result;
}
-namespace Scintilla {
+namespace Scintilla::Internal {
int ResourcesRelease(bool fromDllMain) noexcept {
const bool result = ScintillaWin::Unregister();
@@ -3620,9 +3626,14 @@ int ResourcesRelease(bool fromDllMain) noexcept {
return result;
}
+int RegisterClasses(void *hInstance) noexcept {
+ const bool result = ScintillaWin::Register(static_cast<HINSTANCE>(hInstance));
+ return result;
+}
+
}
// This function is externally visible so it can be called from container when building statically.
-int Scintilla_ReleaseResources() {
- return Scintilla::ResourcesRelease(false);
+extern "C" int Scintilla_ReleaseResources() {
+ return Scintilla::Internal::ResourcesRelease(false);
}