Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 #include "core/InputTypeNames.h" | 31 #include "core/InputTypeNames.h" |
| 32 #include "core/css/StylePropertySet.h" | 32 #include "core/css/StylePropertySet.h" |
| 33 #include "core/dom/AXObjectCache.h" | 33 #include "core/dom/AXObjectCache.h" |
| 34 #include "core/dom/CharacterData.h" | 34 #include "core/dom/CharacterData.h" |
| 35 #include "core/dom/Document.h" | 35 #include "core/dom/Document.h" |
| 36 #include "core/dom/Element.h" | 36 #include "core/dom/Element.h" |
| 37 #include "core/dom/ElementTraversal.h" | 37 #include "core/dom/ElementTraversal.h" |
| 38 #include "core/dom/NodeTraversal.h" | 38 #include "core/dom/NodeTraversal.h" |
| 39 #include "core/dom/Text.h" | 39 #include "core/dom/Text.h" |
| 40 #include "core/editing/Editor.h" | 40 #include "core/editing/Editor.h" |
| 41 #include "core/editing/GranularityStrategy.h" | |
| 41 #include "core/editing/InputMethodController.h" | 42 #include "core/editing/InputMethodController.h" |
| 42 #include "core/editing/RenderedPosition.h" | 43 #include "core/editing/RenderedPosition.h" |
| 43 #include "core/editing/SpellChecker.h" | 44 #include "core/editing/SpellChecker.h" |
| 44 #include "core/editing/TypingCommand.h" | 45 #include "core/editing/TypingCommand.h" |
| 45 #include "core/editing/VisibleUnits.h" | 46 #include "core/editing/VisibleUnits.h" |
| 46 #include "core/editing/htmlediting.h" | 47 #include "core/editing/htmlediting.h" |
| 47 #include "core/editing/iterators/TextIterator.h" | 48 #include "core/editing/iterators/TextIterator.h" |
| 48 #include "core/editing/markup.h" | 49 #include "core/editing/markup.h" |
| 49 #include "core/events/Event.h" | 50 #include "core/events/Event.h" |
| 50 #include "core/frame/FrameView.h" | 51 #include "core/frame/FrameView.h" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 215 | 216 |
| 216 newSelection.setIsDirectional(isDirectional); // Adjusting base and extent w ill make newSelection always directional | 217 newSelection.setIsDirectional(isDirectional); // Adjusting base and extent w ill make newSelection always directional |
| 217 if (m_selection == newSelection) | 218 if (m_selection == newSelection) |
| 218 return; | 219 return; |
| 219 | 220 |
| 220 setSelection(newSelection, granularity); | 221 setSelection(newSelection, granularity); |
| 221 } | 222 } |
| 222 | 223 |
| 223 void FrameSelection::setSelection(const VisibleSelection& newSelection, SetSelec tionOptions options, CursorAlignOnScroll align, TextGranularity granularity) | 224 void FrameSelection::setSelection(const VisibleSelection& newSelection, SetSelec tionOptions options, CursorAlignOnScroll align, TextGranularity granularity) |
| 224 { | 225 { |
| 226 if (m_granularityStrategy && (options & FrameSelection::DoNotClearStrategy) == 0) { | |
|
yosin_UTC9
2015/04/23 03:38:47
nit: We don't need to have "{}".
mfomitchev
2015/04/23 15:08:11
Done.
| |
| 227 m_granularityStrategy->Clear(); | |
| 228 } | |
| 225 bool closeTyping = options & CloseTyping; | 229 bool closeTyping = options & CloseTyping; |
| 226 bool shouldClearTypingStyle = options & ClearTypingStyle; | 230 bool shouldClearTypingStyle = options & ClearTypingStyle; |
| 227 EUserTriggered userTriggered = selectionOptionsToUserTriggered(options); | 231 EUserTriggered userTriggered = selectionOptionsToUserTriggered(options); |
| 228 | 232 |
| 229 VisibleSelection s = validateSelection(newSelection); | 233 VisibleSelection s = validateSelection(newSelection); |
| 234 | |
|
yosin_UTC9
2015/04/23 03:38:47
nit: No need to have an extra blank line.
mfomitchev
2015/04/23 15:08:11
Done.
| |
| 230 if (shouldAlwaysUseDirectionalSelection(m_frame)) | 235 if (shouldAlwaysUseDirectionalSelection(m_frame)) |
| 231 s.setIsDirectional(true); | 236 s.setIsDirectional(true); |
| 232 | 237 |
| 233 if (!m_frame) { | 238 if (!m_frame) { |
| 234 m_selection = s; | 239 m_selection = s; |
| 235 return; | 240 return; |
| 236 } | 241 } |
| 237 | 242 |
| 238 // <http://bugs.webkit.org/show_bug.cgi?id=23464>: Infinite recursion at Fra meSelection::setSelection | 243 // <http://bugs.webkit.org/show_bug.cgi?id=23464>: Infinite recursion at Fra meSelection::setSelection |
| 239 // if document->frame() == m_frame we can get into an infinite loop | 244 // if document->frame() == m_frame we can get into an infinite loop |
| (...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1166 m_xPosForVerticalArrowNavigation = x; | 1171 m_xPosForVerticalArrowNavigation = x; |
| 1167 } else | 1172 } else |
| 1168 x = m_xPosForVerticalArrowNavigation; | 1173 x = m_xPosForVerticalArrowNavigation; |
| 1169 | 1174 |
| 1170 return x; | 1175 return x; |
| 1171 } | 1176 } |
| 1172 | 1177 |
| 1173 void FrameSelection::clear() | 1178 void FrameSelection::clear() |
| 1174 { | 1179 { |
| 1175 m_granularity = CharacterGranularity; | 1180 m_granularity = CharacterGranularity; |
| 1181 if (m_granularityStrategy) | |
| 1182 m_granularityStrategy->Clear(); | |
| 1176 setSelection(VisibleSelection()); | 1183 setSelection(VisibleSelection()); |
| 1177 } | 1184 } |
| 1178 | 1185 |
| 1179 void FrameSelection::prepareForDestruction() | 1186 void FrameSelection::prepareForDestruction() |
| 1180 { | 1187 { |
| 1181 m_granularity = CharacterGranularity; | 1188 m_granularity = CharacterGranularity; |
| 1182 | 1189 |
| 1183 m_caretBlinkTimer.stop(); | 1190 m_caretBlinkTimer.stop(); |
| 1184 | 1191 |
| 1185 LayoutView* view = m_frame->contentRenderer(); | 1192 LayoutView* view = m_frame->contentRenderer(); |
| (...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1906 String text = plainText(start.deepEquivalent(), end.deepEquivalent()); | 1913 String text = plainText(start.deepEquivalent(), end.deepEquivalent()); |
| 1907 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { | 1914 if (!text.isEmpty() && !isSeparator(text.characterStartingAt(0))) { |
| 1908 setSelection(VisibleSelection(start, end), WordGranularity); | 1915 setSelection(VisibleSelection(start, end), WordGranularity); |
| 1909 return true; | 1916 return true; |
| 1910 } | 1917 } |
| 1911 } | 1918 } |
| 1912 | 1919 |
| 1913 return false; | 1920 return false; |
| 1914 } | 1921 } |
| 1915 | 1922 |
| 1916 void FrameSelection::moveRangeSelectionExtent(const VisiblePosition& extentPosit ion, TextGranularity granularity) | 1923 GranularityStrategy* FrameSelection::granularityStrategy() |
| 1917 { | 1924 { |
| 1918 if (isNone()) | 1925 // We do lazy initalization for m_granularityStrategy, because if we initial ize it |
| 1926 // right in the constructor - the correct settings may not be set yet. | |
| 1927 SelectionStrategy strategyType = SelectionStrategy::Character; | |
| 1928 Settings* settings = m_frame ? m_frame->settings() : 0; | |
| 1929 if (settings && settings->selectionStrategy() == SelectionStrategy::Directio n) | |
| 1930 strategyType = SelectionStrategy::Direction; | |
| 1931 | |
| 1932 if (m_granularityStrategy && m_granularityStrategy->GetType() == strategyTyp e) | |
| 1933 return m_granularityStrategy.get(); | |
| 1934 | |
| 1935 if (strategyType == SelectionStrategy::Direction) | |
| 1936 m_granularityStrategy = adoptPtr(new DirectionGranularityStrategy()); | |
| 1937 else | |
| 1938 m_granularityStrategy = adoptPtr(new CharacterGranularityStrategy()); | |
| 1939 return m_granularityStrategy.get(); | |
| 1940 } | |
| 1941 | |
| 1942 void FrameSelection::moveRangeSelectionExtent(const VisiblePosition& extentPosit ion) | |
| 1943 { | |
| 1944 const VisiblePosition base = m_selection.visibleBase(); | |
|
yosin_UTC9
2015/04/23 03:38:47
nit: We don't need to have |const|.
mfomitchev
2015/04/23 15:08:11
Done.
| |
| 1945 | |
| 1946 if (isNone() || base == extentPosition) | |
|
yosin_UTC9
2015/04/23 03:38:47
nit: Can we test |isNone()| before calling |Visibl
mfomitchev
2015/04/23 15:08:11
Done.
| |
| 1919 return; | 1947 return; |
| 1920 | 1948 |
| 1921 const VisiblePosition basePosition = m_selection.isBaseFirst() ? m_selection .visibleStart() : m_selection.visibleEnd(); | 1949 VisibleSelection newSelection = granularityStrategy()->updateExtent(extentPo sition, selection()); |
| 1922 VisibleSelection newSelection(basePosition, extentPosition); | 1950 setSelection( |
| 1923 if (newSelection.isBaseFirst()) | 1951 newSelection, |
| 1924 newSelection.setEndRespectingGranularity(granularity); | 1952 FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | FrameSe lection::DoNotClearStrategy | UserTriggered, |
| 1925 else | 1953 FrameSelection::AlignCursorOnScrollIfNeeded, |
| 1926 newSelection.setStartRespectingGranularity(granularity); | 1954 CharacterGranularity); |
| 1927 if (!newSelection.isRange()) | |
| 1928 return; | |
| 1929 | |
| 1930 setSelection(newSelection, FrameSelection::CloseTyping | FrameSelection::Cle arTypingStyle | UserTriggered, FrameSelection::AlignCursorOnScrollIfNeeded, gran ularity); | |
| 1931 } | 1955 } |
| 1932 | 1956 |
| 1933 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, con st VisiblePosition& extentPosition, TextGranularity granularity) | 1957 void FrameSelection::moveRangeSelection(const VisiblePosition& basePosition, con st VisiblePosition& extentPosition, TextGranularity granularity) |
| 1934 { | 1958 { |
| 1935 VisibleSelection newSelection(basePosition, extentPosition); | 1959 VisibleSelection newSelection(basePosition, extentPosition); |
| 1936 newSelection.expandUsingGranularity(granularity); | 1960 newSelection.expandUsingGranularity(granularity); |
| 1937 | 1961 |
| 1938 if (newSelection.isNone()) | 1962 if (newSelection.isNone()) |
| 1939 return; | 1963 return; |
| 1940 | 1964 |
| 1941 setSelection(newSelection, granularity); | 1965 setSelection(newSelection, granularity); |
| 1942 } | 1966 } |
| 1943 | 1967 |
| 1944 } | 1968 } |
| 1945 | 1969 |
| 1946 #ifndef NDEBUG | 1970 #ifndef NDEBUG |
| 1947 | 1971 |
| 1948 void showTree(const blink::FrameSelection& sel) | 1972 void showTree(const blink::FrameSelection& sel) |
| 1949 { | 1973 { |
| 1950 sel.showTreeForThis(); | 1974 sel.showTreeForThis(); |
| 1951 } | 1975 } |
| 1952 | 1976 |
| 1953 void showTree(const blink::FrameSelection* sel) | 1977 void showTree(const blink::FrameSelection* sel) |
| 1954 { | 1978 { |
| 1955 if (sel) | 1979 if (sel) |
| 1956 sel->showTreeForThis(); | 1980 sel->showTreeForThis(); |
| 1957 } | 1981 } |
| 1958 | 1982 |
| 1959 #endif | 1983 #endif |
| OLD | NEW |