aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CallTip.cxx8
-rw-r--r--src/CallTip.h18
-rw-r--r--src/Editor.cxx31
-rw-r--r--src/Editor.h12
4 files changed, 41 insertions, 28 deletions
diff --git a/src/CallTip.cxx b/src/CallTip.cxx
index d67173b08..f95a1db14 100644
--- a/src/CallTip.cxx
+++ b/src/CallTip.cxx
@@ -117,19 +117,21 @@ void CallTip::PaintCT(Surface *surfaceWindow) {
}
PRectangle CallTip::CallTipStart(int pos, Point pt, const char *defn,
- const char *faceName, int size, bool unicodeMode_) {
+ const char *faceName, int size,
+ int codePage_) {
if (val)
delete []val;
val = new char[strlen(defn) + 1];
if (!val)
return PRectangle();
strcpy(val, defn);
- unicodeMode = unicodeMode_;
+ codePage = codePage_;
Surface *surfaceMeasure = Surface::Allocate();
if (!surfaceMeasure)
return PRectangle();
surfaceMeasure->Init();
- surfaceMeasure->SetUnicodeMode(unicodeMode);
+ surfaceMeasure->SetUnicodeMode(SC_CP_UTF8 == codePage);
+ surfaceMeasure->SetDBCSMode(codePage);
startHighlight = 0;
endHighlight = 0;
inCallTipMode = true;
diff --git a/src/CallTip.h b/src/CallTip.h
index 9f5025f63..877d9f34e 100644
--- a/src/CallTip.h
+++ b/src/CallTip.h
@@ -29,22 +29,22 @@ public:
ColourPair colourSel;
ColourPair colourShade;
ColourPair colourLight;
- bool unicodeMode;
-
+ int codePage;
+
CallTip();
~CallTip();
-
+
/// Claim or accept palette entries for the colours required to paint a calltip.
void RefreshColourPalette(Palette &pal, bool want);
-
+
void PaintCT(Surface *surfaceWindow);
-
+
/// Setup the calltip and return a rectangle of the area required.
- PRectangle CallTipStart(int pos, Point pt, const char *defn,
- const char *faceName, int size, bool unicodeMode_);
-
+ PRectangle CallTipStart(int pos, Point pt, const char *defn,
+ const char *faceName, int size, int codePage_);
+
void CallTipCancel();
-
+
/// Set a range of characters to be displayed in a highlight style.
/// Commonly used to highlight the current parameter.
void SetHighlight(int start, int end);
diff --git a/src/Editor.cxx b/src/Editor.cxx
index ddd9fbcd6..c9833b03a 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -419,7 +419,7 @@ void Editor::RefreshColourPalette(Palette &pal, bool want) {
void Editor::RefreshStyleData() {
if (!stylesValid) {
stylesValid = true;
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
if (surface) {
vs.Refresh(*surface);
RefreshColourPalette(palette, true);
@@ -499,7 +499,7 @@ Point Editor::LocationFromPosition(int pos) {
int line = pdoc->LineFromPosition(pos);
int lineVisible = cs.DisplayFromDoc(line);
//Platform::DebugPrintf("line=%d\n", line);
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(line);
if (surface && ll) {
// -1 because of adding in for visible lines in following loop.
@@ -552,7 +552,7 @@ int Editor::PositionFromLocation(Point pt) {
int lineDoc = cs.DocFromDisplay(visibleLine);
if (lineDoc >= pdoc->LinesTotal())
return pdoc->Length();
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
int retVal = 0;
LineLayout *ll = RetrieveLineLayout(lineDoc);
if (surface && ll) {
@@ -600,7 +600,7 @@ int Editor::PositionFromLocationClose(Point pt) {
return INVALID_POSITION;
if (lineDoc >= pdoc->LinesTotal())
return INVALID_POSITION;
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(lineDoc);
if (surface && ll) {
LayoutLine(lineDoc, surface, vs, ll, wrapWidth);
@@ -634,7 +634,7 @@ int Editor::PositionFromLineX(int lineDoc, int x) {
if (lineDoc >= pdoc->LinesTotal())
return pdoc->Length();
//Platform::DebugPrintf("Position of (%d,%d) line = %d top=%d\n", pt.x, pt.y, line, topLine);
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(lineDoc);
int retVal = 0;
if (surface && ll) {
@@ -935,7 +935,7 @@ void Editor::MoveCaretInsideView(bool ensureVisible) {
int Editor::DisplayFromPosition(int pos) {
int lineDoc = pdoc->LineFromPosition(pos);
int lineDisplay = cs.DisplayFromDoc(lineDoc);
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(lineDoc);
if (surface && ll) {
LayoutLine(lineDoc, surface, vs, ll, wrapWidth);
@@ -1272,7 +1272,7 @@ bool Editor::WrapLines() {
wrapWidth = rcTextArea.Width();
// Ensure all of the document is styled.
pdoc->EnsureStyledTo(pdoc->Length());
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
if (surface) {
int lastLineToWrap = pdoc->LinesTotal();
while (docLineLastWrapped <= lastLineToWrap) {
@@ -2356,10 +2356,10 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
if (!pfr)
return 0;
- AutoSurface surface(pfr->hdc, IsUnicodeMode());
+ AutoSurface surface(pfr->hdc, CodePage());
if (!surface)
return 0;
- AutoSurface surfaceMeasure(pfr->hdcTarget, IsUnicodeMode());
+ AutoSurface surfaceMeasure(pfr->hdcTarget, CodePage());
if (!surfaceMeasure) {
return 0;
}
@@ -2531,7 +2531,7 @@ long Editor::FormatRange(bool draw, RangeToFormat *pfr) {
int Editor::TextWidth(int style, const char *text) {
RefreshStyleData();
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
if (surface) {
return surface->WidthText(vs.styles[style].font, text, strlen(text));
} else {
@@ -2935,7 +2935,7 @@ void Editor::CheckModificationForWrap(DocModification mh) {
if (wrapState != eWrapNone) {
int lineDoc = pdoc->LineFromPosition(mh.position);
if (mh.linesAdded == 0) {
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(lineDoc);
if (surface && ll) {
LayoutLine(lineDoc, surface, vs, ll, wrapWidth);
@@ -3303,7 +3303,7 @@ void Editor::CursorUpOrDown(int direction, bool extend) {
int Editor::StartEndDisplayLine(int pos, bool start) {
RefreshStyleData();
int line = pdoc->LineFromPosition(pos);
- AutoSurface surface(IsUnicodeMode());
+ AutoSurface surface(CodePage());
LineLayout *ll = RetrieveLineLayout(line);
int posRet = INVALID_POSITION;
if (surface && ll) {
@@ -4554,6 +4554,13 @@ bool Editor::IsUnicodeMode() const {
return pdoc && (SC_CP_UTF8 == pdoc->dbcsCodePage);
}
+int Editor::CodePage() const {
+ if (pdoc)
+ return pdoc->dbcsCodePage;
+ else
+ return 0;
+}
+
static bool ValidMargin(unsigned long wParam) {
return wParam < ViewStyle::margins;
}
diff --git a/src/Editor.h b/src/Editor.h
index 714efc755..5517065b6 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -138,18 +138,20 @@ class AutoSurface {
private:
Surface *surf;
public:
- AutoSurface(bool unicodeMode) {
+ AutoSurface(int codePage) {
surf = Surface::Allocate();
if (surf) {
surf->Init();
- surf->SetUnicodeMode(unicodeMode);
+ surf->SetUnicodeMode(SC_CP_UTF8 == codePage);
+ surf->SetDBCSMode(codePage);
}
}
- AutoSurface(SurfaceID sid, bool unicodeMode) {
+ AutoSurface(SurfaceID sid, int codePage) {
surf = Surface::Allocate();
if (surf) {
surf->Init(sid);
- surf->SetUnicodeMode(unicodeMode);
+ surf->SetUnicodeMode(SC_CP_UTF8 == codePage);
+ surf->SetDBCSMode(codePage);
}
}
~AutoSurface() {
@@ -459,6 +461,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
void EnsureLineVisible(int lineDoc, bool enforcePolicy);
int ReplaceTarget(bool replacePatterns, const char *text, int length=-1);
+ int CodePage() const;
+
virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0;
public: