# HG changeset patch # User Neil # Date 1497232196 -36000 # Node ID 7030530a9a0f4fc1203a04378e83d82f0c35e7a0 # Parent 7e28cdba6d61e090ac6f6627c855ffd2603508e4 Removed unused functions and methods from Platform.h. Replaced Platform::Clamp with Sci::clamp but will later change this to std::clamp once on full C++17 compilers. Drop MouseButtonBounce workaround for very early GTK+/Linux. diff -r 7e28cdba6d61 -r 7030530a9a0f cocoa/PlatCocoa.mm --- a/cocoa/PlatCocoa.mm Sun Jun 11 14:08:43 2017 +1000 +++ b/cocoa/PlatCocoa.mm Mon Jun 12 11:49:56 2017 +1000 @@ -83,18 +83,6 @@ return rc; } -//----------------- Point -------------------------------------------------------------------------- - -/** - * Converts a point given as a long into a native Point structure. - */ -Scintilla::Point Scintilla::Point::FromLong(long lpoint) { - return Scintilla::Point( - Platform::LowShortFromLong(lpoint), - Platform::HighShortFromLong(lpoint) - ); -} - //----------------- Font --------------------------------------------------------------------------- Font::Font(): fid(0) { @@ -921,7 +909,7 @@ } else if (codePage) { int ui = 0; for (int i=0; i(xPosition); @@ -984,15 +972,6 @@ return 0; } -XYPOSITION SurfaceImpl::ExternalLeading(Font &font_) { - if (!font_.GetID()) - return 1; - - float leading = static_cast(font_.GetID())->getLeading(); - return leading + 0.5f; - -} - XYPOSITION SurfaceImpl::Height(Font &font_) { return Ascent(font_) + Descent(font_); @@ -1043,13 +1022,6 @@ //-------------------------------------------------------------------------------------------------- -bool Window::HasFocus() { - NSView *container = (__bridge NSView *)(wid); - return container.window.firstResponder == container; -} - -//-------------------------------------------------------------------------------------------------- - static CGFloat ScreenMax() { return NSMaxY([NSScreen mainScreen].frame); } @@ -1205,19 +1177,6 @@ //-------------------------------------------------------------------------------------------------- -void Window::SetTitle(const char *s) { - if (wid) { - id idWin = (__bridge id)(wid); - if ([idWin isKindOfClass: [NSWindow class]]) { - NSWindow *win = idWin; - NSString *sTitle = @(s); - win.title = sTitle; - } - } -} - -//-------------------------------------------------------------------------------------------------- - PRectangle Window::GetMonitorRect(Point) { if (wid) { id idWin = (__bridge id)(wid); @@ -1897,85 +1856,6 @@ //-------------------------------------------------------------------------------------------------- -bool Platform::MouseButtonBounce() { - return false; -} - -//-------------------------------------------------------------------------------------------------- - -/** - * Helper method for the backend to reach through to the scintilla window. - */ -long Platform::SendScintilla(WindowID w, unsigned int msg, unsigned long wParam, long lParam) { - return scintilla_send_message(w, msg, wParam, lParam); -} - -//-------------------------------------------------------------------------------------------------- - -/** - * Helper method for the backend to reach through to the scintilla window. - */ -long Platform::SendScintillaPointer(WindowID w, unsigned int msg, unsigned long wParam, void *lParam) { - return scintilla_send_message(w, msg, wParam, (long) lParam); -} - -//-------------------------------------------------------------------------------------------------- - -bool Platform::IsDBCSLeadByte(int codePage, char ch) { - // Byte ranges found in Wikipedia articles with relevant search strings in each case - unsigned char uch = static_cast(ch); - switch (codePage) { - case 932: - // Shift_jis - return ((uch >= 0x81) && (uch <= 0x9F)) || - ((uch >= 0xE0) && (uch <= 0xFC)); - // Lead bytes F0 to FC may be a Microsoft addition. - 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 */) { - // DBCS no longer uses this. - return 1; -} - -//-------------------------------------------------------------------------------------------------- - -int Platform::DBCSCharMaxLength() { - return 2; -} - -//-------------------------------------------------------------------------------------------------- - -int Platform::Minimum(int a, int b) { - return (a < b) ? a : b; -} - -//-------------------------------------------------------------------------------------------------- - -int Platform::Maximum(int a, int b) { - return (a > b) ? a : b; -} - -//-------------------------------------------------------------------------------------------------- - //#define TRACE #ifdef TRACE @@ -2026,16 +1906,6 @@ #endif } -//-------------------------------------------------------------------------------------------------- - -int Platform::Clamp(int val, int minVal, int maxVal) { - if (val > maxVal) - val = maxVal; - if (val < minVal) - val = minVal; - return val; -} - //----------------- DynamicLibrary ----------------------------------------------------------------- /** diff -r 7e28cdba6d61 -r 7030530a9a0f cocoa/ScintillaCocoa.h --- a/cocoa/ScintillaCocoa.h Sun Jun 11 14:08:43 2017 +1000 +++ b/cocoa/ScintillaCocoa.h Mon Jun 12 11:49:56 2017 +1000 @@ -52,6 +52,7 @@ #include "Document.h" #include "CaseConvert.h" #include "UniConversion.h" +#include "DBCS.h" #include "Selection.h" #include "PositionCache.h" #include "EditModel.h" diff -r 7e28cdba6d61 -r 7030530a9a0f cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj --- a/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj Sun Jun 11 14:08:43 2017 +1000 +++ b/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj Mon Jun 12 11:49:56 2017 +1000 @@ -199,6 +199,7 @@ 280056FC188DDD2C00F200AE /* StringCopy.h in Headers */ = {isa = PBXBuildFile; fileRef = 280056F9188DDD2C00F200AE /* StringCopy.h */; }; 280056FD188DDD2C00F200AE /* SubStyles.h in Headers */ = {isa = PBXBuildFile; fileRef = 280056FA188DDD2C00F200AE /* SubStyles.h */; }; 28064A05190F12E100E6E47F /* LexDMIS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28064A04190F12E100E6E47F /* LexDMIS.cxx */; }; + 28804B2C1EEE232E00C0D154 /* DBCS.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28804B2B1EEE232E00C0D154 /* DBCS.cxx */; }; 28A067111A36B42600B4966A /* LexHex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A067101A36B42600B4966A /* LexHex.cxx */; }; 28A1DD51196BE0CA006EFCDD /* EditModel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */; }; 28A1DD52196BE0CA006EFCDD /* EditView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28A1DD4F196BE0CA006EFCDD /* EditView.cxx */; }; @@ -423,6 +424,7 @@ 280056FA188DDD2C00F200AE /* SubStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SubStyles.h; path = ../../lexlib/SubStyles.h; sourceTree = ""; }; 28064A04190F12E100E6E47F /* LexDMIS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexDMIS.cxx; path = ../../lexers/LexDMIS.cxx; sourceTree = ""; }; 282E41F3B9E2BFEDD6A05BE7 /* LexIndent.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexIndent.cxx; path = ../../lexers/LexIndent.cxx; sourceTree = SOURCE_ROOT; }; + 28804B2B1EEE232E00C0D154 /* DBCS.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DBCS.cxx; path = ../../src/DBCS.cxx; sourceTree = ""; }; 28A067101A36B42600B4966A /* LexHex.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexHex.cxx; path = ../../lexers/LexHex.cxx; sourceTree = ""; }; 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditModel.cxx; path = ../../src/EditModel.cxx; sourceTree = ""; }; 28A1DD4F196BE0CA006EFCDD /* EditView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EditView.cxx; path = ../../src/EditView.cxx; sourceTree = ""; }; @@ -724,6 +726,7 @@ 114B6F8F11FA75BE004FB6AB /* CharacterSet.cxx */, 114B6F6411FA7597004FB6AB /* CharClassify.cxx */, 114B6F6511FA7597004FB6AB /* ContractionState.cxx */, + 28804B2B1EEE232E00C0D154 /* DBCS.cxx */, 114B6F6611FA7597004FB6AB /* Decoration.cxx */, 114B6F6711FA7597004FB6AB /* Document.cxx */, 28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */, @@ -1010,6 +1013,7 @@ 114B6F3911FA7526004FB6AB /* LexMySQL.cxx in Sources */, 114B6F3A11FA7526004FB6AB /* LexNimrod.cxx in Sources */, 114B6F3B11FA7526004FB6AB /* LexNsis.cxx in Sources */, + 28804B2C1EEE232E00C0D154 /* DBCS.cxx in Sources */, 114B6F3C11FA7526004FB6AB /* LexOpal.cxx in Sources */, 114B6F3E11FA7526004FB6AB /* LexPascal.cxx in Sources */, 28B6470D1B54C0720009DC49 /* LexDiff.cxx in Sources */, diff -r 7e28cdba6d61 -r 7030530a9a0f gtk/PlatGTK.cxx --- a/gtk/PlatGTK.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/gtk/PlatGTK.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -107,12 +107,6 @@ return static_cast(wid); } -Point Point::FromLong(long lpoint) { - return Point( - Platform::LowShortFromLong(lpoint), - Platform::HighShortFromLong(lpoint)); -} - Font::Font() : fid(0) {} Font::~Font() {} @@ -184,7 +178,6 @@ XYPOSITION Ascent(Font &font_); XYPOSITION Descent(Font &font_); XYPOSITION InternalLeading(Font &font_); - XYPOSITION ExternalLeading(Font &font_); XYPOSITION Height(Font &font_); XYPOSITION AverageCharWidth(Font &font_); @@ -925,10 +918,6 @@ return 0; } -XYPOSITION SurfaceImpl::ExternalLeading(Font &) { - return 0; -} - XYPOSITION SurfaceImpl::Height(Font &font_) { return Ascent(font_) + Descent(font_); } @@ -978,10 +967,6 @@ } } -bool Window::HasFocus() { - return gtk_widget_has_focus(GTK_WIDGET(wid)); -} - PRectangle Window::GetPosition() { // Before any size allocated pretend its 1000 wide so not scrolled PRectangle rc(0, 0, 1000, 1000); @@ -1125,10 +1110,6 @@ #endif } -void Window::SetTitle(const char *s) { - gtk_window_set_title(GTK_WINDOW(wid), s); -} - /* Returns rectangle of monitor pt is on, both rect and pt are in Window's gdk window coordinates */ PRectangle Window::GetMonitorRect(Point pt) { @@ -2025,83 +2006,10 @@ return 500; // Half a second } -bool Platform::MouseButtonBounce() { - return true; -} - void Platform::DebugDisplay(const char *s) { fprintf(stderr, "%s", s); } -bool Platform::IsKeyDown(int) { - // TODO: discover state of keys in GTK+/X - return false; -} - -long Platform::SendScintilla( - WindowID w, unsigned int msg, unsigned long wParam, long lParam) { - return scintilla_send_message(SCINTILLA(w), msg, wParam, lParam); -} - -long Platform::SendScintillaPointer( - WindowID w, unsigned int msg, unsigned long wParam, void *lParam) { - return scintilla_send_message(SCINTILLA(w), msg, wParam, - reinterpret_cast(lParam)); -} - -bool Platform::IsDBCSLeadByte(int codePage, char ch) { - // Byte ranges found in Wikipedia articles with relevant search strings in each case - unsigned char uch = static_cast(ch); - switch (codePage) { - case 932: - // Shift_jis - return ((uch >= 0x81) && (uch <= 0x9F)) || - ((uch >= 0xE0) && (uch <= 0xFC)); - // Lead bytes F0 to FC may be a Microsoft addition. - case 936: - // GBK - return (uch >= 0x81) && (uch <= 0xFE); - case 950: - // Big5 - return (uch >= 0x81) && (uch <= 0xFE); - // Korean EUC-KR may be code page 949. - } - return false; -} - -int Platform::DBCSCharLength(int codePage, const char *s) { - if (codePage == 932 || codePage == 936 || codePage == 950) { - return IsDBCSLeadByte(codePage, s[0]) ? 2 : 1; - } else { - int bytes = mblen(s, MB_CUR_MAX); - if (bytes >= 1) - return bytes; - else - return 1; - } -} - -int Platform::DBCSCharMaxLength() { - return MB_CUR_MAX; - //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 @@ -2134,14 +2042,6 @@ abort(); } -int Platform::Clamp(int val, int minVal, int maxVal) { - if (val > maxVal) - val = maxVal; - if (val < minVal) - val = minVal; - return val; -} - void Platform_Initialise() { } diff -r 7e28cdba6d61 -r 7030530a9a0f gtk/makefile --- a/gtk/makefile Sun Jun 11 14:08:43 2017 +1000 +++ b/gtk/makefile Mon Jun 12 11:49:56 2017 +1000 @@ -78,7 +78,7 @@ CTFLAGS=-DNDEBUG -Os $(CXXBASEFLAGS) $(THREADFLAGS) endif -CXXTFLAGS:=--std=gnu++0x $(CTFLAGS) $(REFLAGS) +CXXTFLAGS:=--std=gnu++17 $(CTFLAGS) $(REFLAGS) CONFIGFLAGS:=$(shell pkg-config --cflags $(GTKVERSION)) MARSHALLER=scintilla-marshal.o diff -r 7e28cdba6d61 -r 7030530a9a0f include/Platform.h --- a/include/Platform.h Sun Jun 11 14:08:43 2017 +1000 +++ b/include/Platform.h Mon Jun 12 11:49:56 2017 +1000 @@ -109,8 +109,6 @@ } // Other automatically defined methods (assignment, copy constructor, destructor) are fine - - static Point FromLong(long lpoint); }; /** @@ -332,7 +330,6 @@ virtual XYPOSITION Ascent(Font &font_)=0; virtual XYPOSITION Descent(Font &font_)=0; virtual XYPOSITION InternalLeading(Font &font_)=0; - virtual XYPOSITION ExternalLeading(Font &font_)=0; virtual XYPOSITION Height(Font &font_)=0; virtual XYPOSITION AverageCharWidth(Font &font_)=0; @@ -376,7 +373,6 @@ WindowID GetID() const { return wid; } bool Created() const { return wid != 0; } void Destroy(); - bool HasFocus(); PRectangle GetPosition(); void SetPosition(PRectangle rc); void SetPositionRelative(PRectangle rc, Window relativeTo); @@ -387,7 +383,6 @@ virtual void SetFont(Font &font); enum Cursor { cursorInvalid, cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow, cursorHand }; void SetCursor(Cursor curs); - void SetTitle(const char *s); PRectangle GetMonitorRect(Point pt); private: Cursor cursorLast; @@ -503,34 +498,14 @@ static const char *DefaultFont(); static int DefaultFontSize(); static unsigned int DoubleClickTime(); - static bool MouseButtonBounce(); static void DebugDisplay(const char *s); - static bool IsKeyDown(int key); - static long SendScintilla( - WindowID w, unsigned int msg, unsigned long wParam=0, long lParam=0); - static long SendScintillaPointer( - WindowID w, unsigned int msg, unsigned long wParam=0, void *lParam=0); - static bool IsDBCSLeadByte(int codePage, char ch); - static int DBCSCharLength(int codePage, const char *s); - static int DBCSCharMaxLength(); - - // These are utility functions not really tied to a platform - static int Minimum(int a, int b); - static int Maximum(int a, int b); - // Next three assume 16 bit shorts and 32 bit longs static long LongFromTwoShorts(short a,short b) { return (a) | ((b) << 16); } - static short HighShortFromLong(long x) { - return static_cast(x >> 16); - } - static short LowShortFromLong(long x) { - return static_cast(x & 0xffff); - } + static void DebugPrintf(const char *format, ...); static bool ShowAssertionPopUps(bool assertionPopUps_); static void Assert(const char *c, const char *file, int line) CLANG_ANALYZER_NORETURN; - static int Clamp(int val, int minVal, int maxVal); }; #ifdef NDEBUG diff -r 7e28cdba6d61 -r 7030530a9a0f qt/ScintillaEdit/ScintillaEdit.pro --- a/qt/ScintillaEdit/ScintillaEdit.pro Sun Jun 11 14:08:43 2017 +1000 +++ b/qt/ScintillaEdit/ScintillaEdit.pro Mon Jun 12 11:49:56 2017 +1000 @@ -10,18 +10,14 @@ TARGET = ScintillaEdit TEMPLATE = lib CONFIG += lib_bundle - -unix { - # requires C++11 support - greaterThan(QT_MAJOR_VERSION, 4){ - CONFIG += c++11 - } else { - QMAKE_CXXFLAGS += -std=c++0x - } -} +CONFIG += c++14 VERSION = 3.7.5 +win32 { + QMAKE_CXXFLAGS += -std:c++latest +} + SOURCES += \ ScintillaEdit.cpp \ ScintillaDocument.cpp \ @@ -48,6 +44,7 @@ ../../src/EditModel.cxx \ ../../src/Document.cxx \ ../../src/Decoration.cxx \ + ../../src/DBCS.cxx \ ../../src/ContractionState.cxx \ ../../src/CharClassify.cxx \ ../../src/CellBuffer.cxx \ diff -r 7e28cdba6d61 -r 7030530a9a0f qt/ScintillaEditBase/PlatQt.cpp --- a/qt/ScintillaEditBase/PlatQt.cpp Sun Jun 11 14:08:43 2017 +1000 +++ b/qt/ScintillaEditBase/PlatQt.cpp Mon Jun 12 11:49:56 2017 +1000 @@ -10,6 +10,7 @@ #include "PlatQt.h" #include "Scintilla.h" +#include "DBCS.h" #include "FontQuality.h" #include @@ -489,7 +490,7 @@ // DBCS int ui = 0; for (int i=0; ihasFocus() : false; -} - PRectangle Window::GetPosition() { // Before any size allocated pretend its 1000 wide so not scrolled @@ -725,12 +715,6 @@ } } -void Window::SetTitle(const char *s) -{ - if (wid) - window(wid)->setWindowTitle(s); -} - /* Returns rectangle of monitor pt is on, both rect and pt are in Window's window coordinates */ PRectangle Window::GetMonitorRect(Point pt) @@ -1201,47 +1185,6 @@ return QApplication::doubleClickInterval(); } -bool Platform::MouseButtonBounce() -{ - return false; -} - -bool Platform::IsKeyDown(int /*key*/) -{ - return false; -} - -long Platform::SendScintilla(WindowID /*w*/, - unsigned int /*msg*/, - unsigned long /*wParam*/, - long /*lParam*/) -{ - return 0; -} - -long Platform::SendScintillaPointer(WindowID /*w*/, - unsigned int /*msg*/, - unsigned long /*wParam*/, - void * /*lParam*/) -{ - return 0; -} - -int Platform::Minimum(int a, int b) -{ - return qMin(a, b); -} - -int Platform::Maximum(int a, int b) -{ - return qMax(a, b); -} - -int Platform::Clamp(int val, int minVal, int maxVal) -{ - return qBound(minVal, val, maxVal); -} - void Platform::DebugDisplay(const char *s) { qWarning("Scintilla: %s", s); @@ -1276,51 +1219,6 @@ } } - -bool Platform::IsDBCSLeadByte(int codePage, char ch) -{ - // Byte ranges found in Wikipedia articles with relevant search strings in each case - unsigned char uch = static_cast(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 IsDBCSLeadByte(codePage, s[0]) ? 2 : 1; - } else { - return 1; - } -} - -int Platform::DBCSCharMaxLength() -{ - return 2; -} - - //---------------------------------------------------------------------- static QElapsedTimer timer; diff -r 7e28cdba6d61 -r 7030530a9a0f qt/ScintillaEditBase/PlatQt.h --- a/qt/ScintillaEditBase/PlatQt.h Sun Jun 11 14:08:43 2017 +1000 +++ b/qt/ScintillaEditBase/PlatQt.h Mon Jun 12 11:49:56 2017 +1000 @@ -106,7 +106,6 @@ 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; diff -r 7e28cdba6d61 -r 7030530a9a0f qt/ScintillaEditBase/ScintillaEditBase.pro --- a/qt/ScintillaEditBase/ScintillaEditBase.pro Sun Jun 11 14:08:43 2017 +1000 +++ b/qt/ScintillaEditBase/ScintillaEditBase.pro Mon Jun 12 11:49:56 2017 +1000 @@ -10,18 +10,14 @@ TARGET = ScintillaEditBase TEMPLATE = lib CONFIG += lib_bundle - -unix { - # requires C++11 support - greaterThan(QT_MAJOR_VERSION, 4){ - CONFIG += c++11 - } else { - QMAKE_CXXFLAGS += -std=c++0x - } -} +CONFIG += c++14 VERSION = 3.7.5 +win32 { + QMAKE_CXXFLAGS += -std:c++latest +} + SOURCES += \ PlatQt.cpp \ ScintillaQt.cpp \ @@ -46,6 +42,7 @@ ../../src/EditModel.cxx \ ../../src/Document.cxx \ ../../src/Decoration.cxx \ + ../../src/DBCS.cxx \ ../../src/ContractionState.cxx \ ../../src/CharClassify.cxx \ ../../src/CellBuffer.cxx \ diff -r 7e28cdba6d61 -r 7030530a9a0f qt/ScintillaEditPy/ScintillaEditPy.pro --- a/qt/ScintillaEditPy/ScintillaEditPy.pro Sun Jun 11 14:08:43 2017 +1000 +++ b/qt/ScintillaEditPy/ScintillaEditPy.pro Mon Jun 12 11:49:56 2017 +1000 @@ -6,21 +6,14 @@ # Clear debug & release so that sepbuild.pri can set one or the other CONFIG -= debug release +CONFIG += c++14 include(sepbuild.pri) VERSION = $$SCINTILLA_VERSION -unix { - # requires C++11 support - greaterThan(QT_MAJOR_VERSION, 4){ - CONFIG += c++11 - } else { - QMAKE_CXXFLAGS += -std=c++0x -Wno-deprecated-declarations - } -} - win32 { + QMAKE_CXXFLAGS += -std:c++latest DebugBuild { TARGET_EXT = _d.pyd } diff -r 7e28cdba6d61 -r 7030530a9a0f scripts/HeaderOrder.txt --- a/scripts/HeaderOrder.txt Sun Jun 11 14:08:43 2017 +1000 +++ b/scripts/HeaderOrder.txt Mon Jun 12 11:49:56 2017 +1000 @@ -129,6 +129,7 @@ #include "CaseConvert.h" #include "UniConversion.h" #include "UnicodeFromUTF8.h" +#include "DBCS.h" #include "Selection.h" #include "PositionCache.h" #include "FontQuality.h" diff -r 7e28cdba6d61 -r 7030530a9a0f src/DBCS.cxx --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DBCS.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -0,0 +1,48 @@ +// Scintilla source code edit control +/** @file DBCS.cxx + ** Functions to handle DBCS double byte encodings like Shift-JIS. + **/ +// Copyright 2017 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +#include "DBCS.h" + +#ifdef SCI_NAMESPACE +using namespace Scintilla; +#endif + +#ifdef SCI_NAMESPACE +namespace Scintilla { +#endif + +bool DBCSIsLeadByte(int codePage, char ch) { + // Byte ranges found in Wikipedia articles with relevant search strings in each case + const unsigned char uch = static_cast(ch); + switch (codePage) { + case 932: + // Shift_jis + return ((uch >= 0x81) && (uch <= 0x9F)) || + ((uch >= 0xE0) && (uch <= 0xFC)); + // Lead bytes F0 to FC may be a Microsoft addition. + 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; +} + +#ifdef SCI_NAMESPACE +} +#endif diff -r 7e28cdba6d61 -r 7030530a9a0f src/DBCS.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DBCS.h Mon Jun 12 11:49:56 2017 +1000 @@ -0,0 +1,21 @@ +// Scintilla source code edit control +/** @file DBCS.h + ** Functions to handle DBCS double byte encodings like Shift-JIS. + **/ +// Copyright 2017 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef DBCS_H +#define DBCS_H + +#ifdef SCI_NAMESPACE +namespace Scintilla { +#endif + +bool DBCSIsLeadByte(int codePage, char ch); + +#ifdef SCI_NAMESPACE +} +#endif + +#endif diff -r 7e28cdba6d61 -r 7030530a9a0f src/Document.cxx --- a/src/Document.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/src/Document.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -564,7 +564,7 @@ } Sci::Position Document::ClampPositionIntoDocument(Sci::Position pos) const { - return Platform::Clamp(pos, 0, Length()); + return Sci::clamp(pos, 0, Length()); } bool Document::IsCrLf(Sci::Position pos) const { diff -r 7e28cdba6d61 -r 7030530a9a0f src/Editor.cxx --- a/src/Editor.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/src/Editor.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -888,10 +888,10 @@ Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); if (moveDir > 0) { // lineDisplay is already line before fold as lines in fold use display line of line after fold - lineDisplay = Platform::Clamp(lineDisplay, 0, cs.LinesDisplayed()); + lineDisplay = Sci::clamp(lineDisplay, 0, cs.LinesDisplayed()); return SelectionPosition(pdoc->LineStart(cs.DocFromDisplay(lineDisplay))); } else { - lineDisplay = Platform::Clamp(lineDisplay - 1, 0, cs.LinesDisplayed()); + lineDisplay = Sci::clamp(lineDisplay - 1, 0, cs.LinesDisplayed()); return SelectionPosition(pdoc->LineEnd(cs.DocFromDisplay(lineDisplay))); } } @@ -915,7 +915,7 @@ } void Editor::ScrollTo(Sci::Line line, bool moveThumb) { - const Sci::Line topLineNew = Platform::Clamp(line, 0, MaxScrollPos()); + const Sci::Line topLineNew = Sci::clamp(line, 0, MaxScrollPos()); if (topLineNew != topLine) { // Try to optimise small scrolls #ifndef UNDER_CE @@ -1154,7 +1154,7 @@ } else { // yMarginT must equal to caretYSlop, with a minimum of 1 and // a maximum of slightly less than half the heigth of the text area. - yMarginT = Platform::Clamp(caretYSlop, 1, halfScreen); + yMarginT = Sci::clamp(caretYSlop, 1, halfScreen); if (bEven) { yMarginB = yMarginT; } else { @@ -1164,7 +1164,7 @@ yMoveT = yMarginT; if (bEven) { if (bJump) { - yMoveT = Platform::Clamp(caretYSlop * 3, 1, halfScreen); + yMoveT = Sci::clamp(caretYSlop * 3, 1, halfScreen); } yMoveB = yMoveT; } else { @@ -1179,7 +1179,7 @@ } } else { // Not strict yMoveT = bJump ? caretYSlop * 3 : caretYSlop; - yMoveT = Platform::Clamp(yMoveT, 1, halfScreen); + yMoveT = Sci::clamp(yMoveT, 1, halfScreen); if (bEven) { yMoveB = yMoveT; } else { @@ -1229,7 +1229,7 @@ newXY.topLine = std::min(newXY.topLine, lineCaret); } } - newXY.topLine = Platform::Clamp(newXY.topLine, 0, MaxScrollPos()); + newXY.topLine = Sci::clamp(newXY.topLine, 0, MaxScrollPos()); } // Horizontal positioning @@ -1251,7 +1251,7 @@ } else { // xMargin must equal to caretXSlop, with a minimum of 2 and // a maximum of slightly less than half the width of the text area. - xMarginR = Platform::Clamp(caretXSlop, 2, halfScreen); + xMarginR = Sci::clamp(caretXSlop, 2, halfScreen); if (bEven) { xMarginL = xMarginR; } else { @@ -1260,7 +1260,7 @@ } if (bJump && bEven) { // Jump is used only in even mode - xMoveL = xMoveR = Platform::Clamp(caretXSlop * 3, 1, halfScreen); + xMoveL = xMoveR = Sci::clamp(caretXSlop * 3, 1, halfScreen); } else { xMoveL = xMoveR = 0; // Not used, avoid a warning } @@ -1283,7 +1283,7 @@ } } else { // Not strict xMoveR = bJump ? caretXSlop * 3 : caretXSlop; - xMoveR = Platform::Clamp(xMoveR, 1, halfScreen); + xMoveR = Sci::clamp(xMoveR, 1, halfScreen); if (bEven) { xMoveL = xMoveR; } else { @@ -1505,7 +1505,7 @@ const Sci::Line lineDocTop = cs.DocFromDisplay(topLine); const int subLineTop = topLine - cs.DisplayFromDoc(lineDocTop); if (ws == wsVisible) { - lineToWrap = Platform::Clamp(lineDocTop-5, wrapPending.start, pdoc->LinesTotal()); + lineToWrap = Sci::clamp(lineDocTop-5, wrapPending.start, pdoc->LinesTotal()); // Priority wrap to just after visible area. // Since wrapping could reduce display lines, treat each // as taking only one display line. @@ -1561,7 +1561,7 @@ if (wrapOccurred) { SetScrollBars(); - SetTopLine(Platform::Clamp(goodTopLine, 0, MaxScrollPos())); + SetTopLine(Sci::clamp(goodTopLine, 0, MaxScrollPos())); SetVerticalScrollPos(); } @@ -1816,7 +1816,7 @@ // TODO: ensure always showing as many lines as possible // May not be, if, for example, window made larger if (topLine > MaxScrollPos()) { - SetTopLine(Platform::Clamp(topLine, 0, MaxScrollPos())); + SetTopLine(Sci::clamp(topLine, 0, MaxScrollPos())); SetVerticalScrollPos(); Redraw(); } @@ -2641,7 +2641,7 @@ if (mh.linesAdded != 0) { // Avoid scrolling of display if change before current display if (mh.position < posTopLine && !CanDeferToLastStep(mh)) { - Sci::Line newTop = Platform::Clamp(topLine + mh.linesAdded, 0, MaxScrollPos()); + Sci::Line newTop = Sci::clamp(topLine + mh.linesAdded, 0, MaxScrollPos()); if (newTop != topLine) { SetTopLine(newTop); SetVerticalScrollPos(); @@ -2877,7 +2877,7 @@ } else { Point pt = LocationFromPosition(sel.MainCaret()); - topLineNew = Platform::Clamp( + topLineNew = Sci::clamp( topLine + direction * LinesToScroll(), 0, MaxScrollPos()); newPos = SPositionFromLocation( Point::FromInts(lastXChosen - xOffset, static_cast(pt.y) + direction * (vs.lineHeight * LinesToScroll())), @@ -3209,6 +3209,14 @@ namespace { +short HighShortFromLong(long x) { + return static_cast(x >> 16); +} + +short LowShortFromLong(long x) { + return static_cast(x & 0xffff); +} + unsigned int WithExtends(unsigned int iMessage) { switch (iMessage) { case SCI_CHARLEFT: return SCI_CHARLEFTEXTEND; @@ -4470,30 +4478,27 @@ if (!ctrl || !multipleSelection || (selectionType != selChar && selectionType != selWord)) SetEmptySelection(newPos.Position()); bool doubleClick = false; - // Stop mouse button bounce changing selection type - if (!Platform::MouseButtonBounce() || curTime != lastClickTime) { - if (inSelMargin) { - // Inside margin selection type should be either selSubLine or selWholeLine. - if (selectionType == selSubLine) { - // If it is selSubLine, we're inside a *double* click and word wrap is enabled, - // so we switch to selWholeLine in order to select whole line. - selectionType = selWholeLine; - } else if (selectionType != selSubLine && selectionType != selWholeLine) { - // If it is neither, reset selection type to line selection. - selectionType = (Wrapping() && (marginOptions & SC_MARGINOPTION_SUBLINESELECT)) ? selSubLine : selWholeLine; - } + if (inSelMargin) { + // Inside margin selection type should be either selSubLine or selWholeLine. + if (selectionType == selSubLine) { + // If it is selSubLine, we're inside a *double* click and word wrap is enabled, + // so we switch to selWholeLine in order to select whole line. + selectionType = selWholeLine; + } else if (selectionType != selSubLine && selectionType != selWholeLine) { + // If it is neither, reset selection type to line selection. + selectionType = (Wrapping() && (marginOptions & SC_MARGINOPTION_SUBLINESELECT)) ? selSubLine : selWholeLine; + } + } else { + if (selectionType == selChar) { + selectionType = selWord; + doubleClick = true; + } else if (selectionType == selWord) { + // Since we ended up here, we're inside a *triple* click, which should always select + // whole line regardless of word wrap being enabled or not. + selectionType = selWholeLine; } else { - if (selectionType == selChar) { - selectionType = selWord; - doubleClick = true; - } else if (selectionType == selWord) { - // Since we ended up here, we're inside a *triple* click, which should always select - // whole line regardless of word wrap being enabled or not. - selectionType = selWholeLine; - } else { - selectionType = selChar; - originalAnchorPos = sel.MainCaret(); - } + selectionType = selChar; + originalAnchorPos = sel.MainCaret(); } } @@ -5082,7 +5087,7 @@ // When scrolling, allow less time to ensure responsive const double secondsAllowed = scrolling ? 0.005 : 0.02; - const Sci::Line linesToStyle = Platform::Clamp(static_cast(secondsAllowed / pdoc->durationStyleOneLine), + const Sci::Line linesToStyle = Sci::clamp(static_cast(secondsAllowed / pdoc->durationStyleOneLine), 10, 0x10000); const Sci::Line stylingMaxLine = std::min( static_cast(pdoc->LineFromPosition(pdoc->GetEndStyled()) + linesToStyle), @@ -5426,18 +5431,18 @@ const Sci::Line lineDisplay = cs.DisplayFromDoc(lineDoc); if (visiblePolicy & VISIBLE_SLOP) { if ((topLine > lineDisplay) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > lineDisplay))) { - SetTopLine(Platform::Clamp(lineDisplay - visibleSlop, 0, MaxScrollPos())); + SetTopLine(Sci::clamp(lineDisplay - visibleSlop, 0, MaxScrollPos())); SetVerticalScrollPos(); Redraw(); } else if ((lineDisplay > topLine + LinesOnScreen() - 1) || ((visiblePolicy & VISIBLE_STRICT) && (lineDisplay > topLine + LinesOnScreen() - 1 - visibleSlop))) { - SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos())); + SetTopLine(Sci::clamp(lineDisplay - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos())); SetVerticalScrollPos(); Redraw(); } } else { if ((topLine > lineDisplay) || (lineDisplay > topLine + LinesOnScreen() - 1) || (visiblePolicy & VISIBLE_STRICT)) { - SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() / 2 + 1, 0, MaxScrollPos())); + SetTopLine(Sci::clamp(lineDisplay - LinesOnScreen() / 2 + 1, 0, MaxScrollPos())); SetVerticalScrollPos(); Redraw(); } @@ -6040,7 +6045,7 @@ return pdoc->MovePositionOutsideChar(static_cast(wParam) + 1, 1, true); case SCI_POSITIONRELATIVE: - return Platform::Clamp(pdoc->GetRelativePosition(static_cast(wParam), static_cast(lParam)), 0, pdoc->Length()); + return Sci::clamp(pdoc->GetRelativePosition(static_cast(wParam), static_cast(lParam)), 0, pdoc->Length()); case SCI_LINESCROLL: ScrollTo(topLine + static_cast(lParam)); @@ -7290,13 +7295,13 @@ return vs.caretWidth; case SCI_ASSIGNCMDKEY: - kmap.AssignCmdKey(Platform::LowShortFromLong(static_cast(wParam)), - Platform::HighShortFromLong(static_cast(wParam)), static_cast(lParam)); + kmap.AssignCmdKey(LowShortFromLong(static_cast(wParam)), + HighShortFromLong(static_cast(wParam)), static_cast(lParam)); break; case SCI_CLEARCMDKEY: - kmap.AssignCmdKey(Platform::LowShortFromLong(static_cast(wParam)), - Platform::HighShortFromLong(static_cast(wParam)), SCI_NULL); + kmap.AssignCmdKey(LowShortFromLong(static_cast(wParam)), + HighShortFromLong(static_cast(wParam)), SCI_NULL); break; case SCI_CLEARALLCMDKEYS: diff -r 7e28cdba6d61 -r 7030530a9a0f src/Position.h --- a/src/Position.h Sun Jun 11 14:08:43 2017 +1000 +++ b/src/Position.h Mon Jun 12 11:49:56 2017 +1000 @@ -25,6 +25,14 @@ const Position invalidPosition = -1; +inline int clamp(int val, int minVal, int maxVal) { + if (val > maxVal) + val = maxVal; + if (val < minVal) + val = minVal; + return val; +} + } #endif diff -r 7e28cdba6d61 -r 7030530a9a0f src/ViewStyle.cxx --- a/src/ViewStyle.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/src/ViewStyle.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -460,7 +460,7 @@ } int ViewStyle::GetFrameWidth() const { - return Platform::Clamp(caretLineFrame, 1, lineHeight / 3); + return Sci::clamp(caretLineFrame, 1, lineHeight / 3); } bool ViewStyle::IsLineFrameOpaque(bool caretActive, bool lineContainsCaret) const { diff -r 7e28cdba6d61 -r 7030530a9a0f win32/PlatWin.cxx --- a/win32/PlatWin.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/win32/PlatWin.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -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 @@ namespace Scintilla { #endif -Point Point::FromLong(long lpoint) { - return Point(static_cast(LOWORD(lpoint)), static_cast(HIWORD(lpoint))); -} - static RECT RectFromPRectangle(PRectangle prc) { RECT rc = {static_cast(prc.left), static_cast(prc.top), static_cast(prc.right), static_cast(prc.bottom)}; @@ -558,7 +555,6 @@ 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 @@ return static_cast(tm.tmInternalLeading); } -XYPOSITION SurfaceGDI::ExternalLeading(Font &font_) { - SetFont(font_); - TEXTMETRIC tm; - ::GetTextMetrics(hdc, &tm); - return static_cast(tm.tmExternalLeading); -} - XYPOSITION SurfaceGDI::Height(Font &font_) { SetFont(font_); TEXTMETRIC tm; @@ -1121,7 +1110,6 @@ 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 @@ int ui = 0; for (int i=0; i(wid), &rc); @@ -1952,10 +1931,6 @@ } } -void Window::SetTitle(const char *s) { - ::SetWindowTextA(static_cast(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 @@ 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(::SendMessage(static_cast(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(::SendMessage(static_cast(w), msg, wParam, - reinterpret_cast(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(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 @@ } } -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); diff -r 7e28cdba6d61 -r 7030530a9a0f win32/ScintillaWin.cxx --- a/win32/ScintillaWin.cxx Sun Jun 11 14:08:43 2017 +1000 +++ b/win32/ScintillaWin.cxx Mon Jun 12 11:49:56 2017 +1000 @@ -156,6 +156,14 @@ return Point::FromInts(pt.x, pt.y); } +static Point PointFromLong(long lpoint) { + return Point(static_cast(LOWORD(lpoint)), static_cast(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 @@ ::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(lParam)), ::GetMessageTime(), + ButtonDown(PointFromLong(static_cast(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(lParam)); + const Point pt = PointFromLong(static_cast(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 @@ 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 @@ return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); case WM_LBUTTONUP: - ButtonUp(Point::FromLong(static_cast(lParam)), + ButtonUp(PointFromLong(static_cast(lParam)), ::GetMessageTime(), (wParam & MK_CONTROL) != 0); break; case WM_RBUTTONDOWN: { ::SetFocus(MainHWND()); - Point pt = Point::FromLong(static_cast(lParam)); + Point pt = PointFromLong(static_cast(lParam)); if (!PointInSelection(pt)) { CancelModes(); - SetEmptySelection(PositionFromLocation(Point::FromLong(static_cast(lParam)))); + SetEmptySelection(PositionFromLocation(PointFromLong(static_cast(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 @@ //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(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 @@ } case WM_CONTEXTMENU: { - Point pt = Point::FromLong(static_cast(lParam)); + Point pt = PointFromLong(static_cast(lParam)); POINT rpt = {static_cast(pt.x), static_cast(pt.y)}; ::ScreenToClient(MainHWND(), &rpt); const Point ptClient = PointFromPOINT(rpt); @@ -3350,7 +3358,7 @@ return 0; } else if (iMessage == WM_LBUTTONDOWN) { // This does not fire due to the hit test code - sciThis->ct.MouseClick(Point::FromLong(static_cast(lParam))); + sciThis->ct.MouseClick(PointFromLong(static_cast(lParam))); sciThis->CallTipClick(); return 0; } else if (iMessage == WM_SETCURSOR) { diff -r 7e28cdba6d61 -r 7030530a9a0f win32/makefile --- a/win32/makefile Sun Jun 11 14:08:43 2017 +1000 +++ b/win32/makefile Mon Jun 12 11:49:56 2017 +1000 @@ -13,7 +13,7 @@ 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 @@ CharacterSet.o \ CharClassify.o \ ContractionState.o \ + DBCS.o \ Decoration.o \ Document.o \ EditModel.o \ diff -r 7e28cdba6d61 -r 7030530a9a0f win32/scintilla.mak --- a/win32/scintilla.mak Sun Jun 11 14:08:43 2017 +1000 +++ b/win32/scintilla.mak Mon Jun 12 11:49:56 2017 +1000 @@ -25,7 +25,7 @@ !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 @@ $(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 \