diff --git a/src/display/operations.js b/src/display/operations.js index 566eb5aa853b6991526c28550f3000456b9bb0e9..15a041c6ab3167f2e622b25a23b6c20cb17572c9 100644 --- a/src/display/operations.js +++ b/src/display/operations.js @@ -7,9 +7,8 @@ import { finishOperation, pushOperation } from "../util/operation_group" import { ensureFocus } from "./focus" import { measureForScrollbars, updateScrollbars } from "./scrollbars" -import { setScrollLeft, setScrollTop } from "./scroll_events" import { restartBlink } from "./selection" -import { maybeScrollWindow, scrollPosIntoView } from "./scrolling" +import { maybeScrollWindow, scrollPosIntoView, setScrollLeft, setScrollTop } from "./scrolling" import { DisplayUpdate, maybeClipScrollbars, postUpdateDisplay, setDocumentHeight, updateDisplayIfNeeded } from "./update_display" import { updateHeightsInViewport } from "./update_lines" diff --git a/src/display/scroll_events.js b/src/display/scroll_events.js index cc4b50b866e4c081d19639a0d5845bdb42d42f2a..d3902809e7c4a224d626bdc726ffbbd76bd604cb 100644 --- a/src/display/scroll_events.js +++ b/src/display/scroll_events.js @@ -1,37 +1,8 @@ import { chrome, gecko, ie, mac, presto, safari, webkit } from "../util/browser" import { e_preventDefault } from "../util/event" -import { startWorker } from "./highlight_worker" -import { alignHorizontally } from "./line_numbers" -import { updateDisplaySimple} from "./update_display" - -// Sync the scrollable area and scrollbars, ensure the viewport -// covers the visible area. -export function updateScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) return - if (!gecko) updateDisplaySimple(cm, {top: val}) - setScrollTop(cm, val) - if (gecko) updateDisplaySimple(cm) - startWorker(cm, 100) -} -export function setScrollTop(cm, val, forceScroll) { - val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val) - if (cm.display.scroller.scrollTop == val && !forceScroll) return - cm.doc.scrollTop = val - cm.display.scrollbars.setScrollTop(val) - cm.display.scroller.scrollTop = val -} - -// Sync scroller and scrollbar, ensure the gutter elements are -// aligned. -export function setScrollLeft(cm, val, isScroller, forceScroll) { - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) - if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return - cm.doc.scrollLeft = val - alignHorizontally(cm) - if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val - cm.display.scrollbars.setScrollLeft(val) -} +import { updateDisplaySimple } from "./update_display" +import { setScrollLeft, updateScrollTop } from "./scrolling" // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and diff --git a/src/display/scrollbars.js b/src/display/scrollbars.js index d2f73c9154ebe10655075e78abab6483c595d880..27060d18ef130b5cfb4dfcc5630d2a6de72d855e 100644 --- a/src/display/scrollbars.js +++ b/src/display/scrollbars.js @@ -5,7 +5,7 @@ import { ie, ie_version, mac, mac_geMountainLion } from "../util/browser" import { updateHeightsInViewport } from "./update_lines" import { Delayed } from "../util/misc" -import { setScrollLeft, updateScrollTop } from "./scroll_events" +import { setScrollLeft, updateScrollTop } from "./scrolling" // SCROLLBARS diff --git a/src/display/scrolling.js b/src/display/scrolling.js index 5d06a63b500a375da0e739feddd2bf1fee472951..12a13b454a8c7bea2100c03f3be78aa89f3f8111 100644 --- a/src/display/scrolling.js +++ b/src/display/scrolling.js @@ -1,10 +1,12 @@ import { Pos } from "../line/pos" import { cursorCoords, displayHeight, displayWidth, estimateCoords, paddingTop, paddingVert, scrollGap, textHeight } from "../measurement/position_measurement" -import { phantom } from "../util/browser" +import { gecko, phantom } from "../util/browser" import { elt } from "../util/dom" import { signalDOMEvent } from "../util/event" -import { setScrollLeft, updateScrollTop } from "./scroll_events" +import { startWorker } from "./highlight_worker" +import { alignHorizontally } from "./line_numbers" +import { updateDisplaySimple } from "./update_display" // SCROLLING THINGS INTO VIEW @@ -135,3 +137,30 @@ export function resolveScrollToPos(cm) { cm.scrollTo(sPos.scrollLeft, sPos.scrollTop) } } +// Sync the scrollable area and scrollbars, ensure the viewport +// covers the visible area. +export function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return + if (!gecko) updateDisplaySimple(cm, {top: val}) + setScrollTop(cm, val) + if (gecko) updateDisplaySimple(cm) + startWorker(cm, 100) +} +export function setScrollTop(cm, val, forceScroll) { + val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val) + if (cm.display.scroller.scrollTop == val && !forceScroll) return + cm.doc.scrollTop = val + cm.display.scrollbars.setScrollTop(val) + cm.display.scroller.scrollTop = val +} + +// Sync scroller and scrollbar, ensure the gutter elements are +// aligned. +export function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return + cm.doc.scrollLeft = val + alignHorizontally(cm) + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val + cm.display.scrollbars.setScrollLeft(val) +} diff --git a/src/edit/CodeMirror.js b/src/edit/CodeMirror.js index 5f66c9f4f715a6b3ca0b9312889fc117d554bb52..1b2758ec019e7dcc68f9a1109a2fffeb8cd4d6b2 100644 --- a/src/edit/CodeMirror.js +++ b/src/edit/CodeMirror.js @@ -4,7 +4,8 @@ import { setGuttersForLineNumbers, updateGutters } from "../display/gutters" import { maybeUpdateLineNumberWidth } from "../display/line_numbers" import { endOperation, operation, startOperation } from "../display/operations" import { initScrollbars } from "../display/scrollbars" -import { onScrollWheel, setScrollLeft, updateScrollTop } from "../display/scroll_events" +import { onScrollWheel } from "../display/scroll_events" +import { setScrollLeft, updateScrollTop } from "../display/scrolling" import { clipPos, Pos } from "../line/pos" import { posFromMouse } from "../measurement/position_measurement" import { eventInWidget } from "../measurement/widgets"