Modified: trunk/Source/WebCore/editing/EditorCommand.cpp (89262 => 89263)
--- trunk/Source/WebCore/editing/EditorCommand.cpp 2011-06-20 18:03:19 UTC (rev 89262)
+++ trunk/Source/WebCore/editing/EditorCommand.cpp 2011-06-20 18:28:48 UTC (rev 89263)
@@ -245,7 +245,7 @@
return (selectionDirection == direction && !hasNestedOrMultipleEmbeddings) ? TrueTriState : FalseTriState;
}
-static int verticalScrollDistance(Frame* frame)
+static unsigned verticalScrollDistance(Frame* frame)
{
Node* focusedNode = frame->document()->focusedNode();
if (!focusedNode)
@@ -258,9 +258,8 @@
return 0;
if (!(style->overflowY() == OSCROLL || style->overflowY() == OAUTO || focusedNode->rendererIsEditable()))
return 0;
- int height = std::min<int>(toRenderBox(renderer)->clientHeight(),
- frame->view()->visibleHeight());
- return max(max<int>(height * Scrollbar::minFractionToStepWhenPaging(), height - Scrollbar::maxOverlapBetweenPages()), 1);
+ int height = std::min<int>(toRenderBox(renderer)->clientHeight(), frame->view()->visibleHeight());
+ return static_cast<unsigned>(max(max<int>(height * Scrollbar::minFractionToStepWhenPaging(), height - Scrollbar::maxOverlapBetweenPages()), 1));
}
static RefPtr<Range> unionDOMRanges(Range* a, Range* b)
@@ -653,34 +652,34 @@
static bool executeMovePageDown(Frame* frame, Event*, EditorCommandSource, const String&)
{
- int distance = verticalScrollDistance(frame);
+ unsigned distance = verticalScrollDistance(frame);
if (!distance)
return false;
- return frame->selection()->modify(FrameSelection::AlterationMove, distance, true, FrameSelection::AlignCursorOnScrollAlways);
+ return frame->selection()->modify(FrameSelection::AlterationMove, distance, FrameSelection::DirectionDown, true, FrameSelection::AlignCursorOnScrollAlways);
}
static bool executeMovePageDownAndModifySelection(Frame* frame, Event*, EditorCommandSource, const String&)
{
- int distance = verticalScrollDistance(frame);
+ unsigned distance = verticalScrollDistance(frame);
if (!distance)
return false;
- return frame->selection()->modify(FrameSelection::AlterationExtend, distance, true, FrameSelection::AlignCursorOnScrollAlways);
+ return frame->selection()->modify(FrameSelection::AlterationExtend, distance, FrameSelection::DirectionDown, true, FrameSelection::AlignCursorOnScrollAlways);
}
static bool executeMovePageUp(Frame* frame, Event*, EditorCommandSource, const String&)
{
- int distance = verticalScrollDistance(frame);
+ unsigned distance = verticalScrollDistance(frame);
if (!distance)
return false;
- return frame->selection()->modify(FrameSelection::AlterationMove, -distance, true, FrameSelection::AlignCursorOnScrollAlways);
+ return frame->selection()->modify(FrameSelection::AlterationMove, distance, FrameSelection::DirectionUp, true, FrameSelection::AlignCursorOnScrollAlways);
}
static bool executeMovePageUpAndModifySelection(Frame* frame, Event*, EditorCommandSource, const String&)
{
- int distance = verticalScrollDistance(frame);
+ unsigned distance = verticalScrollDistance(frame);
if (!distance)
return false;
- return frame->selection()->modify(FrameSelection::AlterationExtend, -distance, true, FrameSelection::AlignCursorOnScrollAlways);
+ return frame->selection()->modify(FrameSelection::AlterationExtend, distance, FrameSelection::DirectionUp, true, FrameSelection::AlignCursorOnScrollAlways);
}
static bool executeMoveRight(Frame* frame, Event*, EditorCommandSource, const String&)
Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (89262 => 89263)
--- trunk/Source/WebCore/editing/FrameSelection.cpp 2011-06-20 18:03:19 UTC (rev 89262)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp 2011-06-20 18:28:48 UTC (rev 89263)
@@ -888,7 +888,7 @@
return true;
}
-bool FrameSelection::modify(EAlteration alter, int verticalDistance, bool userTriggered, CursorAlignOnScroll align)
+bool FrameSelection::modify(EAlteration alter, unsigned verticalDistance, VerticalDirection direction, bool userTriggered, CursorAlignOnScroll align)
{
if (!verticalDistance)
return false;
@@ -897,26 +897,22 @@
FrameSelection trialFrameSelection;
trialFrameSelection.setSelection(m_selection);
trialFrameSelection.setIsDirectional(m_isDirectional);
- trialFrameSelection.modify(alter, verticalDistance, false);
+ trialFrameSelection.modify(alter, verticalDistance, direction, false);
bool change = shouldChangeSelection(trialFrameSelection.selection());
if (!change)
return false;
}
- bool up = verticalDistance < 0;
- if (up)
- verticalDistance = -verticalDistance;
+ willBeModified(alter, direction == DirectionUp ? DirectionBackward : DirectionForward);
- willBeModified(alter, up ? DirectionBackward : DirectionForward);
-
VisiblePosition pos;
int xPos = 0;
switch (alter) {
case AlterationMove:
- pos = VisiblePosition(up ? m_selection.start() : m_selection.end(), m_selection.affinity());
- xPos = lineDirectionPointForBlockDirectionNavigation(up ? START : END);
- m_selection.setAffinity(up ? UPSTREAM : DOWNSTREAM);
+ pos = VisiblePosition(direction == DirectionUp ? m_selection.start() : m_selection.end(), m_selection.affinity());
+ xPos = lineDirectionPointForBlockDirectionNavigation(direction == DirectionUp ? START : END);
+ m_selection.setAffinity(direction == DirectionUp ? UPSTREAM : DOWNSTREAM);
break;
case AlterationExtend:
pos = VisiblePosition(m_selection.extent(), m_selection.affinity());
@@ -928,22 +924,22 @@
int startY;
if (!absoluteCaretY(pos, startY))
return false;
- if (up)
+ if (direction == DirectionUp)
startY = -startY;
int lastY = startY;
VisiblePosition result;
VisiblePosition next;
for (VisiblePosition p = pos; ; p = next) {
- next = (up ? previousLinePosition : nextLinePosition)(p, xPos);
+ next = (direction == DirectionUp ? previousLinePosition : nextLinePosition)(p, xPos);
if (next.isNull() || next == p)
break;
int nextY;
if (!absoluteCaretY(next, nextY))
break;
- if (up)
+ if (direction == DirectionUp)
nextY = -nextY;
- if (nextY - startY > verticalDistance)
+ if (nextY - startY > static_cast<int>(verticalDistance))
break;
if (nextY >= lastY) {
lastY = nextY;
Modified: trunk/Source/WebCore/editing/FrameSelection.h (89262 => 89263)
--- trunk/Source/WebCore/editing/FrameSelection.h 2011-06-20 18:03:19 UTC (rev 89262)
+++ trunk/Source/WebCore/editing/FrameSelection.h 2011-06-20 18:28:48 UTC (rev 89263)
@@ -146,7 +146,8 @@
EAffinity affinity() const { return m_selection.affinity(); }
bool modify(EAlteration, SelectionDirection, TextGranularity, bool userTriggered = false);
- bool modify(EAlteration, int verticalDistance, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded);
+ enum VerticalDirection { DirectionUp, DirectionDown };
+ bool modify(EAlteration, unsigned verticalDistance, VerticalDirection, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded);
TextGranularity granularity() const { return m_granularity; }
void setStart(const VisiblePosition &, bool userTriggered = false);