aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/EditView.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-05-07 17:24:58 +1000
committerNeil <nyamatongwe@gmail.com>2021-05-07 17:24:58 +1000
commitda718f8909b937bd839fc8e09d0b81727644c5fd (patch)
tree58df42332ba07f3c28475461135fef393b99f564 /src/EditView.cxx
parented07e1aa1c0c5ae0168add6ed9964c6aefc19578 (diff)
downloadscintilla-mirror-da718f8909b937bd839fc8e09d0b81727644c5fd.tar.gz
Add lineNumber_ argument to LineLayout constructor so always knows which line it
is for. Add accessor for line number and method to say whether compatible with a line number and number of characters. Since LineLayout can report its line number, remove line argument from EditView::LayoutLine which simplifies calling it.
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r--src/EditView.cxx21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx
index 0bde50833..d107ac3a9 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -370,10 +370,11 @@ constexpr bool IsControlCharacter(int ch) noexcept {
* 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 EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surface, const ViewStyle &vstyle, LineLayout *ll, int width) {
+void EditView::LayoutLine(const EditModel &model, Surface *surface, const ViewStyle &vstyle, LineLayout *ll, int width) {
if (!ll)
return;
+ const Sci::Line line = ll->LineNumber();
PLATFORM_ASSERT(line < model.pdoc->LinesTotal());
PLATFORM_ASSERT(ll->chars);
const Sci::Position posLineStart = model.pdoc->LineStart(line);
@@ -637,7 +638,7 @@ Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, S
const Sci::Line lineVisible = model.pcs->DisplayFromDoc(lineDoc);
AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));
if (surface && ll) {
- LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const int posInLine = static_cast<int>(pos.Position() - posLineStart);
pt = ll->PointFromPosition(posInLine, vs.lineHeight, pe);
pt.x += vs.textStart - model.xOffset;
@@ -677,7 +678,7 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci::
const Sci::Position positionLineStart = model.pdoc->LineStart(lineDoc);
AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));
if (surface && ll) {
- LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const Sci::Line lineStartSet = model.pcs->DisplayFromDoc(lineDoc);
const int subLine = static_cast<int>(lineVisible - lineStartSet);
if (subLine < ll->lines) {
@@ -708,7 +709,7 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo
const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);
AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));
if (surface && ll) {
- LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const Sci::Line lineStartSet = model.pcs->DisplayFromDoc(lineDoc);
const int subLine = static_cast<int>(visibleLine - lineStartSet);
if (subLine < ll->lines) {
@@ -760,7 +761,7 @@ SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel
AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));
if (surface && ll) {
const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);
- LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const Range rangeSubLine = ll->SubLineRange(0, LineLayout::Scope::visibleOnly);
const XYPOSITION subLineStart = ll->positions[rangeSubLine.start];
const Sci::Position positionInLine = ll->FindPositionFromX(x + subLineStart, rangeSubLine, false);
@@ -780,7 +781,7 @@ Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model
Sci::Line lineDisplay = model.pcs->DisplayFromDoc(lineDoc);
AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model));
if (surface && ll) {
- LayoutLine(model, lineDoc, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);
const Sci::Position posInLine = pos - posLineStart;
lineDisplay--; // To make up for first increment ahead.
@@ -799,7 +800,7 @@ Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &m
Sci::Position posRet = INVALID_POSITION;
if (surface && ll) {
const Sci::Position posLineStart = model.pdoc->LineStart(line);
- LayoutLine(model, line, surface, vs, ll, model.wrapWidth);
+ LayoutLine(model, surface, vs, ll, model.wrapWidth);
const Sci::Position posInLine = pos - posLineStart;
if (posInLine <= ll->maxLineLength) {
for (int subLine = 0; subLine < ll->lines; subLine++) {
@@ -2344,7 +2345,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan
if (lineDoc != lineDocPrevious) {
ll.Set(nullptr);
ll.Set(RetrieveLineLayout(lineDoc, model));
- LayoutLine(model, lineDoc, surface, vsDraw, ll, model.wrapWidth);
+ LayoutLine(model, surface, vsDraw, ll, model.wrapWidth);
lineDocPrevious = lineDoc;
}
#if defined(TIME_PAINTING)
@@ -2610,8 +2611,8 @@ Sci::Position EditView::FormatRange(bool draw, const Sci_RangeToFormat *pfr, Sur
// Copy this line and its styles from the document into local arrays
// and determine the x position at which each character starts.
- LineLayout ll(static_cast<int>(model.pdoc->LineStart(lineDoc + 1) - model.pdoc->LineStart(lineDoc) + 1));
- LayoutLine(model, lineDoc, surfaceMeasure, vsPrint, &ll, widthPrint);
+ LineLayout ll(lineDoc, static_cast<int>(model.pdoc->LineStart(lineDoc + 1) - model.pdoc->LineStart(lineDoc) + 1));
+ LayoutLine(model, surfaceMeasure, vsPrint, &ll, widthPrint);
ll.containsCaret = false;