diff options
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/PlatWin.cxx | 47 | ||||
| -rw-r--r-- | win32/makefile | 9 | ||||
| -rw-r--r-- | win32/makefile_bor | 15 | ||||
| -rw-r--r-- | win32/makefile_vc | 16 | 
4 files changed, 71 insertions, 16 deletions
| diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index f5a4f98e2..17ca7cc03 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -323,12 +323,20 @@ void Surface::Copy(PRectangle rc, Point from, Surface &surfaceSource) {  		surfaceSource.hdc, from.x, from.y, SRCCOPY);  } +#define ASCII_ONLY 1 +  void Surface::DrawText(PRectangle rc, Font &font_, int ybase, const char *s, int len, Colour fore, Colour back) {  	SetFont(font_);  	::SetTextColor(hdc, fore.AsLong());  	::SetBkColor(hdc, back.AsLong());  	RECT rcw = RectFromPRectangle(rc); +#ifdef ASCII_ONLY  	::ExtTextOut(hdc, rc.left, ybase, ETO_OPAQUE, &rcw, s, len, NULL); +#else +	wchar_t tbuf[20000]; +	int tlen = MultiByteToWideChar(CP_UTF8, 0, s, len, tbuf, sizeof(tbuf)); +	::ExtTextOutW(hdc, rc.left, ybase, ETO_OPAQUE, &rcw, tbuf, tlen, NULL); +#endif  }  void Surface::DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char *s, int len, Colour fore, Colour back) { @@ -336,13 +344,25 @@ void Surface::DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char  	::SetTextColor(hdc, fore.AsLong());  	::SetBkColor(hdc, back.AsLong());  	RECT rcw = RectFromPRectangle(rc); +#ifdef ASCII_ONLY  	::ExtTextOut(hdc, rc.left, ybase, ETO_OPAQUE | ETO_CLIPPED, &rcw, s, len, NULL); +#else +	wchar_t tbuf[20000]; +	int tlen = MultiByteToWideChar(CP_UTF8, 0, s, len, tbuf, sizeof(tbuf)); +	::ExtTextOutW(hdc, rc.left, ybase, ETO_OPAQUE | ETO_CLIPPED, &rcw, tbuf, tlen, NULL); +#endif  }  int Surface::WidthText(Font &font_, const char *s, int len) {  	SetFont(font_);  	SIZE sz; +#ifdef ASCII_ONLY  	::GetTextExtentPoint32(hdc, s, len, &sz); +#else +	wchar_t tbuf[20000]; +	int tlen = MultiByteToWideChar(CP_UTF8, 0, s, len, tbuf, sizeof(tbuf)); +	::GetTextExtentPoint32W(hdc, tbuf, tlen, &sz); +#endif  	return sz.cx;  } @@ -350,7 +370,34 @@ void Surface::MeasureWidths(Font &font_, const char *s, int len, int *positions)  	SetFont(font_);  	SIZE sz;  	int fit = 0; +#ifdef ASCII_ONLY  	::GetTextExtentExPoint(hdc, s, len, 30000, &fit, positions, &sz); +#else +	wchar_t tbuf[20000]; +	int poses[20000]; +	int tlen = MultiByteToWideChar(CP_UTF8, 0, s, len, tbuf, sizeof(tbuf)); +	::GetTextExtentExPointW(hdc, tbuf, tlen, 30000, &fit, poses, &sz); +	int ui=0; +	const unsigned char *us = reinterpret_cast<const unsigned char *>(s); +	int i=0; +	while (i<len) { +		positions[i] = poses[ui]; +		if (us[i] < 128) { +			ui++; +		} else if (us[i] < (128 + 64 + 32)) { +			positions[i+1] = poses[ui]; +			ui++; +			i++; +		} else { +			positions[i+1] = poses[ui]; +			positions[i+2] = poses[ui]; +			ui++; +			i++; +			i++; +		} +		i++; +	} +#endif  }  int Surface::WidthChar(Font &font_, char ch) { diff --git a/win32/makefile b/win32/makefile index 9dfb6be57..2fc51baae 100644 --- a/win32/makefile +++ b/win32/makefile @@ -24,7 +24,7 @@ CXXFLAGS = -pedantic $(INCLUDEDIRS) -Os -fno-exceptions -fvtable-thunks -fno-rtt  .cxx.o:  	$(CC) $(CXXFLAGS) -c $< -o $@ -ALL:	$(COMPONENT) $(LEXCOMPONENT) ScintillaWinS.o +ALL:	$(COMPONENT) $(LEXCOMPONENT) ScintillaWinS.o WindowAccessor.o  clean:  	del /q *.exe *.o *.obj *.dll *.res *.map @@ -41,17 +41,17 @@ $(COMPONENT): $(SOBJS)  LOBJS	= ScintillaWinL.o ScintillaBaseL.o Editor.o Document.o \  	ContractionState.o CellBuffer.o CallTip.o \  	ScintRes.o PlatWin.o KeyMap.o Indicator.o LineMarker.o Style.o \ -	ViewStyle.o AutoComplete.o KeyWords.o Accessor.o PropSet.o $(LEXOBJS) +	ViewStyle.o AutoComplete.o KeyWords.o DocumentAccessor.o PropSet.o $(LEXOBJS)  $(LEXCOMPONENT): $(LOBJS)  	$(DLLWRAP) --target i386-mingw32 -o $(LEXCOMPONENT) $(LOBJS) $(LDFLAGS) -s --relocatable -Accessor.o: Accessor.cxx Platform.h PropSet.h Accessor.h Scintilla.h  AutoComplete.o: AutoComplete.cxx Platform.h AutoComplete.h  CallTip.o: CallTip.cxx Platform.h CallTip.h  CellBuffer.o: CellBuffer.cxx Platform.h Scintilla.h CellBuffer.h  ContractionState.o: ContractionState.cxx Platform.h ContractionState.h  Document.o: Document.cxx Platform.h Scintilla.h CellBuffer.h \   Document.h +DocumentAccessor.o: DocumentAccessor.cxx Platform.h PropSet.h Accessor.h DocumentAccessor.h Scintilla.h  Editor.o: Editor.cxx Platform.h Scintilla.h ContractionState.h \   CellBuffer.h KeyMap.h Indicator.h LineMarker.h Style.h ViewStyle.h \   Document.h Editor.h @@ -83,7 +83,7 @@ ScintillaBase.o: ScintillaBase.cxx Platform.h Scintilla.h \  ScintillaBaseL.o: ScintillaBase.cxx Platform.h Scintilla.h SciLexer.h \   ContractionState.h CellBuffer.h CallTip.h KeyMap.h Indicator.h \   LineMarker.h Style.h AutoComplete.h ViewStyle.h Document.h Editor.h \ - ScintillaBase.h PropSet.h Accessor.h KeyWords.h + ScintillaBase.h PropSet.h Accessor.h DocumentAccessor.h KeyWords.h  ScintillaWin.o: ScintillaWin.cxx Platform.h Scintilla.h \   ContractionState.h CellBuffer.h CallTip.h KeyMap.h Indicator.h \   LineMarker.h Style.h AutoComplete.h ViewStyle.h Document.h Editor.h \ @@ -99,6 +99,7 @@ ScintillaWinS.o: ScintillaWin.cxx Platform.h Scintilla.h \  Style.o: Style.cxx Platform.h Style.h  ViewStyle.o: ViewStyle.cxx Platform.h Scintilla.h Indicator.h \   LineMarker.h Style.h ViewStyle.h +WindowAccessor.o: DocumentAccessor.cxx Platform.h PropSet.h Accessor.h WindowAccessor.h Scintilla.h  ScintillaBaseL.o:  	$(CC) $(CXXFLAGS) -D SCI_LEXER -c $< -o ScintillaBaseL.o diff --git a/win32/makefile_bor b/win32/makefile_bor index 51234e092..363f7693f 100644 --- a/win32/makefile_bor +++ b/win32/makefile_bor @@ -23,7 +23,7 @@ CXXFLAGS = -P -tW -w -RT- -x- -v  .rc.res:  	$(RC) /r $*.rc -ALL:	$(COMPONENT) $(LEXCOMPONENT) ScintillaWinS.obj +ALL:	$(COMPONENT) $(LEXCOMPONENT) ScintillaWinS.obj WindowAccessor.obj  clean:  	del /q *.exe *.o *.obj *.dll *.res *.map @@ -40,13 +40,10 @@ LEXOBJS	= LexCPP.obj LexHTML.obj LexOthers.obj LexPerl.obj LexPython.obj LexSQL.  LOBJS	= ScintillaWinL.obj ScintillaBaseL.obj Editor.obj Document.obj \  	ContractionState.obj CellBuffer.obj CallTip.obj \  	PlatWin.obj KeyMap.obj Indicator.obj LineMarker.obj Style.obj \ -	ViewStyle.obj AutoComplete.obj KeyWords.obj Accessor.obj PropSet.obj $(LEXOBJS) +	ViewStyle.obj AutoComplete.obj KeyWords.obj DocumentAccessor.obj PropSet.obj $(LEXOBJS)  $(LEXCOMPONENT): $(LOBJS)  	$(LD) -Tpd /c c0d32 $(LOBJS), $(LEXCOMPONENT), ,$(LDFLAGS), , ScintRes.res -Accessor.obj: ..\src\Accessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\include\Scintilla.h -	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$* -  AutoComplete.obj: ..\src\AutoComplete.cxx ..\include\Platform.h ..\src\AutoComplete.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$* @@ -63,6 +60,9 @@ Document.obj: ..\src\Document.cxx ..\include\Platform.h ..\include\Scintilla.h .   ..\src\Document.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$* +DocumentAccessor.obj: ..\src\DocumentAccessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\src\DocumentAccessor.h ..\include\Scintilla.h +	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$* +  Editor.obj: ..\src\Editor.cxx ..\include\Platform.h ..\include\Scintilla.h ..\src\ContractionState.h \   ..\src\CellBuffer.h ..\src\KeyMap.h ..\src\Indicator.h ..\src\LineMarker.h ..\src\Style.h ..\src\ViewStyle.h \   ..\src\Document.h ..\src\Editor.h @@ -123,7 +123,7 @@ ScintillaBase.obj: ..\src\ScintillaBase.cxx ..\include\Platform.h ..\include\Sci  ScintillaBaseL.obj: ..\src\ScintillaBase.cxx ..\include\Platform.h ..\include\Scintilla.h ..\include\SciLexer.h \   ..\src\ContractionState.h ..\src\CellBuffer.h ..\src\CallTip.h ..\src\KeyMap.h ..\src\Indicator.h \   ..\src\LineMarker.h ..\src\Style.h ..\src\AutoComplete.h ..\src\ViewStyle.h ..\src\Document.h ..\src\Editor.h \ - ..\src\ScintillaBase.h ..\include\PropSet.h ..\include\Accessor.h ..\include\KeyWords.h + ..\src\ScintillaBase.h ..\include\PropSet.h ..\include\Accessor.h ..\src\DocumentAccessor.h ..\include\KeyWords.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /DSCI_LEXER -o$* /c ..\src\ScintillaBase.cxx  ScintillaWin.obj: ScintillaWin.cxx ..\include\Platform.h ..\include\Scintilla.h \ @@ -149,3 +149,6 @@ Style.obj: ..\src\Style.cxx ..\include\Platform.h ..\src\Style.h  ViewStyle.obj: ..\src\ViewStyle.cxx ..\include\Platform.h ..\include\Scintilla.h ..\src\Indicator.h \   ..\src\LineMarker.h ..\src\Style.h ..\src\ViewStyle.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$@ + +WindowAccessor.obj: ..\src\WindowAccessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\include\WindowAccessor.h ..\include\Scintilla.h +	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) -c ..\src\$*.cxx -o$* diff --git a/win32/makefile_vc b/win32/makefile_vc index c7a31347f..6070cf7ac 100644 --- a/win32/makefile_vc +++ b/win32/makefile_vc @@ -32,7 +32,7 @@ CXXFLAGS=$(CXXFLAGS) /Ox /MD  .rc.res:  	$(RC) $*.rc -ALL:	$(COMPONENT) $(LEXCOMPONENT) $(DIR_O)\ScintillaWinS.obj +ALL:	$(COMPONENT) $(LEXCOMPONENT) $(DIR_O)\ScintillaWinS.obj $(DIR_O)\WindowAccessor.obj  clean:  	del /q $(DIR_O)\*.obj $(COMPONENT) $(LEXCOMPONENT) $(DIR_O)\*.res $(DIR_BIN)\*.map @@ -61,7 +61,7 @@ LOBJS	= $(DIR_O)\ScintillaWinL.obj $(DIR_O)\ScintillaBaseL.obj \  	$(DIR_O)\PlatWin.obj $(DIR_O)\KeyMap.obj $(DIR_O)\Indicator.obj \  	$(DIR_O)\LineMarker.obj $(DIR_O)\Style.obj \  	$(DIR_O)\ViewStyle.obj $(DIR_O)\AutoComplete.obj \ -	$(DIR_O)\KeyWords.obj $(DIR_O)\Accessor.obj \ +	$(DIR_O)\KeyWords.obj $(DIR_O)\DocumentAccessor.obj \  	$(DIR_O)\PropSet.obj $(LEXOBJS)  $(DIR_O)\ScintRes.res : ScintRes.rc @@ -70,9 +70,6 @@ $(DIR_O)\ScintRes.res : ScintRes.rc  $(LEXCOMPONENT): $(LOBJS) $(DIR_O)\ScintRes.res  	$(LD) /DLL /OUT:$(LEXCOMPONENT) $(LOBJS) $(DIR_O)\ScintRes.res $(LDFLAGS) -$(DIR_O)\Accessor.obj: ..\src\Accessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\include\Scintilla.h -	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx -  $(DIR_O)\AutoComplete.obj: ..\src\AutoComplete.cxx ..\include\Platform.h ..\src\AutoComplete.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx @@ -89,6 +86,9 @@ $(DIR_O)\Document.obj: ..\src\Document.cxx ..\include\Platform.h ..\include\Scin   ..\src\Document.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx +$(DIR_O)\DocumentAccessor.obj: ..\src\DocumentAccessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\src\DocumentAccessor.h ..\include\Scintilla.h +	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx +  $(DIR_O)\Editor.obj: ..\src\Editor.cxx ..\include\Platform.h ..\include\Scintilla.h ..\src\ContractionState.h \   ..\src\CellBuffer.h ..\src\KeyMap.h ..\src\Indicator.h ..\src\LineMarker.h ..\src\Style.h ..\src\ViewStyle.h \   ..\src\Document.h ..\src\Editor.h @@ -150,7 +150,7 @@ $(DIR_O)\ScintillaBase.obj: ..\src\ScintillaBase.cxx ..\include\Platform.h ..\in  $(DIR_O)\ScintillaBaseL.obj: ..\src\ScintillaBase.cxx ..\include\Platform.h ..\include\Scintilla.h ..\include\SciLexer.h \   ..\src\ContractionState.h ..\src\CellBuffer.h ..\src\CallTip.h ..\src\KeyMap.h ..\src\Indicator.h \   ..\src\LineMarker.h ..\src\Style.h ..\src\AutoComplete.h ..\src\ViewStyle.h ..\src\Document.h ..\src\Editor.h \ - ..\src\ScintillaBase.h ..\include\PropSet.h ..\include\Accessor.h ..\include\KeyWords.h + ..\src\ScintillaBase.h ..\include\PropSet.h ..\include\Accessor.h ..\src\DocumentAccessor.h ..\include\KeyWords.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /D SCI_LEXER /c ..\src\ScintillaBase.cxx /Fo$@  $(DIR_O)\ScintillaWin.obj: ScintillaWin.cxx ..\include\Platform.h ..\include\Scintilla.h \ @@ -177,3 +177,7 @@ $(DIR_O)\Style.obj: ..\src\Style.cxx ..\include\Platform.h ..\src\Style.h  $(DIR_O)\ViewStyle.obj: ..\src\ViewStyle.cxx ..\include\Platform.h ..\include\Scintilla.h ..\src\Indicator.h \   ..\src\LineMarker.h ..\src\Style.h ..\src\ViewStyle.h  	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx + +$(DIR_O)\WindowAccessor.obj: ..\src\WindowAccessor.cxx ..\include\Platform.h ..\include\PropSet.h ..\include\Accessor.h ..\include\WindowAccessor.h ..\include\Scintilla.h +	$(CC) $(INCLUDEDIRS) $(CXXFLAGS) /Fo$@ /c ..\src\$(@B).cxx + | 
