aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Editor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r--src/Editor.cxx54
1 files changed, 29 insertions, 25 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 18eafa271..49fa40910 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -1739,7 +1739,7 @@ int Editor::SubstituteMarkerIfEmpty(int markerCheck, int markerDefault) const {
return markerCheck;
}
-bool ValidStyledText(ViewStyle &vs, size_t styleOffset, const StyledText &st) {
+bool ValidStyledText(const ViewStyle &vs, size_t styleOffset, const StyledText &st) {
if (st.multipleStyles) {
for (size_t iStyle=0; iStyle<st.length; iStyle++) {
if (!vs.ValidStyle(styleOffset + st.styles[iStyle]))
@@ -1752,7 +1752,7 @@ bool ValidStyledText(ViewStyle &vs, size_t styleOffset, const StyledText &st) {
return true;
}
-static int WidthStyledText(Surface *surface, ViewStyle &vs, int styleOffset,
+static int WidthStyledText(Surface *surface, const ViewStyle &vs, int styleOffset,
const char *text, const unsigned char *styles, size_t len) {
int width = 0;
size_t start = 0;
@@ -1761,14 +1761,15 @@ static int WidthStyledText(Surface *surface, ViewStyle &vs, int styleOffset,
size_t endSegment = start;
while ((endSegment+1 < len) && (static_cast<size_t>(styles[endSegment+1]) == style))
endSegment++;
- width += static_cast<int>(surface->WidthText(vs.styles[style + styleOffset].font, text + start,
+ FontAlias fontText = vs.styles[style + styleOffset].font;
+ width += static_cast<int>(surface->WidthText(fontText, text + start,
static_cast<int>(endSegment - start + 1)));
start = endSegment + 1;
}
return width;
}
-static int WidestLineWidth(Surface *surface, ViewStyle &vs, int styleOffset, const StyledText &st) {
+static int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, const StyledText &st) {
int widthMax = 0;
size_t start = 0;
while (start < st.length) {
@@ -1777,7 +1778,8 @@ static int WidestLineWidth(Surface *surface, ViewStyle &vs, int styleOffset, con
if (st.multipleStyles) {
widthSubLine = WidthStyledText(surface, vs, styleOffset, st.text + start, st.styles + start, lenLine);
} else {
- widthSubLine = static_cast<int>(surface->WidthText(vs.styles[styleOffset + st.style].font,
+ FontAlias fontText = vs.styles[styleOffset + st.style].font;
+ widthSubLine = static_cast<int>(surface->WidthText(fontText,
st.text + start, static_cast<int>(lenLine)));
}
if (widthSubLine > widthMax)
@@ -1787,7 +1789,7 @@ static int WidestLineWidth(Surface *surface, ViewStyle &vs, int styleOffset, con
return widthMax;
}
-void DrawStyledText(Surface *surface, ViewStyle &vs, int styleOffset, PRectangle rcText, int ascent,
+void DrawStyledText(Surface *surface, const ViewStyle &vs, int styleOffset, PRectangle rcText, int ascent,
const StyledText &st, size_t start, size_t length) {
if (st.multipleStyles) {
@@ -1799,12 +1801,13 @@ void DrawStyledText(Surface *surface, ViewStyle &vs, int styleOffset, PRectangle
while (end < length-1 && st.styles[start+end+1] == style)
end++;
style += styleOffset;
- int width = static_cast<int>(surface->WidthText(vs.styles[style].font,
+ FontAlias fontText = vs.styles[style].font;
+ int width = static_cast<int>(surface->WidthText(fontText,
st.text + start + i, static_cast<int>(end - i + 1)));
PRectangle rcSegment = rcText;
rcSegment.left = static_cast<XYPOSITION>(x);
rcSegment.right = static_cast<XYPOSITION>(x + width + 1);
- surface->DrawTextNoClip(rcSegment, vs.styles[style].font,
+ surface->DrawTextNoClip(rcSegment, fontText,
static_cast<XYPOSITION>(ascent), st.text + start + i,
static_cast<int>(end - i + 1),
vs.styles[style].fore,
@@ -1814,7 +1817,8 @@ void DrawStyledText(Surface *surface, ViewStyle &vs, int styleOffset, PRectangle
}
} else {
size_t style = st.style + styleOffset;
- surface->DrawTextNoClip(rcText, vs.styles[style].font,
+ FontAlias fontText = vs.styles[style].font;
+ surface->DrawTextNoClip(rcText, fontText,
rcText.top + vs.maxAscent, st.text + start,
static_cast<int>(length),
vs.styles[style].fore,
@@ -2162,8 +2166,7 @@ LineLayout *Editor::RetrieveLineLayout(int lineNumber) {
* Copy the given @a line and its styles from the document into local arrays.
* Also determine the x position at which each character starts.
*/
-void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout *ll, int width) {
-//void LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout *ll, int width, Document *pdoc, PositionCache &posCache, SpecialRepresentations &reprs) {
+void Editor::LayoutLine(int line, Surface *surface, const ViewStyle &vstyle, LineLayout *ll, int width) {
if (!ll)
return;
@@ -2387,13 +2390,13 @@ void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayou
}
}
-ColourDesired Editor::SelectionBackground(ViewStyle &vsDraw, bool main) const {
+ColourDesired Editor::SelectionBackground(const ViewStyle &vsDraw, bool main) const {
return main ?
(primarySelection ? vsDraw.selColours.back : vsDraw.selBackground2) :
vsDraw.selAdditionalBackground;
}
-ColourDesired Editor::TextBackground(ViewStyle &vsDraw, bool overrideBackground,
+ColourDesired Editor::TextBackground(const ViewStyle &vsDraw, bool overrideBackground,
ColourDesired background, int inSelection, bool inHotspot, int styleMain, int i, LineLayout *ll) const {
if (inSelection == 1) {
if (vsDraw.selColours.back.isSet && (vsDraw.selAlpha == SC_ALPHA_NOALPHA)) {
@@ -2475,12 +2478,12 @@ static void SimpleAlphaRectangle(Surface *surface, PRectangle rc, ColourDesired
}
}
-void DrawTextBlob(Surface *surface, ViewStyle &vsDraw, PRectangle rcSegment,
+void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle rcSegment,
const char *s, ColourDesired textBack, ColourDesired textFore, bool twoPhaseDraw) {
if (!twoPhaseDraw) {
surface->FillRectangle(rcSegment, textBack);
}
- Font &ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font;
+ FontAlias ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font;
int normalCharHeight = static_cast<int>(surface->Ascent(ctrlCharsFont) -
surface->InternalLeading(ctrlCharsFont));
PRectangle rcCChar = rcSegment;
@@ -2499,7 +2502,7 @@ void DrawTextBlob(Surface *surface, ViewStyle &vsDraw, PRectangle rcSegment,
textBack, textFore);
}
-void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, LineLayout *ll,
+void Editor::DrawEOL(Surface *surface, const ViewStyle &vsDraw, PRectangle rcLine, LineLayout *ll,
int line, int lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart,
bool overrideBackground, ColourDesired background,
bool drawWrapMarkEnd, ColourDesired wrapColour) {
@@ -2650,7 +2653,7 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin
}
}
-void Editor::DrawIndicator(int indicNum, int startPos, int endPos, Surface *surface, ViewStyle &vsDraw,
+void Editor::DrawIndicator(int indicNum, int startPos, int endPos, Surface *surface, const ViewStyle &vsDraw,
int xStart, PRectangle rcLine, LineLayout *ll, int subLine) {
const XYPOSITION subLineStart = ll->positions[ll->LineStart(subLine)];
PRectangle rcIndic(
@@ -2661,7 +2664,7 @@ void Editor::DrawIndicator(int indicNum, int startPos, int endPos, Surface *surf
vsDraw.indicators[indicNum].Draw(surface, rcIndic, rcLine);
}
-void Editor::DrawIndicators(Surface *surface, ViewStyle &vsDraw, int line, int xStart,
+void Editor::DrawIndicators(Surface *surface, const ViewStyle &vsDraw, int line, int xStart,
PRectangle rcLine, LineLayout *ll, int subLine, int lineEnd, bool under) {
// Draw decorators
const int posLineStart = pdoc->LineStart(line);
@@ -2710,7 +2713,7 @@ void Editor::DrawIndicators(Surface *surface, ViewStyle &vsDraw, int line, int x
}
}
-void Editor::DrawAnnotation(Surface *surface, ViewStyle &vsDraw, int line, int xStart,
+void Editor::DrawAnnotation(Surface *surface, const ViewStyle &vsDraw, int line, int xStart,
PRectangle rcLine, LineLayout *ll, int subLine) {
int indent = static_cast<int>(pdoc->GetLineIndentation(line) * vsDraw.spaceWidth);
PRectangle rcSegment = rcLine;
@@ -2767,7 +2770,7 @@ void Editor::DrawAnnotation(Surface *surface, ViewStyle &vsDraw, int line, int x
}
}
-void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVisible, int xStart,
+void Editor::DrawLine(Surface *surface, const ViewStyle &vsDraw, int line, int lineVisible, int xStart,
PRectangle rcLine, LineLayout *ll, int subLine) {
if (subLine >= ll->lines) {
@@ -2780,7 +2783,7 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis
// Using one font for all control characters so it can be controlled independently to ensure
// the box goes around the characters tightly. Seems to be no way to work out what height
// is taken by an individual character - internal leading gives varying results.
- Font &ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font;
+ FontAlias ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font;
// See if something overrides the line background color: Either if caret is on the line
// and background color is set for that, or if a marker is defined that forces its background
@@ -3007,7 +3010,7 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis
if (rcSegment.Intersects(rcLine)) {
int styleMain = ll->styles[i];
ColourDesired textFore = vsDraw.styles[styleMain].fore;
- Font &textFont = vsDraw.styles[styleMain].font;
+ FontAlias textFont = vsDraw.styles[styleMain].font;
//hotspot foreground
if (ll->hsStart != -1 && iDoc >= ll->hsStart && iDoc < hsEnd) {
if (vsDraw.hotspotColours.fore.isSet)
@@ -3253,7 +3256,7 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis
}
}
-void Editor::DrawBlockCaret(Surface *surface, ViewStyle &vsDraw, LineLayout *ll, int subLine,
+void Editor::DrawBlockCaret(Surface *surface, const ViewStyle &vsDraw, LineLayout *ll, int subLine,
int xStart, int offset, int posCaret, PRectangle rcCaret, ColourDesired caretColour) {
int lineStart = ll->LineStart(subLine);
@@ -3312,7 +3315,8 @@ void Editor::DrawBlockCaret(Surface *surface, ViewStyle &vsDraw, LineLayout *ll,
// This character is where the caret block is, we override the colours
// (inversed) for drawing the caret here.
int styleMain = ll->styles[offsetFirstChar];
- surface->DrawTextClipped(rcCaret, vsDraw.styles[styleMain].font,
+ FontAlias fontText = vsDraw.styles[styleMain].font;
+ surface->DrawTextClipped(rcCaret, fontText,
rcCaret.top + vsDraw.maxAscent, ll->chars + offsetFirstChar,
numCharsToDraw, vsDraw.styles[styleMain].back,
caretColour);
@@ -3386,7 +3390,7 @@ void Editor::RefreshPixMaps(Surface *surfaceWindow) {
}
}
-void Editor::DrawCarets(Surface *surface, ViewStyle &vsDraw, int lineDoc, int xStart,
+void Editor::DrawCarets(Surface *surface, const ViewStyle &vsDraw, int lineDoc, int xStart,
PRectangle rcLine, LineLayout *ll, int subLine) {
// When drag is active it is the only caret drawn
bool drawDrag = posDrag.IsValid();