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 \ | 
