aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32
diff options
context:
space:
mode:
Diffstat (limited to 'win32')
-rw-r--r--win32/PlatWin.cxx112
-rw-r--r--win32/ScintillaWin.cxx40
-rw-r--r--win32/makefile3
-rw-r--r--win32/scintilla.mak3
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 \