diff options
Diffstat (limited to 'win32')
-rw-r--r-- | win32/PlatWin.cxx | 112 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 40 | ||||
-rw-r--r-- | win32/makefile | 3 | ||||
-rw-r--r-- | win32/scintilla.mak | 3 |
4 files changed, 30 insertions, 128 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 72513b071..355a35145 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -46,6 +46,7 @@ #include "StringCopy.h" #include "XPM.h" #include "UniConversion.h" +#include "DBCS.h" #include "FontQuality.h" #ifndef SPI_GETFONTSMOOTHINGCONTRAST @@ -75,10 +76,6 @@ static HCURSOR reverseArrowCursor = NULL; namespace Scintilla { #endif -Point Point::FromLong(long lpoint) { - return Point(static_cast<short>(LOWORD(lpoint)), static_cast<short>(HIWORD(lpoint))); -} - static RECT RectFromPRectangle(PRectangle prc) { RECT rc = {static_cast<LONG>(prc.left), static_cast<LONG>(prc.top), static_cast<LONG>(prc.right), static_cast<LONG>(prc.bottom)}; @@ -558,7 +555,6 @@ public: XYPOSITION Ascent(Font &font_) override; XYPOSITION Descent(Font &font_) override; XYPOSITION InternalLeading(Font &font_) override; - XYPOSITION ExternalLeading(Font &font_) override; XYPOSITION Height(Font &font_) override; XYPOSITION AverageCharWidth(Font &font_) override; @@ -1010,13 +1006,6 @@ XYPOSITION SurfaceGDI::InternalLeading(Font &font_) { return static_cast<XYPOSITION>(tm.tmInternalLeading); } -XYPOSITION SurfaceGDI::ExternalLeading(Font &font_) { - SetFont(font_); - TEXTMETRIC tm; - ::GetTextMetrics(hdc, &tm); - return static_cast<XYPOSITION>(tm.tmExternalLeading); -} - XYPOSITION SurfaceGDI::Height(Font &font_) { SetFont(font_); TEXTMETRIC tm; @@ -1121,7 +1110,6 @@ public: XYPOSITION Ascent(Font &font_) override; XYPOSITION Descent(Font &font_) override; XYPOSITION InternalLeading(Font &font_) override; - XYPOSITION ExternalLeading(Font &font_) override; XYPOSITION Height(Font &font_) override; XYPOSITION AverageCharWidth(Font &font_) override; @@ -1671,7 +1659,7 @@ void SurfaceD2D::MeasureWidths(Font &font_, const char *s, int len, XYPOSITION * int ui = 0; for (int i=0; i<len && ui<tbuf.tlen;) { positions[i] = poses.buffer[ui]; - if (Platform::IsDBCSLeadByte(codePageText, s[i])) { + if (DBCSIsLeadByte(codePageText, s[i])) { positions[i+1] = poses.buffer[ui]; i += 2; } else { @@ -1716,11 +1704,6 @@ XYPOSITION SurfaceD2D::InternalLeading(Font &font_) { return floor(yInternalLeading); } -XYPOSITION SurfaceD2D::ExternalLeading(Font &) { - // Not implemented, always return one - return 1; -} - XYPOSITION SurfaceD2D::Height(Font &font_) { return Ascent(font_) + Descent(font_); } @@ -1786,10 +1769,6 @@ void Window::Destroy() { wid = 0; } -bool Window::HasFocus() { - return ::GetFocus() == wid; -} - PRectangle Window::GetPosition() { RECT rc; ::GetWindowRect(static_cast<HWND>(wid), &rc); @@ -1952,10 +1931,6 @@ void Window::SetCursor(Cursor curs) { } } -void Window::SetTitle(const char *s) { - ::SetWindowTextA(static_cast<HWND>(wid), s); -} - /* Returns rectangle of monitor pt is on, both rect and pt are in Window's coordinates */ PRectangle Window::GetMonitorRect(Point pt) { @@ -3024,85 +2999,10 @@ unsigned int Platform::DoubleClickTime() { return ::GetDoubleClickTime(); } -bool Platform::MouseButtonBounce() { - return false; -} - void Platform::DebugDisplay(const char *s) { ::OutputDebugStringA(s); } -bool Platform::IsKeyDown(int key) { - return (::GetKeyState(key) & 0x80000000) != 0; -} - -long Platform::SendScintilla(WindowID w, unsigned int msg, unsigned long wParam, long lParam) { - // This should never be called - its here to satisfy an old interface - return static_cast<long>(::SendMessage(static_cast<HWND>(w), msg, wParam, lParam)); -} - -long Platform::SendScintillaPointer(WindowID w, unsigned int msg, unsigned long wParam, void *lParam) { - // This should never be called - its here to satisfy an old interface - return static_cast<long>(::SendMessage(static_cast<HWND>(w), msg, wParam, - reinterpret_cast<LPARAM>(lParam))); -} - -bool Platform::IsDBCSLeadByte(int codePage, char ch) { - // Byte ranges found in Wikipedia articles with relevant search strings in each case - const unsigned char uch = static_cast<unsigned char>(ch); - switch (codePage) { - case 932: - // Shift_jis - return ((uch >= 0x81) && (uch <= 0x9F)) || - ((uch >= 0xE0) && (uch <= 0xEF)); - case 936: - // GBK - return (uch >= 0x81) && (uch <= 0xFE); - case 949: - // Korean Wansung KS C-5601-1987 - return (uch >= 0x81) && (uch <= 0xFE); - case 950: - // Big5 - return (uch >= 0x81) && (uch <= 0xFE); - case 1361: - // Korean Johab KS C-5601-1992 - return - ((uch >= 0x84) && (uch <= 0xD3)) || - ((uch >= 0xD8) && (uch <= 0xDE)) || - ((uch >= 0xE0) && (uch <= 0xF9)); - } - return false; -} - -int Platform::DBCSCharLength(int codePage, const char *s) { - if (codePage == 932 || codePage == 936 || codePage == 949 || - codePage == 950 || codePage == 1361) { - return Platform::IsDBCSLeadByte(codePage, s[0]) ? 2 : 1; - } else { - return 1; - } -} - -int Platform::DBCSCharMaxLength() { - return 2; -} - -// These are utility functions not really tied to a platform - -int Platform::Minimum(int a, int b) { - if (a < b) - return a; - else - return b; -} - -int Platform::Maximum(int a, int b) { - if (a > b) - return a; - else - return b; -} - //#define TRACE #ifdef TRACE @@ -3147,14 +3047,6 @@ void Platform::Assert(const char *c, const char *file, int line) { } } -int Platform::Clamp(int val, int minVal, int maxVal) { - if (val > maxVal) - val = maxVal; - if (val < minVal) - val = minVal; - return val; -} - void Platform_Initialise(void *hInstance) { ::InitializeCriticalSection(&crPlatformLock); hinstPlatformRes = static_cast<HINSTANCE>(hInstance); diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 81f288c72..faf4701c3 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -156,6 +156,14 @@ static Point PointFromPOINT(POINT pt) { return Point::FromInts(pt.x, pt.y); } +static Point PointFromLong(long lpoint) { + return Point(static_cast<short>(LOWORD(lpoint)), static_cast<short>(HIWORD(lpoint))); +} + +static bool KeyboardIsKeyDown(int key) { + return (::GetKeyState(key) & 0x80000000) != 0; +} + class ScintillaWin; // Forward declaration for COM interface subobjects typedef void VFunction(void); @@ -1376,19 +1384,19 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam ::ImmNotifyIME(imc.hIMC, NI_COMPOSITIONSTR, CPS_COMPLETE, 0); // //Platform::DebugPrintf("Buttdown %d %x %x %x %x %x\n",iMessage, wParam, lParam, - // Platform::IsKeyDown(VK_SHIFT), - // Platform::IsKeyDown(VK_CONTROL), - // Platform::IsKeyDown(VK_MENU)); + // KeyboardIsKeyDown(VK_SHIFT), + // KeyboardIsKeyDown(VK_CONTROL), + // KeyboardIsKeyDown(VK_MENU)); ::SetFocus(MainHWND()); - ButtonDown(Point::FromLong(static_cast<long>(lParam)), ::GetMessageTime(), + ButtonDown(PointFromLong(static_cast<long>(lParam)), ::GetMessageTime(), (wParam & MK_SHIFT) != 0, (wParam & MK_CONTROL) != 0, - Platform::IsKeyDown(VK_MENU)); + KeyboardIsKeyDown(VK_MENU)); } break; case WM_MOUSEMOVE: { - const Point pt = Point::FromLong(static_cast<long>(lParam)); + const Point pt = PointFromLong(static_cast<long>(lParam)); // Windows might send WM_MOUSEMOVE even though the mouse has not been moved: // http://blogs.msdn.com/b/oldnewthing/archive/2003/10/01/55108.aspx @@ -1397,7 +1405,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam ButtonMoveWithModifiers(pt, ((wParam & MK_SHIFT) != 0 ? SCI_SHIFT : 0) | ((wParam & MK_CONTROL) != 0 ? SCI_CTRL : 0) | - (Platform::IsKeyDown(VK_MENU) ? SCI_ALT : 0)); + (KeyboardIsKeyDown(VK_MENU) ? SCI_ALT : 0)); } } break; @@ -1408,22 +1416,22 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); case WM_LBUTTONUP: - ButtonUp(Point::FromLong(static_cast<long>(lParam)), + ButtonUp(PointFromLong(static_cast<long>(lParam)), ::GetMessageTime(), (wParam & MK_CONTROL) != 0); break; case WM_RBUTTONDOWN: { ::SetFocus(MainHWND()); - Point pt = Point::FromLong(static_cast<long>(lParam)); + Point pt = PointFromLong(static_cast<long>(lParam)); if (!PointInSelection(pt)) { CancelModes(); - SetEmptySelection(PositionFromLocation(Point::FromLong(static_cast<long>(lParam)))); + SetEmptySelection(PositionFromLocation(PointFromLong(static_cast<long>(lParam)))); } RightButtonDownWithModifiers(pt, ::GetMessageTime(), ModifierFlags((wParam & MK_SHIFT) != 0, (wParam & MK_CONTROL) != 0, - Platform::IsKeyDown(VK_MENU))); + KeyboardIsKeyDown(VK_MENU))); } break; @@ -1487,9 +1495,9 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam //Platform::DebugPrintf("S keydown %d %x %x %x %x\n",iMessage, wParam, lParam, ::IsKeyDown(VK_SHIFT), ::IsKeyDown(VK_CONTROL)); lastKeyDownConsumed = false; const int ret = KeyDown(KeyTranslate(static_cast<int>(wParam)), - Platform::IsKeyDown(VK_SHIFT), - Platform::IsKeyDown(VK_CONTROL), - Platform::IsKeyDown(VK_MENU), + KeyboardIsKeyDown(VK_SHIFT), + KeyboardIsKeyDown(VK_CONTROL), + KeyboardIsKeyDown(VK_MENU), &lastKeyDownConsumed); if (!ret && !lastKeyDownConsumed) { return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); @@ -1573,7 +1581,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam } case WM_CONTEXTMENU: { - Point pt = Point::FromLong(static_cast<long>(lParam)); + Point pt = PointFromLong(static_cast<long>(lParam)); POINT rpt = {static_cast<int>(pt.x), static_cast<int>(pt.y)}; ::ScreenToClient(MainHWND(), &rpt); const Point ptClient = PointFromPOINT(rpt); @@ -3350,7 +3358,7 @@ LRESULT PASCAL ScintillaWin::CTWndProc( return 0; } else if (iMessage == WM_LBUTTONDOWN) { // This does not fire due to the hit test code - sciThis->ct.MouseClick(Point::FromLong(static_cast<long>(lParam))); + sciThis->ct.MouseClick(PointFromLong(static_cast<long>(lParam))); sciThis->CallTipClick(); return 0; } else if (iMessage == WM_SETCURSOR) { diff --git a/win32/makefile b/win32/makefile index 07413f60f..9f6309f67 100644 --- a/win32/makefile +++ b/win32/makefile @@ -13,7 +13,7 @@ else LDMINGW = -Wl,--enable-runtime-pseudo-reloc-v2 -Wl,--add-stdcall-alias LIBSMINGW = -lstdc++ STRIPOPTION = -s -CXXSTD = gnu++0x +CXXSTD = gnu++17 endif .SUFFIXES: .cxx @@ -83,6 +83,7 @@ BASEOBJS = \ CharacterSet.o \ CharClassify.o \ ContractionState.o \ + DBCS.o \ Decoration.o \ Document.o \ EditModel.o \ diff --git a/win32/scintilla.mak b/win32/scintilla.mak index c13eedc7d..612d278ad 100644 --- a/win32/scintilla.mak +++ b/win32/scintilla.mak @@ -25,7 +25,7 @@ XP_LINK=-SUBSYSTEM:WINDOWS,5.01 !ENDIF CRTFLAGS=-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -D_CRT_SECURE_NO_DEPRECATE=1 -D_SCL_SECURE_NO_WARNINGS=1 $(XP_DEFINE) -CXXFLAGS=-Zi -TP -MP -W4 -EHsc $(CRTFLAGS) +CXXFLAGS=-Zi -TP -MP -W4 -EHsc -std:c++latest $(CRTFLAGS) CXXDEBUG=-Od -MTd -DDEBUG CXXNDEBUG=-O1 -MT -DNDEBUG -GL NAME=-Fo @@ -75,6 +75,7 @@ SHAREDOBJS=\ $(DIR_O)\CharacterSet.obj \ $(DIR_O)\CharClassify.obj \ $(DIR_O)\ContractionState.obj \ + $(DIR_O)\DBCS.obj \ $(DIR_O)\Decoration.obj \ $(DIR_O)\Document.obj \ $(DIR_O)\EditModel.obj \ |