diff options
author | nyamatongwe <unknown> | 2009-07-04 00:47:05 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2009-07-04 00:47:05 +0000 |
commit | 90375facb97e9a9c1138b804b8db9edd12199f3c (patch) | |
tree | e0af701597f5ec3e7b51645992ee2aeb8a2ecd97 /src | |
parent | 8ba8f85b7e0b8b3621c244cd711cdbefe0822e6e (diff) | |
download | scintilla-mirror-90375facb97e9a9c1138b804b8db9edd12199f3c.tar.gz |
Check virtual space options for rectangular selection.
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index fd2c04447..a3a70dba8 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -689,18 +689,20 @@ void Editor::SetRectangularRange() { // Right of rectangle int maxX = Platform::Maximum(xAnchor, xCaret); sel.EmptyRanges(); - if (anchorTop) { - for (int line=lineStart; line<=lineEnd; line++) { - SelectionPosition spMin(SPositionFromLineX(line, minX)); - SelectionPosition spMax(SPositionFromLineX(line, maxX)); - sel.AddSelection(spMin, spMax, anchorLeft); - } - } else { - for (int line=lineEnd; line>=lineStart; line--) { - SelectionPosition spMin(SPositionFromLineX(line, minX)); - SelectionPosition spMax(SPositionFromLineX(line, maxX)); - sel.AddSelection(spMin, spMax, anchorLeft); + int increment = 1; + if (!anchorTop) { + increment = -1; + lineEnd = lineStart; + lineStart = pdoc->LineFromPosition(selEnd.Position()); + } + for (int line=lineStart; line != lineEnd+increment; line += increment) { + SelectionPosition spMin(SPositionFromLineX(line, minX)); + SelectionPosition spMax(SPositionFromLineX(line, maxX)); + if ((virtualSpaceOptions & SCVS_RECTANGULARSELECTION) == 0) { + spMin.SetVirtualSpace(0); + spMax.SetVirtualSpace(0); } + sel.AddSelection(spMin, spMax, anchorLeft); } } } @@ -5506,10 +5508,15 @@ void Editor::DwellEnd(bool mouseMoved) { } } +static bool AllowVirtualSpace(int virtualSpaceOptions, bool rectangular) { + return ((virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0) + || (rectangular && ((virtualSpaceOptions & SCVS_RECTANGULARSELECTION) != 0)); +} + void Editor::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) { //Platform::DebugPrintf("ButtonDown %d %d = %d alt=%d %d\n", curTime, lastClickTime, curTime - lastClickTime, alt, inDragDrop); ptMouseLast = pt; - SelectionPosition newPos = SPositionFromLocation(pt, false, false, (virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0); + SelectionPosition newPos = SPositionFromLocation(pt, false, false, AllowVirtualSpace(virtualSpaceOptions, alt)); newPos = MovePositionOutsideChar(newPos, sel.MainCaret() - newPos.Position()); inDragDrop = ddNone; sel.SetMoveExtends(false); @@ -5682,7 +5689,8 @@ void Editor::ButtonMove(Point pt) { DwellEnd(true); } - SelectionPosition movePos = SPositionFromLocation(pt, false, false, (virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0); + SelectionPosition movePos = SPositionFromLocation(pt, false, false, + AllowVirtualSpace(virtualSpaceOptions, sel.IsRectangular())); movePos = MovePositionOutsideChar(movePos, sel.MainCaret() - movePos.Position()); if (inDragDrop == ddInitial) { @@ -5787,7 +5795,8 @@ void Editor::ButtonMove(Point pt) { void Editor::ButtonUp(Point pt, unsigned int curTime, bool ctrl) { //Platform::DebugPrintf("ButtonUp %d %d\n", HaveMouseCapture(), inDragDrop); - SelectionPosition newPos = SPositionFromLocation(pt, false, false, (virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0); + SelectionPosition newPos = SPositionFromLocation(pt, false, false, + AllowVirtualSpace(virtualSpaceOptions, sel.IsRectangular())); newPos = MovePositionOutsideChar(newPos, sel.MainCaret() - newPos.Position()); if (inDragDrop == ddInitial) { inDragDrop = ddNone; |