diff options
| author | nyamatongwe <devnull@localhost> | 2003-02-05 09:05:48 +0000 |
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2003-02-05 09:05:48 +0000 |
| commit | 383ac8a1c2cb615c552119fd31f435ab29e7070b (patch) | |
| tree | 05aee0b8730ba1e29e71ec82a3d22fa42e7f386b /win32/PlatWin.cxx | |
| parent | 284fe925ec037537535aa9ecdec5a8cb15ad825c (diff) | |
| download | scintilla-mirror-383ac8a1c2cb615c552119fd31f435ab29e7070b.tar.gz | |
Moved IsNT to PlatWin and cached the result.
Change maximum number of pixels when measuring text on NT to be 1000000
rather than 30000 possible on Windows.
Increased size of Unicode buffers to 10000 elements to handle longer
paragraphs of text.
Diffstat (limited to 'win32/PlatWin.cxx')
| -rw-r--r-- | win32/PlatWin.cxx | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 9943471bd..e0a6840bd 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -42,6 +42,11 @@ static void SetWindowPointer(HWND hWnd, void *ptr) { static CRITICAL_SECTION crPlatformLock; static HINSTANCE hinstPlatformRes = 0; +static bool onNT = false; + +bool IsNT() { + return onNT; +} Point Point::FromLong(long lpoint) { return Point(static_cast<short>(LOWORD(lpoint)), static_cast<short>(HIWORD(lpoint))); @@ -276,6 +281,7 @@ class SurfaceImpl : public Surface { HBITMAP bitmap; HBITMAP bitmapOld; HPALETTE paletteOld; + int maxWidthMeasure; void BrushColor(ColourAllocated back); void SetFont(Font &font_); @@ -334,6 +340,8 @@ SurfaceImpl::SurfaceImpl() : font(0), fontOld(0), bitmap(0), bitmapOld(0), paletteOld(0) { + // Windows 9x has only a 16 bit coordinate system so break after 30000 pixels + maxWidthMeasure = IsNT() ? 1000000 : 30000; } SurfaceImpl::~SurfaceImpl() { @@ -507,7 +515,7 @@ void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource) { static_cast<SurfaceImpl &>(surfaceSource).hdc, from.x, from.y, SRCCOPY); } -#define MAX_US_LEN 5000 +#define MAX_US_LEN 10000 void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back) { @@ -591,7 +599,7 @@ void SurfaceImpl::MeasureWidths(Font &font_, const char *s, int len, int *positi tbuf[tlen] = L'\0'; int poses[MAX_US_LEN]; fit = tlen; - if (!::GetTextExtentExPointW(hdc, tbuf, tlen, 30000, &fit, poses, &sz)) { + if (!::GetTextExtentExPointW(hdc, tbuf, tlen, maxWidthMeasure, &fit, poses, &sz)) { // Likely to have failed because on Windows 9x where function not available // So measure the character widths by measuring each initial substring // Turns a linear operation into a qudratic but seems fast enough on test files @@ -624,7 +632,7 @@ void SurfaceImpl::MeasureWidths(Font &font_, const char *s, int len, int *positi positions[i++] = lastPos; } } else { - if (!::GetTextExtentExPoint(hdc, s, len, 30000, &fit, positions, &sz)) { + if (!::GetTextExtentExPoint(hdc, s, len, maxWidthMeasure, &fit, positions, &sz)) { // Eeek - a NULL DC or other foolishness could cause this. // The least we can do is set the positions to zero! memset(positions, 0, len * sizeof(*positions)); @@ -1370,6 +1378,9 @@ int Platform::Clamp(int val, int minVal, int maxVal) { } void Platform_Initialise(void *hInstance) { + OSVERSIONINFO osv = {sizeof(OSVERSIONINFO),0,0,0,0,""}; + ::GetVersionEx(&osv); + onNT = osv.dwPlatformId == VER_PLATFORM_WIN32_NT; ::InitializeCriticalSection(&crPlatformLock); hinstPlatformRes = reinterpret_cast<HINSTANCE>(hInstance); ListBoxX_Register(); |
