diff options
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r-- | src/EditView.cxx | 90 |
1 files changed, 49 insertions, 41 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx index b3815ff2e..162a86425 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -339,10 +339,10 @@ void EditView::RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewSt } LineLayout *EditView::RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model) { - Sci::Position posLineStart = model.pdoc->LineStart(lineNumber); - Sci::Position posLineEnd = model.pdoc->LineStart(lineNumber + 1); + Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineNumber)); + Sci::Position posLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(lineNumber + 1)); PLATFORM_ASSERT(posLineEnd >= posLineStart); - Sci::Line lineCaret = model.pdoc->LineFromPosition(model.sel.MainCaret()); + Sci::Line lineCaret = static_cast<Sci::Line>(model.pdoc->LineFromPosition(model.sel.MainCaret())); return llc.Retrieve(lineNumber, lineCaret, posLineEnd - posLineStart, model.pdoc->GetStyleClock(), model.LinesOnScreen() + 1, model.pdoc->LinesTotal()); @@ -359,8 +359,8 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa PLATFORM_ASSERT(line < model.pdoc->LinesTotal()); PLATFORM_ASSERT(ll->chars != NULL); - Sci::Position posLineStart = model.pdoc->LineStart(line); - Sci::Position posLineEnd = model.pdoc->LineStart(line + 1); + Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); + Sci::Position posLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); // If the line is very long, limit the treatment to a length that should fit in the viewport if (posLineEnd >(posLineStart + ll->maxLineLength)) { posLineEnd = posLineStart + ll->maxLineLength; @@ -368,7 +368,7 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa if (ll->validity == LineLayout::llCheckTextAndStyle) { Sci::Position lineLength = posLineEnd - posLineStart; if (!vstyle.viewEOL) { - lineLength = model.pdoc->LineEnd(line) - posLineStart; + lineLength = static_cast<Sci::Position>(model.pdoc->LineEnd(line)) - posLineStart; } if (lineLength == ll->numCharsInLine) { // See if chars, styles, indicators, are all the same @@ -427,7 +427,7 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa const int lineLength = posLineEnd - posLineStart; model.pdoc->GetCharRange(ll->chars.get(), posLineStart, lineLength); model.pdoc->GetStyleRange(ll->styles.get(), posLineStart, lineLength); - const int numCharsBeforeEOL = model.pdoc->LineEnd(line) - posLineStart; + const int numCharsBeforeEOL = static_cast<Sci::Position>(model.pdoc->LineEnd(line)) - posLineStart; const int numCharsInLine = (vstyle.viewEOL) ? lineLength : numCharsBeforeEOL; for (Sci::Position styleInLine = 0; styleInLine < numCharsInLine; styleInLine++) { const unsigned char styleByte = ll->styles[styleInLine]; @@ -598,12 +598,12 @@ Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, S Point pt; if (pos.Position() == INVALID_POSITION) return pt; - Sci::Line lineDoc = model.pdoc->LineFromPosition(pos.Position()); - Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + Sci::Line lineDoc = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos.Position())); + Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); if ((pe & peLineEnd) && (lineDoc > 0) && (pos.Position() == posLineStart)) { // Want point at end of first line lineDoc--; - posLineStart = model.pdoc->LineStart(lineDoc); + posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); } const Sci::Line lineVisible = model.cs.DisplayFromDoc(lineDoc); AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); @@ -624,7 +624,7 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci:: return rangeSubLine; } const Sci::Line lineDoc = model.cs.DocFromDisplay(lineVisible); - const Sci::Position positionLineStart = model.pdoc->LineStart(lineDoc); + const Sci::Position positionLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); if (surface && ll) { LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); @@ -633,7 +633,7 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci:: if (subLine < ll->lines) { rangeSubLine = ll->SubLineRange(subLine); if (subLine == ll->lines-1) { - rangeSubLine.end = model.pdoc->LineStart(lineDoc + 1) - + rangeSubLine.end = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1)) - positionLineStart; } } @@ -652,8 +652,9 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo if (canReturnInvalid && (lineDoc < 0)) return SelectionPosition(INVALID_POSITION); if (lineDoc >= model.pdoc->LinesTotal()) - return SelectionPosition(canReturnInvalid ? INVALID_POSITION : model.pdoc->Length()); - const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + return SelectionPosition(canReturnInvalid ? INVALID_POSITION : + static_cast<Sci::Position>(model.pdoc->Length())); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); if (surface && ll) { LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); @@ -696,7 +697,7 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel &model, Sci::Line lineDoc, int x, const ViewStyle &vs) { AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); if (surface && ll) { - const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); const Range rangeSubLine = ll->SubLineRange(0); const XYPOSITION subLineStart = ll->positions[rangeSubLine.start]; @@ -713,12 +714,12 @@ SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel } Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model, Sci::Position pos, const ViewStyle &vs) { - const Sci::Line lineDoc = model.pdoc->LineFromPosition(pos); + const Sci::Line lineDoc = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos)); Sci::Line lineDisplay = model.cs.DisplayFromDoc(lineDoc); AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); if (surface && ll) { LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth); - const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); const Sci::Position posInLine = pos - posLineStart; lineDisplay--; // To make up for first increment ahead. for (int subLine = 0; subLine < ll->lines; subLine++) { @@ -731,11 +732,11 @@ Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model } Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &model, Sci::Position pos, bool start, const ViewStyle &vs) { - const Sci::Line line = model.pdoc->LineFromPosition(pos); + const Sci::Line line = static_cast<Sci::Line>(model.pdoc->LineFromPosition(pos)); AutoLineLayout ll(llc, RetrieveLineLayout(line, model)); Sci::Position posRet = INVALID_POSITION; if (surface && ll) { - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); LayoutLine(model, line, surface, vs, ll, model.wrapWidth); const Sci::Position posInLine = pos - posLineStart; if (posInLine <= ll->maxLineLength) { @@ -862,14 +863,14 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle PRectangle rcLine, Sci::Line line, Sci::Position lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, ColourOptional background) { - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); PRectangle rcSegment = rcLine; const bool lastSubLine = subLine == (ll->lines - 1); XYPOSITION virtualSpace = 0; if (lastSubLine) { const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth; - virtualSpace = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)) * spaceWidth; + virtualSpace = model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))) * spaceWidth; } const XYPOSITION xEol = static_cast<XYPOSITION>(ll->positions[lineEnd] - subLineStart); @@ -879,7 +880,9 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle rcSegment.right = xEol + xStart + virtualSpace; surface->FillRectangle(rcSegment, background.isSet ? background : vsDraw.styles[ll->styles[ll->numCharsInLine]].back); if (!hideSelection && ((vsDraw.selAlpha == SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha == SC_ALPHA_NOALPHA))) { - SelectionSegment virtualSpaceRange(SelectionPosition(model.pdoc->LineEnd(line)), SelectionPosition(model.pdoc->LineEnd(line), model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)))); + SelectionSegment virtualSpaceRange(SelectionPosition(static_cast<Sci::Position>(model.pdoc->LineEnd(line))), + SelectionPosition(static_cast<Sci::Position>(model.pdoc->LineEnd(line)), + model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))))); for (size_t r = 0; r<model.sel.Count(); r++) { const int alpha = (r == model.sel.Main()) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; if (alpha == SC_ALPHA_NOALPHA) { @@ -902,7 +905,7 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle int eolInSelection = 0; int alpha = SC_ALPHA_NOALPHA; if (!hideSelection) { - Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); eolInSelection = (lastSubLine == true) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; } @@ -1039,7 +1042,7 @@ static void DrawIndicator(int indicNum, Sci::Position startPos, Sci::Position en static void DrawIndicators(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, Sci::Line line, int xStart, PRectangle rcLine, int subLine, Sci::Position lineEnd, bool under, Sci::Position hoverIndicatorPos) { // Draw decorators - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); const Sci::Position lineStart = ll->LineStart(subLine); const Sci::Position posLineEnd = posLineStart + lineEnd; @@ -1109,13 +1112,14 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con int eolInSelection = 0; int alpha = SC_ALPHA_NOALPHA; if (!hideSelection) { - Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; } const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth; - XYPOSITION virtualSpace = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)) * spaceWidth; + XYPOSITION virtualSpace = model.sel.VirtualSpaceFor( + static_cast<Sci::Position>(model.pdoc->LineEnd(line))) * spaceWidth; rcSegment.left = xStart + static_cast<XYPOSITION>(ll->positions[ll->numCharsInLine] - subLineStart) + virtualSpace + vsDraw.aveCharWidth; rcSegment.right = rcSegment.left + static_cast<XYPOSITION>(widthFoldDisplayText); @@ -1316,7 +1320,7 @@ void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewSt const bool drawDrag = model.posDrag.IsValid(); if (hideSelection && !drawDrag) return; - const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); // For each selection draw for (size_t r = 0; (r<model.sel.Count()) || drawDrag; r++) { const bool mainCaret = r == model.sel.Main(); @@ -1550,12 +1554,12 @@ static void DrawMarkUnderline(Surface *surface, const EditModel &model, const Vi static void DrawTranslucentSelection(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, Sci::Line line, PRectangle rcLine, int subLine, Range lineRange, int xStart) { if ((vsDraw.selAlpha != SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha != SC_ALPHA_NOALPHA)) { - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); const XYACCUMULATOR subLineStart = ll->positions[lineRange.start]; // For each selection draw Sci::Position virtualSpaces = 0; if (subLine == (ll->lines - 1)) { - virtualSpaces = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line)); + virtualSpaces = model.sel.VirtualSpaceFor(static_cast<Sci::Position>(model.pdoc->LineEnd(line))); } const SelectionPosition posStart(posLineStart + lineRange.start); const SelectionPosition posEnd(posLineStart + lineRange.end, virtualSpaces); @@ -1815,7 +1819,7 @@ void EditView::DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &mode Sci::Line line, Sci::Line lineVisible, PRectangle rcLine, int xStart, int subLine) { if ((vsDraw.viewIndentationGuides == ivLookForward || vsDraw.viewIndentationGuides == ivLookBoth) && (subLine == 0)) { - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); int indentSpace = model.pdoc->GetLineIndentation(line); int xStartText = static_cast<int>(ll->positions[model.pdoc->GetLineIndentPosition(line) - posLineStart]); @@ -1876,7 +1880,7 @@ void EditView::DrawLine(Surface *surface, const EditModel &model, const ViewStyl // See if something overrides the line background color. const ColourOptional background = vsDraw.Background(model.pdoc->GetMark(line), model.caret.active, ll->containsCaret); - const Sci::Position posLineStart = model.pdoc->LineStart(line); + const Sci::Position posLineStart = static_cast<Sci::Position>(model.pdoc->LineStart(line)); const Range lineRange = ll->SubLineRange(subLine); const XYACCUMULATOR subLineStart = ll->positions[lineRange.start]; @@ -1990,7 +1994,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan SelectionPosition posCaret = model.sel.RangeMain().caret; if (model.posDrag.IsValid()) posCaret = model.posDrag; - const Sci::Line lineCaret = model.pdoc->LineFromPosition(posCaret.Position()); + const Sci::Line lineCaret = static_cast<Sci::Line>(model.pdoc->LineFromPosition(posCaret.Position())); PRectangle rcTextArea = rcClient; if (vsDraw.marginInside) { @@ -2060,7 +2064,8 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan rcLine.top = static_cast<XYPOSITION>(ypos); rcLine.bottom = static_cast<XYPOSITION>(ypos + vsDraw.lineHeight); - Range rangeLine(model.pdoc->LineStart(lineDoc), model.pdoc->LineStart(lineDoc + 1)); + Range rangeLine(static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)), + static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1))); // Highlight the current braces if any ll->SetBracesHighlight(rangeLine, model.braces, static_cast<char>(model.bracesMatchStyle), @@ -2149,7 +2154,7 @@ void EditView::FillLineRemainder(Surface *surface, const EditModel &model, const int eolInSelection = 0; int alpha = SC_ALPHA_NOALPHA; if (!hideSelection) { - Sci::Position posAfterLineEnd = model.pdoc->LineStart(line + 1); + Sci::Position posAfterLineEnd = static_cast<Sci::Position>(model.pdoc->LineStart(line + 1)); eolInSelection = (subLine == (ll->lines - 1)) ? model.sel.InSelectionForEOL(posAfterLineEnd) : 0; alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; } @@ -2258,19 +2263,21 @@ long EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, vsPrint.Refresh(*surfaceMeasure, model.pdoc->tabInChars); // Recalculate fixedColumnWidth } - Sci::Line linePrintStart = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMin)); + Sci::Line linePrintStart = static_cast<Sci::Line>( + model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMin))); Sci::Line linePrintLast = linePrintStart + (pfr->rc.bottom - pfr->rc.top) / vsPrint.lineHeight - 1; if (linePrintLast < linePrintStart) linePrintLast = linePrintStart; - Sci::Line linePrintMax = model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMax)); + Sci::Line linePrintMax = static_cast<Sci::Line>( + model.pdoc->LineFromPosition(static_cast<int>(pfr->chrg.cpMax))); if (linePrintLast > linePrintMax) linePrintLast = linePrintMax; //Platform::DebugPrintf("Formatting lines=[%0d,%0d,%0d] top=%0d bottom=%0d line=%0d %0d\n", // linePrintStart, linePrintLast, linePrintMax, pfr->rc.top, pfr->rc.bottom, vsPrint.lineHeight, // surfaceMeasure->Height(vsPrint.styles[STYLE_LINENUMBER].font)); - Sci::Position endPosPrint = model.pdoc->Length(); + Sci::Position endPosPrint = static_cast<Sci::Position>(model.pdoc->Length()); if (linePrintLast < model.pdoc->LinesTotal()) - endPosPrint = model.pdoc->LineStart(linePrintLast + 1); + endPosPrint = static_cast<Sci::Position>(model.pdoc->LineStart(linePrintLast + 1)); // Ensure we are styled to where we are formatting. model.pdoc->EnsureStyledTo(endPosPrint); @@ -2296,7 +2303,7 @@ long EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, // Copy this line and its styles from the document into local arrays // and determine the x position at which each character starts. - LineLayout ll(model.pdoc->LineStart(lineDoc + 1) - model.pdoc->LineStart(lineDoc) + 1); + LineLayout ll(static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1) - model.pdoc->LineStart(lineDoc) + 1)); LayoutLine(model, lineDoc, surfaceMeasure, vsPrint, &ll, widthPrint); ll.containsCaret = false; @@ -2311,7 +2318,8 @@ long EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, // to start printing from to ensure a particular position is on the first // line of the page. if (visibleLine == 0) { - const Sci::Position startWithinLine = nPrintPos - model.pdoc->LineStart(lineDoc); + const Sci::Position startWithinLine = nPrintPos - + static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc)); for (int iwl = 0; iwl < ll.lines - 1; iwl++) { if (ll.LineStart(iwl) <= startWithinLine && ll.LineStart(iwl + 1) >= startWithinLine) { visibleLine = -iwl; @@ -2355,7 +2363,7 @@ long EditView::FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, } visibleLine++; if (iwl == ll.lines - 1) - nPrintPos = model.pdoc->LineStart(lineDoc + 1); + nPrintPos = static_cast<Sci::Position>(model.pdoc->LineStart(lineDoc + 1)); else nPrintPos += ll.LineStart(iwl + 1) - ll.LineStart(iwl); } |